Proof using.
intros P Q J impl s Js J_weak_until_Q ev.
genclear J_weak_until_Q; genclear Js.
induction ev as [s Ps | x s ev induc_hyp].
- intros Js J_weak_until_Q. constructor 1. apply impl; assumption.
- intros _ J_weak_until_Q. cut (s = tl (Cons x s)); [idtac | reflexivity].
case J_weak_until_Q; clear J_weak_until_Q x.
* constructor 1; assumption.
* intros (x, s1) _ J_weak_until_Q e; simpl in *.
constructor 2. generalize e J_weak_until_Q; clear e x. (* trick: keep J_weak_until_Q!! *)
case J_weak_until_Q; clear J_weak_until_Q s1.
+ clearall. constructor 1; assumption.
+ intros s2 Js2 _ e J_weak_until_Q2. rewrite e in induc_hyp; clear e.
apply induc_hyp; assumption.
Qed.

(* Specifications: *)
Lemma eventually_or_tl_intror :
forall (P Q : infseq T -> Prop) s,
eventually Q s ->
eventually (P \/_ Q) s.