CoFixpoint zip (sA: infseq A) (sB: infseq B) : infseq (A*B) := 
  match sA, sB with
    | Cons a sA0, Cons b sB0 => Cons (a, b) (zip sA0 sB0)
  end.

Lemma always_map_conv_ext : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop) (J : infseq A -> Prop), (forall x s, J (Cons x s) -> J s) -> (forall s, J s -> Q (map f s) -> P s) -> forall s, J s -> always Q (map f s) -> always P s.