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