Section fonctions.
Variable E : Ensf.
Variable F : Ensf.
Variable f : Elt -> Elt.
(*Definition d'une application*)
Definition application := forall x : Elt, dans x E -> dans (f x) F.
Hint Unfold application.
(*Definition de l'injectivite*)
Definition is_mono :=
forall x y : Elt, dans x E -> dans y E -> f x = f y :>Elt -> x = y :>Elt.
(*Definition surjectivite*)
Definition is_epi :=
application /\
(forall x : Elt, dans x F -> exists2 y : Elt, x = f y & dans y E).
Definition is_iso := is_epi /\ is_mono.
intros; red in |- *; auto.
Qed.
Variable fw : Word -> Word.
(*Definition d'une application pour les mots*)
Definition application_words :=
forall x : Word, inmonoid E x -> inmonoid F (fw x).
(*Definition de l'injectivite*)
Definition is_mono_words :=
forall x y : Word,
inmonoid E x -> inmonoid E y -> fw x = fw y :>Word -> x = y :>Word.
(*Definition surjectivite pour les fonctions sur les monoides*)
Definition is_epi_words :=
application_words /\
(forall x : Word, inmonoid F x -> exists2 y : Word, x = fw y & inmonoid E y).
Definition is_iso_words := is_mono_words /\ is_epi_words.
intros; red in |- *; auto.
Qed.
End fonctions.
Hint Resolve mono_epi_imp_iso.
Parameter inv : Ensf -> Ensf -> (Elt -> Elt) -> Elt -> Elt.
Axiom
dans_inv_f :
forall (E F : Ensf) (f : Elt -> Elt),
is_iso E F f -> forall x : Elt, dans x F -> dans (inv E F f x) E.
Hint Resolve dans_inv_f.
Axiom
inv1 :
forall (E F : Ensf) (f : Elt -> Elt),
is_iso E F f -> forall x : Elt, dans x E -> inv E F f (f x) = x :>Elt.
Hint Resolve inv1.
Axiom
inv2 :
forall (E F : Ensf) (f : Elt -> Elt),
is_iso E F f -> forall x : Elt, dans x F -> f (inv E F f x) = x :>Elt.
Hint Resolve inv2.

Lemma inv1' :
forall (E F : Ensf) (f : Elt -> Elt),
is_iso E F f -> Id E (comp (inv E F f) f).