Ltac start :=
    red; unfold leaders_have_leaderLogs_strong; intros;
    subst; simpl in *; find_higher_order_rewrite;
    update_destruct; subst; rewrite_update; eauto; simpl in *.

(* Specifications: *)
Lemma handleAppendEntries_type : forall h st t n pli plt es ci st' ps, handleAppendEntries h st t n pli plt es ci = (st', ps) -> (type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st) \/ type st' = Follower.
Lemma handleAppendEntriesReply_type : forall h st h' t es r st' ms, handleAppendEntriesReply h st h' t es r = (st', ms) -> (type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st) \/ type st' = Follower.
Lemma handleRequestVote_type : forall st h h' t lli llt st' m, handleRequestVote h st t h' lli llt = (st', m) -> (type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st) \/ type st' = Follower.
Lemma handleClientRequest_type : forall h st client id c out st' l, handleClientRequest h st client id c = (out, st', l) -> type st' = type st /\ currentTerm st' = currentTerm st /\ (log st' = log st \/ exists e, eTerm e = currentTerm st /\ log st' = e :: log st).
Lemma handleTimeout_type : forall h st out st' l, handleTimeout h st = (out, st', l) -> (type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st) \/ type st' = Candidate.
Lemma doGenericServer_type : forall h st os st' ms, doGenericServer h st = (os, st', ms) -> type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st.
Lemma doLeader_type : forall st h os st' ms, doLeader st h = (os, st', ms) -> type st' = type st /\ currentTerm st' = currentTerm st /\ log st' = log st.
Lemma update_elections_data_client_request_leaderLogs : forall h st client id c, leaderLogs (update_elections_data_client_request h st client id c) = leaderLogs (fst st).
Lemma update_elections_data_timeout_leaderLogs : forall h st, leaderLogs (update_elections_data_timeout h st) = leaderLogs (fst st).
Lemma update_elections_data_appendEntries_leaderLogs : forall h st t h' pli plt es ci, leaderLogs (update_elections_data_appendEntries h st t h' pli plt es ci) = leaderLogs (fst st).
Lemma update_elections_data_requestVote_leaderLogs : forall h h' t lli llt st, leaderLogs (update_elections_data_requestVote h h' t h' lli llt st) = leaderLogs (fst st).
Lemma leaders_have_leaderLogs_strong_appendEntries : refined_raft_net_invariant_append_entries leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_appendEntriesReply : refined_raft_net_invariant_append_entries_reply leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_requestVote : refined_raft_net_invariant_request_vote leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_requestVoteReply : refined_raft_net_invariant_request_vote_reply leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_clientRequest : refined_raft_net_invariant_client_request leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_timeout : refined_raft_net_invariant_timeout leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_doGenericServer : refined_raft_net_invariant_do_generic_server leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_doLeader : refined_raft_net_invariant_do_leader leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_init : refined_raft_net_invariant_init leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_state_same_packets_subset : refined_raft_net_invariant_state_same_packet_subset leaders_have_leaderLogs_strong.
Lemma leaders_have_leaderLogs_strong_reboot : refined_raft_net_invariant_reboot leaders_have_leaderLogs_strong.