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: a ROBDD node n and a set <strong>of</strong> variables F<br />

function and_vs_false(n, F )<br />

avf_impl(n, F, 1)<br />

function avf_impl(n, F, c)<br />

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

return n<br />

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

nres = 1<br />

while xc max(F ) do<br />

nres = make_node <br />

max(F ), 0, nres<br />

F = F \ max(F ) <br />

return nres<br />

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

return make_node nvar, avf_impl(ntrue, F, c), avf_impl(nfalse, F, c) <br />

else<br />

if xc nvar <strong>the</strong>n<br />

nnext = n<br />

else<br />

nnext = nfalse<br />

if ∃xnext = min {x ∈ F . xc ≺ x} <strong>the</strong>n<br />

return make_node(xc, 0, avf_impl(nnext, F, variable_index(xnext)))<br />

else<br />

return make_node(xc, 0, nnext)<br />

Algorithm 18: The and_vs_false function<br />

3.2 ROBDD algorithms 28

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

Saved successfully!

Ooh no, something went wrong!