In short

The Eastin-Knill theorem (2009) says that for any quantum error-correcting code, the set of gates you can implement transversally — one physical gate per physical qubit, trivially fault-tolerant — forms a discrete group, never the full continuous group of unitary operations. So no code admits a universal transversal gate set. The practical consequence: on the Steane code and every other CSS code that has transversal Cliffords (H, S, CNOT), the T gate is not transversal, and some other fault-tolerant construction is needed to implement it. The standard answer is magic state distillation (Bravyi-Kitaev 2005). Prepare many noisy copies of the magic state |T\rangle = T|+\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle + e^{i\pi/4}|1\rangle), consume 15 of them in a special Clifford-plus-measurement circuit, and get back 1 high-fidelity copy whose error is cubically smaller. Recurse until the fidelity is as good as you need. Injecting a clean |T\rangle into the data via a CNOT, a Z-measurement, and a classically-conditioned S correction implements a logical T on any encoded qubit. The cost is brutal: a cryptographically useful Shor's algorithm on RSA-2048 contains of order 10^{10} T gates, each consuming one distilled magic state, each requiring roughly 20 physical-qubit-rounds in a distillation factory. Distillation factories eat something like half the physical-qubit budget of every fault-tolerant quantum computer ever proposed. Eastin-Knill is the reason for that cost. Magic state distillation is the workaround that makes universal fault-tolerant quantum computing possible at all.

You have just worked through the Steane code and learned a beautiful fact: the logical Hadamard, logical S, and logical CNOT are all transversal — you apply the physical gate once to each of the seven qubits and you are done. No ancilla, no measurement, no correction. Transversal gates are the simplest possible fault-tolerant construction, and Steane's code gives you three of them for free.

But a quantum computer needs more than Cliffords. The Clifford group — generated by H, S, and CNOT — is not universal for quantum computation. Gottesman and Knill proved in 1998 that Clifford circuits can be efficiently simulated on a classical computer. If all you ever do is Clifford operations, your "quantum" computer is secretly classical, and you have no speedup at all.

To get universality you need at least one more gate. The standard choice is the T gate, a \pi/8 rotation about the z-axis: T = \operatorname{diag}(1, e^{i\pi/4}). Clifford + T is universal — any unitary can be approximated to any desired accuracy using only H, S, CNOT, and T (see Solovay-Kitaev).

So the natural question: is T transversal on Steane's code? Just apply T to each of the seven qubits and hope for the best?

The answer is no, and the proof is short enough to sketch in a paragraph. But the deeper fact, proved by Bryan Eastin and Emanuel Knill in 2009, is much stronger: there is no code at all whose transversal gates form a universal set. On any code, at least one gate in any universal set has to be implemented by some non-transversal — and therefore more expensive — construction. This is the Eastin-Knill theorem, and the standard workaround is the technique we develop in this chapter: magic state distillation.

Recalling transversal gates

A gate U on a logical qubit is transversal on an [[n, 1, d]] code if it can be written as

U_L \;=\; u_1 \otimes u_2 \otimes \cdots \otimes u_n,

where each u_i is a single-qubit gate acting on one physical qubit. The crucial property: because the operation factorises across qubits, an error on one physical qubit cannot propagate to become errors on multiple qubits within a single gate. Transversal gates are "error-local" for free.

For the Steane code, the transversal Clifford gates are:

None of these requires any ancilla or measurement. They are the cheapest fault-tolerant gates you will ever meet.

Transversal Hadamard on the Steane codeSeven horizontal wires representing the seven physical qubits of one Steane block, each with a Hadamard box placed at the same vertical column. A curly brace on the left shows the seven wires together represent one logical qubit. A label on the right reads H_L = H tensor-product to the seventh. An arrow at the bottom shows: any error on one qubit stays on one qubit. Logical Hadamard on Steane: $H_L = H^{\otimes 7}$ one logical qubit $q_1$ $q_2$ $q_3$ $q_4$ $q_5$ $q_6$ $q_7$ H H H H H H H $H_L$ error on one wire ⟶ error stays on one wire
Transversal Hadamard on the Steane code: apply a physical $H$ to every one of the seven qubits. The operation factorises, so an error on any single qubit during the gate affects only that qubit — the code's distance-3 correction handles it. This is the gold-standard fault-tolerant construction. The Eastin-Knill theorem says you cannot get every gate this easily.

Why the T gate cannot be transversal on Steane

Try the obvious thing: define T_L^{\text{try}} = T^{\otimes 7} and ask whether it implements a logical T on the code.

Recall the logical operators on Steane. The logical Z_L is Z^{\otimes 7} (or any equivalent weight-3 representative like Z_1 Z_2 Z_3, up to stabilizers). The logical X_L is X^{\otimes 7}. The transversal Hadamard works because H^{\otimes 7} exchanges X^{\otimes 7} and Z^{\otimes 7} up to stabilizers — exactly what H should do on the logical qubit.

What does T^{\otimes 7} do? The single-qubit T gate satisfies T Z T^\dagger = Z (so Z is preserved) but T X T^\dagger = e^{i\pi/4} S X (so X maps to a non-Pauli operator). Applying T^{\otimes 7} to X^{\otimes 7} gives something like (e^{i\pi/4})^7 (SX)^{\otimes 7}. That is not in the logical Pauli group — it is some intricate combination of S's, X's, and phases that does not correspond to any single logical Clifford, let alone a logical T.

Why T^{\otimes n} fails to be logical T on CSS codes like Steane: logical T should act as the phase diag(1, e^{i\pi/4}) on the logical qubit, but T^{\otimes 7} on a logical |0_L\rangle picks up phases from every physical |1\rangle in every codeword — and the codewords |0_L\rangle and |1_L\rangle are each a superposition of many weight-varying bitstrings, so the phases do not sum to a clean e^{i\pi/4} on the logical qubit. The mismatch is structural, not a computational accident.

So the naive transversal T is wrong. You might hope some other single-qubit gate applied qubit-by-qubit — T^\dagger, or a mix of T and T^\dagger on different qubits — would give the right logical action. For Steane's code, a theorem of Zeng-Cross-Chuang (2007) rules this out: no single-qubit gate, applied transversally, implements a non-Clifford logical operation on the Steane code. The Clifford group is exactly what transversal gates can reach.

Steane is not special here. The same obstruction holds for almost every useful code. That "almost" becomes "every" in the Eastin-Knill theorem.

The Eastin-Knill theorem

Theorem (Eastin-Knill, 2009). For any non-trivial quantum error-correcting code (one that detects at least one error, so distance d \ge 2), the set of unitaries implementable transversally on the code forms a discrete (finite) group, never a continuous group and therefore never the full unitary group U(2^k) on the k logical qubits.

Unpack what this says:

The proof uses a beautiful argument about the code's local symmetry. Roughly: if a continuous family of transversal unitaries existed, it would have an infinitesimal generator — a Hamiltonian — that acts locally on each qubit. But local operators cannot implement non-trivial logical operations on a code of distance d \ge 2 (that is literally what "distance \ge 2" means: no weight-1 operator can change logical information). So the generator vanishes, and the family is trivial.

The Eastin-Knill obstructionTwo columns. Left column shows a green Clifford region containing the transversal gates H, S, CNOT with a caption "discrete, finite." Right column shows a large accent-coloured cloud representing continuous universal gates including the T gate, labelled "cannot be transversal." A bold line between them labelled Eastin-Knill 2009. Below, three bullet points state the theorem. Eastin-Knill: transversal gates cannot be universal Transversal on Steane (a discrete group — the Clifford group) H S CNOT finite set; simulable classically alone (Gottesman-Knill) Universal gate set (requires a continuous family) T $R_z(\theta)$ $R_y(\theta)$ at least one gate must be non-transversal No code admits a transversal universal gate set (Eastin-Knill 2009). Magic state distillation is the standard workaround. Paper: arXiv:0811.4262
The transversal gates of any code form a discrete group — no continuous rotations, no $T$ gate. Since universal quantum computation requires a continuous family (or a discrete gate like $T$ that generates dense rotations together with Cliffords), at least one gate in any universal set is non-transversal. This theorem forced the field to invent magic state distillation.

Why this matters. The Eastin-Knill theorem tells you that the fault-tolerance bottleneck is not a failure of cleverness but a mathematical obstruction. Every attempt to find a code where you can implement all the gates transversally is doomed — the theorem forbids it. The community has spent twenty years inventing ways around this obstruction, and the dominant answer is a technique that looks strange at first: distill magic states.

Magic state distillation — the idea

Instead of trying to make T fault-tolerant directly, build a resource state that, together with Clifford operations alone, lets you implement T.

The resource state is the magic state

|T\rangle \;=\; T|+\rangle \;=\; \tfrac{1}{\sqrt{2}}\bigl(|0\rangle + e^{i\pi/4} |1\rangle\bigr).

This is an ordinary single-qubit state — but it is non-stabilizer: it cannot be written as a stabilizer state. Intuitively, the e^{i\pi/4} phase on |1\rangle is neither 0, nor \pi/2, nor \pi, nor 3\pi/2 — none of the phases that the Clifford group produces. The state sits in the "magic" part of the Bloch sphere that Clifford circuits alone cannot reach.

Once you have a clean copy of |T\rangle, you can implement a T gate on any target qubit using only a CNOT, a Z-basis measurement, and a classically-conditioned S — all Clifford operations.

The injection gadget

Let |\psi\rangle = \alpha|0\rangle + \beta|1\rangle be the target qubit on which you want to apply T. Keep a fresh copy of |T\rangle in an ancilla. Perform:

  1. CNOT from the data qubit (control) to the magic state (target).
  2. Measure the magic state in the Z basis. Get outcome m \in \{0, 1\}.
  3. If m = 1, apply S to the data qubit. If m = 0, do nothing.

Track what happens amplitude-by-amplitude:

Either way, after the classical correction the data qubit has had T applied to it. And every operation used — CNOT, Z-measurement, S — is a Clifford, which means each can be implemented fault-tolerantly and transversally on the Steane code.

Magic-state injection gadget for the T gateTwo horizontal wires. Top wire labelled psi: data qubit in an arbitrary state. Bottom wire labelled T-ket: the magic state. A CNOT with control on the data and target on the magic state. Then a measurement box on the magic wire yielding classical bit m. A classically-conditioned S gate on the data wire, fired when m equals 1. Output on the right: T applied to psi. Magic-state injection: implements T using only Cliffords + a |T⟩ ancilla $|\psi\rangle$ $|T\rangle$ CNOT measure $Z$ outcome $m$ $S^m$ apply if $m=1$ $T|\psi\rangle$
The injection circuit: CNOT the magic state with the data, measure the magic state in $Z$, and conditionally apply $S$. The net effect is a $T$ gate on the data qubit. Every gate in the circuit is a Clifford, so every gate can be executed transversally on the Steane code. The only non-Clifford resource is the input magic state $|T\rangle$ itself.

This reduces the problem of implementing logical T to the problem of preparing a clean |T\rangle encoded in the Steane code. The encoded |T\rangle is not in the code's stabilizer set, so you cannot just encode |+\rangle and apply a transversal T (which we already showed does not work). You need another method — and that method is distillation.

The distillation protocol

Start with many noisy copies of a physical magic state. Suppose each copy has fidelity 1 - p to the ideal |T\rangle — you have |T\rangle with probability 1 - p and some error state with probability p. Maybe p \sim 10^{-2} — worse than the gate error rate on any encoded qubit, but achievable for a physical state-preparation routine.

The goal: use Clifford operations and measurements to consume several noisy copies and produce fewer but higher-fidelity copies.

Bravyi-Kitaev (2005) 15-to-1 protocol. Take 15 noisy |T\rangle states. Apply a specific Clifford circuit based on the [[15, 1, 3]] Reed-Muller code. Measure 14 of the qubits; the 15th (the "logical" qubit of the Reed-Muller code) carries the distilled output. If all 14 measurements come out the expected way (no syndrome), the distilled qubit holds a magic state with error approximately

p_{\text{out}} \;\approx\; 35 \, p^3.

If any measurement is unexpected, discard and start over.

Why 35 p^3: the [[15, 1, 3]] Reed-Muller code has transversal T (one of the magic properties that makes Reed-Muller valuable). It detects any single error. The distillation circuit fails — produces the wrong output — only when three or more of the input magic states are wrong in a specific correlated pattern. The number of such patterns is \binom{15}{3} = 455, of which exactly 35 survive the code's error-detection filter. So the leading-order error of the output is 35 p^3 when p is small.

Cubic suppression is huge. Feed p = 10^{-2} in: p_{\text{out}} = 35 \times 10^{-6} \approx 3.5 \times 10^{-5}. One round of 15-to-1 distillation has improved the magic-state fidelity by more than two orders of magnitude.

Still not good enough for cryptographically useful Shor, where you need p_{\text{out}} \lesssim 10^{-15} per magic state (so that 10^{10} T gates accumulate less than one expected failure). No problem: recurse. Feed the output of one round of distillation into a second round as input. After two rounds, error scales as (35)^{1+3} p^9 \approx 10^6 p^9. After k rounds, the error is roughly p^{3^k}, which falls double-exponentially fast in the number of rounds.

Magic state distillation treeThree tiers. Bottom tier: a grid of many small crosses representing noisy physical magic states with fidelity 1 minus p, for p of 10 to the minus 2. Middle tier: fewer larger dots representing distilled states after one round of 15-to-1, fidelity 1 minus 35 p cubed. Top tier: a single filled dot representing the final magic state at fidelity 1 minus 10 to the minus 15. Arrows showing the 15 to 1 compression at each level. Distillation tree: noisy input → clean magic state input ($p \approx 10^{-2}$) +++++++++++++++ +++++++++++++++ +++++++++ $\ldots$ many copies round 1 out ($35 p^3$) $\ldots$ 15 → 1 (Bravyi-Kitaev) round 2 out ($\sim 10^{6} p^{9}$) 15 → 1 again clean $|T\rangle$ (fidelity $1 - 10^{-15}$) two rounds from $p = 10^{-2}$ input
Two rounds of 15-to-1 distillation. 225 noisy input magic states, consumed in batches of 15, produce 15 middling-quality outputs. Those 15 are consumed in another round to produce one high-fidelity final magic state. The error falls from $p$ to $35p^3$ to $\sim 10^6 p^9$ — double-exponential suppression. In practice, the outputs of each round also carry a small residual correlation that refined protocols (15-to-3, 116-to-12) address; the principle is the same.

Worked examples

Example 1: the complete T-gate cycle on a Steane-encoded qubit

Setup. You hold a logical qubit encoded in the Steane code, in an arbitrary state |\psi_L\rangle. You want to implement a logical T_L gate on it.

Step 1 — prepare the magic state factory output. Somewhere off to the side of your quantum computer, a magic-state distillation factory is churning out high-fidelity encoded magic states |T_L\rangle. Assume it has just delivered one, encoded in its own Steane block. Fidelity: 1 - 10^{-15}, good enough.

Step 2 — inject. Bring the magic-state block alongside your data block. Apply a transversal CNOT (seven physical CNOTs between corresponding qubits of the two blocks) with the data as control, magic as target. Both blocks remain encoded. Why transversal CNOT works: CNOT ^{\otimes 7} is one of the Steane code's transversal Cliffords. It implements logical CNOT between the two logical qubits, exactly as the injection gadget needs.

Step 3 — measure the magic block in logical-Z. Measure each of the seven physical qubits of the magic block in the Z basis. Combine the seven outcomes using the Steane decoder to extract the logical Z-measurement outcome m_L \in \{0, 1\} and detect/correct any single-qubit error. Why transversal Z-measurement works: on Steane, measuring every physical qubit in Z gives the parities of the logical Z-operator. The decoder takes the seven classical bits, runs them through the same Hamming parity check that gave the stabilizers, and returns the logical-Z outcome plus any error syndrome.

Step 4 — conditional logical S. If m_L = 1, apply a transversal logical S_L to the data block (seven physical S^\dagger gates). If m_L = 0, do nothing.

Result. The data block now holds T_L |\psi_L\rangle. The magic block is consumed.

Resource cost (encoded). 1 encoded magic state per logical T. One transversal CNOT (7 physical CNOTs). One transversal Z measurement (7 physical measurements). One probabilistic transversal S (7 physical S's, with probability 1/2). Total: about 21 physical operations per logical T, on top of the magic-state factory output.

Resource cost (physical, including distillation). This is the killer. Each encoded |T_L\rangle costs:

  • 15 encoded raw magic states (one round of 15-to-1).
  • Each encoded raw magic state costs about 7 physical qubits for the Steane encoding × the number of rounds × preparation time.
  • Plus the Clifford operations of the 15-to-1 circuit itself.

A conservative estimate: \sim 1001000 physical-qubit-rounds per logical T gate in a realistic surface-code implementation. For Steane concatenation the numbers differ in detail but the order of magnitude is similar. The single T gate is orders of magnitude more expensive than the single Clifford.

Example 2: counting magic states for Shor on RSA-2048

Setup. Gidney-Ekerå (2021, arXiv:1905.09749) reports the T-gate count of an optimised Shor's algorithm for n-bit RSA using windowed arithmetic. For n = 2048:

N_T \;\approx\; 0.3 \, n^3 \big/ w \;\approx\; 0.3 \times (2048)^3 \big/ 5 \;\approx\; 5 \times 10^{8} \ldots 10^{10} \text{ (depending on window)}.

Call it \sim 10^{10} for the rounded figure.

Step 1. Every T gate in the circuit consumes exactly one distilled magic state. Number of magic states required: \sim 10^{10}. Why one magic state per T: the injection gadget uses up the ancilla. You cannot reuse a magic state — after the measurement in step 3, it has collapsed to a basis state and is no longer magic. To do the next T gate anywhere in the circuit, you need a fresh |T\rangle.

Step 2. Each distilled magic state requires a factory pipeline that produces it at, say, fidelity 10^{-15}. Assume (following Gidney-Fowler 2019) each distilled state costs about 20 physical qubit-rounds in a dedicated distillation factory block of a few thousand physical qubits.

Step 3. Total magic-state production load: 10^{10} states × 20 qubit-rounds per state = 2 \times 10^{11} physical qubit-rounds dedicated to magic-state production.

Step 4. Divide by runtime to get factory qubit count. Runtime of Shor's at 1 MHz cycle rate over 8 hours = 2.9 \times 10^{10} cycles. Factory qubits = 2 \times 10^{11} / 2.9 \times 10^{10} \approx 7000 qubits of dedicated factory — but Gidney-Ekerå parallelise many factories to keep up with the algorithm's consumption rate, so the actual factory allocation is of order 10^6 physical qubits.

Result. Magic-state distillation consumes roughly 10^6 physical qubits in the RSA-2048 estimate — about 5–10 % of the full 2 \times 10^7 qubit budget is dedicated solely to producing magic states. Different resource estimates put the fraction higher (up to half) depending on how aggressively the algorithm is optimised. Whatever the exact fraction, magic-state distillation is one of the two dominant costs (along with the encoded-qubit count itself) in every published fault-tolerant resource estimate.

Policy reading. If someone tells you a quantum computer with "a million qubits" can break RSA-2048, ask them how many of those qubits are doing algorithm work and how many are in magic-state factories. If they cannot tell you, they are quoting a number they have not computed.

Common confusions

"The T gate is just expensive, so what?"

Yes, but expensive for a structural reason. It is not that engineers have not yet optimised the T gate enough; Eastin-Knill proves that the T gate will always be structurally more expensive than a Clifford on any code. No future optimisation will change the asymptotic cost. What we can (and do) optimise is the magic-state distillation protocol — better codes, better circuits, better error suppression — but the basic fact of a multi-order-of-magnitude cost overhead per T gate is locked in by the theorem.

"Magic states are not magic — they are just states."

Mathematically correct — a magic state is an ordinary vector in Hilbert space. But "magic" is a technical term here, and it has a precise meaning: a state is magic if it is not in the stabilizer polytope of the Clifford group. Physically, the magic state is the resource that, combined with free Clifford operations, gives you a non-Clifford gate. It plays the same role in quantum computing that catalysts play in chemistry — you consume it, but its effect on the protected logic is to enable a reaction that Cliffords alone could not perform.

"Distillation improves fidelity — but by how much per round?"

Cubically, for the standard 15-to-1 Bravyi-Kitaev protocol: error p \to 35 p^3. Some protocols improve further: 116-to-12 distillation has better output rate but slightly worse per-state error scaling. Gidney-Fowler improvements squeeze factors of 2-3 out of the overhead by being careful about which code is used and how the circuit is laid out on a 2D lattice. But the scaling is always cubic or better per round, never quadratic. Below-threshold noise suppresses error as fast as you add rounds, and the overhead grows polylogarithmically in the target fidelity.

"Colour codes have transversal T — does that defeat Eastin-Knill?"

No. Three-dimensional colour codes and certain gauge codes admit transversal T — Eastin-Knill does not forbid transversal T on every code; it forbids a single code from having a transversal universal set. In 3D colour codes, T is transversal but Hadamard is not — so the universal set still contains at least one non-transversal gate, and you still need some magic-state-like construction (for a different resource state, for H). The theorem applies; only its specific instantiation shifts.

"Can we just use more concatenation levels to get cheaper T?"

No. Every level of concatenation you add multiplies the physical-qubit overhead, but does not remove the Eastin-Knill obstruction — at the top level, the concatenated code still needs a non-transversal gate to be universal, and that gate still requires magic-state distillation. Concatenation changes the error-correction threshold; it does not change the gate budget.

The T-gate bottleneck in context

Put the numbers together for a sense of scale.

Ratio: every logical T costs 10x–100x more physical effort than every logical Clifford. And the standard algorithms are T-gate-heavy: Shor's, amplitude estimation, quantum phase estimation, simulation of chemistry — all need non-Clifford rotations that decompose into T gates.

This is why when you read a resource-estimate paper for a useful quantum algorithm, the top-line number is typically the T-count — not the total gate count, not the circuit depth, but specifically the number of non-Clifford gates. The Cliffords are essentially free (one or two orders of magnitude cheaper); the T-count is the cost driver.

Indian research angle. The National Quantum Mission (2023, ₹6000 crore over 8 years) funds magic-state-distillation work at IIT Madras, IIT Bombay, TIFR, and IISc Bangalore as part of the fault-tolerant hardware roadmap. India's superconducting-qubit fabrication line (Tata Consultancy Services + IIT Madras collaboration) is explicitly targeting the physical-qubit regime where distillation becomes the bottleneck — roughly 1000 physical qubits with sub-10^{-3} gate error. Reaching that threshold puts Indian hardware in the same frontier as Google, IBM, and Quantinuum, with magic-state factories as the natural next research frontier.

Going deeper

The rest of this chapter concerns the Eastin-Knill proof sketch, the Bravyi-Kitaev 15-to-1 construction in detail, transversal-T codes and their limits, and the Gidney-Fowler engineering refinements that inform modern resource estimates. This material is research-level, uses Lie-group intuition for the Eastin-Knill argument, and assumes familiarity with the Reed-Muller code. If your goal is to understand why T is expensive and roughly what distillation does, the previous sections are enough.

The Eastin-Knill proof, in full

Let U(t) = \exp(-i H t) be a smooth one-parameter family of transversal unitaries on an [[n, k, d]] code, with U(0) = I. Each U(t) factorises across qubits: U(t) = u_1(t) \otimes \cdots \otimes u_n(t) with each u_i smooth. Differentiate at t = 0: the generator H is a sum of single-qubit Hamiltonians, H = \sum_i h_i, where each h_i acts on qubit i.

Now use the definition of code distance. For H to generate a non-trivial logical operation, the action of H restricted to the code space must not be a multiple of the identity — there must exist code states |\psi_L\rangle, |\phi_L\rangle with \langle \phi_L | H | \psi_L \rangle \ne 0 for some off-diagonal logical matrix element.

But each h_i is weight 1 — it acts on a single qubit. The code has distance d \ge 2, which means no weight-1 operator has a non-zero matrix element between any two code states (that is the definition of "detects a single error"). So each \langle \phi_L | h_i | \psi_L \rangle = 0 for i = 1, \ldots, n, hence \langle \phi_L | H | \psi_L \rangle = 0 on the code space. H acts as a scalar on the code — it generates only global phase, which is trivial.

Therefore the continuous family U(t) implements only global phases on the encoded logical qubits, and cannot deliver any non-trivial logical gate. The transversal logical operators form a discrete set. \square

The argument generalises to subsystem codes with minor modifications (Zeng-Chen-Chuang, 2011). It fails spectacularly for approximate codes — Faist et al. (2020) showed that approximate codes with vanishing-but-nonzero logical error rate can host "approximately transversal" universal gates. This has recently become an active line of research for near-term quantum advantage.

Bravyi-Kitaev 15-to-1 — the construction

The protocol uses the classical Reed-Muller code RM(1, 4), a [15, 5, 8] code. Its dual is the [15, 11, 3] extended Hamming code. Together they define the quantum [[15, 1, 3]] Reed-Muller code with the very special property that it admits a transversal T gate — exactly the kind of code Eastin-Knill allows (which has transversal T, but not transversal H; so Reed-Muller cannot be used as a top-level code, but it is great for distillation factories).

The 15-to-1 circuit encodes 15 noisy magic states into the [[15, 1, 3]] Reed-Muller code. The encoding circuit is all Cliffords. If all 15 input states were perfect |T\rangle, the encoded logical state would also be exactly |T_L\rangle. If one input has a random Pauli error, the Reed-Muller code detects it — a syndrome measurement catches the error and the round is flagged to discard. If two inputs have correlated errors in specific patterns, the detection can fail; this is where the 35 p^3 comes from.

After encoding, the 14 non-logical qubits of the code are measured. Their measurement outcomes form a syndrome; if the syndrome is clean, the 15th qubit (the logical qubit of the Reed-Muller code) holds a distilled |T\rangle with error \sim 35 p^3. If the syndrome is not clean, discard and try again.

The acceptance probability is roughly 1 - O(p) for small p, so very little is lost to discards. The yield is 1 in 15 — you need to run 15 instances of this protocol to get 15 distilled magic states, and 15 sub-factories to feed that. This is where the 10^6-physical-qubit overhead for factories in the RSA-2048 estimate comes from.

Improved distillation protocols

Modern fault-tolerant resource estimates use the best available factory in conjunction with the best-available arithmetic, and iterate. The \sim 20-million-qubit number for RSA-2048 is the state of the art as of 2025; it has dropped by a factor of 3-5x over the preceding decade as factories improved.

Codes with transversal T — the trade-off

The [[15, 1, 3]] Reed-Muller code has transversal T but not transversal H. Paulsen-Preskill (2013) and Kubica (2017) showed that 3D colour codes admit transversal T on any size, with transversal CNOT as well, but require a 3D layout that current hardware cannot natively support. Bombin's gauge codes and the "pieceable fault tolerance" construction of Paetznick-Reichardt shift the non-transversal burden around — but always some gate is non-transversal.

The deepest generalisation of Eastin-Knill is the Bravyi-Koenig (2013) theorem, which says that on a topological code with 2D geometry, transversal gates are restricted to the Clifford hierarchy level 2 (Clifford group). To access higher levels you must either go 3D or use state-injection techniques. This establishes a hardware-geometric reason for the T bottleneck that complements the information-theoretic one.

The final picture

Fault-tolerant quantum computing, as of 2025, is the following pipeline:

  1. Choose a code — surface code or its variants, because of their 2D lattice geometry and ~1% threshold.
  2. Get Cliffords transversally — free, below the error budget.
  3. Get T gates via magic-state injection — each state costs 100-1000 physical-qubit-rounds in a distillation factory.
  4. Compile your algorithm to use as few T gates as possible — windowed arithmetic, T-gate reduction, T-depth optimisation.
  5. Run on hardware with physical error rate well below the code threshold (~10^-4 is comfortable).

Magic-state distillation sits at step 3 and is the single biggest physical-qubit expense after the code itself. Eastin-Knill is the reason for that expense. Together they set the scaling of every fault-tolerant algorithm: polylogarithmic in target accuracy, polynomial in problem size, but with a very large constant factor that dominates the total resource count.

Where this leads next

With fault-tolerant gates understood, the stack from physical qubits to useful logical computation is almost complete. The next chapter — Logical Qubits in Practice — steps out of theory and surveys the 2024-2025 experimental landscape: Google Willow's below-threshold surface code demonstration, Quantinuum H2's logical Clifford experiments, IBM Heron's path to error correction. Single-logical-qubit demos are now real. Multi-logical-qubit algorithms are the frontier.

Beyond that, the large resource estimates for RSA-2048 factoring rest squarely on the Eastin-Knill-forced T-gate budget computed here, and the post-quantum cryptography migration that India and every other state is planning is the policy consequence.

References

  1. Bryan Eastin and Emanuel Knill, Restrictions on Transversal Encoded Quantum Gate Sets (2009) — arXiv:0811.4262.
  2. Sergey Bravyi and Alexei Kitaev, Universal Quantum Computation with ideal Clifford gates and noisy ancillas (2005) — arXiv:quant-ph/0403025.
  3. Craig Gidney and Austin Fowler, Efficient magic state factories with a catalyzed |CCZ⟩ to 2|T⟩ transformation (2019) — arXiv:1812.01238.
  4. Wikipedia, Magic state distillation.
  5. John Preskill, Lecture Notes on Quantum Computation, Chapter 7: Quantum Error Correctiontheory.caltech.edu/~preskill/ph229.
  6. Austin Fowler, Matteo Mariantoni, John Martinis, Andrew Cleland, Surface codes: Towards practical large-scale quantum computation (2012) — arXiv:1208.0928.