TypeOK /\ H_QuorumsSafeAtTerms /\ Next => H_QuorumsSafeAtTerms'
The invariant H_QuorumsSafeAtTerms states that every Primary server s has a witnessing quorum Qs such that every member of Qs has a term at least as large as currentTerm[s].
The proof proceeds action by action:
currentTerm or state in ways that change the Primary set or the term ordering; SMT closes all four directly from the definitions.currentTerm[leader]+1.
<2>8) is proved manually using FS_MajoritiesIntersect, establishing that any two quorums share a member.H_QuorumsSafeAtTerms), every old Primary had a quorum witnessing it; quorum intersection with Q gives a shared node whose old term bounds the old Primary's term, so currentTerm[leader]+1 dominates all old Primaries (<2>9).<2>9 and Q's uniform term (<2>10).UpdateTerms(i, j) only increases currentTerm[j] and demotes j to Secondary. Any surviving Primary s is different from j, so its term is unchanged. The old witness quorum Qs still works: for n = j the updated term is currentTerm[i] ≥ currentTerm[j] which is at least as large; for n ≠ j the term is unchanged.All 132 proof obligations were discharged by SMT (Z3 via TLAPM), with the quorum intersection sub-proof requiring explicit Cardinality arithmetic to guide the solver.