pub trait UnlockingJustification: UnlockingRequiresHigherCertificate + FastRetryPreservesBlock { }Expand description
Lemma (Unlocking justification). Let a correct validator cast a validation vote for B in
round s, and let (A, p) be its stored confirmation vote immediately before, with A ≠ B.
Then a valid ValidatedBlockCertificate for B exists in some round t with
p < t < s.
Proof. By UnlockingRequiresHigherCertificate, with a stored confirmation vote present
the proposal must carry an OriginalProposal, and:
- a fresh proposal (
None) is rejected; - a fast retry requires
Ato matchB’s proposal, which byFastRetryPreservesBlockforcesA = B, contradicting the hypothesis; - a regular retry carries a certificate
cwhich — by the caller’scertificate.check(& committee)andBlockProposal::check_invariants— is a validValidatedBlockCertificatefor exactlyB, withc.round < s; and sinceAdoes not matchB, the accepted branch isvote.round < certificate.round, i.e.p < c.round.
Take t = c.round. ∎
This is the hinge of LockPreservation: a correct validator abandons a block it confirmed
only in exchange for a quorum that validated the replacement strictly above its own
confirmation — which lets the induction step down into a strictly smaller round.