End Positions.
Section MapProduct.
Variables (X Y Z: Type) (f: X -> Y -> Z).
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.

(* Specifications: *)
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.