Closed jwaldmann closed 1 year ago
Is the Variable
class what you're looking for? exists :: (Variable a, MonadState s m, HasSAT s) => m a
Ah yes. Variable.exists
is my Unknown.unknown
.
exists
is not a class method, to avoid duplication in its implementation (with the implementation of forall
). This design separates these issues:
literally
)exist
/forall
)
Structural recursion (for compound types) is used for implementing literally
(only).Perhaps the above can be added to the documentation?
(Happy New Year!)
I find the following quite useful - but before I make a PR, I'd like to collect opinions.
An allocator produces
Bit
s that encode some unknown value. E.g.,exists
is an allocator forBit
. A complete allocator just depends on the result type (and on nothing else). This can be expressed byand for arrays - in case the index type is complete
Examples:
Can we have something like this in
ersatz
? Or do we already have it?