Definition be_le2 (be1 be2 : bool_expr) :=
  forall ve : var_env,
  bool_fun_of_bool_expr be1 ve = true -> bool_fun_of_bool_expr be2 ve = true.

(* Specifications: *)
Lemma subst_le2 : forall (x : BDDvar) (bex be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (subst x bex be1) (subst x bex be2).
Lemma replace_le2 : forall (x y : BDDvar) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (replace x y be1) (replace x y be2).
Lemma replacel_le2 : forall (lz ly : list ad) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (replacel be1 lz ly) (replacel be2 lz ly).
Lemma impl_le2 : forall be be1 be2 : bool_expr, be_le2 be1 be2 -> be_le2 (Impl be be1) (Impl be be2).
Lemma and_le2 : forall be1 be2 be1' be2' : bool_expr, be_le2 be1 be2 -> be_le2 be1' be2' -> be_le2 (ANd be1 be1') (ANd be2 be2').
Lemma or_le2 : forall be1 be2 be1' be2' : bool_expr, be_le2 be1 be2 -> be_le2 be1' be2' -> be_le2 (Or be1 be1') (Or be2 be2').
Lemma univ_le2 : forall (x : BDDvar) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (forall_ x be1) (forall_ x be2).
Lemma ex_le2 : forall (x : BDDvar) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (be_ex x be1) (be_ex x be2).
Lemma univl_le2 : forall (lz : list ad) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (univl be1 lz) (univl be2 lz).
Lemma exl_le2 : forall (lz : list ad) (be1 be2 : bool_expr), be_le2 be1 be2 -> be_le2 (exl be1 lz) (exl be2 lz).
Lemma mu_all_le2 : forall t be1 be2 : bool_expr, be_le2 be1 be2 -> be_le2 (mu_all_eval t be1) (mu_all_eval t be2).
Lemma mu_ex_le2 : forall t be1 be2 : bool_expr, be_le2 be1 be2 -> be_le2 (mu_ex_eval t be1) (mu_ex_eval t be2).
Lemma be_le_le2 : forall be1 be2 : bool_expr, be_le be1 be2 -> be_le2 be1 be2.
Lemma be_le2_le : forall be1 be2 : bool_expr, be_le2 be1 be2 -> be_le be1 be2.
Lemma mu_all_le : forall t be1 be2 : bool_expr, be_le be1 be2 -> be_le (mu_all_eval t be1) (mu_all_eval t be2).
Lemma mu_ex_le : forall t be1 be2 : bool_expr, be_le be1 be2 -> be_le (mu_ex_eval t be1) (mu_ex_eval t be2).
Lemma BDDmu_all_lemma : forall gc : BDDconfig -> list ad -> BDDconfig, gc_OK gc -> forall (cfg : BDDconfig) (ul : list ad) (nodet nodeg : ad), BDDconfig_OK cfg -> used_list_OK cfg ul -> used_node' cfg ul nodet -> used_node' cfg ul nodeg -> BDDconfig_OK (fst (BDDmu_all gc cfg ul nodet nodeg)) /\ config_node_OK (fst (BDDmu_all gc cfg ul nodet nodeg)) (snd (BDDmu_all gc cfg ul nodet nodeg)) /\ used_nodes_preserved cfg (fst (BDDmu_all gc cfg ul nodet nodeg)) ul /\ bool_fun_eq (bool_fun_of_BDD (fst (BDDmu_all gc cfg ul nodet nodeg)) (snd (BDDmu_all gc cfg ul nodet nodeg))) (bool_fun_mu_all (bool_fun_of_BDD cfg nodet) (bool_fun_of_BDD cfg nodeg)).
Lemma BDDmu_all_config_OK : BDDconfig_OK (fst (BDDmu_all gc cfg ul nodet nodeg)).
Lemma BDDmu_all_node_OK : config_node_OK (fst (BDDmu_all gc cfg ul nodet nodeg)) (snd (BDDmu_all gc cfg ul nodet nodeg)).
Lemma BDDmu_all_used_nodes_preserved : used_nodes_preserved cfg (fst (BDDmu_all gc cfg ul nodet nodeg)) ul.
Lemma BDDmu_all_list_OK : used_list_OK (fst (BDDmu_all gc cfg ul nodet nodeg)) ul.
Lemma BDDmu_all_list_OK_cons : used_list_OK (fst (BDDmu_all gc cfg ul nodet nodeg)) (snd (BDDmu_all gc cfg ul nodet nodeg) :: ul).
Lemma BDDmu_all_is_mu_all : bool_fun_eq (bool_fun_of_BDD (fst (BDDmu_all gc cfg ul nodet nodeg)) (snd (BDDmu_all gc cfg ul nodet nodeg))) (bool_fun_mu_all (bool_fun_of_BDD cfg nodet) (bool_fun_of_BDD cfg nodeg)).
Lemma BDDmu_ex_lemma : forall gc : BDDconfig -> list ad -> BDDconfig, gc_OK gc -> forall (cfg : BDDconfig) (ul : list ad) (nodet nodeg : ad), BDDconfig_OK cfg -> used_list_OK cfg ul -> used_node' cfg ul nodet -> used_node' cfg ul nodeg -> BDDconfig_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)) /\ config_node_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)) (snd (BDDmu_ex gc cfg ul nodet nodeg)) /\ used_nodes_preserved cfg (fst (BDDmu_ex gc cfg ul nodet nodeg)) ul /\ bool_fun_eq (bool_fun_of_BDD (fst (BDDmu_ex gc cfg ul nodet nodeg)) (snd (BDDmu_ex gc cfg ul nodet nodeg))) (bool_fun_mu_ex (bool_fun_of_BDD cfg nodet) (bool_fun_of_BDD cfg nodeg)).
Lemma BDDmu_ex_config_OK : BDDconfig_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)).
Lemma BDDmu_ex_node_OK : config_node_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)) (snd (BDDmu_ex gc cfg ul nodet nodeg)).
Lemma BDDmu_ex_used_nodes_preserved : used_nodes_preserved cfg (fst (BDDmu_ex gc cfg ul nodet nodeg)) ul.
Lemma BDDmu_ex_list_OK : used_list_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)) ul.
Lemma BDDmu_ex_list_OK_cons : used_list_OK (fst (BDDmu_ex gc cfg ul nodet nodeg)) (snd (BDDmu_ex gc cfg ul nodet nodeg) :: ul).
Lemma BDDmu_ex_is_mu_ex : bool_fun_eq (bool_fun_of_BDD (fst (BDDmu_ex gc cfg ul nodet nodeg)) (snd (BDDmu_ex gc cfg ul nodet nodeg))) (bool_fun_mu_ex (bool_fun_of_BDD cfg nodet) (bool_fun_of_BDD cfg nodeg)).