Proof using.
intros. unfold handleRequestVoteReply, advanceCurrentTerm in *.
subst.
repeat (break_match; try find_inversion; simpl in *; auto);
do_bool; auto.
Qed.

(* Specifications: *)
Theorem handleClientRequest_log :
forall h st client id c out st' ps,
handleClientRequest h st client id c = (out, st', ps) ->
ps = [] /\
(log st' = log st \/
exists e,
log st' = e :: log st /\
eIndex e = S (maxIndex (log st)) /\
eTerm e = currentTerm st /\
eClient e = client /\
eInput e = c /\
eId e = id /\
type st = Leader).