TypeOK /\ H_PrimaryHasOwnEntries /\ H_LogMatching /\ H_UniformLogEntries /\ Next => H_UniformLogEntries'
H_UniformLogEntries states that within any server's log, term values uniquely determine their position: if two entries in two (possibly identical) servers' logs have the same term value, the one with the lower index cannot appear after the other (formally: the index bearing the matching value is never strictly less than the first occurrence's index). The invariant is proved by induction over every Next action.
currentTerm[p]. Four sub-cases split on whether each of the two witness indices
s, t is the primary p or not. When i is the newly appended index,
uniqueness follows either trivially (the new index is the largest) or from
H_PrimaryHasOwnEntries, which guarantees that any server already carrying
currentTerm[p] in its log must have it at a position that already existed in
log[p], keeping the new tail entry truly unique.
Len(log[r])+1, uniqueness within the sender's log is
established first (using H_LogMatching to equate the shared prefix), then
H_UniformLogEntries is applied to the sender's log to conclude ~(k < i).
DOMAIN log'[r] is downward-closed inside DOMAIN log[r], so
any j < i with i in the new domain is also in the new domain.
log, so H_UniformLogEntries is preserved by definition. Each dispatches
directly to SMT with the relevant action definition unfolded.
Proof lines: 464–854 |
Log: output/L6_full_test4.log |
All obligations: proved (SMT / tlapm trivial) |
Timing: cached (previously verified)