Use `relnextIntersection` and `relprevIntersection` to improve data-based synthesis performance
After having completed #865 (closed) and #866 (closed), the performance of data-based synthesis can be further improved by using the specialized BDD operations relnextIntersection
and relprevIntersection
in CifBddEdge#apply
. The relnextIntersection(states, relation, restriction, vars)
operation computes and(relnext(states, relation, vars), restriction)
as a single BDD operation, in a way that is more efficient than computing the relnext
and and
separately. And likewise for relprevIntersection
. These BDD operations can therefre be used to compute relnext
/relprev
while imposing some restriction predicate.