The Heisenberg Picture in Quantum Computing
Tracking how operators evolve rather than states gives an efficient description of Clifford circuits and stabilizer codes.
Evolving operators instead of states
In the usual Schrodinger picture, the state changes and operators are fixed. In the Heisenberg picture, the state is fixed and operators evolve as A -> U-dagger A U. The two give identical predictions since expectation values
Why it helps
A general n-qubit state has exponentially many amplitudes, so the Schrodinger picture is expensive. But tracking how a small set of generators, the Pauli operators, transform can be cheap. If a circuit maps Pauli operators to other Pauli operators (times a sign), the evolution of the whole algebra is captured by how a few generators move. This is exactly what happens for Clifford circuits.
import numpy as np
# H conjugates X<->Z; this compact rule replaces tracking amplitudes
rules = {'X':'Z','Z':'X','Y':'-Y'}
print('Hadamard in Heisenberg picture:', rules)
Stabilizer connection
A stabilizer state is defined by the Pauli operators that fix it. In the Heisenberg picture, running a Clifford circuit means updating this stabilizer group generator by generator, each an O(n) operation. The state is described implicitly by its stabilizers rather than explicitly by amplitudes, which is the basis of the Gottesman-Knill theorem and efficient stabilizer simulators.
Scope and limits
The Heisenberg picture is most powerful when operator evolution stays within a tractable set, as for Clifford gates acting on Paulis. Non-Clifford gates, such as the T gate, take a Pauli to a sum of Paulis, and the description grows. This boundary is precisely what separates classically simulable circuits from those that may offer quantum advantage, and it is why fault-tolerant designs isolate the few non-Clifford resources they need.