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

(* Specifications: *)
Lemma dans_add : forall (x y : Elt) (e : Ensf), dans x (add y e) -> y = x \/ dans x e.
Lemma dans_add_contr : forall (x y : Elt) (e : Ensf), y <> x -> ~ dans x e -> ~ dans x (add y e).
Lemma empty_empty : forall E : Elt, ~ dans E empty.
Lemma dans_empty_imp_P : forall (x : Elt) (P : Prop), dans x empty -> P.
Lemma singl2 : forall x : Elt, dans x (singleton x).
Lemma singl2_inv : forall x e : Elt, dans x (singleton e) -> x = e :>Elt.