I am having a problem in understanding a conflict between reversibility in quantum computation and the No cloning theorem. Given a function f, we construct the reversible version of f by adding additional input and output wires to the circuit for f, possibly outputting junk bits. We then "copy" the output to another register to not to lose the output information using CNOT gates. But doesn't this contradict the No Cloning Theorem? We cannot copy the state of a quantum bit. Can we?
No-cloning theorem refers to creation of independent copies of a qubit. With CNOT gates you’ll only create mirrors.
For instance, if you have $\alpha \left| 0 \right> + \beta \left| 1 \right>$ and measure it, you’ll get 0 with probability $p_a=|\alpha|^2$ and 1 with $p_b=|\beta|^2$. Now if you clone this qubit and measure both, you should get 00 with probability $p_a^2$, 01 with $p_a p_b$, 10 with $p_b p_a$ and 11 with $p_b^2$.
Mirroring with CNOT gives a different picture: 00 with $p_a$, 11 with $p_b$ and zero probability for 01 and 10.