Binary Decision Diagrams (BDD) and Zero-suppressed Binary Decision Diagrams (ZDD)
Please see the README on GitHub at https://github.com/msakai/haskell-decision-diagrams#readme
decision-diagrams
Binary Decision Diagrams (BDD) and Zero-suppressed Binary Decision Diagrams (ZDD) implementation in Haskell.
BDD is a data stucture suitable for representing boolean functions (can be thought as a compressed representation of truth tables) and many operations on boolean functions can be performed efficiently. ZDD is a variant of BDD suitable for representing (sparse) families of sets compactly.
BDD/ZDD uses hash-consing for compact representation and efficient comparison, and we use intern package for implementing hash-consing.
Comparison with other BDD packages for Haskell
Package name | Repository | BDD | ZDD | Style | Implementation | Hash-consing / Fast equality test |
---|---|---|---|---|---|---|
decision-diagrams (this package) | GitHub | ✔️ | ✔️ | pure | pure Haskell | ✔️ |
zsdd | GitHub (deleted?) | ✔️ | ✔️ | monadic | pure Haskell | ✔️ |
obdd | GitHub | ✔️ | - | pure | pure Haskell | - |
HasCacBDD | GitHub | ✔️ | - | pure | FFI | ✔️ |
hBDD (hBDD-CUDD, hBDD-CMUBDD) | GitHub | ✔️ | - | pure | FFI | ✔️ |
cudd | GitHub | ✔️ | - | both pure*1 and monadic | FFI | ✔️ |
*1: cudd
's pure interface is different from normal Haskell data types (like ones in the containers package, for example) because it requires DDManager
argument.
Please feel free to make a pull request for addition or correction to the comparision.