unfold Id, comp in |- *.
intros.
auto.
Qed.
Hint Resolve inv1'.
(* On etend la fonction f : Elt-> Elt definie sur V*)
(*en la fonction F=(extension V f)*)
(*definie sur Elt par F(x) = f(x) sur V et F(x)=x ailleurs*)
Axiom
extension_spec :
forall (V : Ensf) (f : Elt -> Elt) (x : Elt),
{y : Elt | dans x V /\ y = f x :>Elt \/ ~ dans x V /\ y = x :>Elt}.
(* Lemma extension_spec : (V:Ensf)(f:Elt->Elt)(x:Elt) {y:Elt | ((dans x V)/\<Elt>y=(f x)) \/ (~(dans x V)/\<Elt>y=x)}. Realizer [V:Ensf][f:Elt -> Elt][x : Elt] (<Elt> Match (Dans_spec x V) with (*true*) (f x) (*false*) x ) . Program_all. Save. *)
Definition extension (V : Ensf) (f : Elt -> Elt) (x : Elt) :=
let (y, p) return Elt := extension_spec V f x in y.

(* Specifications: *)
Lemma extension_in :
forall (e : Ensf) (f : Elt -> Elt) (x : Elt),
dans x e -> extension e f x = f x :>Elt.