(* (mu_form_ap_ok vf f) means that for all atomic propositions p occurring in f (vf ap)=true *)
Inductive mu_form_ap_ok (vf : ad -> bool) : mu_form -> Prop :=
| mu_0_ok : mu_form_ap_ok vf mu_0
| mu_1_ok : mu_form_ap_ok vf mu_1
| mu_ap_ok : forall p : ad, vf p = true -> mu_form_ap_ok vf (mu_ap p)
| mu_rel_var_ok : forall P : ad, mu_form_ap_ok vf (mu_rel_var P)
| mu_neg_ok :
forall f : mu_form, mu_form_ap_ok vf f -> mu_form_ap_ok vf (mu_neg f)
| mu_and_ok :
forall f g : mu_form,
mu_form_ap_ok vf f ->
mu_form_ap_ok vf g -> mu_form_ap_ok vf (mu_and f g)
| mu_or_ok :
forall f g : mu_form,
mu_form_ap_ok vf f ->
mu_form_ap_ok vf g -> mu_form_ap_ok vf (mu_or f g)
| mu_impl_ok :
forall f g : mu_form,
mu_form_ap_ok vf f ->
mu_form_ap_ok vf g -> mu_form_ap_ok vf (mu_impl f g)
| mu_iff_ok :
forall f g : mu_form,
mu_form_ap_ok vf f ->
mu_form_ap_ok vf g -> mu_form_ap_ok vf (mu_iff f g)
| mu_all_ok :
forall (t : ad) (f : mu_form),
mu_form_ap_ok vf f -> mu_form_ap_ok vf (mu_all t f)
| mu_ex_ok :
forall (t : ad) (f : mu_form),
mu_form_ap_ok vf f -> mu_form_ap_ok vf (mu_ex t f)
| mu_mu_ok :
forall (P : ad) (f : mu_form),
mu_form_ap_ok vf f -> mu_form_ap_ok vf (mu_mu P f).

(* Specifications: *)
Lemma mu_ap_ok_inv :
forall (vf : ad -> bool) (p : ad), mu_form_ap_ok vf (mu_ap p) -> vf p = true.