Skip to content

0.5.0

Compare
Choose a tag to compare
@daemontus daemontus released this 03 May 12:52
· 91 commits to master since this release

This release introduces several new methods related to more advanced BDD operations. It also deprecates a few methods, but these are replaced with new ones using the same API, so this is only a change of method name. The old methods will stay available until the 1.0.0.

  • Adds Bdd::if_then_else operator implemented using Bdd::ternary_op.
  • Adds new "low level" apply operators: Bdd::binary_op_with_exists, Bdd::binary_op_with_for_all and Bdd::binary_op_nested (which is a generalisation of the exists and for_all variants).
  • Deprecates Bdd::var_project and Bdd::project in favour of Bdd::var_exists and Bdd::exists.
  • Adds Bdd::var_for_all and Bdd::for_all.
  • New faster implementations for Bdd::exists, Bdd::for_all and Bdd::restrict based on the new apply operators.
  • Adds Bdd::to_cnf and Bdd::to_dnf.
  • New faster implementations for BddVariableSet::mk_cnf and BddVariableSet::mk_dnf.
  • Adds unsafe Bdd::set_num_vars and Bdd::rename_variable methods for explicit manipulation of the underlying BDD. The methods are unsafe because they have a very "low level" effect, but otherwise will always only produce valid BDDs.
  • Adds BddVariableSet::mk_sat_up_to_k and BddVariableSet::mk_sat_exactly_k for building BDDs that are satisfied for valuations with up to/exactly k valid literals.
  • BddVariableSetBuilder is now clone-able. Because why even wasn't it before?