Sign in
← Atlas
Exact & formalOperatorsSpin Hamiltonians

Heisenberg XXZ spin-chain operator

The anisotropic Heisenberg (XXZ) spin-chain Hamiltonian: exchange-coupled spins with tunable easy-axis/easy-plane anisotropy Δ, U(1)-symmetric under total-Sz rotation.

heisenberg modelxxz chainspin hamiltonianbethe ansatzu(1) symmetry

Atlas stars stay in the public catalog. Saving this entry to your workspace starts an unstarred private copy.

The XXZ chain interpolates between the classical Ising model (Δ→∞), the exactly Bethe-ansatz-solvable isotropic Heisenberg point (Δ=1), and the free-fermion XY point (Δ=0), making it the standard testbed for exact integrability techniques in 1D quantum magnetism.

Circuit & simulation
Sz sectors block-diagonal100%
What this takes and returns
TakesNothingWhat joins here

No input port, deliberately. You measure a state with this entry; you do not apply it and pass a register on.

Nothing in the Atlas meets this end.

ReturnsNothingWhat joins here

No output port, deliberately. An observable is measured with, never applied, so there is no register to hand on.

Nothing in the Atlas meets this end.

Not a stage. You measure a state with this; you do not apply it and pass a register on. It has a width and deliberately no ports. See all 60 →

Where the map uses this

This record is an instance of an object the map names, so these are the processes that consume or produce one. None of them is about this record in particular.

Hamiltonian you can query 4 of 33 processes

How it works

The XXZ Heisenberg Hamiltonian on a chain of nn sites is

H=Ji=1n1(XiXi+1+YiYi+1+ΔZiZi+1).H = J\sum_{i=1}^{n-1}\big(X_iX_{i+1} + Y_iY_{i+1} + \Delta\, Z_iZ_{i+1}\big).

Special points. Δ=1\Delta = 1 recovers the isotropic Heisenberg (XXX) model, exactly solvable by Bethe's 1931 ansatz; Δ=0\Delta = 0 gives the XY model, mappable to free fermions via a Jordan–Wigner transformation; Δ|\Delta| \to \infty recovers the classical Ising limit (the XX terms become negligible relative to ZZ).

Symmetry. Writing Stotz=12iZiS^z_{\text{tot}} = \tfrac12\sum_i Z_i, the XX+YY term can be re-expressed with raising/lowering operators Si+Si+1+SiSi+1+S^+_iS^-_{i+1}+S^-_iS^+_{i+1}, which conserve the number of up-spins — a U(1)U(1) symmetry, so [H,Stotz]=0[H, S^z_{\text{tot}}] = 0. This block-diagonalizes HH by total magnetization sector, which is why the model is tractable analytically (Bethe ansatz solves each magnetization sector separately) and why it is a natural target for excitation-number-conserving VQE ansätze.

Physical content. In the gapless regime 1Δ1-1 \le \Delta \le 1, the XXZ chain is a Luttinger liquid with power-law spin correlations; for Δ>1\Delta > 1 the ground state is gapped and Néel (antiferromagnetically) ordered, and for Δ<1\Delta < -1 it is ferromagnetically ordered. The Lieb–Schultz–Mattis theorem constrains this gap structure for half-integer spin chains with translational and U(1)U(1) symmetry — a spin-1/2 chain at generic filling cannot have both a unique gapped ground state and these symmetries simultaneously.

Use as a testbed. Because exact Bethe-ansatz energies are known at every Δ\Delta for finite chains, the XXZ operator is a standard benchmark for VQE and quantum-simulation error analysis: any claimed ground-state energy can be checked against the exact solution rather than only against exact diagonalization of the same finite instance.

Implementation
Native
heisenberg_xxz_operator.py
import numpy as np
from qiskit.quantum_info import SparsePauliOp

def xxz_hamiltonian(n: int, J: float, delta: float) -> SparsePauliOp:
    terms, coeffs = [], []
    for i in range(n - 1):
        for pauli, coeff in (("X", J), ("Y", J), ("Z", J * delta)):
            s = ["I"] * n
            s[i], s[i + 1] = pauli, pauli
            terms.append("".join(reversed(s)))
            coeffs.append(coeff)
    return SparsePauliOp(terms, coeffs)

n = 4
H = xxz_hamiltonian(n, J=1.0, delta=1.0)  # isotropic Heisenberg point
Sz_tot = SparsePauliOp(["".join(reversed(["Z" if k == i else "I" for k in range(n)])) for i in range(n)],
                        [0.5] * n)
commutator = H.to_matrix() @ Sz_tot.to_matrix() - Sz_tot.to_matrix() @ H.to_matrix()
print("max |[H, Sz_tot]| =", np.abs(commutator).max())  # ~0, confirming U(1) symmetry

RESULT = {"max_commutator_norm": float(np.abs(commutator).max()), "conserves_total_sz": bool(np.abs(commutator).max() < 1e-9)}
Quantum vs classical

Classical baseline

Use a classical state-vector or matrix simulation at the same width, precision, and measurement objective.

Quantum claim

The quantum record demonstrates a state or operator behavior; it does not make classical simulation or communication costs disappear.

How to compare

Compare fidelity, samples, gate depth, noise, memory, and the cost of preparing and reading the state.

Declared gaps

Nobody has reviewed this record for gaps yet.

Literature & references
An introduction to integrable techniques for one-dimensional quantum systems2016 · Fabio Franchini

Modern review deriving the XXZ chain's symmetries, Bethe-ansatz solvability, and phase diagram used in this entry.

arxiv.org/abs/1609.02100