Proof using.
intros. apply eventually_next.
match goal with
| H : context [held] |- _ =>
pattern s in H
end.
match goal with
| H1 : ?J1 s, H2 : ?J2 s, H3 : ?J3 s |- _ =>
assert ((J1 /\_ J2 /\_ J3) s) by (now unfold and_tl);
eapply weak_until_eventually with (J := (and_tl J1 (and_tl J2 J3)))
end; simpl in *.
2:now unfold and_tl.
3:eauto using held_eventually_InputUnlock.
- intros. unfold and_tl in *. intuition.
eapply InputUnlock_held; eauto.
- apply weak_until_always; eauto using lb_step_execution_invar, always_inv.
apply weak_until_always; eauto using weak_fairness_invar, always_inv.
eauto using held_until_Unlock.
Qed.

(* Specifications: *)
Lemma Locked_enables_MsgLocked :
forall i, message_enables_label
{| pSrc := Server; pDst := Client i; pBody := Locked |}
(MsgLocked i).