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

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