Proof using.
unfold locks_correct. simpl. discriminate.
Qed.

Lemma InputHandler_cases :
forall h i st u out st' ms,
InputHandler h i st = (u, out, st', ms) ->
(exists c, h = Client c /\
((i = Lock /\ out = [] /\ st' = st /\ ms = [(Server, Lock)]) \/
(i = Unlock /\ out = [] /\ held st' = false /\
((held st = true /\ ms = [(Server, Unlock)]) \/
(st' = st /\ ms = []))))) \/
(out = [] /\ st' = st /\ ms = []).