TypeOK /\ H_QuorumsSafeAtTerms /\ H_LogEntryImpliesSafeAtTerm /\ Next => H_LogEntryImpliesSafeAtTerm'
| Step | Action | Prover | Status | Timing | Notes |
|---|---|---|---|---|---|
| <1>. USE | A0–A6 axiom assumptions | tlapm | trivial (×7) | cached | IDs 8–14 |
| <1>1 | ClientRequestAction | smt | proved | cached | ID 15; needs H_QuorumsSafeAtTerms |
| <1>2 | GetEntriesAction | smt | proved | cached | ID 16; log copy preserves invariant |
| <1>3 | RollbackEntriesAction | smt | proved | cached | ID 17; log truncation preserves invariant |
| <1>4 | BecomeLeaderAction | smt | proved | 0.2s (3%) | ID 18; needs CanVoteForOplog, Terms defs |
| <1>5 | CommitEntryAction | smt | proved | cached | ID 19; commit does not change log |
| <1>6 | UpdateTermsAction | smt | proved | 0.1s (1%) | ID 20; needs UpdateTermsExpr, Terms defs |
| <1>7. QED | Exhaustive action case split | smt | proved | cached | IDs 1–7 |
H_LogEntryImpliesSafeAtTerm asserts that every log entry at index i with term t implies that a quorum of servers was safe at term t at the time of appending. The inductive step proves this is preserved by all six Next-state actions.
The proof is a straightforward flat case split over each action in Next:
H_QuorumsSafeAtTerms to establish that the leader's current quorum was safe at the entry's term — this is the only action that needs an extra inductive hypothesis beyond TypeOK.H_LogEntryImpliesSafeAtTerm on the source).state and currentTerm change. The CanVoteForOplog and Terms definitions are unfolded to confirm the log is unchanged.immediatelyCommitted set changes; the log itself is unchanged.currentTerm and state change; the log and safety witnesses are unchanged. Requires unfolding UpdateTermsExpr and Terms.All six cases are discharged automatically by SMT after unfolding the relevant definitions. The only non-trivial step is BecomeLeaderAction (0.2s) and UpdateTermsAction (0.1s); all others were satisfied from the fingerprint cache.
Total TLAPM-reported obligations: 20 (7 QED sub-obligations from the case-split, 7 trivial axiom-use obligations, and 6 BY obligations for each action case). All proved.