Impossibility of asynchronous distributed consensus in the presence of a single fault #
This file formalizes the main theorem (Theorem 1) of [Vol04] and uses it to prove the impossibility of asynchronous distributed consensus in the presence of a single fault.
a.ReachableNonUniform inp s means that s is a reachable and non-uniform state of
algorithm a on input inp.
Equations
- a.ReachableNonUniform inp s = (a.Reachable inp s ∧ a.NonUniform s)
Instances For
Choose an arbitrary non-uniform input.
Equations
- a.nonUniformInp hpc1 hc = Classical.choose ⋯
Instances For
Assuming a.PseudoConsensus 1 and there are at least 2 processes, the input chosen by
a.nonUniformInp does indeed give rise to a non-uniform initial state.
Assuming a.PseudoConsensus 1, starting from any reachable non-uniform state of a and
any message m that is in-flight in s, there exists a finite execution of a in which m
is received and which ends in another non-uniform state.
Choose an arbitrary finite execution guaranteed to exist by the theorem
OnePseudoConsensus.nonUniform_step_exists.
Equations
- a.nonUniformStep inp hpc1 s m = Classical.choose ⋯
Instances For
Assuming a.PseudoConsensus 1, a.nonUniformStep does have the property guaranteed by
the theorem OnePseudoConsensus.nonUniform_step_exists.
Assuming a.PseudoConsensus 1, starting from any reachable non-uniform state s0 of a,
use the fair scheduler developed in FairSchedular.lean to construct an infinite fair execution
in which there are infinitely many non-uniform states.
Assuming a.PseudoConsensus 1 and there are at least 2 processes, there must exist an
infinite admissible execution in which no process is faulty but no process terminates, either.
This theorem formalizes Theorem 1 of [Vol04].
As long as there are at least 2 processes, there does not exist a distributed consensus algorithm that can tolerate 1 fault.
As long as there are at least 2 processes, there does not exist a distributed consensus
algorithm that can tolerate f faults for any f ≥ 1.