Skip to content

feat(FLP): develop the theory of pseudo-consensus algorithms that can tolerate up to 1 fault - #755

Open
ctchou wants to merge 2 commits into
leanprover:mainfrom
ctchou:flp-pseudo-1
Open

feat(FLP): develop the theory of pseudo-consensus algorithms that can tolerate up to 1 fault#755
ctchou wants to merge 2 commits into
leanprover:mainfrom
ctchou:flp-pseudo-1

Conversation

@ctchou

@ctchou ctchou commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

This PR develops a theory of pseudo-consensus algorithms that can tolerate up to 1 fault, which is the core of Völzer's argument. The central notion is "non-uniformity": a state s is non-uniform iff for each boolean value b, there exists a process p such that there is an execution of the algorithm from s that ends up deciding on b without the participation of p. Then any algorithm that can tolerate up to 1 fault is proved to have two properties:
(1) nonUniform_inp, which says that there must an initial non-uniform state.
(2) nonUniform_step, which will be shown in the next PR to guarantee that any execution ending in a non-uniform state can be extended to a longer execution ending in a non-uniform state.

/-- `a.OneSilentDecided s p b` means that the boolean value `b` is decided on in a state that
is reachable from `s` without the participation of `p`. In the notation of [Volzer2004], this
is equivalent to `b ∈ val(p,s)`. -/
def Algorithm.OneSilentDecided (a : Algorithm P M S)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd call this CanDecideWithout or CanDecideWithoutOne.


/-- `a.Uniform s b` means that for every process `p`, `a.OneSilentDecided s p b` but
not `a.OneSilentDecided s p !b`. -/
def Algorithm.Uniform (a : Algorithm P M S) (s : State P M S) (b : Bool) : Prop :=

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find the naming a bit confusing here:

  • For a given boolean b, Uniform means that, (1) there's a state reachable without involving p where some process has decided b and (2) no state reachable without involving p has a process that's decided !b.
  • NonUniform means that for any boolean b, there's a process p such that we can reach a state without involving p where some process has decided b.

Do these come from the paper?


/-- Assuming `a.PseudoConsensus 1` and there are at least 2 processes, there must exist an input
that gives rise to a non-uniform initial state. This theorem formalizes Lemma 1 of [Volzer2004]. -/
theorem nonUniform_inp (hpc1 : a.PseudoConsensus 1) (hc : card P ≥ 2) :

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice result!

The name and content makes me wonder a bit if this lemma (and perhaps also some of the defs above, like NonUniform) should be extended in name or namespaced so that it's clear they're about 1-pseudo consensus.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants