Proof using.
unfold update_elections_data_requestVoteReply.
intros.
repeat break_match; repeat find_inversion; intuition.
simpl in *. intuition.
Qed.

(* Specifications: *)
Lemma update_elections_data_client_request_allEntries :
forall h st client id c out st' ms,
handleClientRequest h (snd st) client id c = (out, st', ms) ->
allEntries (update_elections_data_client_request h st client id c) =
allEntries (fst st) \/
(exists e : entry,
eIndex e = S (maxIndex (log (snd st))) /\
eTerm e = currentTerm (snd st) /\
eClient e = client /\ eInput e = c /\ eId e = id /\ type (snd st) = Leader /\
allEntries (update_elections_data_client_request h st client id c) =
(currentTerm st', e) :: allEntries (fst st)).