(* All useful predicates are extensional in the following sense *)
Definition extensional (P: infseq T -> Prop) :=
  forall s1 s2, exteq s1 s2 -> P s1 -> P s2.

Lemma extensional_weak_until : forall (P Q: infseq T -> Prop), extensional P -> extensional Q -> extensional (weak_until P Q).