Quantum computation theory