(* taille des termes : *)

Fixpoint taille_term (t : term) : nat :=
  match t with
  | app c l => S (mtaille_term_list l)
  end
 
 with mtaille_term_list (l : term_list) : nat :=
  match l with
  | tnil => 0
  | tcons hd tl => max (taille_term hd) (mtaille_term_list tl)
  end.(* définition des structures prec_list : adjacence des états de l'automate *)

Inductive prec_list : Set :=
  | prec_cons : ad -> prec_list -> prec_list -> prec_list
  | prec_empty : prec_list.(* définition des structures prec_list : adjacence des états de l'automate *)

Inductive prec_list : Set :=
  | prec_cons : ad -> prec_list -> prec_list -> prec_list
  | prec_empty : prec_list.(* définition des structures prec_list : adjacence des états de l'automate *)

Inductive prec_list : Set :=
  | prec_cons : ad -> prec_list -> prec_list -> prec_list
  | prec_empty : prec_list.

Lemma pl_sum : forall pl : prec_list, pl = prec_empty \/ (exists a : ad, (exists la : prec_list, (exists ls : prec_list, pl = prec_cons a la ls))).