The Init/Next spec in this file correctly specifies consensus, because it precludes the chosen set from changing after it got to contain exactly one value.
What value does the the safety invariant in
lines 36-37, and the theorem that follows it, bring to this spec? If I am interpreting it correctly, the invariant does not fully specify the safety property: it allows a sequence in which a value is chosen, then another value replaces it (the size of the chosen set is still 1, so the invariant remains true). Or a value is chosen, then the set is emptied, then another value is chosen; etc.
Is the value of this invariant+theorem in just demonstrating an interesting property? Is it not strictly needed to be in this spec?
Is there a way to fix this invariant, so that it fully represents the consensus safety property (rather than partially, like it seems).