Fault-tolerant computation

'Fault-tolerant computation' considers reliable computation using faulty computation elements. It has been considered in a number of areas, including circuits, decision trees, cellular automata, and others. Reliable computation means that	the result of the computation is correct with	some reasonable	probability. It should also be clarified what does it mean that an element "fails". This depends on the computation device considered, and there are several possible variations. In the case of Boolean circuits we say that a gate fails, if it outputs the opposite value than it should.

There are several different models of how the elements can	fail.


 * Adversarial faults

The locations of the failures are chosen by an adversary. In this case it seems that there is not much we can do: the adversary could always choose to compromise the final step of the computation, for example the output gate of a Boolean circuit. Nevertheless this model has been also studied quite extensively. Reliable computation can be achieved under some serious limitations on the adversary and/or on the number of faults. Typically, it is assumed that certain parts of the computation cannot be influenced by the adversary.


 * Random independent faults

The most studied fault model is the	model with random independent faults:  each element fails independently with some probability. It was introduced by von Neumann. Sometimes it is assumed that each element fails with the exact same probability, sometimes it is only assumed that each element fails with a probability bounded  above by some value. Computation elements in this model are usually called "noisy".

It is a classical result of von Neumann, that any function can be computed reliably by "noisy" Boolean circuits, with probability of error at most p, where 0 < p < 1/2 can be an arbitrarily small constant, even if the gates can fail in the circuit with up to a constant probability. Different gates can fail with different probabilities, as long as the failure probabilities are bounded from above by some constant. However, if the gates fail with probability up to some constant epsilon (0 < epsilon < 1/2), then epsilon < p must hold. This is necessary since the output gate can also fail with probability up to epsilon. The precise dependence between epsilon and p depends on the type of circuit and the type of gates used. Moreover, the results of von Neumann, later formally proved by Dobrushin and Ortyukov and Pippenger, guarantee that if a Boolean function can be computed by a "noiseless" circuit with s gates, then O(s logs) noisy gates are sufficient for the reliable computation of the function. This can be ensured for arbitrary functions, and without protecting any gates from the noise.


 * Coded model

In this model, the input and output are treated as words of an error-correcting code: the encoded input is produced from the original input by a completely reliable procedure, and the result of the "noisy computation" is decoded by a completely reliable procedure. This model was first considered by Elias. The most explicit presentation of this model appears in a paper by Spielman.