Definition Derive_inv (R : Ensf) (x y : Word) :=
  match x return Prop with
  | nil =>
      (* nil  *)  False
      (* cons *) 
  | cons A w =>
      ex2 (fun u : Word => dans (couple A (word u)) R)
        (fun u : Word =>
         ex2 (fun v : Word => cons A v = x :>Word)
           (fun v : Word => Append u v = y :>Word)) \/
      ex2 (fun v : Word => Derive R w v)
        (fun v : Word => cons A v = y :>Word)
  end.

(* Specifications: *)
Lemma Derive_inv1 : forall (R : Ensf) (u v : Word), Derive R u v -> Derive_inv R u v.
Lemma Derive_inv2 : forall (R : Ensf) (x y : Word), Derive_inv R x y -> exists A : Elt, (exists2 w : Word, cons A w = x & (exists2 u : Word, dans (couple A (word u)) R & (exists2 v : Word, cons A v = x & Append u v = y)) \/ (exists2 v : Word, Derive R w v & cons A v = y)).
Lemma Derive_inv3 : forall (R : Ensf) (x y : Word), Derive R x y -> exists A : _, (exists2 w : _, cons A w = x & (exists2 u : _, dans (couple A (word u)) R & (exists2 v : _, cons A v = x & Append u v = y)) \/ (exists2 v : _, Derive R w v & cons A v = y)).
Lemma in_mon_X_Der_imp_inmon_X : forall (X V R : Ensf) (u v : Word), Regles X V R -> Derive R u v -> inmonoid (union X V) u -> inmonoid (union X V) v.