Stabilizer Codes

A quantum computer must protect fragile superpositions from noise. It must do so without ever measuring the data directly. The The Shor Code shows that redundancy and clever encoding can correct arbitrary single-qubit errors. But it was built by hand, qubit by qubit, with no general theory behind it. If every new code required this kind of bespoke construction, quantum error correction would never scale. Real hardware codes involve hundreds or thousands of qubits. What was missing was a unifying language. The stabilizer formalism, introduced by Daniel Gottesman in 1997, supplies exactly that language. Instead of specifying a code by listing basis states, we specify it differently. We use a group of Pauli operators — the stabilizer group. Its shared +1 eigenspace is the code. Error detection becomes a group-theoretic computation. Measure the stabilizer generators, read off a syndrome, and infer the error. This single idea unifies the Shor code, the Steane code, the Bacon-Shor code, and eventually the surface code. All are instances of one framework. The payoff is enormous. Stabilizer formalism turns the design of quantum codes into linear algebra over a finite field. It turns decoding into a graph or matching problem. It turns fault-tolerance analysis into statements about operator commutation. It is the mathematical backbone underneath every practical quantum error-correcting code. This includes codes deployed or proposed for real quantum hardware. Examples range from trapped-ion demonstrations to superconducting-qubit surface-code experiments at Google and IBM. This article builds the formalism from the ground up. It covers what a stabilizer group is, and how codespaces and syndromes arise from it. It explains how the CSS construction turns two classical codes into one quantum code. Finally, it shows why the whole machinery is both correct and efficient to reason about on a classical computer, even though it protects genuinely quantum information.

Key takeaways
  • A stabilizer code is defined by an abelian subgroup SS of the Pauli group; the codespace is the joint +1+1 eigenspace of all elements of SS.
  • Errors are detected by measuring stabilizer generators; the pattern of ±1\pm1 outcomes is the syndrome, and it identifies the error coset, not the exact error.
  • An [[n,k,d]][[n,k,d]] stabilizer code uses nn physical qubits, encodes kk logical qubits, has n−kn-k independent stabilizer generators, and has distance dd.
  • The CSS construction builds a stabilizer code from two classical linear codes satisfying a dual-containment condition, giving separate X-type and Z-type stabilizers.
  • Correctness rests on the fact that stabilizers commute with each other and either commute or anticommute with errors, letting syndromes distinguish correctable error classes.
  • The formalism generalizes directly to the The Surface Code and underlies the statement and proof strategy of the The Threshold Theorem.
The core insight

A quantum code can be described entirely by an abelian group of Pauli operators whose common +1+1 eigenspace is the protected subspace, turning error correction into syndrome measurement and classical decoding.

The idea

Recall that the Pauli group on nn qubits, Pn\mathcal{P}_n, is generated by tensor products of I,X,Y,ZI, X, Y, Z (with phases ±1,±i\pm1, \pm i). A stabilizer group SS is an abelian subgroup of Pn\mathcal{P}_n that does not contain −I-I. Because SS is abelian, all its elements can be simultaneously diagonalized, and because −I∉S-I \notin S, the joint +1+1 eigenspace of all elements of SS is a nontrivial subspace of the 2n2^n-dimensional Hilbert space. If SS has n−kn-k independent generators g1,…,gn−kg_1, \dots, g_{n-k}, this joint +1+1 eigenspace has dimension 2k2^k — exactly enough room to encode kk logical qubits into nn physical qubits. This subspace is the codespace CC, defined as

C={∣ψ⟩:gi∣ψ⟩=∣ψ⟩ for all i=1,…,n−k}.C = \{ |\psi\rangle : g_i|\psi\rangle = |\psi\rangle \text{ for all } i = 1,\dots, n-k \}.

The generators g1,…,gn−kg_1, \dots, g_{n-k} are called stabilizer generators. Any code state is, by definition, stabilized (left invariant) by every element of SS — hence the name. The elements of SS are always tensor products of Pauli operators (up to a global sign), because the Pauli group is generated by X,Y,Z,IX, Y, Z, I and their tensor products, and SS inherits this structure as a subgroup. The power of this description is that it replaces "list the 2k2^k basis vectors of a 2n2^n-dimensional subspace" with "list n−kn-k Pauli strings," each specified by nn symbols from {I,X,Y,Z}\{I,X,Y,Z\} plus a sign. This is a polynomial-size classical description of an exponentially large quantum subspace — the first hint that stabilizer codes are efficiently manageable on a classical computer, a theme that reappears throughout the stabilizer simulation theory and in decoding algorithms. Errors are detected because a Pauli error EE either commutes or anticommutes with each stabilizer generator gig_i (any two Pauli strings either commute or anticommute — there is no in-between). If EE anticommutes with gig_i, then measuring gig_i on the corrupted state E∣ψ⟩E|\psi\rangle yields −1-1 instead of +1+1, because

gi(E∣ψ⟩)=−Egi∣ψ⟩=−E∣ψ⟩.g_i (E|\psi\rangle) = -E g_i |\psi\rangle = -E|\psi\rangle.

The vector of measurement outcomes across all generators — the syndrome — is a classical bit string that reveals which generators anticommuted with the error, without revealing anything about the encoded logical state itself. This separation, "learn about the error but nothing about the data," is what makes stabilizer measurement compatible with preserving superposition — it is the same non-demolition idea used in the Shor code's parity checks, now formalized.

How it works

Step 1 — Choose stabilizer generators. Pick n−kn-k independent, commuting Pauli operators g1,…,gn−kg_1,\dots,g_{n-k} on nn qubits, none equal to −I-I, and check they generate an abelian group not containing −I-I. This defines the code's parameters [[n,k,d]][[n,k,d]], where dd (the distance) is the weight of the lightest Pauli operator that commutes with every stabilizer generator but is not itself in SS (up to logical action) — i.e., the smallest undetectable, nontrivial error.

Step 2 — Identify logical operators. The normalizer N(S)N(S) of the stabilizer group consists of all Pauli operators that commute with every element of SS. Since S⊆N(S)S \subseteq N(S) always, the interesting structure lives in the quotient N(S)/SN(S)/S, which has dimension 2k2k (as a symplectic vector space over F2\mathbb{F}_2) — these are the logical Xˉ1,Zˉ1,…,Xˉk,Zˉk\bar X_1,\bar Z_1,\dots,\bar X_k,\bar Z_k operators that act on encoded qubits without leaving the codespace or being detected as errors.

Step 3 — Encode. Prepare kk logical qubits by projecting an initial state onto the codespace: apply each 12(I+gi)\tfrac{1}{2}(I+g_i) projector in sequence (implemented via ancilla-assisted stabilizer measurement or a fixed encoding circuit), or use a canonical encoding circuit derived from the generator matrix.

Step 4 — Syndrome extraction. For each generator gig_i, use an ancilla qubit prepared in ∣0⟩|0\rangle, apply controlled-gig_i (decomposed into controlled-Pauli gates matching gig_i's tensor factors), then measure the ancilla in the computational basis. The outcome is 00 if the eigenvalue was +1+1, and 11 if it was −1-1. Collecting all n−kn-k outcomes gives the syndrome vector s∈{0,1}n−ks \in \{0,1\}^{n-k}.

Step 5 — Decode and correct. A classical decoder maps the syndrome ss to a candidate Pauli error E′E' consistent with ss. Since decoding cannot always recover the exact error, correctness only requires E′E' and the true error EE to differ by an element of SS (a "stabilizer element" acts trivially on code states) or, in the more subtle case, to induce the same logical action.

Step 6 — Apply recovery. Apply E′†E'^{\dagger} (equal to E′E' for Hermitian Pauli operators up to phase) to reverse the inferred error. If E′E−1∈SE' E^{-1} \in S, the state is exactly restored to the original codeword; if E′E−1E'E^{-1} is a nontrivial logical operator, correction fails silently — the syndrome could not distinguish this case, which is precisely why the code's distance dd matters. ``` STABILIZER-ERROR-CORRECTION(state, generators g[1..m], decoder D) // m = n - k, number of independent stabilizer generators syndrome := array of length m for i in 1..m: ancilla := |0> apply CONTROLLED-g[i] with control = ancilla, target = state qubits syndrome[i] := MEASURE(ancilla) // 0 for +1 eigenvalue, 1 for -1 if all(syndrome[i] == 0): return state // no detected error E_hat := D(syndrome) // classical decoder: syndrome -> Pauli guess apply E_hat to state // recovery operation return state ``` The decoder DD is a purely classical function: it takes a bit string in {0,1}n−k\{0,1\}^{n-k} and returns a Pauli operator (often represented as a length-2n2n binary vector over F2\mathbb{F}_2, via the symplectic representation X→(1,0)X \to (1,0), Z→(0,1)Z \to (0,1), Y→(1,1)Y \to (1,1)). Designing DD efficiently — especially for codes like the surface code with thousands of qubits — is itself a rich algorithmic problem (minimum-weight perfect matching, belief propagation, neural decoders), but it is entirely classical and independent of the quantum hardware.

The CSS construction

The Calderbank–Shor–Steane (CSS) construction builds a stabilizer code directly from two classical linear codes, making the abstract machinery concrete and decodable. Take two classical linear codes C1⊆F2nC_1 \subseteq \mathbb{F}_2^n (parameters [n,k1][n,k_1]) and C2⊆F2nC_2 \subseteq \mathbb{F}_2^n (parameters [n,k2][n,k_2]) satisfying the dual-containment condition:

C2⊥⊆C1.C_2^{\perp} \subseteq C_1.

Define stabilizer generators of two types:

  • For each row hh of a parity-check matrix of C1C_1, an X-type stabilizer ∏j:hj=1Xj\prod_{j: h_j=1} X_j.
  • For each row h′h' of a parity-check matrix of C2C_2, a Z-type stabilizer ∏j:hj′=1Zj\prod_{j: h'_j=1} Z_j.

The dual-containment condition C2⊥⊆C1C_2^\perp \subseteq C_1 ensures every X-type generator commutes with every Z-type generator, because two Pauli strings built purely from XX's and purely from ZZ's commute exactly when their supports overlap in an even number of positions — which is precisely the orthogonality condition encoded by C2⊥⊆C1C_2^\perp \subseteq C_1. This is why CSS codes are so convenient: X errors and Z errors decouple, and you can run two independent classical decoders, one for bit-flip-type syndromes (from Z-checks) and one for phase-flip-type syndromes (from X-checks). The resulting code encodes k=k1+k2−nk = k_1 + k_2 - n logical qubits (when both containments are proper and independent), and the Shor code, the Steane code, and the surface code are all CSS codes — the surface code in particular arises by taking C1,C2C_1, C_2 to be based on the boundary maps of a 2D lattice, foreshadowing The Surface Code.

Figure
Stabilizer measurement circuit for one generator, and the CSS block structure
A. Syndrome extraction circuit for g = X⊗Z⊗X q1 q2 q3 anc |0⟩ X Z X M → s ∈ {0,1} B. CSS code block structure n physical qubits (shared support for X-type and Z-type checks) X-checks from H(C1): detect Z errors Z-checks from H(C2): detect X errors

Complexity & correctness

Classical description size. A stabilizer code on nn qubits with n−kn-k generators is described by an (n−k)×n(n-k)\times n binary matrix in each of the XX- and ZZ-symplectic components — that is, O(n(n−k))=O(n2)O(n(n-k)) = O(n^2) bits total, versus the O(2n)O(2^n) amplitudes needed to write a generic kk-qubit-encoded state naively. This exponential compression is what makes classical simulation, verification, and decoder design for stabilizer codes tractable, and it underlies the Gottesman-Knill Theorem that stabilizer circuits are efficiently classically simulable.

Syndrome extraction cost. Each of the n−kn-k generator measurements requires one ancilla and O(wi)O(w_i) controlled-Pauli gates, where wiw_i is the weight (number of non-identity tensor factors) of gig_i. For sparse, geometrically local codes such as the surface code, each wi=O(1)w_i = O(1), so the total circuit depth and gate count per round of error correction is O(n)O(n), not O(n2)O(n^2) — crucial for scalability.

Decoding cost. Decoding — mapping a syndrome to a correction — is, in the worst case over arbitrary stabilizer codes, related to NP-hard problems (closely tied to maximum-likelihood decoding of classical codes). But for structured codes like CSS codes with geometric locality, efficient polynomial-time decoders exist: for the surface code, minimum-weight perfect matching runs in O(n3)O(n^{3}) or better with modern implementations, and belief-propagation-style decoders run in near-linear time per round.

Correctness argument. The core correctness claim is: a stabilizer code corrects an error set E\mathcal{E} if and only if for every pair E1,E2∈EE_1, E_2 \in \mathcal{E}, either E1†E2∈SE_1^\dagger E_2 \in S or E1†E2∉N(S)E_1^\dagger E_2 \notin N(S). This is the quantum error-correction analogue of the classical Knill–Laflamme conditions, specialized to Pauli errors, and it is exactly checkable using group theory:

  • If E1†E2∈SE_1^\dagger E_2 \in S, the two errors act identically on the codespace, so correcting the syndrome for E1E_1 automatically fixes E2E_2 as well (they induce the same syndrome and the same residual action).
  • If E1†E2∉N(S)E_1^\dagger E_2 \notin N(S), the errors anticommute with some generator, hence produce different syndromes, so the decoder can in principle distinguish them.
  • The dangerous case is E1†E2∈N(S)∖SE_1^\dagger E_2 \in N(S) \setminus S: this is a nontrivial logical operator in disguise. If the decoder mistakes E2E_2 for E1E_1, the "correction" E1†E_1^\dagger applied after the true error E2E_2 leaves behind E1†E2E_1^\dagger E_2 acting on the codespace — an undetected logical error.

This is precisely why the distance dd of the code — the minimum weight of any operator in N(S)∖SN(S)\setminus S — controls performance: a stabilizer code with distance dd corrects all Pauli errors of weight up to ⌊(d−1)/2⌋\lfloor (d-1)/2 \rfloor, because any two such "correctable" errors have a product of weight less than dd, ruling out E1†E2E_1^\dagger E_2 being a nontrivial (weight ≥d\ge d) logical operator. This mirrors the classical minimum-distance decoding guarantee for linear codes, transplanted into the Pauli-operator setting.

Tradeoffs. Higher distance generally requires more physical qubits per logical qubit (worse "encoding rate" k/nk/n), and low-weight, geometrically local stabilizer generators (needed for hardware feasibility) constrain which codes are practical — this tension is exactly what drives the design of codes like the surface code, which sacrifices rate for extremely local, easy-to-measure generators.

Worked example

Consider a small illustrative stabilizer code with n=5n=5 qubits, k=1k=1 logical qubit, distance d=3d=3 — a compressed cousin of the well-known 5-qubit perfect code, presented here with explicit generators to trace syndrome decoding by hand. Take the four stabilizer generators (a standard choice for the [[5,1,3]][[5,1,3]] code):

GeneratorQ1Q2Q3Q4Q5
g1g_1XZZXI
g2g_2IXZZX
g3g_3XIXZZ
g4g_4ZXIXZ

These four generators commute pairwise (verifiable by checking that overlapping non-identity, non-matching Pauli pairs occur an even number of times per pair of rows) and generate a 1616-element abelian group not containing −I-I, giving a 25/24=22^5/2^4 = 2-dimensional codespace — one logical qubit.

Trace: a single X error on qubit 3. Suppose the true error is E=I⊗I⊗X⊗I⊗IE = I \otimes I \otimes X \otimes I \otimes I (an XX flip on qubit 3). We compute the syndrome by checking commutation of EE with each generator. Recall: XX commutes with I,XI,X and anticommutes with Z,YZ,Y on the same qubit; the total commutation sign is the product of per-qubit signs.

GeneratorQubit-3 entryCommutes with X on Q3?Syndrome bit
g1g_1Zanticommute1
g2g_2Zanticommute1
g3g_3Xcommute0
g4g_4Icommute0

The syndrome is s=(1,1,0,0)s = (1,1,0,0).

Decoding. The decoder precomputes, for every weight-1 Pauli error on every qubit, the syndrome it produces (a 1515-row lookup table: 5 qubits × 3 Pauli types). Only the error "XX on qubit 3" produces exactly (1,1,0,0)(1,1,0,0) among all weight-1 errors (this uniqueness is guaranteed by the code's distance d=3d=3, which lets it correct all weight-1 errors uniquely). The decoder outputs E′=X3E' = X_3.

Recovery. Apply X3X_3 again (since X2=IX^2 = I). The composite operation on qubit 3 is X3⋅X3=IX_3 \cdot X_3 = I, exactly undoing the error. Since E′†E=X3X3=I∈SE'^\dagger E = X_3 X_3 = I \in S trivially, the state is exactly restored — no logical error occurred.

Trace: a two-qubit error that fools the naive decoder. Now suppose the true error is E2=X3Z5E_2 = X_3 Z_5 (weight 2). Because d=3d=3, correction of arbitrary weight-1 errors is guaranteed, but this particular weight-2 error happens to produce the same syndrome as some weight-1 error, say X3X_3 alone contributes (1,1,0,0)(1,1,0,0) from the X3X_3 part, and one must also fold in the effect of Z5Z_5: checking Z5Z_5 against each generator (Z commutes with I,Z and anticommutes with X,Y) gives contributions from g1g_1 (I on Q5, commute → 0), g2g_2 (X on Q5, anticommute → 1), g3g_3 (Z on Q5, commute → 0), g4g_4 (Z on Q5, commute → 0). Combining (XOR) with the X3X_3 syndrome bits gives s=(1,1⊕1,0,0)=(1,0,0,0)s = (1, 1\oplus1, 0,0) = (1,0,0,0). The decoder's lookup table for (1,0,0,0)(1,0,0,0) returns whichever single-qubit error naturally produces that syndrome (say it is Z1Z_1, by construction of this code's syndrome table). The decoder outputs E′=Z1E' = Z_1, applying Z1Z_1 as the "correction." The net residual operator is

E′†E2=Z1⋅X3Z5,E'^\dagger E_2 = Z_1 \cdot X_3 Z_5,

a weight-3 operator. If this residual happens to lie in N(S)∖SN(S)\setminus S, it acts as a nontrivial logical operator on the encoded qubit — a silent logical error, undetectable by any further syndrome measurement, because it commutes with all generators by construction of N(S)N(S). This is exactly the boundary case the distance bound describes: two-qubit errors are not guaranteed to be correctable by a d=3d=3 code, and this trace shows concretely how failure looks — not a crash, but a confidently wrong correction.

Common pitfalls & traps

PitfallWhy it happensFix
Assuming syndrome identifies the exact errorMany distinct errors can share a syndrome; decoding only picks a representativeOnly require decoder output to match true error up to a stabilizer element, not exactly
Forgetting the −I∉S-I \notin S checkA generator set that inadvertently multiplies to −I-I gives an empty codespaceExplicitly verify generator products never yield −I-I before declaring a valid code
Confusing normalizer N(S)N(S) with stabilizer SSLogical operators lie in N(S)∖SN(S)\setminus S, easy to conflate with "detectable errors"Keep the quotient group N(S)/SN(S)/S explicit; it is where logical qubits "live"
Ignoring distance when bounding correctable errorsCodes can look like they correct more just because a particular test case workedAlways check the formal bound ⌊(d−1)/2⌋\lfloor (d-1)/2 \rfloor, not anecdotal test cases
Treating CSS X/Z decoupling as always exactTrue only when C2⊥⊆C1C_2^\perp \subseteq C_1 holds; violated constructions silently break commutativityExplicitly verify dual-containment before assuming independent X/Z decoding is valid
Measuring generators in the wrong order and assuming independenceSequential syndrome extraction can introduce correlated ancilla errors in real circuitsDesign fault-tolerant extraction circuits (flag qubits, repeated rounds) rather than naive sequential measurement

Pioneers & history

Origins · 1 minDaniel Gottesman and how this was discovered
DG
Daniel Gottesman
born 1970 · Perimeter Institute, developer of the stabilizer formalism

Gottesman formalized the stabilizer framework in his 1997 Caltech PhD thesis, unifying earlier ad hoc quantum codes (including Shor's and Steane's) under group-theoretic language and enabling systematic fault-tolerance analysis.

History
1995
— Peter Shor constructs the first quantum error-correcting code, encoding one qubit into nine.
1996
— Andrew Steane and, independently, Calderbank and Shor develop the CSS construction linking classical linear codes to quantum codes.
1997
— Daniel Gottesman introduces the stabilizer formalism in his PhD thesis, unifying known codes and enabling systematic fault-tolerant gate design.
1998
— Gottesman and Knill show stabilizer circuits (Clifford circuits with Pauli measurements) are efficiently classically simulable.
2001
–present — Stabilizer formalism becomes the foundation for topological codes, including the toric and surface codes, and for large-scale fault-tolerance thresholds.

Where this matters

Every major quantum-hardware error-correction demonstration — Google's surface-code experiments, IBM's heavy-hex code implementations, trapped-ion and neutral-atom logical-qubit demonstrations — is built directly on stabilizer formalism. The surface code, the leading candidate for near-term fault-tolerant quantum computing, is a CSS stabilizer code whose generators are low-weight plaquette and vertex operators arranged on a 2D lattice, making syndrome extraction geometrically local and hardware-friendly. Classical decoding algorithms for these codes — minimum-weight perfect matching, belief propagation, and increasingly machine-learning-based decoders — are active engineering targets in quantum-computing companies, because decoder speed directly limits how fast logical clock cycles can run. The Gottesman-Knill Theorem, a direct consequence of the stabilizer formalism, also underlies classical simulators used to validate and debug quantum error-correction hardware before running on real qubits, and stabilizer measurements are the operational core of every fault-tolerant quantum computing architecture proposed to date.

Ask the tutor: How does the CSS construction's dual-containment condition generalize to build the surface code from a 2D lattice's homology?

What is the difference between a stabilizer generator and a general element of the stabilizer group?

The stabilizer group SS can have up to 2n−k−12^{n-k}-1 nontrivial elements, but it is generated by only n−kn-k independent elements g1,…,gn−kg_1,\dots,g_{n-k}, analogous to a basis for a vector space (though SS is a group under multiplication, not a vector space). Every element of SS is some product of a subset of the generators. Practically, only the generators need to be measured during error correction, since any product of generators is automatically satisfied (+1+1 eigenvalue) once each individual generator's eigenvalue is confirmed +1+1. This is why syndrome extraction circuits measure only n−kn-k operators rather than exponentially many.

How does the stabilizer formalism relate to classical linear codes?

The CSS construction makes this relationship explicit: two classical linear codes satisfying a dual-containment condition combine to define a quantum stabilizer code, with X-type stabilizers built from one code's parity-check matrix and Z-type stabilizers from the other's. More generally, every stabilizer code corresponds to a self-orthogonal (under the symplectic inner product) classical binary or F4\mathbb{F}_4 code, via the symplectic representation of Pauli operators as binary vectors. This lets decades of classical coding theory — Hamming codes, Reed-Muller codes, LDPC codes — be repurposed to build quantum codes with known, provable distance and rate properties.

Why can't a decoder always identify the exact error that occurred?

Many distinct Pauli errors produce identical syndromes, because the syndrome only records commutation patterns with n−kn-k generators, while there are exponentially many possible Pauli errors. Two errors E1,E2E_1, E_2 with the same syndrome satisfy E1†E2∈N(S)E_1^\dagger E_2 \in N(S) (they commute with all generators). If E1†E2∈SE_1^\dagger E_2 \in S, guessing either one gives an equally correct outcome. The decoder's job is only to find some representative consistent with the observed syndrome; correctness requires that the representative differ from the true error by a stabilizer element, not that it match exactly.

Why do CSS codes decouple X and Z error correction?

In a CSS code, X-type stabilizers are built solely from tensor products of XX and II, and Z-type stabilizers solely from ZZ and II. Measuring an X-type stabilizer detects only Z-type errors (since ZZ anticommutes with XX but commutes with XX trivially in matching positions), and symmetrically Z-type stabilizers detect only X-type errors. This means the syndrome from X-checks can be decoded using a classical decoder for C1C_1, and the syndrome from Z-checks decoded independently using a classical decoder for C2C_2, reducing a quantum decoding problem to two separate, well-understood classical decoding problems.

How does the stabilizer formalism scale to codes like the surface code?

The surface code is a CSS stabilizer code where qubits sit on the edges of a 2D lattice, and stabilizer generators are low-weight "plaquette" (Z-type) and "vertex" (X-type) operators, each touching only 4 neighboring qubits. This geometric locality means every generator measurement involves a constant number of two-qubit gates regardless of total code size, so syndrome extraction circuits scale linearly in the number of qubits. The same abelian-group machinery from small stabilizer codes — commuting generators, syndromes, normalizer-defined logical operators — applies unchanged; only the geometry of the generators changes, which is why the stabilizer formalism is the right lens for understanding the The Surface Code.

What is the connection between stabilizer codes and the threshold theorem?

The threshold theorem states that if the physical error rate per gate is below some threshold value, increasing code distance (and thus qubit count) can drive the logical error rate arbitrarily close to zero. This claim is proven using stabilizer-code machinery: the probability that an error of weight ≥⌈d/2⌉\geq \lceil d/2 \rceil occurs (the failure condition derived above) decreases as code distance grows, provided physical errors are sufficiently rare and independent. Concatenating or scaling up stabilizer codes (as in the surface code) while keeping physical error rates fixed below threshold is the mechanism the The Threshold Theorem formalizes.

Can every quantum error-correcting code be described as a stabilizer code?

No. Stabilizer codes are an important and highly structured subclass, but not all quantum codes fit this mold — notably, some non-additive codes exist that are not stabilizer codes yet still satisfy the Knill-Laflamme quantum error-correction conditions, sometimes with better parameters for small nn. However, essentially all codes used in practical, scalable fault-tolerant architectures today (surface codes, color codes, most LDPC-style quantum codes) are stabilizer codes, because the group structure makes both encoding circuits and decoding algorithms tractable at scale.

Before this

Where this leads