Section Easy_lemma_isGram.
Variable X V R : Ensf.
Variable S : Elt.
Let H := isGram X V R S.
intro H1.
elim H1.
trivial.
Qed.
intro H1.
elim H1.
intuition.
Qed.
intro H1.
elim H1.
intuition.
Qed.
intro H1.
elim H1.
intuition.
Qed.
intros.
red in |- *; red in |- *.
auto.
Qed.
End Easy_lemma_isGram.
(*--------*)
unfold Regles in |- *.
auto.
Qed.
unfold Regles in |- *.
intros X V R V' inclus_V_V' Regles_X_V_R x dans_x_R.
elim (Regles_X_V_R x dans_x_R).
intros A dans_A_V temp; elim temp; clear temp.
intros B egal_B inmonoid_B.
exists A.
auto.
exists B.
assumption.
apply inmonoid_inclus with (union X V); auto.
Qed.
intros X V R a u R_R dans_a_V inmonoid_u_X_V_u.
red in |- *.
intros x dans_x_R'.
cut (couple a (word u) = x :>Elt \/ dans x R). (**)
intuition.
(*	Intro egal_x_couple.*)
exists a.
assumption.
exists u; auto.
(**)apply dans_add; assumption. Qed.  Lemma Regles_add2 : forall (X V R : Ensf) (a : Elt), Regles X V R -> Regles X (add a V) R. intros. apply Regles_V with V; auto. Qed.   Lemma Regles_union : forall X V R R' : Ensf, Regles X V R -> Regles X V R' -> Regles X V (union R R').  unfold Regles in |- *. intros X V R R' R_R R_R' x dans_x_union. cut (dans x R \/ dans x R'); auto. intros [HR| HR']; auto. Qed.  Lemma isGram_inclus2 : forall (X V R R' : Ensf) (S : Elt), inclus R' R -> isGram X V R S -> isGram X V R' S. prolog [ isGram4 Regles_R isGram3 isGram2 isGram1 isGram5 ] 11.  (*Intros X V R R' S incl isGram_X_V_R_S. Apply isGram5 . Apply isGram1 with V R S; Assumption. Apply isGram2 with R S; Assumption. Apply isGram3 with X R; Assumption. Apply Regles_R with R. Assumption. Apply isGram4 with S; Assumption.*)
Qed.

Lemma isGram_inclus3 :
forall (X V R : Ensf) (S a : Elt), isGram X V (add a R) S -> isGram X V R S.