projector

◼ projector[c, p] returns the projection operator corresponding to the fermionic operator c. p is one of PROJ0, PROJUP, PROJDO, PROJ2, PROJ1, PROJ02.
◼ projector0[c, p] returns the projection operator to the subspace of zero occupancy.
◼ projector1[c, p] returns the projection operator to the subspace with single occupancy.
◼ projector2[c, p] returns the projection operator to the subspace with double occupancy.
◼ projectorUP[c, p] returns the projection operator to the subspace with a single spin-up particle.
◼ projectorDO[c, p] returns the projection operator to the subspace with a single spin-down particle.
◼ projector02[c, p] returns the projection operator to the subspace with either zero or double occupancy.

◼ Operator c must be expressed in the stripped form, i.e. a form which excludes the first index (creation/annihilation) and the last index (spin).

◼ See also: number.

Further examples

Load sneg and declare c to be a fermionic operator

<< sneg`sneg`;
snegfermionoperators[c];

Verify the definition

projector0[c[]]
SnegSimplify[%]
projector1[c[]]
SnegSimplify[%]
projector2[c[]]
SnegSimplify[%]
projectorUP[c[]]
SnegSimplify[%]
projectorDO[c[]]
SnegSimplify[%]
projector02[c[]]
SnegSimplify[%]

Check for idempotency

(pow[#, 2] == # &) /@ {projector0[c[]], projector1[c[]], 
        projector2[c[]], projectorUP[c[]], projectorDO[c[]], 
        projector02[c[]]}

"Sum rules"

projector0[c[]] + projector1[c[]] + projector2[c[]] == 
      1
projector02[c[]] == 
      projector0[c[]] + projector2[c[]]
projector1[c[]] == 
      projectorUP[c[]] + projectorDO[c[]]
projector1[c[]] + projector02[c[]] == 1

Projectors commute with the electron-occupancy operator

n = number[c[]]
komutator[n, projector0[c[]]] == 0
komutator[n, projector1[c[]]] == 0
komutator[n, projector2[c[]]] == 0
komutator[n, projectorUP[c[]]] == 0
komutator[n, projectorDO[c[]]] == 0
komutator[n, projector02[c[]]] == 0

Projectors commute with the z component of the spin

sz = spinz[c[]]
komutator[sz, projector0[c[]]] == 0
komutator[sz, projector1[c[]]] == 0 // ExpandAll
komutator[sz, projector2[c[]]] == 0
komutator[sz, projectorUP[c[]]] == 0 // ExpandAll
komutator[sz, projectorDO[c[]]] == 0 // ExpandAll
komutator[sz, projector02[c[]]] == 0

Application of projectors on basis states

bz = qszbasis[{c[]}];
MatrixForm[bz]
projectbasis[p_] := 
        applybasis[bz, 
          zeroonvac @ 
              nc[projector[c[], p], #] &];
MatrixForm[projectbasis[PROJ0]]
MatrixForm[projectbasis[PROJ1]]
MatrixForm[projectbasis[PROJ2]]
MatrixForm[projectbasis[PROJUP]]
MatrixForm[projectbasis[PROJDO]]
MatrixForm[projectbasis[PROJ02]]

Products of projectors are complex expressions

projector1[c[1]]·projector1[c[2]] // ExpandAll