On Apr 16, 2007, at 9:07 AM, Neil Mitchell wrote:

Hi,

I am now releasing Data.Proposition. This library handles
propositions, logical formulae consisting of literals without
quantification. It automatically simplifies a proposition as it is
constructed using simple rules provided by the programmer.
Implementations of propositions in terms of an abstract syntax tree
and as a Binary Decision Diagram (BDD) are provided. A standard
interface is provided for all propositions.

Website: http://www-users.cs.york.ac.uk/~ndm/proposition/
Darcs: darcs get --partial http://www.cs.york.ac.uk/fp/darcs/proposition/
Haddock: http://www.cs.york.ac.uk/fp/haddock/proposition/Data-Proposition.html

The Haddock documentation also has a short example in it.

This library is used substantially in the tool I have developed for my
PhD, and has been extensively tested.

Thanks

Jan-Willem Maessen wrote:
> Hmm, your BDD implementation claims (in the comment at the top) that
> "Equality is fast and accurate."  But you don't do sharing
> optimizations, and use derived Eq (rather than object identity), so it's
> exponential in the number of nodes.  Consider:
>
>         A
>        / \
>       B   |
>        \ /
>         C
>        / \
>       D   |
>        \ /
>         E
>
> Here there are five nodes, but we will do two calls to see if C==C, four
> calls to see if E==E.  If I continue the diagram downwards I add two
> nodes and double the number of equality calls on the leaf.
>
> The sharing optimizations are rather important to making an efficient
> BDD implementation.  I haven't yet seen a Haskell-only BDD
> implementation that didn't have one or more of the following flaws:
>   1) IO in all the result types, even though the underlying abstraction
> is pure.
>   2) Inability to garbage collect unused nodes.
>   3) Loss of sharing leading to loss of fast equality.
>
> Does anyone have a Haskell-only BDD library which avoids all these
> problems?  I wrote one with flaw #2, but was unable to make weak
> pointers and finalization behave in anything like a sensible fashion and
> gave up as it was a weekend project.  The concurrency + unsafePerformIO
> mix was trickier than I initially expected, too.
>
> That said, this BDD implementation is pretty similar to the performance
> & behavior you'd get from Data.IntSet (where the bits of your int
> correspond to the True/False values of your variables).
>
> -Jan-Willem Maessen


Use observable sharing or one of the unsafe pointer equality primitives  (?)
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to