Section AllEntriesTermSanity.
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}.
Proof using.
intros.
unfold handleAppendEntries in *.
repeat break_match; simpl in *; do_bool; repeat find_inversion; auto; try lia;
simpl in *;
unfold advanceCurrentTerm in *; repeat break_match; do_bool; auto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros. simpl in *.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_copy_eapply_lem_hyp update_elections_data_appendEntries_allEntries_term'; eauto.
intuition.
find_apply_lem_hyp handleAppendEntries_currentTerm_monotonic;
find_apply_hyp_hyp; lia.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_apply_lem_hyp handleAppendEntriesReply_type_term. intuition; repeat find_rewrite; eauto.
find_apply_hyp_hyp. lia.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_rewrite_lem update_elections_data_requestVote_allEntries.
find_apply_lem_hyp handleRequestVote_type_term. intuition; repeat find_rewrite; eauto.
find_apply_hyp_hyp. lia.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_rewrite_lem update_elections_data_requestVoteReply_allEntries.
find_apply_hyp_hyp.
unfold handleRequestVoteReply, advanceCurrentTerm.
repeat break_match; simpl in *; repeat find_inversion; do_bool; simpl in *; auto.
lia.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_copy_apply_lem_hyp update_elections_data_client_request_allEntries.
find_apply_lem_hyp handleClientRequest_type.
intuition; repeat find_rewrite;
try find_apply_hyp_hyp; auto.
break_exists.
intuition; repeat find_rewrite;
simpl in *.
intuition; simpl in *;
try match goal with
| H : context [ _ :: _ ] |- _ => clear H
end; repeat tuple_inversion; eauto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_rewrite_lem update_elections_data_timeout_allEntries.
find_apply_lem_hyp handleTimeout_type_strong.
intuition; repeat find_rewrite; eauto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
match goal with
| H : nwState ?net ?h = (?gd, ?d) |- _ =>
replace gd with (fst (nwState net h)) in * by (rewrite H; reflexivity);
replace d with (snd (nwState net h)) in * by (rewrite H; reflexivity);
clear H
end.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_apply_lem_hyp doLeader_type. intuition.
repeat find_rewrite. eauto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
match goal with
| H : nwState ?net ?h = (?gd, ?d) |- _ =>
replace gd with (fst (nwState net h)) in * by (rewrite H; reflexivity);
replace d with (snd (nwState net h)) in * by (rewrite H; reflexivity);
clear H
end.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
find_apply_lem_hyp doGenericServer_type. intuition.
repeat find_rewrite. eauto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
match goal with
| H : nwState ?net ?h = (?gd, ?d) |- _ =>
replace gd with (fst (nwState net h)) in * by (rewrite H; reflexivity);
replace d with (snd (nwState net h)) in * by (rewrite H; reflexivity);
clear H
end.
subst. repeat find_higher_order_rewrite.
destruct_update; simpl in *; eauto.
Qed.
Proof using.
red. unfold allEntries_term_sanity. intros.
find_reverse_higher_order_rewrite. eauto.
Qed.

Lemma allEntries_term_sanity_init :
refined_raft_net_invariant_init allEntries_term_sanity.