split.
unfold wd in |- *.
apply inmonoid_cons.
trivial.
unfold P in |- *.
apply union_d.
apply isGram3 with X R.
exact Gram.
split.
apply inmonoid_nil.
exact Trans.
Qed.

(* Specifications: *)
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))}}.