Clifford generators conjugate Paulis to Paulis (GK-2: the Gottesman–Knill mechanism) #
Category: 1-Mathlib (CSD-free).
Glossary: https://glossary.constraintsurfacedynamics.com/gottesman-knill/
Plain-language, CSD-role and formal statements of the Gottesman–Knill theorem, with this
module as its Lean anchor. Kept symmetric by scripts/check-glossary.sh.
The three Clifford generator families as concrete coordinate operators — cnotGate j k
(controlled-NOT), sGate j (the phase gate), hGate j (the single-qubit Hadamard) — and the
theorem family that IS the Gottesman–Knill mechanism: conjugation by each generator maps
every Pauli operator to a phase times a Pauli operator, with the label map explicit and
𝔽₂-linear (plan specs/gottesman-knill-plan.md, brick GK-2):
- ★
cnotGate_conj_pauliOp—CNOT_{jk} · X^a Z^b · CNOT_{jk} = X^{σa} Z^{σᵀb}withσ = cnotFlip j k(add bitjinto bitk),σᵀ = cnotFlip k j; no phase. - ★
sGate_conj_pauliOp—S_j · X^a Z^b · S_j† = i^{a_j} · X^a Z^{b + a_j e_j}. - ★
hGate_conj_pauliOp—H_j · X^a Z^b · H_j = (−1)^{a_j b_j} · X^{a[j↦b_j]} Z^{b[j↦a_j]}(swapa_j ↔ b_j).
Why this is Gottesman–Knill. In the Heisenberg picture a Pauli is 2n bits and a phase,
and each generator updates the bits by the explicit 𝔽₂-linear maps above — so a stabiliser
description of a state (n commuting Paulis) is carried through any circuit of these gates by
linear algebra over 𝔽₂. That closure is proved here in full. Honest scope: the
"classically simulable in polynomial time" reading is a complexity claim about that update
rule; the corpus has no computation model and does not state it — no circuit datatype, no
gate count, no measurement-update rule (the stabiliser-measurement layer is GK-3 in the plan,
gated). hGate j is the single-qubit sibling of Hadamard.lean's all-qubits H^⊗n, not a
replacement for it.
Update helpers on the bitstring group #
σ_{jk}: add bit j into bit k. Self-inverse for j ≠ k; the label map of CNOT.
Equations
- QuantumInfo.cnotFlip j k z = Function.update z k (z k + z j)
Instances For
The CNOT gate #
The controlled-NOT CNOT_{jk} (control j, target k): the permutation operator of
cnotFlip j k.
Equations
- QuantumInfo.cnotGate j k ψ = (WithLp.equiv 2 ((Fin n → Fin 2) → ℂ)).symm fun (z : Fin n → Fin 2) => ψ.ofLp (QuantumInfo.cnotFlip j k z)
Instances For
The phase gate #
The Hadamard gate (single qubit) #
The single-qubit Hadamard H_j:
(H_j ψ)(z) = (1/√2) ∑_v (−1)^{z_j·v} ψ(z[j ↦ v]).
Equations
- QuantumInfo.hGate j ψ = (WithLp.equiv 2 ((Fin n → Fin 2) → ℂ)).symm fun (z : Fin n → Fin 2) => (↑√2)⁻¹ * ∑ v : Fin 2, QuantumInfo.signChar (z j * v) * ψ.ofLp (Function.update z j v)
Instances For
★ Hadamard conjugation: H_j · X^a Z^b · H_j = (−1)^{a_j b_j} · X^{a[j↦b_j]} Z^{b[j↦a_j]} — the X and Z labels swap at bit j, with sign (−1)^{a_j b_j} (this is
HXH = Z, HZH = X, HYH = −Y).