t-J operators
Creation, annihilation, number and spin operators for t-J-type models, i.e. the Hubbard model with the doubly occupied state projected out, with independent symmetries for the electron number and for the spin.
Conventions
Basis ordering
A t-J site carries three states — one empty and two singly occupied — with no doubly occupied state:
\[|0⟩, \quad |↑⟩, \quad |↓⟩\]
Here $|0⟩$ labels the empty state rather than the vacuum $|∅⟩$ of the underlying operators, a distinction that matters in the slave-fermion basis below. The absence of double occupancy is exact: the product of u_num and d_num vanishes identically.
The local space is graded by FermionParity, and a graded space groups its basis vectors per sector, in the order of sectors(V). In the default t-J basis the empty state is fermion-parity even and the singly occupied states are odd, so the parity-sorted index order coincides with the natural one. The slave-fermion basis flips the parity of every state and hence reverses the two groups:
\[\text{t-J:}\quad |0⟩,\; |↑⟩,\; |↓⟩ \qquad\qquad \text{slave-fermion:}\quad |↑⟩,\; |↓⟩,\; |0⟩\]
Each of these is the reference order of basis_transform in the corresponding basis, so basis_transform(Trivial, Trivial; slave_fermion) is the identity for either value of slave_fermion.
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) = (|0⟩, |↑⟩, |↓⟩)$, column $j$ of basis_transform(P, S; slave_fermion) 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[:, 2]) # dense index of |↑⟩Slave-fermion basis
Every function of this module takes an optional slave_fermion::Bool = false keyword that selects the basis it is expressed in. In the slave-fermion representation the hole is created by a fermionic holon operator $h$, and the spins by bosonic spinon operators bꜛ and bꜜ, acting on the vacuum $|∅⟩$:
| label | tJ basis | slave-fermion |
| ----- | -------- | ------------- |
| |0⟩ | |∅⟩ | h⁺|∅⟩ |
| |↑⟩ | u⁺|∅⟩ | bꜛ⁺|∅⟩ |
| |↓⟩ | d⁺|∅⟩ | bꜜ⁺|∅⟩ |transform_slave_fermion performs this change of basis, on a space or on an operator, by fusing in a single auxiliary fermionic charge. This flips the fermion parity of every state and thereby the statistics of the operator: braiding the auxiliary legs of an $N$-site operator through the physical ones generates a staggered sign $(-1)^{(k-1)p_k}$ on site $k$, with $p_k$ the parity of the state.
Which operators exist does not depend on slave_fermion; only the basis they are expressed in does.
Because of that staggered sign, transform_slave_fermion has to be applied to a complete operator: in general transform_slave_fermion(A ⊗ B) differs from transform_slave_fermion(A) ⊗ transform_slave_fermion(B). Build a multi-site term in the plain t-J basis and transform once, at the very end, which is exactly what the operators of this module do — so op(elt, P, S; slave_fermion = true) always agrees with transform_slave_fermion(op(elt, P, S)), but assembling it site by site from slave_fermion = true single-site operators does not.
Relation to the Hubbard model
The t-J local space is the Hubbard local space with the doubly occupied state removed. tj_projector is the corresponding $3 ← 4$ isometry, with Int entries so that it introduces no floating-point error, and every operator of this module is the projection of its HubbardOperators namesake:
proj = reduce(⊗, ntuple(Returns(tj_projector(P, S)), N))
TJOperators.op(elt, P, S) ≈ proj * HubbardOperators.op(elt, P, S) * proj'for an $N$-site operator op. The projector is defined in the plain t-J basis only: the slave-fermion basis has no Hubbard counterpart.
Because double occupancy is removed rather than merely energetically penalized, this module exports no on-site interaction: there is no ud_num and no half_ud_num. For the same reason h_num and e_num are complementary here, $n^h + n = 1$, whereas in the Hubbard model they overshoot the identity by the double occupancy.
Symmetry sectors
The electron-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. tj_space(U1Irrep, SU2Irrep) is Vect[FermionParity ⊠ U1Irrep ⊠ SU2Irrep]((0, 0, 0) => 1, (1, 1, 1//2) => 1).
The particle symmetry labels the empty state against the singly occupied ones:
| Symmetry | Physical meaning | Sector label | Charges of the local states |
|---|---|---|---|
Trivial | none | — | the fermion-parity grading alone separates the empty state from the singly occupied ones |
U1Irrep | electron-number conservation | $n ∈ \{0, 1\}$ | empty $↦ 0$, singly occupied $↦ 1$ |
SU2Irrep | — | — | not available, see the note below |
The spin symmetry labels the two singly occupied states:
| Symmetry | Physical meaning | Sector label | Charges of the local states |
|---|---|---|---|
Trivial | none | — | the two singly occupied states share one sector, with multiplicity 2 |
U1Irrep | $S^z$ conservation | $m ∈ \{-1/2, 0, +1/2\}$ | $↑ ↦ +1/2$, $↓ ↦ -1/2$, empty $↦ 0$ |
SU2Irrep | full spin SU(2) | $s ∈ \{0, 1/2\}$ | the singly occupied states form the $s = 1/2$ doublet (descending $m$); the empty state is $s = 0$ |
Unlike HubbardOperators, the t-J model admits no SU2Irrep particle symmetry. The $η$-pairing doublet of the Hubbard model is (doubly occupied, empty), and the doubly occupied state is precisely what the t-J projection removes, so there is no doublet left to carry the $η$-spin. tj_space(SU2Irrep, S) and every operator requested with SU2Irrep particle symmetry throw an ArgumentError, as does any unsupported sector such as Z2Irrep on either axis.
The slave-fermion transformation fuses in a single auxiliary FermionParity(1) charge together with the identity charge of every other factor, so it leaves the particle and spin labels untouched and only flips the parity factor. The two bases therefore carry the same sector labels up to that flip, but their sectors come out in a different order: in general basis_transform(P, S; slave_fermion = true) is a different permutation from basis_transform(P, S).
Operator overview
The two symmetry columns are independent conditions: an operator is available for exactly those combinations that satisfy both. any means every supported sector, i.e. Trivial and U1Irrep for the electron number, and Trivial, U1Irrep and SU2Irrep for the spin. Every other request throws an ArgumentError. Availability does not depend on slave_fermion, and every entry below accepts that keyword.
| Function | Alias | Sites | Particle symmetry | Spin symmetry |
|---|---|---|---|---|
tj_space | — | — | any | any |
basis_transform | — | — | any | any |
tj_projector | — | — | any | any |
transform_slave_fermion | — | — | — | — |
e_num | n | 1 | any | any |
u_num | nꜛ | 1 | any | Trivial, U1Irrep |
d_num | nꜜ | 1 | any | Trivial, U1Irrep |
h_num | nʰ | 1 | any | 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 | any | Trivial, U1Irrep |
u_min_u_plus | u⁻u⁺ | 2 | any | Trivial, U1Irrep |
d_plus_d_min | d⁺d⁻ | 2 | any | Trivial, U1Irrep |
d_min_d_plus | d⁻d⁺ | 2 | any | Trivial, U1Irrep |
e_plus_e_min | e⁺e⁻ | 2 | any | any |
e_min_e_plus | e⁻e⁺ | 2 | any | 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 | any | any |
singlet_plus_singlet_min_4site | Δ⁺ij_Δkl | 4 | any | any |
Note that the singlet-pair terms singlet_plus_singlet_min_3site and singlet_plus_singlet_min_4site are available for every symmetry combination even though singlet_plus and singlet_min individually require Trivial particle symmetry: only the product $Δ^† Δ$ conserves the electron number. S_y requires a complex eltype; all other operators honour any eltype, and the basis transformations have exact integer entries so that they never degrade the precision of the result.
API
Every operator docstring below is generated from that of its HubbardOperators namesake, so the two modules cannot drift apart; see Relation to the Hubbard model.
TensorKitTensors.TJOperators.S_exchange — Method
S_exchange([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
SS([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also S_z, S_plus_S_min and S_min_S_plus.
This operator is the projection of HubbardOperators.S_exchange onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_min — Method
S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)Return the spin lowering operator $S^- = e^†_↓ e_↑ = (S^+)^†$.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial.
See also S_plus and S_min_S_plus.
This operator is the projection of HubbardOperators.S_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_min_S_plus — Method
S_min_S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
S⁻S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)Return the two-body operator $S^-_1 S^+_2 = (S^+_1 S^-_2)^†$.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
See also S_plus_S_min and S_exchange.
This operator is the projection of HubbardOperators.S_min_S_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_plus — Method
S_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
S⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)Return the spin raising operator $S^+ = e^†_↑ e_↓$.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial.
See also S_min (its adjoint) and S_plus_S_min.
This operator is the projection of HubbardOperators.S_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_plus_S_min — Method
S_plus_S_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
S⁺S⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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; spin Trivial, U1Irrep.
See also S_min_S_plus (its adjoint) and S_exchange.
This operator is the projection of HubbardOperators.S_plus_S_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_x — Method
S_x([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
Sˣ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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; spin Trivial.
This operator is the projection of HubbardOperators.S_x onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_y — Method
S_y([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
Sʸ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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; spin Trivial.
This operator is the projection of HubbardOperators.S_y onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.S_z — Method
S_z([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
Sᶻ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep.
This operator is the projection of HubbardOperators.S_z onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.basis_transform — Method
basis_transform(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}; slave_fermion::Bool = false)Return the unitary basis transformation that maps the basis of tj_space(Trivial, Trivial; slave_fermion) onto the basis of tj_space(particle_symmetry, spin_symmetry; slave_fermion), 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 number of electrons is used as charge, distinguishing $|0⟩$ (charge 0) from $|↑⟩$ and $|↓⟩$ (charge 1). - For
U1Irrepspin symmetry, the $S^z$ eigenvalue $±1/2$ is used as charge, distinguishing $|↑⟩$ from $|↓⟩$. - For
SU2Irrepspin symmetry, $(|↑⟩, |↓⟩)$ forms the spin doublet (descending $m$).
Both bases order the states by fermion parity, so the reference basis differs between them:
| basis | reference order |
| -------------- | --------------- |
| t-J | |0⟩, |↑⟩, |↓⟩ |
| slave-fermion | |↑⟩, |↓⟩, |0⟩ |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.TJOperators.d_min_d_min — Method
d_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_min_d_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_min_d_plus — Method
d_min_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁻d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_min_d_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_min_u_min — Method
d_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_min_u_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_num — Method
d_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
nꜜ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_num onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_plus_d_min — Method
d_plus_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁺d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_plus_d_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_plus_d_plus — Method
d_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_plus_d_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.d_plus_u_plus — Method
d_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
d⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.d_plus_u_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.e_hopping — Method
e_hopping([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
e_hop([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
This operator is the projection of HubbardOperators.e_hopping onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.e_min_e_plus — Method
e_min_e_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
e⁻e⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.e_min_e_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.e_num — Method
e_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
n([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)Return the one-body operator $n = n_↑ + n_↓$ that counts the number of electrons, diagonal with the occupation of each basis state as eigenvalue.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also u_num, d_num and h_num.
This operator is the projection of HubbardOperators.e_num onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.e_plus_e_min — Method
e_plus_e_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
e⁺e⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.e_plus_e_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.h_num — Method
h_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
nʰ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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⟩$.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
See also e_num.
This operator is the projection of HubbardOperators.h_num onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.singlet_min — Method
singlet_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
singlet⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.singlet_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.singlet_plus — Method
singlet_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
singlet⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.singlet_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.singlet_plus_singlet_min_3site — Method
singlet_plus_singlet_min_3site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
Δ⁺ij_Δjk([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.singlet_plus_singlet_min_3site onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.singlet_plus_singlet_min_4site — Method
singlet_plus_singlet_min_4site([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
Δ⁺ij_Δkl([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.singlet_plus_singlet_min_4site onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.tj_projector — Method
tj_projector(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector})Projection operator from Hubbard space to t-J space, which removes the doubly occupied state $|↑↓⟩$. The operators of this module are defined as the projections of their HubbardOperators counterparts of the same name, i.e. they satisfy
proj = reduce(⊗, ntuple(Returns(tj_projector(P, S)), N))
TJOperators.op(elt, P, S) ≈ proj * HubbardOperators.op(elt, P, S) * proj'for an N-site operator op. The double-occupancy operators of the Hubbard model (ud_num and half_ud_num) have no t-J counterpart, as they project to zero.
The projector is defined in the plain t-J basis only, since the slave-fermion basis has no Hubbard counterpart. It is an isometry from the four-dimensional Hubbard space onto the three-dimensional t-J space, so proj * proj' == id(tj_space(P, S)) while proj' * proj is the projector within the Hubbard space.
The scalartype is Int to avoid floating point errors.
Supported symmetries: particle Trivial, U1Irrep; spin Trivial, U1Irrep, SU2Irrep.
TensorKitTensors.TJOperators.tj_space — Function
tj_space([particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)Return the local hilbert space for a t-J-type model with the given particle and spin symmetries. The basis consists of the following states:
| label | tJ basis | slave-fermion |
| ----- | -------- | ------------- |
| |0⟩ | |∅⟩ | h⁺|∅⟩ |
| |↑⟩ | u⁺|∅⟩ | bꜛ⁺|∅⟩ |
| |↓⟩ | d⁺|∅⟩ | bꜜ⁺|∅⟩ ||∅⟩is the vacuum state;uandddenote fermionic spin-up and spin-down operators;- in the slave-fermion representation, $h$ is the fermionic holon operator, and
bꜛ,bꜜare bosonic spinon operators.
The possible symmetries are:
- Particle number :
Trivial,U1Irrep - Spin :
Trivial,U1Irrep,SU2Irrep.
Use slave_fermion = true to switch to the slave-fermion basis, which flips the fermion parity of every state; see transform_slave_fermion.
TensorKitTensors.TJOperators.transform_slave_fermion — Function
transform_slave_fermion(O::AbstractTensorMap)
transform_slave_fermion(V::ElementarySpace)Transform the given operator to the slave-fermion basis, which is related to the usual t-J basis by
| label | tJ basis | slave-fermion |
| ----- | -------- | ------------- |
| |0⟩ | |∅⟩ | h⁺|∅⟩ |
| |↑⟩ | u⁺|∅⟩ | bꜛ⁺|∅⟩ |
| |↓⟩ | d⁺|∅⟩ | bꜜ⁺|∅⟩ |where $h$ is the fermionic holon operator, and bꜛ, bꜜ are bosonic spinon operators.
Fusing in the auxiliary fermionic charge flips the parity of every state, which changes the statistics of the operator: braiding the auxiliary legs of an $N$-site operator through the physical ones generates a staggered sign $(-1)^{(k-1)p_k}$ on site $k$, with $p_k$ the parity of the state. Consequently this transformation has to be applied to a complete operator, and does not commute with taking tensor products of single-site operators.
TensorKitTensors.TJOperators.u_min_d_min — Method
u_min_d_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁻d⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_min_d_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_min_u_min — Method
u_min_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁻u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_min_u_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_min_u_plus — Method
u_min_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁻u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_min_u_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_num — Method
u_num([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
nꜛ([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_num onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_plus_d_plus — Method
u_plus_d_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁺d⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_plus_d_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_plus_u_min — Method
u_plus_u_min([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁺u⁻([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_plus_u_min onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.
TensorKitTensors.TJOperators.u_plus_u_plus — Method
u_plus_u_plus([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)
u⁺u⁺([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector}]; slave_fermion::Bool = false)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.
This operator is the projection of HubbardOperators.u_plus_u_plus onto the t-J space, see tj_projector. Use slave_fermion = true to obtain it in the slave-fermion basis, see transform_slave_fermion.