Section LeaderLogsSorted.
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 {si : sorted_interface}.
Proof using.
unfold refined_raft_net_invariant_init, leaderLogs_sorted.
intros. subst. simpl in *. intuition.
Qed.
Proof using.
unfold update_elections_data_client_request.
intros.
repeat break_match; auto.
Qed.
Proof using.
unfold refined_raft_net_invariant_client_request, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify; simpl in *.
- rewrite leaderLogs_update_elections_data_client_request in *.
eauto.
- eauto.
Qed.
Proof using si rri.
intros.
pose proof (lift_prop _ logs_sorted_invariant).
find_insterU. conclude_using eauto.
unfold logs_sorted, logs_sorted_host in *. break_and.
unfold deghost in *. simpl in *. break_match. eauto.
Qed.
Proof using.
unfold update_elections_data_timeout.
intros.
repeat break_match; simpl in *; auto.
Qed.
Proof using.
unfold refined_raft_net_invariant_timeout, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify; simpl in *;
try rewrite leaderLogs_update_elections_data_timeout in *;
eauto.
Qed.
Proof using.
unfold update_elections_data_appendEntries.
intros.
repeat break_match; subst; auto.
Qed.
Proof using.
unfold refined_raft_net_invariant_append_entries, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify; simpl in *.
- rewrite leaderLogs_update_elections_data_AE in *.
eauto.
- eauto.
Qed.
Proof using.
unfold refined_raft_net_invariant_append_entries_reply, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify; simpl in *; eauto.
Qed.
Proof using.
unfold refined_raft_net_invariant_request_vote, leaderLogs_sorted.
intros.
subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify.
- unfold update_elections_data_requestVote in *.
repeat break_match; simpl in *; intuition; repeat find_inversion; eauto.
- eauto.
Qed.
Proof using.
unfold update_elections_data_requestVoteReply.
intros.
repeat break_match; simpl in *; eauto.
repeat find_rewrite.
match goal with
| H : handleRequestVoteReply _ _ _ _ _ = _ |- _ =>
symmetry in H
end.
find_apply_lem_hyp handleRequestVoteReply_spec.
intuition; repeat find_rewrite; auto.
Qed.
Proof using si rri.
unfold refined_raft_net_invariant_request_vote_reply, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify; eauto.
match goal with
| _ : context [ leaderLogs (update_elections_data_requestVoteReply ?h ?s ?t ?v ?st) ] |- _ =>
destruct (leaderLogs (update_elections_data_requestVoteReply h s t v st))
using (leaderLogs_update_elections_data_request_vote_reply ltac:(eauto))
end; eauto.
simpl in *. intuition eauto.
find_inversion. eauto using sorted_host_lifted.
Qed.
Proof using.
unfold refined_raft_net_invariant_do_leader, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify.
- match goal with
| [ H : _, H' : _ |- _ ] =>
eapply H; rewrite H'; simpl; eauto
end.
- eauto.
Qed.
Proof using.
unfold refined_raft_net_invariant_do_generic_server, leaderLogs_sorted.
intros. subst. simpl in *. find_higher_order_rewrite.
update_destruct_simplify.
- match goal with
| [ H : _, H' : _ |- _ ] =>
eapply H; rewrite H'; simpl; eauto
end.
- eauto.
Qed.
Proof using.
unfold refined_raft_net_invariant_state_same_packet_subset, leaderLogs_sorted.
intros. subst. simpl in *. find_reverse_higher_order_rewrite.
eauto.
Qed.
Proof using.
unfold refined_raft_net_invariant_reboot, leaderLogs_sorted.
intros.
find_higher_order_rewrite.
update_destruct_simplify.
- match goal with
| [ H : _, H' : _ |- _ ] =>
eapply H; rewrite H'; simpl; eauto
end.
- eauto.
Qed.

Lemma leaderLogs_sorted_invariant :
forall net,
refined_raft_intermediate_reachable net ->
leaderLogs_sorted net.