(*									*)
(*  MAP "a la CAML"							*)
(*    On definit une fonction map qui applique une fonction a tous les  *)
(*    elements d'un ensemble et renvoie l'ensemble des resultats	*)
(*    Ceci permet, entre autres, de definir facilement l'union		*)
(*    disjointe (Voir ci-dessous)					*)
(*									*)
Fixpoint map (f : Elt -> Elt) (e : Ensf) {struct e} : Ensf :=
  match e with
  | empty => empty
  | add y e => add (f y) (map f e)
  end.

Lemma dans_map : forall (f : Elt -> Elt) (a : Ensf) (x : Elt), dans x (map f a) -> exists y : Elt, dans y a /\ x = f y.