End Map.
Notation map := map.
(*****************)
(** ** Flat Map  *)
(*****************)
Section FlatMap.
Variables (A : Type) (B : Type).
Variable f : A -> list B.
(** [flat_map] *)
Fixpoint flat_map (l:list A) : list B :=
match l with
| [] => []
| x :: l => f x ++ flat_map l
end.

Lemma in_flat_map l y :
In y (flat_map l) <-> exists x, In x l /\ In y (f x).