  This pedagogical review presents the proof of the Solovay-Kitaev theorem in
the form of an efficient classical algorithm for compiling an arbitrary
single-qubit gate into a sequence of gates from a fixed and finite set. The
algorithm can be used, for example, to compile Shor's algorithm, which uses
rotations of $\pi / 2^k$, into an efficient fault-tolerant form using only
Hadamard, controlled-{\sc not}, and $\pi / 8$ gates. The algorithm runs in
$O(\log^{2.71}(1/\epsilon))$ time, and produces as output a sequence of
$O(\log^{3.97}(1/\epsilon))$ quantum gates which is guaranteed to approximate
the desired quantum gate to an accuracy within $\epsilon > 0$. We also explain
how the algorithm can be generalized to apply to multi-qubit gates and to gates
from $SU(d)$.
