Section VotedForMoreUpToDate.
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 {rvmimti : requestVote_maxIndex_maxTerm_interface}.
Context {vftsi : votedFor_term_sanity_interface}.
Proof using.
red. unfold votedFor_moreUpToDate. intros. simpl in *.
subst. repeat find_higher_order_rewrite.
destruct_update_hyp; simpl in *; eauto;
try rewrite votesWithLog_same_append_entries; eauto.
- find_copy_eapply_lem_hyp handleAppendEntries_term_votedFor; eauto.
find_apply_lem_hyp handleAppendEntries_log_term_type.
intuition; try congruence. repeat find_rewrite. eauto.
- find_copy_eapply_lem_hyp handleAppendEntries_term_votedFor; eauto.
intuition; repeat find_rewrite; eauto.
- find_apply_lem_hyp handleAppendEntries_log_term_type.
intuition; try congruence. repeat find_rewrite. eauto.
Qed.
Proof using.
red. unfold votedFor_moreUpToDate. intros. simpl in *.
find_copy_apply_lem_hyp handleAppendEntriesReply_log_term_type.
subst. repeat find_higher_order_rewrite.
destruct_update_hyp; simpl in *; eauto;
intuition; try congruence; repeat find_rewrite; eauto;
find_copy_eapply_lem_hyp handleAppendEntriesReply_term_votedFor; eauto;
intuition; repeat find_rewrite; eauto.
Qed.

Lemma votedFor_moreUpToDate_request_vote :
refined_raft_net_invariant_request_vote votedFor_moreUpToDate.