(*									*)
(*  Le predicat islangage, defini sur les wordset, dit simplement	*)
(*  que les mots du wordset sont sur l'alphabet alph.			*)
(*									*)

Definition islanguage (X : Ensf) (L : wordset) : Prop :=
  forall w : Word, L w -> inmonoid X w.(*									*)
(*  Extension aux mots d'une fonction definie sur les elements		*)
(*									*)

(*
Fixpoint Word_ext [f : Elt -> Elt; w:Word] : Word :=
  (<Word>Case w of
	(* nil  *) nil
	(* cons *) [a:Elt][w':Word](cons (f a) (Word_ext f w'))
   end ).
*)
Fixpoint Word_ext (f : Elt -> Elt) (w : Word) {struct w} : Word :=
  match w with
  | nil => nil
  | cons a w' => cons (f a) (Word_ext f w')
  end.

Lemma inmonoid_map : forall (f : Elt -> Elt) (a : Ensf) (w : Word), inmonoid a w -> inmonoid (map f a) (Word_ext f w).