(* une fonction permettant de décider la propriété preDTA_ref_ok *)

Definition addr_in_dta_check (d : preDTA) (a : ad) : bool :=
  match MapGet state d a with
  | None => false
  | Some _ => true
  end.Fixpoint prec_list_ref_ok_check (p : prec_list) : preDTA -> bool :=
  fun d : preDTA =>
  match p with
  | prec_empty => true
  | prec_cons a la ls =>
      addr_in_dta_check d a &&
      (prec_list_ref_ok_check la d && prec_list_ref_ok_check ls d)
  end.

(* Specifications: *)
Lemma prec_list_ref_ok_check_correct : forall (p : prec_list) (d : preDTA), prec_list_ref_ok p d -> prec_list_ref_ok_check p d = true.
Lemma prec_list_ref_ok_check_complete : forall (p : prec_list) (d : preDTA), prec_list_ref_ok_check p d = true -> prec_list_ref_ok p d.