Definition BDDuniv_memo_put (cfg : BDDconfig) (x : BDDvar)
  (node node' : ad) :=
  match cfg with
  | (bs, (share, (fl, (cnt, (negm, (orm, um)))))) =>
      (bs, (share, (fl, (cnt, (negm, (orm, MapPut2 ad um node x node'))))))
  end.

(* Specifications: *)
Lemma BDDum_put_nodes_preserved : forall (cfg : BDDconfig) (x : BDDvar) (node node' : ad), nodes_preserved cfg (BDDuniv_memo_put cfg x node node').
Lemma BDDum_put_OK : forall (cfg : BDDconfig) (x : BDDvar) (node node' : ad), BDDconfig_OK cfg -> config_node_OK cfg node -> config_node_OK cfg node' -> Nleb (node_height cfg node') (node_height cfg node) = true -> bool_fun_eq (bool_fun_of_BDD cfg node') (bool_fun_forall x (bool_fun_of_BDD cfg node)) -> BDDconfig_OK (BDDuniv_memo_put cfg x node node').
Lemma not_zero_is_one : forall (cfg : BDDconfig) (node : ad), config_node_OK cfg node -> in_dom _ node (fst cfg) = false -> Neqb node BDDzero = false -> Neqb node BDDone = true.
Lemma used'_zero : forall (cfg : BDDconfig) (ul : list ad), used_node' cfg ul BDDzero.
Lemma used'_one : forall (cfg : BDDconfig) (ul : list ad), used_node' cfg ul BDDone.
Lemma cons_OK_list_OK : forall (cfg : BDDconfig) (ul : list ad) (node : ad), used_list_OK cfg (node :: ul) -> used_list_OK cfg ul.