Proof using vlcti.
unfold refined_raft_net_invariant_request_vote_reply, votes_correct.
split_votes_correct; start_proof.
- erewrite @votes_update_elections_data_request_vote_reply_eq in * by auto.
eauto.
- erewrite @votes_update_elections_data_request_vote_reply_eq in * by auto.
find_copy_apply_lem_hyp votes_le_current_term_invariant; auto.
subst.
match goal with
| [ H : context [currentTerm ?x] |- _ ] =>
remember x as st'' eqn:Hst'';
apply eq_sym in Hst''
end.
find_copy_apply_lem_hyp handleRequestVoteReply_term_votedFor_cases.
intuition; try omega.
repeat find_rewrite. eauto.
- erewrite @votes_update_elections_data_request_vote_reply_eq in * by auto.
find_copy_eapply_lem_hyp handleRequestVoteReply_term_votedFor; eauto.
intuition.
repeat find_rewrite. eauto.
Qed.

Lemma votes_correct_do_leader :
refined_raft_net_invariant_do_leader votes_correct.