  Common quantum algorithms make heavy use of ancillae: scratch qubits that are
initialized at some state and later returned to that state and discarded.
Existing quantum circuit languages let programmers assert that a qubit has been
returned to the |0> state before it is discarded, allowing for a range of
optimizations. However, existing languages do not provide the tools to verify
these assertions, introducing a potential source of errors. In this paper we
present methods for verifying that ancillae are discarded in the desired state,
and use these methods to implement a verified compiler from classical functions
to quantum oracles.
