(* The converse seems to require much more work *)

Definition fstAB := fst (A:=A) (B:=B).

(* Specifications: *)
Lemma exteq_fst_zip: forall sA sB, exteq (map fstAB (zip sA sB)) sA.
Lemma exteq_zip_map : forall (f: A->B) (sA: infseq A) (sB: infseq B), always (now (fun c: A*B => let (x, y) := c in y = f x)) (zip sA sB) -> exteq sB (map f (map fstAB (zip sA (map f sA)))).
Lemma eventually_map_conv_aux : forall (f: A->B) (Q: infseq B->Prop), extensional Q -> forall (s: infseq A) (sB: infseq B), always (now (fun c: A*B => let (x, y) := c in y = f x)) (zip s sB) -> eventually Q sB -> eventually (fun sc => Q (map f (map fstAB sc))) (zip s (map f s)).
Lemma eventually_map_conv_ext : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop) (J : infseq A -> Prop), extensional P -> extensional Q -> extensional J -> (forall x s, J (Cons x s) -> J s) -> (forall s, J s -> Q (map f s) -> eventually P s) -> forall s, J s -> eventually Q (map f s) -> eventually P s.
Lemma eventually_map_conv : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop), extensional P -> extensional Q -> (forall s, Q (map f s) -> P s) -> forall s, eventually Q (map f s) -> eventually P s.
Lemma eventually_map_monotonic : forall (f: A->B) (P Q J: infseq A->Prop) (K : infseq B -> Prop), (forall x s, J (Cons x s) -> J s) -> (forall x s, K (map f (Cons x s)) -> K (map f s)) -> (forall s, J s -> K (map f s) -> Q s -> P s) -> forall s, J s -> K (map f s) -> eventually Q s -> eventually P s.
Lemma inf_often_map : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop), (forall s, P s -> Q (map f s)) -> forall (s: infseq A), inf_often P s -> inf_often Q (map f s).
Lemma inf_often_map_conv : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop), extensional P -> extensional Q -> (forall s, Q (map f s) -> P s) -> forall (s: infseq A), inf_often Q (map f s) -> inf_often P s.
Lemma continuously_map : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop), (forall s, P s -> Q (map f s)) -> forall (s: infseq A), continuously P s -> continuously Q (map f s).
Lemma continuously_map_conv : forall (f: A->B) (P: infseq A->Prop) (Q: infseq B->Prop), extensional P -> extensional Q -> (forall s, Q (map f s) -> P s) -> forall (s: infseq A), continuously Q (map f s) -> continuously P s.
Lemma eventually_now_map : forall (f: A->B) (P: B->Prop) (s: infseq A), eventually (now (fun x => P (f x))) s -> eventually (now P) (map f s).
Lemma eventually_now_map_conv : forall (f: A->B) (P: B->Prop) (s: infseq A), eventually (now P) (map f s) -> eventually (now (fun x => P (f x))) s.
Lemma eventually_map_now_eq : forall (f: A -> B) a s, eventually (now (eq a)) s -> eventually (now (eq (f a))) (map f s).