Proof using vwltsi.
red. unfold allEntries_votesWithLog. intros. simpl in *.
repeat find_higher_order_rewrite.
destruct_update; simpl in *.
- find_copy_eapply_lem_hyp update_elections_data_client_request_allEntries_in_or_term; eauto. intuition.
+ repeat find_rewrite.
find_eapply_lem_hyp votesWithLog_update_elections_data_client_request; eauto.
eapply_prop_hyp votesWithLog votesWithLog; eauto; intuition;
right; break_exists_exists; intuition;
find_higher_order_rewrite; destruct_update; simpl in *; auto.
rewrite update_elections_data_client_request_leaderLogs. auto.
+ subst.
find_eapply_lem_hyp votesWithLog_update_elections_data_client_request; eauto.
find_eapply_lem_hyp votesWithLog_term_sanity_invariant; eauto.
repeat (unfold raft_data, ghost_data in *; simpl in *). omega.
- eapply_prop_hyp votesWithLog votesWithLog; eauto; intuition;
right; break_exists_exists; intuition;
find_higher_order_rewrite; destruct_update; simpl in *; auto.
rewrite update_elections_data_client_request_leaderLogs. auto.
Qed.

Lemma votesWithLog_update_elections_data_timeout' :
forall net h out st' ps t' h' l',
refined_raft_intermediate_reachable net ->
handleTimeout h (snd (nwState net h)) = (out, st', ps) ->
In (t', h', l') (votesWithLog (update_elections_data_timeout h (nwState net h))) ->
In (t', h', l') (votesWithLog (fst (nwState net h))) \/
(t' = currentTerm st' /\ l' = log st' /\ currentTerm (snd (nwState net h)) < currentTerm st').