Fault-tolerant consensus #
Roughly speaking, a distributed consensus algorithm can tolerate f faults if up to f
processes can be "faulty" and yet the non-faulty processes can still reach a consensus.
The fault we consider here is limited to the crash fault, in which a process stops responding
to messages from some point onward. We do not consider Byzantine faults.
A process p is faulty in an infinite execution iff there is a time k from which onward
there is a message in-flight to p but p has stopped receiving messages.
Equations
Instances For
A process p cannot be both faulty and fair in an infinite execution. Note, however, that
it is possible for p to be neither faulty nor fair, because p can keep on receiving messages
but at the same time keep ignoring some messages sent to it.
An infinite execution is fair iff every process is either faulty or fair
(cf. the comment for the theorem not_procFaulty_and_procFair).
Equations
- Cslib.FLP.FairRun ss xs = ∀ (p : P), Cslib.FLP.ProcFaulty p ss xs ∨ Cslib.FLP.ProcFair p ss xs
Instances For
The number of faulty processes in an infinite execution.
Equations
- Cslib.FLP.numProcFaulty ss xs = {p : P | Cslib.FLP.ProcFaulty p ss xs}.ncard
Instances For
If the number of faulty processes in an infinite execution is less than the total number of processes, then at least one process is not faulty.
If every process in a set ps is fair, then the number of faulty processes is bounded by
the total number of processes minus the cardinality of ps.
The notion of an infinite admissible execution for an algorithm a with input inp
and containing at most f faulty processes.
Equations
- a.AdmissibleRun inp f ss xs = (ss 0 = a.start inp ∧ a.lts.OmegaExecution ss xs ∧ Cslib.FLP.FairRun ss xs ∧ Cslib.FLP.numProcFaulty ss xs ≤ f)
Instances For
A process terminates in an infinite execution iff either it crashes or it decides on a boolean value at some point.
Equations
- Cslib.FLP.ProcTermination p ss xs = (Cslib.FLP.ProcFaulty p ss xs ∨ ∃ (k : ℕ) (b : Bool), (ss k).ProcDecided p b)
Instances For
An algorithm a terminates with up to f faulty processes iff all its processes terminate
in every infinite admissible execution containing at most f faulty processes.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An algorithm a is a consensus algorithm tolerating up to f faulty processes iff
it both satisfies the consensus safety property a.SafeConsensus and terminates
with up to f faulty processes.
Equations
- a.Consensus f = (a.SafeConsensus ∧ a.Termination f)
Instances For
If an infinite execution is admissible with up tp f faulty processes,
then it is also admissible with with up tp f' ≥ f faulty processes.
If a is a consensus algorithm tolerating up to f faulty processes,
then it is also a consensus algorithm tolerating up to f' ≤ f faulty processes.
If a process p is not fair in an infinite execution of an algorithm a, then there is
a message that is in-flight to, but never received, by p from some point onward.
In an infinite execution of an algorithm a, a process p is fair iff p is fair in
all suffixes of the execution.