(* Specifications: *)
Lemma Regles_X_V_R : Regles X V R.
Lemma inter_Xim_Vim_empty : inter Xim Vim empty.
Lemma union_Xim_Vim_map_f_union_X_V : union Xim Vim = map f (union X V) :>Ensf.
Lemma Iso : is_iso (union X V) (union Xim Vim) f.
Lemma invf_f : Id (union X V) (comp invf f).
Lemma weinvf_wef : Id_words (union X V) (comp_word weinvf wef).
Lemma comp_Rf : forall (g f : Elt -> Elt) (x : Elt), dans x R -> comp (Rf g) (Rf f) x = Rf (comp g f) x :>Elt.
Lemma egalGim'_image_comp : Gim' = imageGram (comp invf f) X V R S :>Ensf * (Ensf * (Ensf * Elt)).
Lemma egalG : Gim' = (X, (V, (R, S))).
Lemma egalS : Sim' = S :>Elt.
Lemma egalR : Rim' = R :>Ensf.
Lemma egalX : Xim' = X :>Ensf.
Lemma egalV : Vim' = V :>Ensf.
Lemma Reconnait_imageGram_iso : forall w : Word, inmonoid X w -> LG Xim Vim Rim Sim (wef w) -> LG X V R S w.
Lemma egal_Xim : Id X f -> Xim = X :>Ensf.
Lemma egal_LG : Id X f -> l_egal (LG X V R S) (LG Xim Vim Rim Sim).
Lemma inter_X_V1_u_V2 : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter X (union V1 V2) empty.
Lemma inter_X_Vu_d : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> ~ dans S X -> inter X Vu empty.
Lemma Gunion_disj_Regles : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> Regles X Vu Ru.
Lemma inmon_Der_imp_Der_d : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> Regles X V1 R1 -> Regles X V2 R2 -> inter (union X V1) V2 empty -> forall u v : Word, Derive Ru u v -> inmonoid (union X V1) u -> Derive R1 u v.
Lemma inmon_Der_imp_inmon_R1_d : forall u v : Word, Regles X V1 R1 -> Derive R1 u v -> inmonoid (union X V1) u -> inmonoid (union X V1) v.
Lemma inmon_Der_imp_inmon_d : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> forall u v : Word, isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> inmonoid (union X V1) u -> Derive Ru u v -> inmonoid (union X V1) v.
Lemma Gunion_disj_Derivestar : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> forall u v : Word, Derivestar Ru u v -> inmonoid (union X V1) u -> Derivestar R1 u v.
Lemma inmon_Der_imp_Der_d2 : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> Regles X V1 R1 -> Regles X V2 R2 -> inter (union X V2) V1 empty -> forall u v : Word, Derive Ru u v -> inmonoid (union X V2) u -> Derive R2 u v.
Lemma inmon_Der_imp_inmon_R2_d : forall u v : Word, Regles X V2 R2 -> Derive R2 u v -> inmonoid (union X V2) u -> inmonoid (union X V2) v.
Lemma inmon_Der_imp_inmon_d2 : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> forall u v : Word, isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> inmonoid (union X V2) u -> Derive Ru u v -> inmonoid (union X V2) v.
Lemma Gunion_disj_Derivestar2 : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> forall u v : Word, Derivestar Ru u v -> inmonoid (union X V2) u -> Derivestar R2 u v.
Lemma Gunion_disj_Derive1 : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> forall u : Word, Derive Ru (cons S nil) u -> cons S1 nil = u :>Word \/ cons S2 nil = u :>Word.
Lemma Gunion_disj_Derivestar_S : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> forall u : Word, Derivestar Ru (cons S nil) u -> cons S nil = u :>Word \/ Derivestar R1 (cons S1 nil) u \/ Derivestar R2 (cons S2 nil) u.
Lemma Gunion_disj_LG_inclus1 : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> l_inclus (LG X Vu Ru S) (lunion (LG X V1 R1 S1) (LG X V2 R2 S2)).
Lemma Gunion_disj_LG_inclus2 : l_inclus (LG X V1 R1 S1) (LG X Vu Ru S).
Lemma Gunion_disj_LG_inclus3 : l_inclus (LG X V2 R2 S2) (LG X Vu Ru S).
Lemma Gunion_disj_LG_inclus4 : l_inclus (lunion (LG X V1 R1 S1) (LG X V2 R2 S2)) (LG X Vu Ru S).
Lemma Gunion_disj_LG : ~ dans S X -> ~ dans S V1 -> ~ dans S V2 -> isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> l_egal (LG X Vu Ru S) (lunion (LG X V1 R1 S1) (LG X V2 R2 S2)).
Lemma Regles_X_V_R : Regles X V R.
Lemma Trans : Transition X P d.
Lemma X_P_wd_wa_d : P_automata X P wd wa d.
Lemma cut_spec : forall u : Word, {a : Word & {b : Word | inmonoid X a /\ Append a b = u /\ (b = nil \/ ex2 (fun x : Elt => ~ dans x X) (fun x : Elt => exists w : Word, b = cons x w))}}.
Lemma Mots_X : Mots X.
Lemma int_X_V1_empty : inter X V1 empty.
Lemma int_X_V2_empty : inter X V2 empty.
Lemma lwordnil_is_reg1 : reconnait (singleton zero) (singleton zero) (singleton zero) (prodcart empty (prodcart alph empty)) nil.
Lemma lwordnil_is_reg2 : forall w : Word, reconnait (singleton zero) (singleton zero) (singleton zero) (prodcart empty (prodcart alph empty)) w -> w = nil :>Word.
Lemma lwordnil_is_regS : exists q : Ensf, (exists e : Elt, (exists qa : Ensf, (exists d : Ensf, automate q (singleton e) qa d /\ eqwordset (reconnait q (singleton e) qa d) (lword nil)))).
Lemma lwordnil_is_reg : isregular (lword nil).
Lemma extension_qd : forall (w : Word) (e0 e1 e2 e3 a : Elt) (q d : Ensf), chemin e1 e2 q d w -> chemin e1 e2 (add e0 q) (add (couple e0 (couple a e3)) d) w.
Lemma restriction_aut : forall (w : Word) (e0 e e2 e3 a : Elt) (q d : Ensf), ~ dans e0 q -> dans e q -> inclus d (prodcart q (prodcart alph q)) -> chemin e e2 (add e0 q) (add (couple e0 (couple a e3)) d) w -> chemin e e2 q d w.
Lemma extension_aut : forall (w : Word) (e0 e a : Elt) (q qa d : Ensf), reconnait q (singleton e) qa d w -> ~ dans e0 q -> dans a alph -> reconnait (add e0 q) (singleton e0) qa (add (couple e0 (couple a e)) d) (cons a w).
Lemma inter_X_Vu : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter X Vu empty.
Lemma Gunion_Regles : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> Regles X Vu Ru.
Lemma inmon_Der_imp_Der : Regles X V1 R1 -> Regles X V2 R2 -> inter (union X V1) V2 empty -> forall u v : Word, Derive Ru u v -> inmonoid (union X V1) u -> Derive R1 u v.
Lemma inmon_Der_imp_inmon_R1 : forall u v : Word, Regles X V1 R1 -> Derive R1 u v -> inmonoid (union X V1) u -> inmonoid (union X V1) v.
Lemma inmon_Der_imp_inmon : forall u v : Word, isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> inmonoid (union X V1) u -> Derive Ru u v -> inmonoid (union X V1) v.
Lemma Gunion_Derivestar : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> forall u v : Word, Derivestar Ru u v -> inmonoid (union X V1) u -> Derivestar R1 u v.
Lemma inmon_Der_imp_Der2 : Regles X V1 R1 -> Regles X V2 R2 -> inter (union X V2) V1 empty -> forall u v : Word, Derive Ru u v -> inmonoid (union X V2) u -> Derive R2 u v.
Lemma inmon_Der_imp_inmon_R2 : forall u v : Word, Regles X V2 R2 -> Derive R2 u v -> inmonoid (union X V2) u -> inmonoid (union X V2) v.
Lemma inmon_Der_imp_inmon_2 : forall u v : Word, isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> inmonoid (union X V2) u -> Derive Ru u v -> inmonoid (union X V2) v.
Lemma Gunion_Derivestar2 : isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> inter V1 V2 empty -> forall u v : Word, Derivestar Ru u v -> inmonoid (union X V2) u -> Derivestar R2 u v.
Lemma Gunion_isGram : forall S : Elt, isGram X V1 R1 S1 -> isGram X V2 R2 S2 -> dans S Vu -> isGram X Vu Ru S.
Lemma dans_Rim : forall (A : Elt) (u : Word), dans (couple A (word u)) R1 -> dans (couple (f A) (word (wef u))) Rim.
Lemma image_Regles : Regles X V1 R1 -> Regles Xim Vim Rim.
Lemma image_isGram : isGram X V1 R1 S1 -> Mots Xim -> inter Xim Vim empty -> isGram Xim Vim Rim Sim.
Lemma Id_image_X : Id (union X V1) f -> Xim = X :>Ensf.
Lemma Id_image_V : Id (union X V1) f -> Vim = V1 :>Ensf.
Lemma Id_image_R : Id (union X V1) f -> isGram X V1 R1 S1 -> Rim = R1 :>Ensf.
Lemma Id_image_S : Id (union X V1) f -> isGram X V1 R1 S1 -> Sim = S1 :>Elt.
Lemma Gim_egal : Gim = (Xim, (Vim, (Rim, Sim))).
Lemma Id_image_G : Id (union X V1) f -> isGram X V1 R1 S1 -> Gim = (X, (V1, (R1, S1))).
Lemma Derive_image : forall u v : Word, Derive R1 u v -> Derive Rim (wef u) (wef v).
Lemma Derivestar_image : forall u v : Word, Derivestar R1 u v -> Derivestar Rim (wef u) (wef v).
Lemma Reconnait_imageGram : forall w : Word, LG X V1 R1 S1 w -> LG Xim Vim Rim Sim (wef w).