Proof using.
intros f J P K Q KJ QP. cofix cf.
intros (x, s) un.
rewrite map_Cons in un; case (weak_until_Cons un); clear un; rewrite <- map_Cons.
- intro Qxs; constructor 1. apply QP. assumption.
- intros (Kxs, un). constructor 2; simpl; auto.
Qed.

(* Specifications: *)
Lemma until_map :
forall (f: A->B) (J P: infseq A->Prop) (K Q: infseq B->Prop),
(forall s, J s -> K (map f s)) ->
(forall s, P s -> Q (map f s)) ->
forall (s: infseq A),
until J P s -> until K Q (map f s).