Section RequestVoteMaxIndexMaxTerm.
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 {rvrtsi : requestVote_term_sanity_interface}.
Proof using.
red. unfold requestVote_maxIndex_maxTerm. intros. simpl in *.
subst. repeat find_higher_order_rewrite.
assert (In p0 (nwPackets net)) by
(find_apply_hyp_hyp; repeat find_rewrite; intuition; [in_crush|];
exfalso; subst; simpl in *; subst;
unfold handleAppendEntries in *;
repeat break_match; find_inversion).
repeat find_rewrite.
destruct_update; simpl in *; eauto;
try rewrite votesWithLog_same_append_entries; eauto;
find_apply_lem_hyp handleAppendEntries_log_term_type.
break_or_hyp; try congruence.
break_and; repeat find_rewrite; eauto.
Qed.
Proof using.
red. unfold requestVote_maxIndex_maxTerm. intros. simpl in *.
assert (In p0 (nwPackets net)) by
(repeat find_rewrite;
find_apply_lem_hyp handleAppendEntriesReply_packets;
subst; simpl in *; find_apply_hyp_hyp; intuition; in_crush).
repeat find_rewrite.
find_copy_apply_lem_hyp handleAppendEntriesReply_log_term_type.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto;
break_or_hyp; try congruence; break_and; repeat find_rewrite; eauto.
Qed.
Proof using.
red. unfold requestVote_maxIndex_maxTerm. intros. simpl in *.
assert (In p0 (nwPackets net)) by
(find_apply_hyp_hyp; repeat find_rewrite; intuition; [in_crush|];
exfalso; subst; simpl in *; subst;
unfold handleRequestVote in *;
repeat break_match; find_inversion).
find_copy_apply_lem_hyp handleRequestVote_log_term_type.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto;
break_or_hyp; try congruence; break_and; repeat find_rewrite; eauto.
Qed.

Lemma requestVote_maxIndex_maxTerm_request_vote_reply :
refined_raft_net_invariant_request_vote_reply requestVote_maxIndex_maxTerm.