Proof using.
intros.
destruct (held (sigma (Client c))) eqn:?; auto.
firstorder.
find_copy_apply_lem_hyp locks_correct_true_at_head_of_queue; auto.
unfold at_head_of_queue in *. break_exists.
congruence.
Qed.

(* Specifications: *)
Lemma locks_correct_at_head_preserved :
forall sigma st',
locks_correct sigma ->
(forall c, at_head_of_queue sigma c -> at_head_of_queue (update name_eq_dec sigma Server st') c) ->
locks_correct (update name_eq_dec sigma Server st').
Lemma locks_correct_locked_sent_lock :
forall sigma p,
pBody p = Lock ->
locks_correct_locked sigma p.
Lemma locks_correct_at_head_preserved :
forall sigma st',
locks_correct sigma ->
(forall c, at_head_of_queue sigma c -> at_head_of_queue (update name_eq_dec sigma Server st') c) ->
locks_correct (update name_eq_dec sigma Server st').
Lemma locks_correct_locked_sent_lock :
forall sigma p,
pBody p = Lock ->
locks_correct_locked sigma p.