(* 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.
(* lemmes concernant la gestion de la diminution de la quantité d'essence *)

(* Specifications: *)
Lemma conservation_0_0 : forall n n0 : nat, S n * S n0 = S (n0 + n * S n0).
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.
Lemma conservation_1 :
forall (d : preDTA) (l : term_list), 1 <= essence_list l d prec_empty.
Lemma conservation_2 :
forall (d : preDTA) (p : prec_list), 1 <= essence_list tnil d p.
Lemma conservation_3 :
forall (d : preDTA) (hd : term) (tl : term_list) (a : ad)
(la ls : prec_list),
S (essence_list (tcons hd tl) d ls) <=
essence_list (tcons hd tl) d (prec_cons a la ls).
Lemma conservation_4 :
forall (d : preDTA) (hd : term) (tl : term_list) (a : ad)
(la ls : prec_list),
S (essence_list tl d la) <= essence_list (tcons hd tl) d (prec_cons a la ls).
Lemma conservation_5_0 :
forall (a : ad) (la ls : prec_list), 1 <= taille_0 (prec_cons a la ls).
Lemma conservation_5 :
forall (d : preDTA) (hd : term) (tl : term_list) (a : ad)
(la ls : prec_list),
S (essence hd d) <= essence_list (tcons hd tl) d (prec_cons a la ls).