Supposedly I am supposed to be explaining why the set of quantum gates with CNOTS and 1-qubit gates is computationally universal in these notes, as well as how a discrete set of gates can be universal and the Kitaev-Solovay theorem. I am falling behind on these notes, and I'm going to very sketchy for this lecture, as it is pulled fairly directly from the textbook Nielsen and Chuang.

What does it mean for a restricted set *S* of quantum gates to be computationally
universal? There probably isn't a unaminous agreement on the meaning of this. While we
won't state the definition precisely,
it is roughly that
one can start with a description of a circuit for a
quantum computer using some canonical set of gates (say all two-qubit gates)
and then produce, using a polynomial-time classical algorithm,
a computationally equivalent circuit for a quantum computer using only
gates from *S*, such that the new circuit is at most polynomially larger than the
original circuit. Here, computationally equivalent means that the output probability
distribution does not differ much between the old and new quantum circuits.
(It was pointed out in class that if the classical computer outputs
the new circuit in a reasonable format, the requirement that the classical algorithm
is in P means that the number of gates can't be more than polynomial. I still think it is
worth emphasizing the point
that the number of gates cannot increase more than polynomially.)

One way of showing that a set of quantum gates is computationally universal is by showing
that the new circuit applies exactly the same unitary transformation in SU(2^{n})
as the original circuit. It is just as good to show that it applies
a unitary transformation that is very close to it (so the probability
distribution is not changed much).
This is a stricter requirement than computational universality; let's call
it unitary universality. This is the definition given in the textbook.
We will show that CNOTs and one-qubit gates are universal in this stricter
sense; that is, that for fixed k, any k-qubit gate can be composed out
of a fairly small number of CNOTs and one-qubit gates.

We showed this theorem by essentially following the proof in Nielsen
and Chuang. I went over the elements of this
proof in a different order in class, which
was a mistake, so I will fix the order in these notes. First, we can
that any two-qubit controlled U gate could be made up of two CNOT gates and
three single-qubit gates (Fig. 4.6 in NC). We next considered a gate on
three qubits, with two control qubits, and one target qubit, which
applies U to the target bit if both control qubits are | 1 ⟩,
and the identity otherwise.
We can show how to make it out of five controlled
two-qubit gates (Fig. 4.8 in NC).
We next considered a gate on n qubits with n−1 control qubits
and one target qubit. This gate could be made up using a linear number
of Toffoli gates
(controlled controlled σ_{x} gates), and one controlled
U gate, using a linear number of work qubits (Fig. 4.10 in NC).

The next step was to show that CNOTS and one-qubit gates could be used to
make up any *two-level* gate, and that enough two-level gates
could be used to make any unitary transformation. For SU(m), this last
piece requires c m^{2} two-level, making it inefficient if
m = 2^{n}, as we have with n qubits.
Thus, not all unitary transformations on n qubits are constructible with
this method in polynomial time. This is to be expected; a simple
counting argument shows that there are too many unitary transformations
to be constructed efficiently
from components with only a small number of degrees of freedom.
However, these arguments show that any circuit made of k-qubit gates, for
fixed k, can be simulated with 1-qubit gates and CNOTs, with only a linear
increase in the number of gates. The multiplicative factor in this linear
increase grows exponentially in k, but that is unavoidable.

Finally, I tlaked about the Solovay-Kitaev theorem, which says that if you
have a finite set of gates that generates a set of unitary transformations
dense in SU(2), you can quickly approximate any unitary transformation in
SU(2) within ε with only O(log^{c} 1/ε) gates.
This shows that any finite set of gates which doesn't live in a subgroup of
SU(2) is efficiently useable for quantum computation.