Proof using.
intros J P.
cofix c.
intros s unJP alP.
destruct s as [e s].
apply weak_until_Cons in unJP.
case unJP.
- intro PC.
apply always_Cons in alP.
destruct alP as [nP alP].
unfold not_tl in nP.
contradict nP.
assumption.
- intros Jun.
destruct Jun as [JC unJPs].
apply Always; trivial.
apply c; trivial.
apply always_invar in alP.
assumption.
Qed.

(* Specifications: *)
Lemma weak_until_latch_eventually :
forall (P Q : infseq T -> Prop) ex,
weak_until (P /\_ ~_ Q) (P /\_ Q) ex ->
eventually Q ex ->
eventually (P /\_ Q) ex.