Partial Breadth-First Package: PBF


Description

This package uses the partial breadth-first evaluation for BDD construction. Within each evaluation context, the breadth-first BDD construction is used until the context is full. Once the context is full, the remaining operations are partitioned. Each paritition is assigned to a new evaluation context. Each evaluation context is then executed recursively using the same algorithm. The size of an evaluation context currently set by the user. If the size is very large, then this is basically a breath-first construction. If the size is too small, then the depth-first construction is used.

The evalution context is also used to support doubly-recursive operations (e.g., quantification and relational product). During the reduction phase for a variable i, the new operations generated for second level of recursion are stored in a new child context. This child context is then evaluated using the partial breadth-first approach described above. Once the result of the child context is available, the reduction of variable i can resume to completion.

There are two types of cache maintained: uncomputed cache and computed cache. The uncomputed cache is for operations that are currently being computed. The computed cache stores the computed result. During the expansion phase (sift down), both caches are consulted to avoid redudant operations. During the reduction phase, the computed results are inserted into the computed cache. In our previous work for combinational BDD operations, we have combined both cache. This separation does slow down the BDD package, but it simplifies the code quite a bit.