(* procédure destinée à tester la propriété wrt *)
Fixpoint pl_compat_check (p : prec_list) : option nat :=
match p with
| prec_empty => Some 0
| prec_cons a la ls =>
match ls with
| prec_empty =>
match pl_compat_check la with
| None => None
| Some n => Some (S n)
end
| prec_cons _ _ _ =>
match pl_compat_check la, pl_compat_check ls with
| None, _ => None
| _, None => None
| Some n, Some m =>
if beq_nat (S n) m then Some m else None
end
end
end.

(* Specifications: *)
Lemma pl_compat_check_correct :
forall (p : prec_list) (n : nat),
pl_tl_length p n -> pl_compat_check p = Some n.
Lemma pl_compat_check_complete :
forall (p : prec_list) (n : nat),
pl_compat_check p = Some n -> pl_tl_length p n.