Fault-tolerant quantum computation