Hubbard operators
Creation, annihilation, number and spin operators for Hubbard-type models, defined on the four-dimensional local space of a spinful fermion, with independent symmetries for the particle number and for the spin.
Conventions
Basis ordering
A Hubbard site carries four states,
\[|0⟩, \quad |↑⟩ = e^†_↑ |0⟩, \quad |↓⟩ = e^†_↓ |0⟩, \quad |↑↓⟩ = e^†_↑ e^†_↓ |0⟩,\]
of which the two singly occupied ones are fermionic. The local space is therefore always graded by FermionParity, and since a graded space groups its basis vectors per sector, in the order of sectors(V), the index order is not the order in which the states are listed above but the parity-sorted one:
\[\underbrace{|0⟩,\; |↑↓⟩}_{\text{parity even}}, \quad \underbrace{|↑⟩,\; |↓⟩}_{\text{parity odd}}\]
This is the order in which block(op, FermionParity(0)) and block(op, FermionParity(1)) list their rows and columns — with Trivial particle and spin symmetry both blocks are $2 × 2$, so there is no single $4 × 4$ matrix — and it is the reference order of basis_transform, which is consequently the identity for Trivial symmetry.
For the symmetric versions the dense order follows the sector order of the target space and is in general not the reference order. Rather than relying on it, read it off from the basis transformation: numbering the reference states $(1, 2, 3, 4) = (|0⟩, |↑↓⟩, |↑⟩, |↓⟩)$, column $j$ of basis_transform(P, S) has its single nonzero entry in the row that is the dense index of reference state $j$:
U = convert(Array, basis_transform(U1Irrep, SU2Irrep))
i_up = findfirst(==(1), U[:, 3]) # dense index of |↑⟩Symmetry sectors
The particle-number and the spin symmetry are chosen independently. The local sector type is always FermionParity ⊠ (particle) ⊠ (spin) with the Trivial factors omitted and the spin factor last, so e.g. hubbard_space(U1Irrep, SU2Irrep) is Vect[FermionParity ⊠ U1Irrep ⊠ SU2Irrep]((0, 0, 0) => 1, (1, 1, 1//2) => 1, (0, 2, 0) => 1). The supported sectors are Trivial, U1Irrep and SU2Irrep on both axes; anything else, Z2Irrep included, throws an ArgumentError.
The particle symmetry labels the parity-even pair (empty, doubly occupied):
| Symmetry | Physical meaning | Sector label | Charges of the local states |
|---|---|---|---|
Trivial | none | — | empty and doubly occupied share the parity-even sector, with multiplicity 2 |
U1Irrep | particle-number conservation | $n ∈ \{0, 1, 2\}$ | empty $↦ 0$, singly occupied $↦ 1$, doubly occupied $↦ 2$ |
SU2Irrep | $η$-pairing SU(2) | $η ∈ \{0, 1/2\}$ | (doubly occupied, empty) is the $η = 1/2$ doublet, ordered by descending $η^z = (n-1)/2$; singly occupied has $η = 0$ |
The spin symmetry labels the parity-odd pair (the two singly occupied states):
| Symmetry | Physical meaning | Sector label | Charges of the local states |
|---|---|---|---|
Trivial | none | — | the two singly occupied states share the parity-odd sector, with multiplicity 2 |
U1Irrep | $S^z$ conservation | $m ∈ \{-1/2, 0, +1/2\}$ | $↑ ↦ +1/2$, $↓ ↦ -1/2$, empty and doubly occupied $↦ 0$ |
SU2Irrep | full spin SU(2) | $s ∈ \{0, 1/2\}$ | the singly occupied states form the $s = 1/2$ doublet (descending $m$); empty and doubly occupied are $s = 0$ |
The U1Irrep particle charge is the particle number $n$, not the particle-hole symmetric $n - 1$, and the U1Irrep spin charge is $S^z = ±1/2$, not $2S^z = ±1$. The $η$-pairing SU2Irrep is built on $η^z = (n-1)/2$ instead, so the particle number itself is not an $η$-SU(2) scalar: this is why e_num and ud_num are unavailable with SU2Irrep particle symmetry, while the particle-hole symmetric half_ud_num $= (n_↑ - 1/2)(n_↓ - 1/2)$ — which equals $+1/4$ on the $η$ doublet and $-1/4$ on the singly occupied states — is available for every symmetry combination.
The $η$-pairing SU(2) only commutes with the Hubbard Hamiltonian after the staggered gauge transformation $e_{j,σ} → i^j e_{j,σ}$ on a bipartite lattice. Accordingly, with SU2Irrep particle symmetry the operators of this module act on site $k$ with the additional gauge factor $G^{k-1}$, where $G = i^n = \mathrm{diag}(1, -1, i, i)$ in the reference order above. Operators that commute with $G$ are returned without it, so they stay real-representable and remain elementwise equal to their Trivial counterparts. Of the operators available with SU2Irrep particle symmetry, e_hopping is the only one that does not commute with $G$: it is therefore genuinely complex, requires a complex eltype, and is the gauge-transformed version of its Trivial counterpart — it generates the same physics on a bipartite lattice, but is not elementwise equal to it.
The $η$-pairing SU(2) and the gauge transformation that makes it a symmetry of the Hubbard model are due to C. N. Yang and S. C. Zhang, SO₄ symmetry in a Hubbard model, Mod. Phys. Lett. B 4, 759 (1990), doi:10.1142/S0217984990000933; see also C. N. Yang, η pairing and off-diagonal long-range order in a Hubbard model, Phys. Rev. Lett. 63, 2144 (1989), doi:10.1103/PhysRevLett.63.2144.
Operator overview
The two symmetry columns are independent conditions: an operator is available for exactly those combinations that satisfy both. any means all three supported sectors, Trivial, U1Irrep and SU2Irrep; every other request throws an ArgumentError.
| Function | Alias | Sites | Particle symmetry | Spin symmetry |
|---|---|---|---|---|
hubbard_space | — | — | any | any |
basis_transform | — | — | any | any |
e_num | n | 1 | Trivial, U1Irrep | any |
u_num | nꜛ | 1 | Trivial, U1Irrep | Trivial, U1Irrep |
d_num | nꜜ | 1 | Trivial, U1Irrep | Trivial, U1Irrep |
ud_num | nꜛꜜ | 1 | Trivial, U1Irrep | any |
half_ud_num | — | 1 | any | any |
h_num | nʰ | 1 | Trivial, U1Irrep | any |
S_x | Sˣ | 1 | any | Trivial |
S_y | Sʸ | 1 | any | Trivial |
S_z | Sᶻ | 1 | any | Trivial, U1Irrep |
S_plus | S⁺ | 1 | any | Trivial |
S_min | S⁻ | 1 | any | Trivial |
u_plus_u_min | u⁺u⁻ | 2 | Trivial, U1Irrep | Trivial, U1Irrep |
u_min_u_plus | u⁻u⁺ | 2 | Trivial, U1Irrep | Trivial, U1Irrep |
d_plus_d_min | d⁺d⁻ | 2 | Trivial, U1Irrep | Trivial, U1Irrep |
d_min_d_plus | d⁻d⁺ | 2 | Trivial, U1Irrep | Trivial, U1Irrep |
e_plus_e_min | e⁺e⁻ | 2 | Trivial, U1Irrep | any |
e_min_e_plus | e⁻e⁺ | 2 | Trivial, U1Irrep | any |
e_hopping | e_hop | 2 | any | any |
u_min_d_min | u⁻d⁻ | 2 | Trivial | Trivial, U1Irrep |
d_min_u_min | d⁻u⁻ | 2 | Trivial | Trivial, U1Irrep |
u_plus_d_plus | u⁺d⁺ | 2 | Trivial | Trivial, U1Irrep |
d_plus_u_plus | d⁺u⁺ | 2 | Trivial | Trivial, U1Irrep |
u_min_u_min | u⁻u⁻ | 2 | Trivial | Trivial |
u_plus_u_plus | u⁺u⁺ | 2 | Trivial | Trivial |
d_min_d_min | d⁻d⁻ | 2 | Trivial | Trivial |
d_plus_d_plus | d⁺d⁺ | 2 | Trivial | Trivial |
singlet_plus | singlet⁺ | 2 | Trivial | any |
singlet_min | singlet⁻ | 2 | Trivial | any |
S_plus_S_min | S⁺S⁻ | 2 | any | Trivial, U1Irrep |
S_min_S_plus | S⁻S⁺ | 2 | any | Trivial, U1Irrep |
S_exchange | SS | 2 | any | any |
singlet_plus_singlet_min_3site | Δ⁺ij_Δjk | 3 | Trivial, U1Irrep | any |
singlet_plus_singlet_min_4site | Δ⁺ij_Δkl | 4 | Trivial, U1Irrep | any |
Note that the singlet-pair terms singlet_plus_singlet_min_3site and singlet_plus_singlet_min_4site are available with U1Irrep particle symmetry even though singlet_plus and singlet_min individually are not: only the product $Δ^† Δ$ conserves the particle number. S_y requires a complex eltype for every symmetry combination, and e_hopping requires one with SU2Irrep particle symmetry; all other operators honour any eltype, and the basis transformations have exact integer entries so that they never degrade the precision of the result.
The t-J restriction of this module, obtained by projecting out the doubly occupied state, is TJOperators.
API
TensorKitTensors.HubbardOperators.S_exchange — Method
S_exchange([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
SS([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin exchange operator
\[𝐒_1 ⋅ 𝐒_2 = S^z_1 S^z_2 + \tfrac{1}{2}(S^+_1 S^-_2 + S^-_1 S^+_2),\]
i.e. the Heisenberg exchange interaction between the two sites.
Being a scalar under both the spin and the $η$-pairing SU(2), this operator is available for every symmetry combination.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also S_z, S_plus_S_min and S_min_S_plus.
TensorKitTensors.HubbardOperators.S_min — Method
S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin lowering operator $S^- = e^†_↓ e_↑ = (S^+)^†$.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial.
See also S_plus and S_min_S_plus.
TensorKitTensors.HubbardOperators.S_min_S_plus — Method
S_min_S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁻S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $S^-_1 S^+_2 = (S^+_1 S^-_2)^†$.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep.
See also S_plus_S_min and S_exchange.
TensorKitTensors.HubbardOperators.S_plus — Method
S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the spin raising operator $S^+ = e^†_↑ e_↓$.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial.
See also S_min (its adjoint) and S_plus_S_min.
TensorKitTensors.HubbardOperators.S_plus_S_min — Method
S_plus_S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
S⁺S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $S^+_1 S^-_2$, which flips a down spin on the first site up and an up spin on the second site down.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep.
See also S_min_S_plus (its adjoint) and S_exchange.
TensorKitTensors.HubbardOperators.S_x — Method
S_x([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sˣ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 x-operator on the electrons, $S^x = (S^+ + S^-)/2$. It acts as the spin-1/2 $S^x$ on the singly occupied states and annihilates the states that carry no unpaired spin.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial.
TensorKitTensors.HubbardOperators.S_y — Method
S_y([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sʸ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 y-operator on the electrons, $S^y = (S^+ - S^-)/(2i)$. It acts as the spin-1/2 $S^y$ on the singly occupied states and annihilates the states that carry no unpaired spin. Since its matrix elements are imaginary, it requires a complex elt and throws an ArgumentError otherwise.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial.
TensorKitTensors.HubbardOperators.S_z — Method
S_z([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Sᶻ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body spin-1/2 z-operator on the electrons, $S^z = (n_↑ - n_↓)/2$. It is diagonal with eigenvalues $±1/2$ on the singly occupied states and $0$ on the states that carry no unpaired spin.
Unlike the transverse components, this operator survives SU2Irrep particle symmetry: the two symmetry axes are independent.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep.
TensorKitTensors.HubbardOperators.basis_transform — Method
basis_transform(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})Return the unitary basis transformation that maps the basis $\{|0⟩, |↑↓⟩, |↑⟩, |↓⟩\}$ of hubbard_space(Trivial, Trivial) (fermion-parity even states first) onto the basis of hubbard_space(particle_symmetry, spin_symmetry), as a TensorMap between the desymmetrized versions of these spaces (see desymmetrize), as required by symmetrize.
For all symmetry combinations the transformation is a permutation, determined by the sector order of the target space, where the states are identified as follows:
- For
U1Irrepparticle symmetry, the particle number is used as charge, distinguishing $|0⟩$ (charge 0) from $|↑↓⟩$ (charge 2). - For
SU2Irrepparticle symmetry, $(|↑↓⟩, |0⟩)$ forms the $η$-pairing doublet, ordered by descending $η^z = (n - 1)/2$. - For
U1Irrepspin symmetry, the $S^z$ eigenvalue $±1/2$ is used as charge, distinguishing $|↑⟩$ from $|↓⟩$. - For
SU2Irrepspin symmetry, $(|↑⟩, |↓⟩)$ forms the spin doublet (descending $m$).
The $η$-pairing SU(2) symmetry only commutes with the Hubbard model after a staggered gauge transformation $e_{j,σ} → i^j e_{j,σ}$ on a bipartite lattice. Accordingly, for SU2Irrep particle symmetry the operators of this module act on site $k$ with the additional gauge factor $G^{k-1}$, where $G = i^n = \mathrm{diag}(1, -1, i, i)$ in the basis above. Operators that commute with the staggered gauge are unaffected by it; the remaining ones (e.g. e_hopping) are genuinely complex, require a complex scalar type, and are the gauge-transformed versions of their Trivial counterparts: they generate the same physics on bipartite lattices but are not elementwise equal to them.
The $η$-pairing SU(2) and the gauge transformation making it a symmetry of the Hubbard model are due to C. N. Yang and S. C. Zhang, SO₄ symmetry in a Hubbard model, Mod. Phys. Lett. B 4, 759 (1990), doi:10.1142/S0217984990000933; see also C. N. Yang, η pairing and off-diagonal long-range order in a Hubbard model, Phys. Rev. Lett. 63, 2144 (1989), doi:10.1103/PhysRevLett.63.2144.
The transformations have exact integer entries and are therefore returned with integer scalar type, such that they promote to any scalar type without loss of precision.
TensorKitTensors.HubbardOperators.d_min_d_min — Method
d_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓} e_{2,↓}$ that annihilates a spin-down electron at both sites. Being an equal-spin (triplet) pair, it lowers both the total electron number by two and raises the total $S^z$ by one, so it requires trivial particle and spin symmetry.
Supported symmetries: particle Trivial; spin Trivial.
See also d_plus_d_plus and u_min_u_min.
TensorKitTensors.HubbardOperators.d_min_d_plus — Method
d_min_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓} e^†_{2,↓}$ that annihilates a spin-down electron at the first site and creates a spin-down electron at the second. It is minus the adjoint of d_plus_d_min, the sign being the fermionic reordering sign.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
See also e_min_e_plus.
TensorKitTensors.HubbardOperators.d_min_u_min — Method
d_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↓} e_{2,↑}$ that annihilates a spin-down electron at the first site and a spin-up electron at the second site. It lowers the total electron number by two, so it is only available without particle symmetry.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep.
See also d_plus_u_plus, u_min_d_min and singlet_min.
TensorKitTensors.HubbardOperators.d_num — Method
d_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜜ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $n_↓ = e^†_↓ e_↓$ that counts the number of spin-down electrons, diagonal with eigenvalue $1$ on every basis state that holds a spin-down electron and $0$ on the others.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
TensorKitTensors.HubbardOperators.d_plus_d_min — Method
d_plus_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↓} e_{2,↓}$ that creates a spin-down electron at the first site and annihilates a spin-down electron at the second.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
See also d_min_d_plus and e_plus_e_min.
TensorKitTensors.HubbardOperators.d_plus_d_plus — Method
d_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↓} e^†_{2,↓}$ that creates a spin-down electron at both sites. It is minus the adjoint of d_min_d_min.
Supported symmetries: particle Trivial; spin Trivial.
TensorKitTensors.HubbardOperators.d_plus_u_plus — Method
d_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
d⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↓} e^†_{2,↑}$ that creates a spin-down electron at the first site and a spin-up electron at the second site. It is minus the adjoint of d_min_u_min, and raises the total electron number by two.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep.
See also singlet_plus.
TensorKitTensors.HubbardOperators.e_hopping — Method
e_hopping([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e_hop([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator that describes an electron that hops between the first and the second site,
\[e_\mathrm{hop} = \sum_σ \left( e^†_{1,σ} e_{2,σ} + e^†_{2,σ} e_{1,σ} \right),\]
which is hermitian. In terms of this module's building blocks it is e_plus_e_min $-$ e_min_e_plus, the minus sign being the fermionic reordering sign that makes the combination hermitian. This is the kinetic ($t$) term of the model.
Being a scalar under both the spin and the $η$-pairing SU(2), this is the only hopping term of this module that is available for every symmetry combination. For SU2Irrep particle symmetry it is expressed in the staggered gauge $e_{j,σ} → i^j e_{j,σ}$ and requires a complex scalar type; see basis_transform for details. It is then not elementwise equal to its Trivial counterpart, although it generates the same physics on a bipartite lattice.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.HubbardOperators.e_min_e_plus — Method
e_min_e_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e⁻e⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $\sum_σ e_{1,σ} e^†_{2,σ}$ that annihilates an electron at the first site and creates an electron at the second. This is the sum of u_min_u_plus and d_min_d_plus, and equals minus the adjoint of e_plus_e_min.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also e_hopping.
TensorKitTensors.HubbardOperators.e_num — Method
e_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
n([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $n = n_↑ + n_↓$ that counts the number of electrons, diagonal with the occupation of each basis state as eigenvalue.
Since the electron number is not an $η$-spin scalar, this operator does not exist for SU2Irrep particle symmetry; see basis_transform.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.HubbardOperators.e_plus_e_min — Method
e_plus_e_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
e⁺e⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $\sum_σ e^†_{1,σ} e_{2,σ}$ that creates an electron at the first site and annihilates an electron at the second. This is the sum of u_plus_u_min and d_plus_d_min, and is a spin scalar, hence available for SU2Irrep spin symmetry.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also e_min_e_plus and e_hopping.
TensorKitTensors.HubbardOperators.h_num — Method
h_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nʰ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $n^h = (1 - n_↑)(1 - n_↓)$ that counts the number of holes, i.e. the projector onto the empty state $|0⟩$.
Equivalently $n^h = 1 - n + n_↑ n_↓$, so that $n^h + n = 1 + n_↑ n_↓$ rather than $1$: double occupancy does not count as a hole. Use ud_num to single it out.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also e_num.
TensorKitTensors.HubbardOperators.half_ud_num — Method
half_ud_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $(n_↑ - 1/2)(n_↓ - 1/2)$, the particle-hole symmetric form of the on-site interaction. It is diagonal with eigenvalue $+1/4$ on $|0⟩$ and $|↑↓⟩$ and $-1/4$ on the singly occupied states.
Being a scalar under both the spin and the $η$-pairing SU(2), this is the only interaction term of this module that is available for every symmetry combination.
Supported symmetries: particle Trivial, U1Irrep, SU2Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also ud_num, which differs from it by $(n - 1)/2 + 1/4$.
TensorKitTensors.HubbardOperators.hubbard_space — Function
hubbard_space(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})Return the local hilbert space for a Hubbard-type model with the given particle and spin symmetries. The four basis states are
|0⟩ (vacuum), |↑⟩ = e^†_↑|0⟩, |↓⟩ = e^†_↓|0⟩,
|↑↓⟩ = e^†_↑ e^†_↓|0⟩.The possible symmetries are Trivial, U1Irrep, and SU2Irrep, for both particle number and spin.
Note that the enumeration above is not the index order: since the space is graded by FermionParity and a graded space groups its basis vectors per sector, the parity-even states come first. The reference order is therefore $\{|0⟩, |↑↓⟩, |↑⟩, |↓⟩\}$, as used by basis_transform.
TensorKitTensors.HubbardOperators.singlet_min — Method
singlet_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
singlet⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the adjoint of the singlet_plus operator, which is $(-e_{1,↑} e_{2,↓} + e_{1,↓} e_{2,↑}) / √2$. It annihilates a singlet pair, lowering the total electron number by two.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.HubbardOperators.singlet_plus — Method
singlet_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
singlet⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body singlet operator $(e^†_{1,↑} e^†_{2,↓} - e^†_{1,↓} e^†_{2,↑}) / √2$, which creates the singlet state when acting on the vacuum. Being a spin scalar it survives SU2Irrep spin symmetry, but it raises the total electron number by two and therefore requires trivial particle symmetry.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep, SU2Irrep.
See also singlet_min and singlet_plus_singlet_min_4site, whose product form is available for U1Irrep particle symmetry as well.
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_3site — Method
singlet_plus_singlet_min_3site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Δ⁺ij_Δjk([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Returns the 3-site term $O_{ijk} = Δ^†_{ij} Δ_{jk}$, where $Δ^†_{ij} = (e^†_{i,↑} e^†_{j,↓} - e^†_{i,↓} e^†_{j,↑}) / √2$. It describes the hopping of a singlet pair from bond (j,k) to a nearest neighbor bond (i,j) sharing site j. The indices are ordered as
-5 -6
┌---┴-------┴---┐
| Δ_{jk} |
└---┬-------┬---┘
-4 1 -3
┌---┴-------┴---┐
| Δ†_{ij} |
└---┬-------┬---┘
-1 -2
i j kUnlike the individual singlet_plus and singlet_min, the product $Δ^† Δ$ conserves the electron number and is therefore also available for U1Irrep particle symmetry.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_4site — Method
singlet_plus_singlet_min_4site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
Δ⁺ij_Δkl([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Returns the 4-site term $O_{ijkl} = Δ^†_{ij} Δ_{kl}$, where $Δ^†_{ij} = (e^†_{i,↑} e^†_{j,↓} - e^†_{i,↓} e^†_{j,↑}) / √2$. It measures the singlet pair correlation between two bonds (i,j) and (k,l).
Unlike the individual singlet_plus and singlet_min, the product $Δ^† Δ$ conserves the electron number and is therefore also available for U1Irrep particle symmetry.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.HubbardOperators.u_min_d_min — Method
u_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑} e_{2,↓}$ that annihilates a spin-up electron at the first site and a spin-down electron at the second site. It lowers the total electron number by two, so it is only available without particle symmetry.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep.
See also u_plus_d_plus, d_min_u_min and singlet_min.
TensorKitTensors.HubbardOperators.u_min_u_min — Method
u_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑} e_{2,↑}$ that annihilates a spin-up electron at both sites. Being an equal-spin (triplet) pair, it lowers both the total electron number by two and the total $S^z$ by one, so it requires trivial particle and spin symmetry.
Supported symmetries: particle Trivial; spin Trivial.
See also u_plus_u_plus and d_min_d_min.
TensorKitTensors.HubbardOperators.u_min_u_plus — Method
u_min_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁻u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e_{1,↑} e^†_{2,↑}$ that annihilates a spin-up electron at the first site and creates a spin-up electron at the second. It is minus the adjoint of u_plus_u_min, the sign being the fermionic reordering sign.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
See also e_min_e_plus.
TensorKitTensors.HubbardOperators.u_num — Method
u_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜛ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $n_↑ = e^†_↑ e_↑$ that counts the number of spin-up electrons, diagonal with eigenvalue $1$ on every basis state that holds a spin-up electron and $0$ on the others.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
TensorKitTensors.HubbardOperators.u_plus_d_plus — Method
u_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↑} e^†_{2,↓}$ that creates a spin-up electron at the first site and a spin-down electron at the second site. It is minus the adjoint of u_min_d_min, and raises the total electron number by two.
Supported symmetries: particle Trivial; spin Trivial, U1Irrep.
See also singlet_plus.
TensorKitTensors.HubbardOperators.u_plus_u_min — Method
u_plus_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↑} e_{2,↑}$ that creates a spin-up electron at the first site and annihilates a spin-up electron at the second.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
See also u_min_u_plus and e_plus_e_min.
TensorKitTensors.HubbardOperators.u_plus_u_plus — Method
u_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
u⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the two-body operator $e^†_{1,↑} e^†_{2,↑}$ that creates a spin-up electron at both sites. It is minus the adjoint of u_min_u_min.
Supported symmetries: particle Trivial; spin Trivial.
TensorKitTensors.HubbardOperators.ud_num — Method
ud_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])
nꜛꜜ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}])Return the one-body operator $n_↑ n_↓$, i.e. the projector onto the doubly occupied state $|↑↓⟩$. This is the on-site interaction term of the Hubbard model.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also half_ud_num for the particle-hole symmetric form.