Motivation
Consensus asks N processors, each holding an initial value, to agree on one value despite some of them failing. It underlies replicated databases, atomic commit and state-machine replication. Its solvability depends on the timing assumptions. With fully synchronous processors and communication, t fail-stop faults can be tolerated for any t<N. With fully asynchronous communication, Fischer, Lynch and Paterson showed that no deterministic protocol tolerates even one fail-stop fault (JACM 1985).
Dwork, Lynch and Stockmeyer (JACM 1988) introduced partial synchrony, a model between these two extremes. Message delays have an upper bound Δ, but either the bound is unknown to the protocol, or it holds only from an unknown time on. For each fault type they found the exact number of faults that can be tolerated. This mission formalizes the lower bound for fail-stop faults: when the processors are synchronous and communication is partially synchronous, no consensus protocol tolerates t faults once N≤2t.
Timeline. 1985: Fischer, Lynch, Paterson, impossibility of consensus with one fail-stop fault under asynchrony. 1987: Dolev, Dwork, Stockmeyer, which combinations of synchrony assumptions admit consensus (JACM 1987). 1988: Dwork, Lynch, Stockmeyer, partial synchrony, with matching upper and lower bounds on resiliency for fail-stop, omission, authenticated Byzantine and Byzantine faults. The global stabilization time of the 1988 paper became a common liveness assumption for later fault-tolerant agreement protocols.
Setting
There are N processors p1,…,pN. Each processor holds an initial value vi∈{0,1}. Each runs a deterministic protocol: a transition diagram over a possibly infinite set of states. In each state the next instruction is either Send(m,pj), which puts message m in pj's buffer, or Receive(pi), which removes a set S of messages from pi's buffer and delivers it. The next state depends on the current state and, for a Receive, on S. A step never both sends and receives. Each state may record a decision, and the first decision a processor records is final.
Real time is the ticks 1,2,3,…. A run fixes the initial values and, at each tick, which processors take a step and which messages each Receive delivers. A message is delivered only after the tick at which it was sent, only to its addressee, and at most once.
- Synchronous processors (Φ=1): every correct processor takes a step at every tick.
- Fail-stop faults: a faulty processor follows the protocol until it stops, and it never restarts. A processor that stops at time 0 is initially dead.
- Δ holds in [T,∞): a message sent at a tick s1≥T is delivered no later than any Receive of its addressee at a tick s2≥s1+Δ.
- Delta holds eventually: Δ is a fixed positive integer known to the protocol. In every run, Δ holds in [T,∞) for some unknown global stabilization time T. Messages sent before T may be delayed arbitrarily or lost.
- Delta is unknown: the protocol is fixed first. In every run, some positive Δ holds in [1,∞).
A protocol is a t-resilient consensus protocol achieving weak unanimity if the following holds for every set C of at least N−t processors and every allowed run in which the processors of C are correct and the others fail-stop. No two processors of C decide differently (consistency). Every processor of C decides (termination). If all initial values are v and no processor is faulty, every decision is v (weak unanimity).
Formalization targets
Goal: Theorem 4.3
For integers t≤N with
2≤N≤2t,
there is no t-resilient consensus protocol achieving weak unanimity for binary values with fail-stop faults and synchronous processors. This holds for every positive Δ when Δ holds eventually, and when delta is unknown.
Milestones: the three scenarios of the proof
Split the processors into groups P and Q with 1≤∣P∣,∣Q∣≤t.
- Scenario A: all inputs 0 and Q initially dead. The processors of P decide by some time TA, and they decide 0.
- Scenario B: all inputs 1 and P initially dead. The processors of Q decide 1 by some time TB.
- Scenario C: all processors alive, P starting with 0 and Q with 1, and messages between the groups held back past a time T. Up to time T, every processor of P is in the same state as in Scenario A, and every processor of Q in the same state as in Scenario B.
Significance
The result. Theorem 4.3 shows that the resiliency N≥2t+1 of the paper's fail-stop and omission protocols (Theorems 4.1 and 4.2) is optimal. It holds even under three restrictions: binary values, weak unanimity, and processors in perfect lock-step. Partial synchrony costs a majority of correct processors, whereas full synchrony costs nothing. The same scenarios give the authenticated Byzantine bound N≥3t+1 (Theorem 4.4). The halting remark of Section 4.2 rests on an argument of the same kind.
The formalization. The theorem is proved in the paper, and its proof is short. It is not machine-checked anywhere known to the mission. No message-passing model is on the platform. This mission supplies one: a step-level model with buffers, per-message timing, fail-stop faults and both partially synchronous communication models. It also gives a machine-checked impossibility on top of that model. FLP, Theorem 4.4 and the lower bounds of Section 6 are natural follow-ups on the same definitions.
Difficulty
The informal proof is an indistinguishability argument. Making it formal means comparing different runs of the same deterministic protocol. Two points need care.
First, the scenarios must be allowed runs. Scenario C holds messages between the groups back past max(TA,TB). With delta unknown, this needs a Δ larger than that delay. When Δ holds eventually, Δ is fixed before the protocol, and the protocol fixes TA and TB. So the delay is legal only for messages sent before the global stabilization time, which must therefore be placed after max(TA,TB). Read literally, "every message between the groups takes more than max(TA,TB) steps" is not an allowed run in this model.
Second, "the processors of P act exactly as they do in Scenario A" is a claim about whole runs. Two runs must agree on states, on which messages are in which buffer, and on when each message is delivered, tick by tick up to T. With one-to-one sends and atomic steps, "delivered in exactly time 1" also needs a reading: a processor that sends at the next tick cannot receive at that tick.
Formalization scope
All declarations live in the namespace DLSConsensus.LowerBound. Processor pi is the index i−1 of Fin N. Values are Bool. The protocol's state type and message type are arbitrary types in Type, finite or infinite. R.state i n is the state after tick n. A message instance is identified in the run by its sender and send tick. A Receive hands the protocol each delivered message as (sender, content); the absolute send tick is not exposed.
Explicit readings and conventions:
- "Fail-stop or omission faults": the goal is the fail-stop impossibility. It implies the omission case, because a fail-stop processor looks to the others like one whose sends are all omitted. The omission case is not a separate item.
- A fail-stop processor may skip ticks before its final stop. The processor timing bound Φ=1 applies to correct processors.
- "Decides": the first state that records a decision. Irreversibility therefore holds by definition.
- "Delivered in exactly time 1": the message is delivered no later than the addressee's first Receive at least one tick after the send.
- "Within time TA" and "for some finite TB": an explicit ∃ before the decision bound.
- "Messages between the groups take more than max(TA,TB) steps": no message between the groups is delivered at a tick ≤T, for any given T.
- "Act exactly as they do": equal local states at every tick n≤T.
- Quantifier order: when Δ holds eventually, Δ is chosen first, then the protocol, then the run with its stabilization time. When delta is unknown, the protocol is chosen first and each run carries its own Δ. In both models Δ>0.
Trivializing formalizations are ruled out. The model has allowed runs for every protocol, so Resilient is never vacuously true. Correct processors step at every tick, so termination does not fail for the wrong reason. Unanimity is the weak form, applied only when no processor is faulty.
Contributions welcome: a general simulation lemma (equal inputs up to a tick give equal states up to that tick), the construction of runs from a delivery schedule, and proofs of the scenarios. These parts are reusable for the other lower bounds of the paper.
Selected references
- C. Dwork, N. Lynch, L. Stockmeyer, Consensus in the presence of partial synchrony, Journal of the ACM 35(2), 1988, 288–323. https://doi.org/10.1145/42282.42283
- M. J. Fischer, N. A. Lynch, M. S. Paterson, Impossibility of distributed consensus with one faulty process, Journal of the ACM 32(2), 1985, 374–382. https://doi.org/10.1145/3149.214121
- D. Dolev, C. Dwork, L. Stockmeyer, On the minimal synchronism needed for distributed consensus, Journal of the ACM 34(1), 1987, 77–97. https://doi.org/10.1145/7531.7533