(*									*)
(*  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 map_union : forall (f : Elt -> Elt) (a b : Ensf), union (map f a) (map f b) = map f (union a b) :>Ensf.