Proof using.
intros. unfold handleInput, handleTimeout, handleClientRequest, tryToBecomeLeader in *.
repeat break_match; find_inversion; intuition eauto using key_in_output_list_empty;
unfold key_in_output_list in *; break_exists; simpl in *; intuition; congruence.
Qed.

(* Specifications: *)
Lemma has_key_own_key :
forall e,
has_key (eClient e) (eId e) e = true.
Lemma applyEntries_In :
forall l h st os st' o,
applyEntries h st l = (os, st') ->
In (ClientResponse client id o) os ->
exists e : entry,
eClient e = client /\
eId e = id /\
In e l.