(* définition de la quantité d'essence (Astuce de Boyer, définition de *)
(* la reconnaissance par fixpoint...) *)

Definition essence (t : term) (d : preDTA) : nat :=
  S (term_high t) * S (DTA_taille d).(* "hauteur" d'une liste : term_high_0 *)

Definition essence_list (l : term_list) (d : preDTA) 
  (pl : prec_list) : nat :=
  match l, pl with
  | tnil, _ => 1
  | _, prec_empty => 1
  | _, prec_cons a la ls =>
      taille_0 pl + S (term_high_0 l) * S (DTA_taille d)
  end.

Lemma conservation_0 : forall (d : preDTA) (p : prec_list) (c : ad) (l : term_list), prec_in_dta d p -> S (essence_list l d p) <= essence (app c l) d.