Proof using vlcti.
unfold refined_raft_net_invariant_timeout, votes_correct.
split_votes_correct; start_proof.
- find_eapply_lem_hyp votes_update_elections_data_timeout_votedFor; eauto.
find_eapply_lem_hyp votes_update_elections_data_timeout_votedFor; eauto.
intuition.
+ eauto.
+ find_apply_lem_hyp votes_le_current_term_invariant; auto; simpl in *; omega.
+ find_apply_lem_hyp votes_le_current_term_invariant; auto; simpl in *; omega.
+ congruence.
- find_eapply_lem_hyp votes_update_elections_data_timeout_votedFor; eauto.
intuition. subst.
find_copy_apply_lem_hyp votes_le_current_term_invariant; auto.
find_copy_apply_lem_hyp handleTimeout_currentTerm.
do_le_antisym.
erewrite handleTimeout_same_term_votedFor_preserved by eauto.
eauto.
- eapply update_elections_data_timeout_votes_intro_new; intuition eauto.
Qed.

(* Specifications: *)
Lemma votes_correct_append_entries :
refined_raft_net_invariant_append_entries votes_correct.