Proof using.
intros P Q eP eQ. cofix cf.
intros (x1, s1) (x2, s2) e un1. case (weak_until_Cons un1).
- intro Q1. constructor 1. eapply eQ; eassumption.
- intros (Px1s1, uns1). constructor 2.
* eapply eP; eassumption.
* simpl. apply cf with s1; try assumption. case (exteq_inversion e); trivial.
Qed.

(* Specifications: *)
Lemma extensional_until :
forall (P Q: infseq T -> Prop),
extensional P -> extensional Q -> extensional (until P Q).