Open karmacoma-eth opened 11 months ago
started work on this
✅ Preliminary work confirmed the intuition, there are indeed solvers like yices and bitwuzla that consistently outperform z3.
✅ We have a Docker image (https://github.com/a16z/halmos/tree/main/packages/solvers) that ships with multiple competitive solvers, ready to be invoked.
Now we need the infrastructure to spawn solver processes, monitor them, kill them and return results to halmos. This way, halmos can remain "single solver", and just invoke the metasolver.
❌ https://github.com/agra-uni-bremen/metaSMT is a project that sounds similar to what we need, but seems to take a strange approach by actually building the solvers?
For what we need, we can stay in the Python ecosystem
Spec'ing out what we need:
terminate()
first, wait some grace period, then kill()
)yices-2.6.4
and yices-2.6.5
) as if they were separate solvers, and we may also want to support running the same solver but with different options (e.g. bitwuzla
and bitwuzla --abstraction
or default cvc5 and cvc5 with int blasting)
Is your feature request related to a problem? Please describe.
We currently use only z3 to solve both path conditions and assertions. Some solvers like cvc5, bitwuzla or boolector, etc. may give better results on some kinds of tests.
Describe the solution you'd like
Ideally we could validate the concept (do some solvers outperform z3 sometimes? consistently?) without fully productizing it.
We can currently invoke an external solver explicitly with
--solver-subprocess --solver-subprocess-command COMMAND
, so we could manually test with a few solvers on a few types of problems.If it looks like that approach may be beneficial, then we can try to make it more automated, for instance like this: