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

Lemma mono_imp_iso_over_image : is_mono E f -> is_iso E (map f E) f.