(*                                                                    *)
(*  APPARTENANCE :                                                    *)
(*    On definit le predicat (dans x E) pour un element x et un       *)
(*    ensemble E.                                                     *)
(*                                                                    *)
 
Inductive dans : Elt -> Ensf -> Prop :=
  | dans_add1 : forall (x : Elt) (e : Ensf), dans x (add x e)
  | dans_add2 : forall (x y : Elt) (e : Ensf), dans x e -> dans x (add y e).(*                                                                    *)
(*  APPARTENANCE :                                                    *)
(*    On definit le predicat (dans x E) pour un element x et un       *)
(*    ensemble E.                                                     *)
(*                                                                    *)
 
Inductive dans : Elt -> Ensf -> Prop :=
  | dans_add1 : forall (x : Elt) (e : Ensf), dans x (add x e)
  | dans_add2 : forall (x y : Elt) (e : Ensf), dans x e -> dans x (add y e).(*                                                                    *)
(*  APPARTENANCE :                                                    *)
(*    On definit le predicat (dans x E) pour un element x et un       *)
(*    ensemble E.                                                     *)
(*                                                                    *)
 
Inductive dans : Elt -> Ensf -> Prop :=
  | dans_add1 : forall (x : Elt) (e : Ensf), dans x (add x e)
  | dans_add2 : forall (x y : Elt) (e : Ensf), dans x e -> dans x (add y e).

Lemma singl2_inv : forall x e : Elt, dans x (singleton e) -> x = e :>Elt.