Proof using.
intros n c s Hstar Hexec Hfair HNth.
pattern s in Hexec. pattern s in Hfair.
find_copy_eapply_lem_hyp eventually_Unlock; eauto.
break_exists.
match goal with
| H1 : (fun x => ?J1) s, H2 : (fun x => ?J2) s |- _ =>
assert (and_tl (fun x => J1) (fun x => J2) s) as Hand by (now unfold and_tl);
clear H1; clear H2
end; simpl in *.
eapply eventually_trans.
4:eauto. 3:apply Hand.
2:intros; eapply Unlock_in_network_eventually_MsgUnlock.
all:unfold and_tl in *; intuition eauto.
- eauto using lb_step_execution_invar.
- simpl. eauto using weak_fairness_invar.
Qed.

(* Specifications: *)
(* Sketch: eventually an Unlock happens, so eventually a MsgUnlock happens, so eventually a client moves up the queue. when this happens, the server will send it a Locked msg if it's at the head.  Gonna use weak_until_eventually and probs eventually_next *)
Lemma clients_move_up_in_queue :
forall n c s,
event_step_star step_async step_async_init (hd s) ->
lb_step_execution lb_step_async s ->
weak_fairness lb_step_async label_silent s ->
Nth (queue (nwState (evt_a (hd s)) Server)) (S n) c ->
eventually (fun s => Nth (queue (nwState (evt_a (hd s)) Server)) n c
/\ (n = 0 -> In (mkPacket Server (Client c) Locked)
(nwPackets (evt_a (hd s)))))
s.