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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Require: two ROBDD nodes n and m<br />

function and_ite(n, m)<br />

if n = 1 <strong>the</strong>n<br />

return m<br />

else if m = 1 <strong>the</strong>n<br />

return n<br />

else if n = 0 or m = 0 <strong>the</strong>n<br />

return 0<br />

else if nvar ≺ mvar <strong>the</strong>n<br />

return make_node nvar, and_ite(ntrue, m), and_ite(nfalse, m) <br />

else if mvar ≺ nvar <strong>the</strong>n<br />

return make_node mvar, and_ite(n, mtrue), and_ite(n, mfalse) <br />

else<br />

return make_node nvar, and_ite(ntrue, mtrue), and_ite(nfalse, mfalse) <br />

Algorithm 1: The and_ite function<br />

Require: two ROBDD nodes n and m<br />

function or_ite(n, m)<br />

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

return m<br />

else if m = 0 <strong>the</strong>n<br />

return n<br />

else if n = 1 or m = 1 <strong>the</strong>n<br />

return 1<br />

else if nvar ≺ mvar <strong>the</strong>n<br />

return make_node nvar, or_ite(ntrue, m), or_ite(nfalse, m) <br />

else if mvar ≺ nvar <strong>the</strong>n<br />

return make_node mvar, or_ite(n, mtrue), or_ite(n, mfalse) <br />

else<br />

return make_node nvar, or_ite(ntrue, mtrue), or_ite(nfalse, mfalse) <br />

Algorithm 2: The or_ite function<br />

3.2 ROBDD algorithms 14

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

Saved successfully!

Ooh no, something went wrong!