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.

Lemma mono_epi_imp_iso_words : is_mono_words -> is_epi_words -> is_iso_words.