(* définition des états *)
Definition state := Map prec_list.
(* définition des automates *)
Definition preDTA := Map state.
Inductive DTA : Set :=
dta : preDTA -> ad -> DTA.
(* calcul de la taille de l'automate : *)
Fixpoint taille_0 (l : prec_list) : nat :=
match l with
| prec_empty => 0
| prec_cons x y z => S (taille_0 y + taille_0 z)
end.
Fixpoint taille_1 (s : state) : nat :=
match s with
| M0 => 0
| M1 x y => taille_0 y
| M2 x y => max (taille_1 x) (taille_1 y)
end.
Fixpoint DTA_taille (d : preDTA) : nat :=
match d with
| M0 => 0
| M1 x y => taille_1 y
| M2 x y => max (DTA_taille x) (DTA_taille y)
end.

(* Specifications: *)
Lemma taille_aux_0 :
forall (a : ad) (la ls : prec_list),
S (taille_0 la) <= taille_0 (prec_cons a la ls).
Lemma taille_aux_1 :
forall (a : ad) (la ls : prec_list), 1 <= taille_0 (prec_cons a la ls).
Lemma taille_aux_2 :
forall (a : ad) (la ls : prec_list),
S (taille_0 ls) <= taille_0 (prec_cons a la ls).