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