Fermion operators

Operators for a single spinless fermionic mode per site, i.e. a two-dimensional local space that is either empty or occupied.

Conventions

Basis ordering

The local space is spanned by the empty and the occupied state, in that order:

\[|0⟩,\; |1⟩ \quad \text{(row/column 1 = empty, 2 = occupied)}\]

The space is always fermionically graded, Vect[fℤ₂](0 => 1, 1 => 1), even for Trivial symmetry: the grading by the fermion parity $(-1)^n$ is what makes TensorKit insert the anticommutation signs when operators on different sites are contracted, and is therefore not optional. Here Trivial refers only to the absence of an additional symmetry.

Because a TensorMap on a graded space only has parity-preserving blocks, the parity-odd single-site operators $f^+$ and $f^-$ are not representable at all — they have no allowed block. This module therefore provides no f_plus or f_min, only their parity-even two-site combinations and the number operator $n = f^+ f^- = \mathrm{diag}(0, 1)$.

The two-site operators carry the signs picked up by anticommuting the fermionic operators past each other, with $|1,1⟩ = f^+_1 f^+_2 |0,0⟩$ as the reference state. They act as

\[f^+_1 f^-_2 : \; +|1,0⟩ ← |0,1⟩, \qquad f^-_1 f^+_2 : \; -|0,1⟩ ← |1,0⟩\]

\[f^+_1 f^+_2 : \; +|1,1⟩ ← |0,0⟩, \qquad f^-_1 f^-_2 : \; -|0,0⟩ ← |1,1⟩\]

that is, f_min_f_plus == -adjoint(f_plus_f_min) and f_min_f_min == -adjoint(f_plus_f_plus). Consequently the hermitian hopping operator is the difference

\[f_\mathrm{hop} = f^+_1 f^-_2 - f^-_1 f^+_2 = f^+_1 f^-_2 + (f^+_1 f^-_2)^† .\]

The corresponding bosonic operator of BosonOperators is a sum, because $b^-_1 b^+_2$ is the plain adjoint of $b^+_1 b^-_2$ and does not pick up a sign.

Symmetry sectors

SymmetryPhysical meaningSector labelSingle-site space
Trivialfermion parity only (always present)$fℤ₂$ charge $n \bmod 2$Vect[fℤ₂](0 => 1, 1 => 1)
U1Irrepparticle-number conservation$fℤ₂ ⊠ U(1)$ charge $(n \bmod 2,\, n)$Vect[fℤ₂ ⊠ U1Irrep]((0, 0) => 1, (1, 1) => 1)
The U(1) refinement is free

The particle number refines the parity grading without reordering the basis, so the basis transformation onto the symmetric space is the identity and every symmetric operator is elementwise equal to its Trivial counterpart.

f_num, f_plus_f_min, f_min_f_plus and f_hopping conserve the particle number and are available for both symmetries. The pair operators f_plus_f_plus and f_min_f_min change it by $±2$: they preserve the parity, and hence exist as Trivial operators, but throw an ArgumentError when requested with U1Irrep.

Operator overview

FunctionAliasSitesSupported symmetries
fermion_spaceTrivial, U1Irrep
basis_transformTrivial, U1Irrep
f_numn1Trivial, U1Irrep
f_plus_f_minf⁺f⁻2Trivial, U1Irrep
f_min_f_plusf⁻f⁺2Trivial, U1Irrep
f_plus_f_plusf⁺f⁺2Trivial
f_min_f_minf⁻f⁻2Trivial
f_hoppingf_hop2Trivial, U1Irrep

There is deliberately no single-site f_plus/f_min, see the basis-ordering section above.

API

TensorKitTensors.FermionOperators.basis_transformMethod
basis_transform(symmetry::Type{<:Sector})

Return the unitary basis transformation that maps the basis $\{|0⟩, |1⟩\}$ of fermion_space(Trivial) onto the basis of fermion_space(symmetry), as a TensorMap from desymmetrize(fermion_space(Trivial)) to desymmetrize(fermion_space(symmetry)), as required by symmetrize. Note that both sides are purely bosonic ComplexSpaces, since a TensorMap cannot mix different gradings.

Even the Trivial fermionic space is graded by the fermion parity fℤ₂. For U1Irrep, the particle number is additionally used as a $U(1)$ charge, which refines the grading without reordering the basis, such that the transformation is the identity. It is returned with integer scalar type, such that it promotes to any scalar type without loss of precision.

source
TensorKitTensors.FermionOperators.f_hoppingMethod
f_hopping([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
f_hop([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the two-body operator that describes a particle that hops between the first and the second site,

\[f_\mathrm{hop} = f^+_1 f^-_2 - f^-_1 f^+_2 = f^+_1 f^-_2 + (f^+_1 f^-_2)^†,\]

which is hermitian. Note the minus sign, which is what makes this combination hermitian here: $f^-_1 f^+_2$ already carries the anticommutation sign, whereas the corresponding bosonic hopping operator is a sum.

Supported symmetries: Trivial, U1Irrep.

See also f_plus_f_min and f_min_f_plus.

source
TensorKitTensors.FermionOperators.f_min_f_minMethod
f_min_f_min([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
f⁻f⁻([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the two-body operator $f^-_1 f^-_2$ that annihilates a particle at the first and at the second site. It picks up the anticommutation sign relative to $|1,1⟩ = f^+_1 f^+_2 |0,0⟩$, i.e. $f^-_1 f^-_2 = -(f^+_1 f^+_2)^†$. It changes the number of particles by two, so it preserves the fermion parity but not the particle number.

Supported symmetries: Trivial.

See also f_plus_f_plus.

source
TensorKitTensors.FermionOperators.f_min_f_plusMethod
f_min_f_plus([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
f⁻f⁺([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the two-body operator $f^-_1 f^+_2$ that annihilates a particle at the first site and creates a particle at the second. It picks up the anticommutation sign that comes with reordering the two fermionic operators, i.e. $f^-_1 f^+_2 = -(f^+_1 f^-_2)^†$.

Supported symmetries: Trivial, U1Irrep.

See also f_plus_f_min and f_hopping.

source
TensorKitTensors.FermionOperators.f_numMethod
f_num([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
n([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the one-body operator that counts the number of particles, $n = f^+ f^-$, which is diagonal with eigenvalues $0$ (empty) and $1$ (occupied).

Supported symmetries: Trivial, U1Irrep.

source
TensorKitTensors.FermionOperators.f_plus_f_minMethod
f_plus_f_min([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
f⁺f⁻([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the two-body operator $f^+_1 f^-_2$ that creates a particle at the first site and annihilates a particle at the second.

Supported symmetries: Trivial, U1Irrep.

See also f_min_f_plus ($f^-_1 f^+_2 = -(f^+_1 f^-_2)^†$) and f_hopping.

source
TensorKitTensors.FermionOperators.f_plus_f_plusMethod
f_plus_f_plus([elt::Type{<:Number}], [symmetry::Type{<:Sector}])
f⁺f⁺([elt::Type{<:Number}], [symmetry::Type{<:Sector}])

Return the two-body operator $f^+_1 f^+_2$ that creates a particle at the first and at the second site, with $|1,1⟩ = f^+_1 f^+_2 |0,0⟩$ fixing the sign of the reference state. It changes the number of particles by two, so it preserves the fermion parity but not the particle number.

Supported symmetries: Trivial.

See also f_min_f_min ($f^-_1 f^-_2 = -(f^+_1 f^+_2)^†$).

source
TensorKitTensors.FermionOperators.fermion_spaceMethod
fermion_space([symmetry::Type{<:Sector}])

The local Hilbert space for a single spinless fermionic mode, spanned by the empty and the occupied state $\{|0⟩, |1⟩\}$.

SymmetrySpace
TrivialVect[fℤ₂](0 => 1, 1 => 1)
U1IrrepVect[fℤ₂ ⊠ U1Irrep]((0, 0) => 1, (1, 1) => 1), using the particle number as charge

The space is always graded by the fermion parity fℤ₂, even for Trivial symmetry: the grading is what makes TensorKit insert the anticommutation signs when operators on different sites are contracted, and Trivial refers only to the absence of an additional symmetry. Since a TensorMap on a graded space only has parity-preserving blocks, the parity-odd single-site operators $f^+$ and $f^-$ are not representable at all, and only their parity-even two-site combinations are provided.

source