Proof using cti.
unfold candidateEntriesTerm.
intros.
break_exists_exists. break_and.
match goal with
| [ H : handleTimeout _ _ = _ |- _ ] =>
pose proof H;
eapply update_elections_data_timeout_cronies with (t := t) in H
end. break_or_hyp.
- update_destruct_simplify; auto.
find_copy_apply_lem_hyp handleTimeout_type_strong.
intuition; repeat find_rewrite; auto.
find_apply_lem_hyp wonElection_exists_voter.
break_exists.
find_apply_lem_hyp in_dedup_was_in.
find_copy_apply_lem_hyp cronies_term_invariant; auto.
simpl in *.
omega.
- update_destruct_simplify; auto.
find_copy_apply_lem_hyp handleTimeout_type_strong.
find_apply_lem_hyp wonElection_exists_voter.
break_exists.
find_apply_lem_hyp in_dedup_was_in.
find_copy_apply_lem_hyp cronies_term_invariant; auto.
intuition; subst; repeat find_rewrite; auto;
simpl in *; omega.
Qed.

Lemma prevLog_candidateEntriesTerm_timeout :
refined_raft_net_invariant_timeout prevLog_candidateEntriesTerm.