A purely functional implementation of ROBDDs in Haskell

This paper presents an implementation of the ROBDD data structure in Haskell. It shows that lazy evaluation can be used to improve the performance of some ROBDD algorithms. While standard implementations construct the whole structure no matter which parts are demanded we use lazy evaluation to provide a more demand driven construction. To achieve this behavior we have to relax a property that guarantees that ROBDDs contain no redundant nodes. All measurements show that relaxing causes only a small number of additional nodes. Furthermore we present an equality check implementation that performs well although it does not make use of canoicity. The canonicity is lost because of the relaxing. The equality check implementation benefits highly from laziness.

[1]  Chris Okasaki,et al.  Fast Mergeable Integer Maps , 1998 .

[2]  Gill Andy Debugging Haskell by Observing Intermediate Data Structures , 2001 .

[3]  Rob R. Hoogerwoord,et al.  A Logarithmic Implementation of Flexible Arrays , 1992, MPC.

[4]  Ron van der Meyden,et al.  MCK: Model Checking the Logic of Knowledge , 2004, CAV.

[5]  Andy Gill Debugging Haskell by Observing Intermediate Data Structures , 2000, Electron. Notes Theor. Comput. Sci..

[6]  Beate Bollig,et al.  On the complexity of the hidden weighted bit function for various BDD models , 1999, RAIRO Theor. Informatics Appl..

[7]  Rolf Drechsler,et al.  Binary decision diagrams in theory and practice , 2001, International Journal on Software Tools for Technology Transfer.

[8]  E BryantRandal Graph-Based Algorithms for Boolean Function Manipulation , 1986 .

[9]  Saburo Muroga,et al.  Binary Decision Diagrams , 2000, The VLSI Handbook.

[10]  Randal E. Bryant,et al.  Symbolic Boolean manipulation with ordered binary-decision diagrams , 1992, CSUR.

[11]  Chris Okasaki,et al.  Purely functional data structures , 1998 .

[12]  Simon L. Peyton Jones,et al.  Unboxed Values as First Class Citizens in a Non-Strict Functional Language , 1991, FPCA.

[13]  Randal E. Bryant,et al.  Graph-Based Algorithms for Boolean Function Manipulation , 1986, IEEE Transactions on Computers.

[14]  Simon L. Peyton Jones,et al.  Time and space profiling for non-strict, higher-order functional languages , 1995, POPL '95.

[15]  Stephen Adams,et al.  Functional Pearls Efficient sets—a balancing act , 1993, Journal of Functional Programming.

[16]  Thomas Stützle,et al.  SATLIB: An Online Resource for Research on SAT , 2000 .

[17]  Ralf Hinze,et al.  Haskell 98 — A Non−strict‚ Purely Functional Language , 1999 .

[18]  H.J.M. Meijer,et al.  Proceedings of the 1999 Haskell Workshop , 1999 .

[19]  Edward M. Reingold,et al.  Binary search trees of bounded balance , 1972, SIAM J. Comput..

[20]  John Launchbury,et al.  A natural semantics for lazy evaluation , 1993, POPL '93.

[21]  Randal E. Bryant,et al.  On the Complexity of VLSI Implementations and Graph Representations of Boolean Functions with Application to Integer Multiplication , 1991, IEEE Trans. Computers.

[22]  C. Y. Lee Representation of switching circuits by binary-decision programs , 1959 .

[23]  Richard S. Bird,et al.  More haste, less speed: lazy versus eager evaluation , 1997, Journal of Functional Programming.

[24]  H. Andersen An Introduction to Binary Decision Diagrams , 1997 .

[25]  M. F.,et al.  Bibliography , 1985, Experimental Gerontology.

[26]  Ralf Hinze,et al.  Generalizing generalized tries , 2000, Journal of Functional Programming.