The looming appearance of universal quantum computers makes it is imperative to devise methods for correctly programming such devices. Quantum algorithms are complex, and quantum computers explore alternative computation branches in superposition, so programming mistakes in even minor parts of the code can alter the quantum state and invalidate the final result. Debugging is inappropriate in the quantum setting, since it requires examining the program state, and besides the high cost of early quantum computers will make trial runs prohibitively expensive. The goal of this project is to devise novel methods for ensuring quantum programs are correct. We will use emerging alternative models for quantum computing that we are developing to devise methods to reason effectively about quantum computations, and we test our methods on the functional quantum programming language Quipper.