Quantum Mechanics

Spin-½

Two states, ℏ/2 each — and a 720° rotation to get home

Every electron, proton, neutron and quark carries intrinsic angular momentum ℏ/2 with only two basis states |↑⟩, |↓⟩. SU(2) double-covers SO(3) — spinors flip sign under 360° and only return after 720°.

  • Carrierse⁻, e⁺, p, n, neutrinos, all quarks
  • Magnitude|S| = √(3)/2 ℏ ≈ 0.866 ℏ
  • ProjectionsS_z = ±ℏ/2 — only two outcomes
  • OperatorsS_i = (ℏ/2)σ_i (Pauli matrices)
  • Rotation period720° (SU(2) double-covers SO(3))
  • Confirmed byStern-Gerlach (1922); neutron interferometry (Rauch 1975)

Interactive visualization

Press play, or step through manually. The visualization is yours to drive — try it before reading on.

Open visualization fullscreen ↗

Watch the 60-second explainer

A condensed visual walkthrough — narrated, captioned, under a minute.

A two-state quantum system

Spin-½ is the simplest non-trivial quantum system: a two-dimensional Hilbert space. Choose a quantization axis (call it z) and label its eigenstates |↑⟩ and |↓⟩ with S_z eigenvalues +ℏ/2 and −ℏ/2 respectively. Any pure state is a superposition:

|ψ⟩ = cos(θ/2) |↑⟩ + e^(iφ) sin(θ/2) |↓⟩

The angles (θ, φ) parametrize the Bloch sphere: the unit-sphere direction (sin θ cos φ, sin θ sin φ, cos θ) is exactly the expectation value of the spin direction ⟨S⟩/|⟨S⟩|. North pole = |↑⟩, south pole = |↓⟩, equator = (|↑⟩ ± |↓⟩)/√2 and similar superpositions.

Pauli matrices

The three spin operators on this two-dimensional space are S_i = (ℏ/2)σ_i with the Pauli matrices

σ_x = (0 1 / 1 0),  σ_y = (0 −i / i 0),  σ_z = (1 0 / 0 −1)

Their algebra encodes everything: [σ_i, σ_j] = 2iε_ijk σ_k (closure under commutator, generating SU(2)) and {σ_i, σ_j} = 2δ_ij I (anticommutation, related to Dirac's gamma algebra). Eigenvalues of any σ_i are ±1, so eigenvalues of S_i are ±ℏ/2 — the two-spot Stern-Gerlach result for any axis.

Why 720° to come home

A rotation by angle θ around axis n̂ acts on a spin-½ state by

U(θ, n̂) = exp(−iθ n̂·σ / 2) = cos(θ/2) I − i sin(θ/2) n̂·σ

Note the θ/2 — half the rotation angle. So at θ = 2π (one full turn), U = cos(π) I − i sin(π) n̂·σ = −I. The state |ψ⟩ becomes −|ψ⟩. The overall phase is unobservable in isolation but becomes observable in interference.

At θ = 4π (two full turns), U = +I and |ψ⟩ returns to itself. This is the geometric fact that SU(2) — the group of 2×2 unitary matrices with determinant 1 — double-covers SO(3): every spatial rotation corresponds to exactly two SU(2) elements ±U. The minus sign is real.

Worked example — neutron interferometry shows the −1

Rauch & Treimer (1974) and Werner et al. (1975) put a beam of cold neutrons through a Si-crystal interferometer with two paths. One path went through a uniform magnetic field B. A neutron with magnetic moment µ_n precesses through angle θ = γ_n B τ during transit time τ. Adjust B and τ so θ = 2π exactly. The neutron's spinor picks up the factor exp(−iπ σ·n̂) = −1.

  • Neutron magnetic moment: µ_n ≈ −1.913 µ_N where µ_N = eℏ/(2m_p) is the nuclear magneton.
  • Gyromagnetic ratio: γ_n = g_n µ_N / ℏ ≈ −1.832 × 10⁸ s⁻¹ T⁻¹.
  • For a 64 mT field over 4 cm at 2 km/s velocity: precession ≈ −1.832 × 10⁸ × 0.064 × (0.04/2000) ≈ −0.234 rad — way too short; real experiments use stronger fields and longer paths to reach 2π.
  • At θ = 2π precisely, interference between the two arms reverses (constructive ↔ destructive); at θ = 4π it restores. This is the −1 of the spinor double-cover, directly observed.

Spin-0, ½, 1, and higher

SpinHilbert dimSO(3) representationStern-Gerlach splitRotation period
0 (scalar)1TrivialNo split360°
½ (spinor)2Fundamental of SU(2)2 spots, ±ℏ/2720°
1 (vector)3Adjoint of SO(3)3 spots, 0, ±ℏ360°
3/24SU(2) higher4 spots, ±ℏ/2, ±3ℏ/2720°
2 (tensor)5SO(3) higher5 spots360°
Photon2 helicitiesEffective ±1(massless, helicity)360°

JavaScript — Pauli matrices, rotations, Bloch vector

// Complex numbers as [real, imag]
const C = (r, i = 0) => [r, i];
const cAdd = (a, b) => [a[0]+b[0], a[1]+b[1]];
const cMul = (a, b) => [a[0]*b[0] - a[1]*b[1], a[0]*b[1] + a[1]*b[0]];
const cScale = (a, s) => [a[0]*s, a[1]*s];

// 2x2 complex matrix utilities
const mat = (a,b,c,d) => [[a,b],[c,d]];
const mulMV = (M, v) => [cAdd(cMul(M[0][0], v[0]), cMul(M[0][1], v[1])), cAdd(cMul(M[1][0], v[0]), cMul(M[1][1], v[1]))];
const mulMM = (A, B) => mat(
  cAdd(cMul(A[0][0], B[0][0]), cMul(A[0][1], B[1][0])),
  cAdd(cMul(A[0][0], B[0][1]), cMul(A[0][1], B[1][1])),
  cAdd(cMul(A[1][0], B[0][0]), cMul(A[1][1], B[1][0])),
  cAdd(cMul(A[1][0], B[0][1]), cMul(A[1][1], B[1][1])),
);

// Pauli matrices
const I = mat(C(1), C(0), C(0), C(1));
const Sx = mat(C(0), C(1), C(1), C(0));
const Sy = mat(C(0), C(0,-1), C(0,1), C(0));
const Sz = mat(C(1), C(0), C(0), C(-1));

// Rotation U(θ, n̂) = cos(θ/2) I − i sin(θ/2) (nx Sx + ny Sy + nz Sz)
function rotU(theta, nx, ny, nz) {
  const c = Math.cos(theta / 2), s = Math.sin(theta / 2);
  const cosPart = mat(C(c),C(0),C(0),C(c));
  const minusI = mat(C(0,-s),C(0),C(0),C(0,-s));   // −i sin(θ/2) I, used as scalar then multiplied
  function scaleM(M, scalar) {
    return mat(cMul(scalar, M[0][0]), cMul(scalar, M[0][1]), cMul(scalar, M[1][0]), cMul(scalar, M[1][1]));
  }
  const nDotSigma = mat(
    cAdd(cMul(C(nz), Sz[0][0]), cAdd(cMul(C(nx), Sx[0][0]), cMul(C(ny), Sy[0][0]))),
    cAdd(cMul(C(nz), Sz[0][1]), cAdd(cMul(C(nx), Sx[0][1]), cMul(C(ny), Sy[0][1]))),
    cAdd(cMul(C(nz), Sz[1][0]), cAdd(cMul(C(nx), Sx[1][0]), cMul(C(ny), Sy[1][0]))),
    cAdd(cMul(C(nz), Sz[1][1]), cAdd(cMul(C(nx), Sx[1][1]), cMul(C(ny), Sy[1][1]))),
  );
  const sinPart = scaleM(nDotSigma, C(0, -s));
  return mat(cAdd(cosPart[0][0], sinPart[0][0]), cAdd(cosPart[0][1], sinPart[0][1]),
             cAdd(cosPart[1][0], sinPart[1][0]), cAdd(cosPart[1][1], sinPart[1][1]));
}

// Apply rotation to |↑⟩ = (1, 0)
const psi_up = [C(1), C(0)];
const after_2pi = mulMV(rotU(2 * Math.PI, 0, 0, 1), psi_up);
console.log('After 360° around z:', after_2pi);    // (-1, 0)  — picked up a minus sign!
const after_4pi = mulMV(rotU(4 * Math.PI, 0, 0, 1), psi_up);
console.log('After 720° around z:', after_4pi);    // (1, 0)  — back to itself

// Bloch vector r_i = ⟨ψ|σ_i|ψ⟩
function bloch(psi) {
  function expVal(M) {
    const Mpsi = mulMV(M, psi);
    // ⟨ψ| Mψ⟩ = ψ₀* Mψ₀ + ψ₁* Mψ₁
    const psiConj = [[psi[0][0], -psi[0][1]], [psi[1][0], -psi[1][1]]];
    return cAdd(cMul(psiConj[0], Mpsi[0]), cMul(psiConj[1], Mpsi[1]))[0]; // real part
  }
  return { x: expVal(Sx), y: expVal(Sy), z: expVal(Sz) };
}
console.log('Bloch vector of |↑⟩:', bloch(psi_up));  // (0, 0, 1)

// Stern-Gerlach probability: P(↑) for state cos(θ/2)|↑⟩ + sin(θ/2)|↓⟩ along z
function probZUp(theta) { return Math.cos(theta/2)**2; }
console.log('θ=0 (pure ↑):', probZUp(0));            // 1.000
console.log('θ=π/2 (equator):', probZUp(Math.PI/2));  // 0.500
console.log('θ=π (pure ↓):', probZUp(Math.PI));        // 0.000

Where spin-½ matters

  • Atomic structure. Pauli exclusion (a corollary of spin-½ statistics) forces electrons into shells — the periodic table follows.
  • Nuclear physics. Proton and neutron spin-½ build nuclear-spin multiplets, NMR, and MRI.
  • Solid state. Spin-orbit coupling, exchange, and magnetism all reduce to coupled spin-½ systems on a lattice.
  • Quantum information. A qubit IS a two-state quantum system — physically realised as electron spin, nuclear spin, polarization, or superconducting two-level systems.
  • Particle physics. Every Standard-Model fermion is spin-½; Dirac equation, Pauli equation, and weak isospin all build on the spin-½ representation.
  • Topology. Anyons in 2D, Majorana fermions, and topological superconductors generalize spin-½ statistics in non-trivial ways.

Common mistakes

  • Picturing an electron as a literally spinning ball. A classical ball would need to rotate faster than light to have ℏ/2 of angular momentum given the electron's small radius bound. Spin is intrinsic, not orbital.
  • Confusing |↑⟩ with a definite spatial direction. |↑⟩ is the +ℏ/2 eigenstate of S_z. A spin pointing in +x is (|↑⟩+|↓⟩)/√2 in the z-basis — the choice of basis is arbitrary.
  • Treating the 360° minus sign as a global phase. Globally yes, but it becomes observable in interference experiments (Rauch 1974).
  • Calling spin "magnetic moment". The magnetic moment µ = g (e/2m) S is proportional to spin but is a derived quantity. Spin exists for neutral particles too (e.g. neutrons, neutrinos).
  • Thinking spin-½ implies a 720° rotation in space. Space is rotated by 360° = 2π; the rotation operator on the spinor accumulates phase that returns only after 720° has been applied to the operator.
  • Forgetting non-commutation. [S_x, S_y] = iℏS_z. You cannot simultaneously assign definite values to S_x and S_z — measuring one disturbs the other.

Frequently asked questions

What exactly does "spin-½" mean?

Spin-½ is the intrinsic angular momentum quantum number s = ½ in units of ℏ. The magnitude of the spin vector is √(s(s+1)) ℏ = √(3)/2 ℏ ≈ 0.866 ℏ. Its projection on any chosen axis can only take m = ±½, giving two eigenvalues of S_z = ±ℏ/2 — so a Stern-Gerlach magnet always splits the beam into exactly two spots. Every fundamental fermion in the Standard Model (electrons, muons, taus, quarks, neutrinos) and most composite particles built from an odd number of fermions (proton, neutron, ³He) is spin-½.

Why does it take 720° to return to the original state?

A spin-½ state under rotation by angle θ around an axis n̂ transforms as U = exp(−iθ n̂·σ/2), where σ is the Pauli matrix vector. At θ = 2π, U = exp(−iπ n̂·σ) = −I (because Pauli matrices squared are I and their odd powers reproduce themselves). So a full 360° rotation multiplies the spinor by −1. A 720° rotation gives U² = I — the original state. This is the geometric statement that SU(2) is the double cover of SO(3): every spatial rotation corresponds to two distinct SU(2) elements that differ by a sign.

Can the sign flip after 360° actually be observed?

Yes. The 1975 Rauch and 1975 Werner neutron-interferometry experiments rotated one arm of a neutron interferometer through a magnetic field that produced a precession of exactly 2π. Interference between the rotated arm and the unrotated arm reversed sign — proof that the wavefunction picked up a minus sign. Subsequent rotations by 4π restored the original interference. The phase flip is geometric (Berry-like) and unambiguously confirms the spinor double-cover.

What are the Pauli matrices?

Three 2×2 Hermitian, traceless, unitary matrices that represent S_x, S_y, S_z as S_i = (ℏ/2)σ_i: σ_x = ((0,1),(1,0)), σ_y = ((0,−i),(i,0)), σ_z = ((1,0),(0,−1)). Anticommutation {σ_i, σ_j} = 2δ_ij I and commutation [σ_i, σ_j] = 2iε_ijk σ_k. Together with the identity they span all 2×2 Hermitian matrices — so any single-qubit observable is a real linear combination, and any single-qubit Hamiltonian H = a·I + b·σ generates rotations through SU(2).

What's a spinor compared to a vector?

A vector transforms under the SO(3) representation of rotations — three components mixed by 3×3 orthogonal matrices, returns after 360°. A spinor transforms under SU(2) — two complex components mixed by 2×2 unitary matrices, returns only after 720°. Vectors describe ordinary directions; spinors describe intrinsic spin states. The Dirac spinor in relativistic quantum mechanics generalizes this to 4 components transforming under SL(2, C), the double cover of the Lorentz group, encoding both spin and antiparticle structure.

How does spin-½ relate to the Bloch sphere?

Every pure spin-½ state can be written |ψ⟩ = cos(θ/2) |↑⟩ + e^(iφ) sin(θ/2) |↓⟩ where (θ, φ) are spherical coordinates. The vector r = (sin θ cos φ, sin θ sin φ, cos θ) on the unit Bloch sphere is the expectation value direction of spin. Two-to-one mapping: antipodal points on the Bloch sphere are orthogonal states (eg |↑⟩ at north pole, |↓⟩ at south pole). The double-cover shows up as: a spatial rotation by θ rotates the Bloch sphere by θ, but the underlying spinor only restores after 2 × 2π = 720° because the Bloch vector is bilinear in the spinor.

Why are spin-½ particles fermions?

The spin-statistics theorem (Pauli 1940 in flat-space relativistic QFT) connects half-integer spin to anti-commuting (fermionic) statistics. Swapping two identical spin-½ particles introduces a minus sign in the wavefunction, leading directly to Pauli exclusion: no two identical fermions in the same state. This is why electrons fill shells in atoms, why quarks fill baryons, why neutron stars are stabilized by degeneracy pressure. Half-integer spin and fermionic statistics are inseparable in relativistic quantum field theory.