(*--------------------------*)



(* (Derive R u v) signifie "u se recrit en v par une production de R" *)
Inductive Derive (R : Ensf) : Word -> Word -> Prop :=
 
 (*si A -R-> u alors Av -G-> uv *)
  | Derive1 :
      forall (u v : Word) (A : Elt),
      dans (couple A (word u)) R ->
      Derive R (cons A v) (Append u v)
      
      (*si u -G-> v alors x::u -G-> x::v*)
  | Derive2 :
      forall (u v : Word) (x : Elt),
      Derive R u v -> Derive R (cons x u) (cons x v).(*--------------------------*)



(* (Derive R u v) signifie "u se recrit en v par une production de R" *)
Inductive Derive (R : Ensf) : Word -> Word -> Prop :=
 
 (*si A -R-> u alors Av -G-> uv *)
  | Derive1 :
      forall (u v : Word) (A : Elt),
      dans (couple A (word u)) R ->
      Derive R (cons A v) (Append u v)
      
      (*si u -G-> v alors x::u -G-> x::v*)
  | Derive2 :
      forall (u v : Word) (x : Elt),
      Derive R u v -> Derive R (cons x u) (cons x v).(*--------------------------*)



(* (Derive R u v) signifie "u se recrit en v par une production de R" *)
Inductive Derive (R : Ensf) : Word -> Word -> Prop :=
 
 (*si A -R-> u alors Av -G-> uv *)
  | Derive1 :
      forall (u v : Word) (A : Elt),
      dans (couple A (word u)) R ->
      Derive R (cons A v) (Append u v)
      
      (*si u -G-> v alors x::u -G-> x::v*)
  | Derive2 :
      forall (u v : Word) (x : Elt),
      Derive R u v -> Derive R (cons x u) (cons x v).

Lemma Derive_inclus : forall (R1 R2 : Ensf) (u v : Word), inclus R1 R2 -> Derive R1 u v -> Derive R2 u v.