Section fonctions2.
Variable E : Ensf.
Variable F : Ensf.
Variable f : Elt -> Elt.
Hint Unfold application.
split.
auto.
intros.
cut (exists y : Elt, dans y E /\ x = f y :>Elt).
intro temp; elim temp; clear temp.
intro. intuition.
prolog [ ex_intro2 ] 4.
(*Intros y temp; Elim temp; Clear temp ; Intros dans_y egal_y. Exists y;Auto.*)
auto.
Qed.
Hint Resolve is_epi_f_over_image.
auto.
Qed.
Let invf := inv E F f.
Hint Unfold invf.
intros.
red in |- *.
intros x y dans_x dans_y egal_inv.
replace x with (f (inv E F f x)).
replace y with (f (inv E F f y)).
apply (f_equal (A:=Elt) (B:=Elt)); assumption.
auto.
auto.
Qed.
unfold invf in |- *.
intro is_iso_f.
split.
auto. (* Hint : dans_inv_f*)
(* Hints Resolve inv1 .*)
intros x dans_x.
exists (f x); [ apply sym_equal; auto | elim is_iso_f ].
intros is_epi_f. elim is_epi_f.
auto.
Qed.
Let wef := Word_ext f.
intro Hyp.
red in |- *.
intros x inmon; elim inmon; clear inmon.
auto.
intros.
replace (wef (cons e w)) with (cons (f e) (wef w)); auto.
Qed.
Hint Resolve application_imp_application_words.

Lemma is_mono_f_imp_is_mono_words : is_mono E f -> is_mono_words E wef.