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):

SymmetryPhysical meaningSector labelCharges of the local states
Trivialnoneempty and doubly occupied share the parity-even sector, with multiplicity 2
U1Irrepparticle-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):

SymmetryPhysical meaningSector labelCharges of the local states
Trivialnonethe 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$
SU2Irrepfull 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$
Charge conventions

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.

Staggered gauge for SU(2) particle symmetry

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.

FunctionAliasSitesParticle symmetrySpin symmetry
hubbard_spaceanyany
basis_transformanyany
e_numn1Trivial, U1Irrepany
u_numnꜛ1Trivial, U1IrrepTrivial, U1Irrep
d_numnꜜ1Trivial, U1IrrepTrivial, U1Irrep
ud_numnꜛꜜ1Trivial, U1Irrepany
half_ud_num1anyany
h_num1Trivial, U1Irrepany
S_x1anyTrivial
S_y1anyTrivial
S_zSᶻ1anyTrivial, U1Irrep
S_plusS⁺1anyTrivial
S_minS⁻1anyTrivial
u_plus_u_minu⁺u⁻2Trivial, U1IrrepTrivial, U1Irrep
u_min_u_plusu⁻u⁺2Trivial, U1IrrepTrivial, U1Irrep
d_plus_d_mind⁺d⁻2Trivial, U1IrrepTrivial, U1Irrep
d_min_d_plusd⁻d⁺2Trivial, U1IrrepTrivial, U1Irrep
e_plus_e_mine⁺e⁻2Trivial, U1Irrepany
e_min_e_pluse⁻e⁺2Trivial, U1Irrepany
e_hoppinge_hop2anyany
u_min_d_minu⁻d⁻2TrivialTrivial, U1Irrep
d_min_u_mind⁻u⁻2TrivialTrivial, U1Irrep
u_plus_d_plusu⁺d⁺2TrivialTrivial, U1Irrep
d_plus_u_plusd⁺u⁺2TrivialTrivial, U1Irrep
u_min_u_minu⁻u⁻2TrivialTrivial
u_plus_u_plusu⁺u⁺2TrivialTrivial
d_min_d_mind⁻d⁻2TrivialTrivial
d_plus_d_plusd⁺d⁺2TrivialTrivial
singlet_plussinglet⁺2Trivialany
singlet_minsinglet⁻2Trivialany
S_plus_S_minS⁺S⁻2anyTrivial, U1Irrep
S_min_S_plusS⁻S⁺2anyTrivial, U1Irrep
S_exchangeSS2anyany
singlet_plus_singlet_min_3siteΔ⁺ij_Δjk3Trivial, U1Irrepany
singlet_plus_singlet_min_4siteΔ⁺ij_Δkl4Trivial, U1Irrepany

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_exchangeMethod
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.

SU2Irrep particle symmetry

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.

source
TensorKitTensors.HubbardOperators.S_minMethod
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.

source
TensorKitTensors.HubbardOperators.S_min_S_plusMethod
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.

source
TensorKitTensors.HubbardOperators.S_plusMethod
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.

source
TensorKitTensors.HubbardOperators.S_plus_S_minMethod
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.

source
TensorKitTensors.HubbardOperators.S_xMethod
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.

source
TensorKitTensors.HubbardOperators.S_yMethod
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.

source
TensorKitTensors.HubbardOperators.S_zMethod
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.

SU2Irrep particle symmetry

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.

source
TensorKitTensors.HubbardOperators.basis_transformMethod
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 U1Irrep particle symmetry, the particle number is used as charge, distinguishing $|0⟩$ (charge 0) from $|↑↓⟩$ (charge 2).
  • For SU2Irrep particle symmetry, $(|↑↓⟩, |0⟩)$ forms the $η$-pairing doublet, ordered by descending $η^z = (n - 1)/2$.
  • For U1Irrep spin symmetry, the $S^z$ eigenvalue $±1/2$ is used as charge, distinguishing $|↑⟩$ from $|↓⟩$.
  • For SU2Irrep spin symmetry, $(|↑⟩, |↓⟩)$ forms the spin doublet (descending $m$).
Staggered gauge for SU2Irrep particle symmetry

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.

source
TensorKitTensors.HubbardOperators.d_min_d_minMethod
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.

source
TensorKitTensors.HubbardOperators.d_min_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.d_min_u_minMethod
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.

source
TensorKitTensors.HubbardOperators.d_numMethod
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.

See also u_num and e_num.

source
TensorKitTensors.HubbardOperators.d_plus_d_minMethod
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.

source
TensorKitTensors.HubbardOperators.d_plus_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.d_plus_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.e_hoppingMethod
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.

Staggered gauge for SU2Irrep particle symmetry

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.

source
TensorKitTensors.HubbardOperators.e_min_e_plusMethod
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.

source
TensorKitTensors.HubbardOperators.e_numMethod
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.

No SU2Irrep particle symmetry

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.

See also u_num, d_num and h_num.

source
TensorKitTensors.HubbardOperators.e_plus_e_minMethod
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.

source
TensorKitTensors.HubbardOperators.h_numMethod
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⟩$.

The doubly occupied state is not a hole

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.

source
TensorKitTensors.HubbardOperators.half_ud_numMethod
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$.

source
TensorKitTensors.HubbardOperators.hubbard_spaceFunction
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.

source
TensorKitTensors.HubbardOperators.singlet_minMethod
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.

source
TensorKitTensors.HubbardOperators.singlet_plusMethod
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.

source
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_3siteMethod
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       k

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.

source
TensorKitTensors.HubbardOperators.singlet_plus_singlet_min_4siteMethod
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.

source
TensorKitTensors.HubbardOperators.u_min_d_minMethod
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.

source
TensorKitTensors.HubbardOperators.u_min_u_minMethod
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.

source
TensorKitTensors.HubbardOperators.u_min_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.u_numMethod
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.

See also d_num and e_num.

source
TensorKitTensors.HubbardOperators.u_plus_d_plusMethod
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.

source
TensorKitTensors.HubbardOperators.u_plus_u_minMethod
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.

source
TensorKitTensors.HubbardOperators.u_plus_u_plusMethod
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.

source
TensorKitTensors.HubbardOperators.ud_numMethod
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.

source