Axiom Pdec : forall (P : Elt -> Prop) (x : Elt), {P x} + {~ P x}.(*									*)
(*  Grace a l'axiome de decidabilite on peut construire, a partir d'un	*)
(*  ensemble e et d'un predicat f:Elt->Prop, le sous-ensemble des	*)
(*  elements de e qui verifient f.					*)
(*									*) 

Fixpoint tq (f : Elt -> Prop) (e : Ensf) {struct e} : Ensf :=
  match e return Ensf with
  | empty =>
      (* empty *)  empty
      (* add   *) 
  | add x F =>
      match Pdec f x return Ensf with
      | left fx =>
          (* true *)	 add x (tq f F)
          (* false *)	
      | right nfx => tq f F
      end
  end.

(* Specifications: *)
Lemma dans_tq_imp : forall (x : Elt) (f : Elt -> Prop) (E : Ensf), dans x (tq f E) -> dans x E /\ f x.
Lemma imp_dans_tq : forall (x : Elt) (f : Elt -> Prop) (E : Ensf), dans x E -> f x -> dans x (tq f E).
Lemma inclus_tq : forall (f : Elt -> Prop) (a : Ensf), inclus (tq f a) a.