27.09.2013 Views

a modern C++ library for the manipulation of Boolean functions

a modern C++ library for the manipulation of Boolean functions

a modern C++ library for the manipulation of Boolean functions

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Require: an ROBDD node n and a set <strong>of</strong> variables E<br />

function elim_search_true_vars(n, E)<br />

if is_leaf(n) <strong>the</strong>n<br />

return (n, E)<br />

else if nvar ∈ E or nfalse <br />

= 0 <strong>the</strong>n<br />

E = E ∪ nvar<br />

return (elim_search_true_vars(ntrue, E), E)<br />

else if E = ∅ or max(E) ≺ nvar <strong>the</strong>n<br />

return (n, E)<br />

else<br />

return (make_node nvar, elim_true_vars(ntrue, E), elim_true_vars(nfalse, E) , E)<br />

Algorithm 15: The elim_search_true_vars function.<br />

Require: an ROBDD node n and a set <strong>of</strong> variables D<br />

function elim_search_false_vars(n, D)<br />

if is_leaf(n) <strong>the</strong>n<br />

return (n, D)<br />

else if nvar ∈ D or ntrue <br />

= 0 <strong>the</strong>n<br />

D = D ∪ nvar<br />

return (elim_search_false_vars(nfalse, D), D)<br />

else if D = ∅ or max(D) ≺ nvar <strong>the</strong>n<br />

return (n, D)<br />

else<br />

return (make_node nvar, elim_false_vars(ntrue, D), elim_false_vars(nfalse, D) , D)<br />

Algorithm 16: The elim_search_false_vars function.<br />

3.2 ROBDD algorithms 26

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!