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

(* Specifications: *)
Lemma inmonoid_map : forall (f : Elt -> Elt) (a : Ensf) (w : Word), inmonoid a w -> inmonoid (map f a) (Word_ext f w).
Lemma cons_cons : forall (x1 x2 : Elt) (w1 w2 : Word), x1 = x2 :>Elt -> w1 = w2 :>Word -> cons x1 w1 = cons x2 w2 :>Word.