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.