(* Definition d'une grammaire, *)
(*X : ensemble des terminaux, *)
(*V ensemble des non-terminaux, *)
(*R ensemble des productions A -> w, *)
(*S axiome *)

Definition isGram (X V R : Ensf) (S : Elt) : Prop :=
  Mots X /\ inter X V empty /\ dans S V /\ Regles X V R.

(* Specifications: *)
Lemma isGram1 : H -> Mots X.
Lemma isGram2 : H -> inter X V empty.
Lemma isGram3 : H -> dans S V.
Lemma isGram4 : H -> Regles X V R.
Lemma isGram5 : Mots X -> inter X V empty -> dans S V -> Regles X V R -> H.
Lemma Regles_R : forall X V R R' : Ensf, inclus R' R -> Regles X V R -> Regles X V R'.
Lemma Regles_V : forall X V R V' : Ensf, inclus V V' -> Regles X V R -> Regles X V' R.
Lemma Regles_add : forall (X V R : Ensf) (a : Elt) (u : Word), Regles X V R -> dans a V -> inmonoid (union X V) u -> Regles X V (add (couple a (word u)) R).
Lemma Regles_add2 : forall (X V R : Ensf) (a : Elt), Regles X V R -> Regles X (add a V) R.
Lemma Regles_union : forall X V R R' : Ensf, Regles X V R -> Regles X V R' -> Regles X V (union R R').
Lemma isGram_inclus2 : forall (X V R R' : Ensf) (S : Elt), inclus R' R -> isGram X V R S -> isGram X V R' S.
Lemma isGram_inclus3 : forall (X V R : Ensf) (S a : Elt), isGram X V (add a R) S -> isGram X V R S.