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}.
Proof using.
intros.
break_exists_exists. intuition.
find_apply_hyp_hyp. break_exists_exists. intuition eauto.
Qed.
Proof using.
red. unfold leaderLogs_votesWithLog. intros. simpl in *.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
- find_rewrite_lem update_elections_data_appendEntries_leaderLogs.
eapply quorum_preserved; [|eauto].
intros.
find_higher_order_rewrite; destruct_update; simpl in *; eauto.
rewrite votesWithLog_same_append_entries. auto.
- eapply quorum_preserved; [|eauto].
intros.
find_higher_order_rewrite; destruct_update; simpl in *; eauto.
rewrite votesWithLog_same_append_entries. auto.
Qed.
Proof using.
red. unfold leaderLogs_votesWithLog. intros. simpl in *.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
- eapply quorum_preserved; [|eauto].
intros.
find_higher_order_rewrite; destruct_update; simpl in *; eauto.
- eapply quorum_preserved; [|eauto].
intros.
find_higher_order_rewrite; destruct_update; simpl in *; eauto.
Qed.

Lemma update_elections_data_request_vote_votesWithLog_old :
forall (h : name)
(st : electionsData *
RaftState.raft_data term name entry logIndex serverType data clientId output)
(t : nat) (src : fin N) (lli llt : nat)
(t' : term) (h' : name) (l' : list entry),
In (t', h', l') (votesWithLog (fst st)) ->
In (t', h', l')
(votesWithLog (update_elections_data_requestVote h src t src lli llt st)).