proposition: Lemma list_pred_map_both : forall (A B C D : Set)(P : A -> B -> Prop)(lsa : list A)(lsb : list B)(f1 : A -> C)(f2 : B -> D), list_pred P lsa lsb -> list_pred (fun c d => exists a b, P a b /\ c = (f1 a) /\ d = (f2 b)) (map f1 lsa) (map f2 lsb).
proof: Proof. induction lsa; destruct lsb; intuition; simpl in *. econstructor. inversion H. inversion H. inversion H; clear H; subst. econstructor; intuition. eauto. Qed.
imports: FCF.FCF Permutation