Fixpoint map_pro (A: list X) (B: list Y) : list Z :=
    match A with
    | x :: A' => map_pro A' B ++ map (f x) B
    | nil => nil
    end.

Lemma map_pro_in x A B : x el map_pro A B <-> exists a b, a el A /\ b el B /\ f a b = x.