# Gottesman–Knill theorem

In quantum computing, the GottesmanKnill theorem is a theoretical result by Daniel Gottesman and Emanuel Knill that states that stabilizer circuits, circuits that only consist of gates from the normalizer of the qubit Pauli group, also called Clifford group, can be perfectly simulated in polynomial time on a probabilistic classical computer. The Clifford group can be generated solely by using CNOT, Hadamard, and phase gates;[1] and therefore stabilizer circuits can be constructed using only these gates.

The reason for the speed up of quantum computers is not yet fully understood. The theorem proves that, for all quantum algorithms with a speed up that relies on entanglement which can be achieved with a CNOT and a Hadamard gate to produce entangled states, this kind of entanglement alone does not give any computing advantage.

There exists a more efficient simulation of stabilizer circuits than the construction of the original publication[1] with an implementation.[2]

The GottesmanKnill theorem was published in a single author paper by Gottesman in which he credits Knill with the result through private communication.[3]

## Formal statement

Theorem: A quantum circuit using only the following elements can be simulated efficiently on a classical computer:

1. Preparation of qubits in computational basis states,
2. Quantum gates from the Clifford group (Hadamard gates, controlled NOT gates, Phase Gate), and
3. Measurements in the computational basis.

The GottesmanKnill theorem shows that even some highly entangled states can be simulated efficiently. Several important types of quantum algorithms use only Clifford gates, most importantly the standard algorithms for entanglement purification and for quantum error correction. From a practical point of view, stabilizer circuits have been simulated in O(n log n) time using the graph state formalism.

3. Gottesman, Daniel (1998). "The Heisenberg Representation of Quantum Computers". arXiv:quant-ph/9807006v1. Bibcode:1998quant.ph..7006G. Cite journal requires `|journal=` (help)