Shouldn't it be:
``` type lazy_bdd() = :top or :bottom or {type(), constrained :: lazy_bdd(), uncertain :: lazy_bdd(), dual :: lazy_bdd()} ```
(where the members are `lazy_bdd()` instead of `bdd()`?)
``` type lazy_bdd() = :top or :bottom or {type(), constrained :: lazy_bdd(), uncertain :: lazy_bdd(), dual :: lazy_bdd()} ```
(where the members are `lazy_bdd()` instead of `bdd()`?)