|q⟩ Bad Qubits

advanced · Physics · Fault-Tolerant Quantum Computing

Error Propagation

Errors move when gates act

A Pauli error sitting on a qubit does not stay put once a gate is applied. Because Pauli operators do not generally commute with Clifford gates, pushing an error through a gate transforms it. The central worry for fault tolerance is the two-qubit gate: a single error on one qubit can become an error on two qubits after a CNOT. Understanding exactly how errors propagate is what lets us design gadgets that keep the spread under control.

The CNOT conjugation rules

Let qubit cc be the control and tt the target of a CNOT, written U=CNOTctU = \mathrm{CNOT}_{c\to t}. The CNOT is a Clifford gate, so it maps Paulis to Paulis under conjugation. The four generating rules are

U(XcIt)U=XcXt,U(IcXt)U=IcXt,U\,(X_c \otimes I_t)\,U^\dagger = X_c \otimes X_t, \qquad U\,(I_c \otimes X_t)\,U^\dagger = I_c \otimes X_t, U(ZcIt)U=ZcIt,U(IcZt)U=ZcZt.U\,(Z_c \otimes I_t)\,U^\dagger = Z_c \otimes I_t, \qquad U\,(I_c \otimes Z_t)\,U^\dagger = Z_c \otimes Z_t.

Read them as physics: an XX (bit-flip) on the control copies forward onto the target, while an XX on the target stays put. A ZZ (phase) error does the opposite — it stays on the control but copies backward from target to control. This control/target asymmetry, with bit-flips flowing one way and phases the other, is the rule every fault-tolerant construction is built around.

Why this is the central danger

The first rule, XcXcXtX_c \to X_c X_t, is the threatening one. A single physical XX fault before a CNOT becomes a weight-two error afterward. Chain several CNOTs that share a qubit and one fault can fan out across an entire code block, producing an error the code cannot correct. This is precisely why transversal implementations matter: if logical gates couple the ii-th qubit of one block only to the ii-th qubit of another, a single fault can land at most one error per block, and the code still cleans it up.

Verifying the rule on a state

The conjugation identity U(XcIt)=(XcXt)UU (X_c \otimes I_t) = (X_c \otimes X_t)\,U has a direct, checkable consequence. Start in 00|00\rangle (a +1+1 eigenstate of both ZZ's), inject an XX error on the control, then apply the CNOT. The XX on the control turns 00|00\rangle into 10|10\rangle; the CNOT then flips the target because the control is 11, giving 11|11\rangle. So the single-qubit XX error has visibly become a XXX\otimes X error: both qubits are flipped. The final state is exactly 11|11\rangle, amplitude 11 on basis index 33.

Try it

Build the propagation circuit on two qubits (control =0=0, target =1=1): inject the XX error on the control, then apply cx(0, 1). Return the circuit. The grader checks the full statevector, which must be 11|11\rangle — the fingerprint of the error having copied forward onto the target.

Run your code to see the quantum state.

Sign in on the full site to ask questions and join the discussion.