(* correction par rapport à une signature : dernière version (forte) de compatibilité *)
(* définition des signatures *)
(* la compatibilité avec signature assure la correction des prec_list (forme) *)
Definition signature : Set := Map nat.
Definition state_correct_wrt_sign (s : state) (sigma : signature) : Prop :=
forall (a : ad) (p : prec_list),
MapGet prec_list s a = Some p ->
exists n : nat, MapGet nat sigma a = Some n /\ pl_tl_length p n.
Definition predta_correct_wrt_sign (d : preDTA) (sigma : signature) : Prop :=
forall (a : ad) (s : state),
MapGet state d a = Some s -> state_correct_wrt_sign s sigma.
Definition dta_correct_wrt_sign (d : DTA) (sigma : signature) : Prop :=
match d with
| dta d a => predta_correct_wrt_sign d sigma
end.

(* Specifications: *)
Lemma states_correct_wrt_sign_compatibles :
forall (sigma : signature) (s s' : state),
state_correct_wrt_sign s sigma ->
state_correct_wrt_sign s' sigma -> st_compatible s s'.
Lemma predtas_correct_wrt_sign_compatibles :
forall (sigma : signature) (d d' : preDTA),
predta_correct_wrt_sign d sigma ->
predta_correct_wrt_sign d' sigma -> predta_compatible d d'.
Lemma dtas_correct_wrt_sign_compatibles :
forall (sigma : signature) (d d' : DTA),
dta_correct_wrt_sign d sigma ->
dta_correct_wrt_sign d' sigma -> dta_compatible d d'.