Section LeaderLogsVotesWithLog.
Context {orig_base_params : BaseParams}.
Context {one_node_params : OneNodeParams orig_base_params}.
Context {raft_params : RaftParams orig_base_params}.
Context {rri : raft_refinement_interface}.
Context {vrmutdi : votesReceived_moreUpToDate_interface}.
Context {rvrmutdi : requestVoteReply_moreUpToDate_interface}.

Lemma quorum_preserved:
forall (st st' : name -> electionsData * raft_data)
(t0 : term) (ll : list entry) (leader : name),
(forall h t leader log,
In (t, leader, log) (votesWithLog (fst (st h))) ->
In (t, leader, log) (votesWithLog (fst (st' h)))) ->
(exists quorum : list name,
NoDup quorum /\
length quorum > div2 (length nodes) /\
(forall h : name,
In h quorum ->
exists log : list entry,
moreUpToDate (maxTerm ll) (maxIndex ll) (maxTerm log) (maxIndex log) =
true /\ In (t0, leader, log) (votesWithLog (fst (st h))))) ->
exists quorum : list name,
NoDup quorum /\
length quorum > div2 (length nodes) /\
(forall h : name,
In h quorum ->
exists log : list entry,
moreUpToDate (maxTerm ll) (maxIndex ll) (maxTerm log) (maxIndex log) =
true /\ In (t0, leader, log) (votesWithLog (fst (st' h)))).