Proof using.
induction tr; intros; simpl in *; repeat break_match; subst; try congruence; intuition.
Qed.

(* Specifications: *)
Lemma LockServ_mutual_exclusion_trace :
forall st tr,
step_async_star step_async_init st tr ->
trace_mutual_exclusion tr /\
(forall n, last_holder tr = Some n -> held (nwState st (Client n)) = true) /\
(forall n, held (nwState st (Client n)) = true -> last_holder tr = Some n).
Lemma LockServ_mutual_exclusion_trace :
forall st tr,
step_async_star step_async_init st tr ->
trace_mutual_exclusion tr /\
(forall n, last_holder tr = Some n -> held (nwState st (Client n)) = true) /\
(forall n, held (nwState st (Client n)) = true -> last_holder tr = Some n).