You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Right now, the symbolic evaluator API simply permits only a single query to the SMT solver. Sometimes there is benefit in permitting multiple queries however. For example, if you have a query over two disjoint properties it is better to query separately. Splitting the query into two annotations might duplicate work in the evaluation, which is also problematic. Even worse, if we want to conditionally do more queries, we cannot... For example, if we want to increase a bound for iterative deepening.
The solution I propose for now would be through a monadic interface of the evaluator instead. That is, instead of boolean functions, we would expect a function of type Sym (). The Sym monad would have a few built-in functions it exposes:
Query an SMT solver for satisfiability (or validity) of a given expression.
Halt the evaluator (useful if you e.g. want to crash given a non valid result)
'evaluate' (i.e. force a value), but with specific settings. Alternatively, the settings can be placed in a stateful way? Not sure what is better. Settings could include:
Max depth (useful for satisfiability checking)
How often to prune
Maybe to select the merging strategy? (i.e. some hybrid approach)
Fill in an expression with a model from the solver
Dump the RTS (i.e. the runtime system, printing all reachable expression of a given expression)
Measure timing
Regarding satisfiability/validity check, perhaps the most modular way to permit these is by having functions to catch Unreachable, UndefinedBehaviour and Raise? The alternative is to bake these into the check.
Note, we should btw error if we do not get a unit value at the end of eval.
Activity
[-]Multiple queries[/-][+]Multiple queries/API change[/+]RobinWebbers commentedon Oct 16, 2026
Here's a few more that might make sense:
Regarding satisfiability/validity check, perhaps the most modular way to permit these is by having functions to catch
Unreachable,UndefinedBehaviourandRaise? The alternative is to bake these into the check.Note, we should btw error if we do not get a unit value at the end of eval.