End BDDmu_ex_results.
End Nsec.
Section Be_ok.
Variable vf : ad -> bool.
Inductive be_ok : bool_expr -> Prop :=
| zero_ok : be_ok Zero
| one_ok : be_ok One
| var_ok : forall x : BDDvar, vf x = true -> be_ok (Var x)
| neg_ok : forall be : bool_expr, be_ok be -> be_ok (Neg be)
| or_ok :
forall be1 be2 : bool_expr,
be_ok be1 -> be_ok be2 -> be_ok (Or be1 be2)
| and_ok :
forall be1 be2 : bool_expr,
be_ok be1 -> be_ok be2 -> be_ok (ANd be1 be2)
| impl_ok :
forall be1 be2 : bool_expr,
be_ok be1 -> be_ok be2 -> be_ok (Impl be1 be2)
| iff_ok :
forall be1 be2 : bool_expr,
be_ok be1 -> be_ok be2 -> be_ok (Iff be1 be2).

(* Specifications: *)
Lemma var_ok_inv : forall x : BDDvar, be_ok (Var x) -> vf x = true.
Lemma neg_ok_inv : forall be : bool_expr, be_ok (Neg be) -> be_ok be.
Lemma or_ok_inv :
forall be1 be2 : bool_expr, be_ok (Or be1 be2) -> be_ok be1 /\ be_ok be2.
Lemma and_ok_inv :
forall be1 be2 : bool_expr, be_ok (ANd be1 be2) -> be_ok be1 /\ be_ok be2.
Lemma impl_ok_inv :
forall be1 be2 : bool_expr, be_ok (Impl be1 be2) -> be_ok be1 /\ be_ok be2.
Lemma iff_ok_inv :
forall be1 be2 : bool_expr, be_ok (Iff be1 be2) -> be_ok be1 /\ be_ok be2.
Lemma be_x_free_be_ok :
forall be : bool_expr,
(forall x : BDDvar, be_x_free x be = true -> vf x = true) -> be_ok be.
Lemma be_ok_be_x_free :
forall be : bool_expr,
be_ok be -> forall x : BDDvar, be_x_free x be = true -> vf x = true.