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
| Symmetry | Physical meaning | Sector label | Single-site space |
|---|---|---|---|
Trivial | fermion parity only (always present) | $fℤ₂$ charge $n \bmod 2$ | Vect[fℤ₂](0 => 1, 1 => 1) |
U1Irrep | particle-number conservation | $fℤ₂ ⊠ U(1)$ charge $(n \bmod 2,\, n)$ | Vect[fℤ₂ ⊠ U1Irrep]((0, 0) => 1, (1, 1) => 1) |
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
| Function | Alias | Sites | Supported symmetries |
|---|---|---|---|
fermion_space | — | — | Trivial, U1Irrep |
basis_transform | — | — | Trivial, U1Irrep |
f_num | n | 1 | Trivial, U1Irrep |
f_plus_f_min | f⁺f⁻ | 2 | Trivial, U1Irrep |
f_min_f_plus | f⁻f⁺ | 2 | Trivial, U1Irrep |
f_plus_f_plus | f⁺f⁺ | 2 | Trivial |
f_min_f_min | f⁻f⁻ | 2 | Trivial |
f_hopping | f_hop | 2 | Trivial, U1Irrep |
There is deliberately no single-site f_plus/f_min, see the basis-ordering section above.
API
TensorKitTensors.FermionOperators.basis_transform — Method
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.
TensorKitTensors.FermionOperators.f_hopping — Method
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.
TensorKitTensors.FermionOperators.f_min_f_min — Method
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.
TensorKitTensors.FermionOperators.f_min_f_plus — Method
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.
TensorKitTensors.FermionOperators.f_num — Method
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.
TensorKitTensors.FermionOperators.f_plus_f_min — Method
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.
TensorKitTensors.FermionOperators.f_plus_f_plus — Method
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)^†$).
TensorKitTensors.FermionOperators.fermion_space — Method
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⟩\}$.
| Symmetry | Space |
|---|---|
Trivial | Vect[fℤ₂](0 => 1, 1 => 1) |
U1Irrep | Vect[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.