Spin operators

Conventions

Basis ordering

For Trivial symmetry, the local spin-$s$ space has dimension $2s+1$ and states are ordered from highest to lowest weight:

\[m = s,\; s-1,\; \ldots,\; -s \quad \text{(row/column 1 = highest weight)}\]

Symmetry sectors

SymmetryPhysical meaningSector labelSingle-site block structure
Trivialnonefull $(2s{+}1)\times(2s{+}1)$ matrix
U1Irreprotation around z-axischarge $m \in \{-s,\ldots,+s\}$$S^z$ diagonal; $S^x$, $S^y$ not individually representable
Z2Irrepspin-flip along x-axissee note below$S^x$ block-diagonal; $S^z$ not individually representable
SU2Irrepfull SU(2) rotationspin $s$only scalars and $\mathbf{S}_1{\cdot}\mathbf{S}_2$ representable
basis conventions

The $\mathbf{Z}_2$ symmetry implemented here is generated by $e^{i\pi S^x}$, not by $e^{i\pi S^z}$. The two $\mathbf{Z}_2$ sectors correspond to the eigenstates of $S^x$:

  • sector 0: $|{+x}\rangle$ (eigenvalue $+\tfrac{1}{2}$)
  • sector 1: $|{-x}\rangle$ (eigenvalue $-\tfrac{1}{2}$)

This means $S^x$ is diagonal, while $S^z$ is not a representable single-site operator under this symmetry.

If the conventional z-basis ($|\!\uparrow\rangle$, $|\!\downarrow\rangle$) is needed, you should swap the occurances of X and Z. This effectively rotates the flip symmetry to be aligned with the other axis. The basis transformation that achieves this consist of the Hadamard matrix.

Operator overview

FunctionUnicode aliasPauli aliasSitesSupported symmetries
spin_spaceTrivial, Z2Irrep, U1Irrep, SU2Irrep
casimir
S_xσˣ1Trivial, Z2Irrep
S_yσʸ1Trivial
S_zSᶻσᶻ1Trivial, U1Irrep
S_plusS⁺σ⁺1Trivial
S_minS⁻σ⁻1Trivial
S_x_S_xSˣSˣ2Trivial, Z2Irrep
S_y_S_ySʸSʸ2Trivial, Z2Irrep
S_z_S_zSᶻSᶻ2Trivial, U1Irrep, Z2Irrep
S_plus_S_minS⁺S⁻2Trivial, U1Irrep
S_min_S_plusS⁻S⁺2Trivial, U1Irrep
S_exchangeSS2Trivial, U1Irrep, Z2Irrep, SU2Irrep

API

TensorKitTensors.SpinOperators.S_exchangeMethod
S_exchange([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
SS([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The Heisenberg exchange operator

\[\mathbf{S}_1 \cdot \mathbf{S}_2 = S^x_1 S^x_2 + S^y_1 S^y_2 + S^z_1 S^z_2 = \tfrac{1}{2}(S^+_1 S^-_2 + S^-_1 S^+_2) + S^z_1 S^z_2.\]

For SU2Irrep the operator is diagonal in the total-spin basis with eigenvalue $\tfrac{1}{2}[C_2(j_{\text{tot}}) - 2C_2(s)]$, where $C_2(j) = j(j+1)$.

Compatible symmetries: Trivial, U1Irrep, Z2Irrep, SU2Irrep.

source
TensorKitTensors.SpinOperators.S_minMethod
S_min([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁻([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The spin lowering operator $S^- = S^x - iS^y$, with matrix elements $\langle m{-}1 \vert S^- \vert m \rangle = \sqrt{s(s+1) - m(m-1)}$.

Compatible symmetries: Trivial.

See also σ⁻ (Pauli version $\sigma^- = 2S^-$).

source
TensorKitTensors.SpinOperators.S_min_S_plusMethod
S_min_S_plus([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁻S⁺([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The two-site operator $S^- \otimes S^+$.

Compatible symmetries: Trivial, U1Irrep.

source
TensorKitTensors.SpinOperators.S_plusMethod
S_plus([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁺([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The spin raising operator $S^+ = S^x + iS^y$, with matrix elements $\langle m{+}1 \vert S^+ \vert m \rangle = \sqrt{s(s+1) - m(m+1)}$.

Compatible symmetries: Trivial.

See also σ⁺ (Pauli version $\sigma^+ = 2S^+$).

source
TensorKitTensors.SpinOperators.S_plus_S_minMethod
S_plus_S_min([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
S⁺S⁻([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The two-site operator $S^+ \otimes S^-$.

Compatible symmetries: Trivial, U1Irrep.

source
TensorKitTensors.SpinOperators.S_xMethod
S_x([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sˣ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The spin-x operator $S^x = \tfrac{1}{2}(S^+ + S^-)$.

Compatible symmetries: Trivial, Z2Irrep.

See also σˣ (Pauli version $\sigma^x = 2S^x$).

source
TensorKitTensors.SpinOperators.S_x_S_xMethod
S_x_S_x([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
SˣSˣ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The two-site operator $S^x \otimes S^x$.

Compatible symmetries: Trivial, Z2Irrep.

source
TensorKitTensors.SpinOperators.S_yMethod
S_y([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sʸ([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The spin-y operator $S^y = \tfrac{1}{2i}(S^+ - S^-)$.

Compatible symmetries: Trivial.

See also σʸ (Pauli version $\sigma^y = 2S^y$).

source
TensorKitTensors.SpinOperators.S_y_S_yMethod
S_y_S_y([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)
SʸSʸ([eltype::Type{<:Complex}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The two-site operator $S^y \otimes S^y$.

Compatible symmetries: Trivial, Z2Irrep.

source
TensorKitTensors.SpinOperators.S_zMethod
S_z([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
Sᶻ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The spin-z operator, diagonal in the standard basis with eigenvalues $m \in \{s,\, s{-}1,\, \ldots,\, -s\}$.

Compatible symmetries: Trivial, U1Irrep.

See also σᶻ (Pauli version $\sigma^z = 2S^z$).

source
TensorKitTensors.SpinOperators.S_z_S_zMethod
S_z_S_z([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)
SᶻSᶻ([eltype::Type{<:Number}], [symmetry::Type{<:Sector}]; spin=1 // 2)

The two-site operator $S^z \otimes S^z$.

Compatible symmetries: Trivial, U1Irrep, Z2Irrep.

source
TensorKitTensors.SpinOperators.basis_transformMethod
basis_transform(symmetry::Type{<:Sector}; spin = 1 // 2)

Return the unitary basis transformation that maps the standard spin basis $\{|s⟩, |s-1⟩, …, |-s⟩\}$ (the eigenbasis of $S^z$ in descending order of $m$, as used by the Trivial operators) onto the basis of spin_space(symmetry; spin), as a TensorMap on spin_space(Trivial; spin) to desymmetrize(spin_space(symmetry; spin)). See also symmetrize.

SymmetryTransformation
Trivialidentity
Z2IrrepHadamard matrix $\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}/\sqrt{2}$
U1Irreppermutation to the order of sectors(spin_space(U1Irrep; spin))
SU2Irrepidentity

For Z2Irrep (spin-1/2 only), the symmetry is the $ℤ₂$ spin-flip generated by $2S^x$, and the Hadamard matrix maps onto its eigenbasis $|±⟩ = (|↑⟩ ± |↓⟩)/√2$, where Z2Irrep(0) labels the flip-symmetric state $|+⟩$.

For U1Irrep, the $S^z$ eigenvalue $m$ is used as the $U(1)$ charge, and the transformation is the permutation from descending-$m$ order to TensorKit's charge order ($0, 1, -1, 2, …$ for integer spin, $1/2, -1/2, 3/2, …$ for half-integer spin).

For SU2Irrep, TensorKit's basis convention within an irrep is descending $m$, which coincides with the standard spin basis, such that the transformation is the identity.

source
TensorKitTensors.SpinOperators.spin_spaceFunction
spin_space([symmetry::Type{<:Sector}]; spin=1 // 2)

Return the local Hilbert space for a spin-spin site with the given symmetry.

SymmetrySpace
TrivialComplexSpace(2s+1)
Z2IrrepZ2Space(0 => 1, 1 => 1) (spin-1/2 only)
U1IrrepU1Space(m => 1 for m in -s:s)
SU2IrrepSU2Space(s => 1)
source