todo:
A good summary of SMT from baldoni:compsurv:2018 is
Observe that some problems are more naturally described with languages that are more expressive than the one of boolean formulas with logical connectives. For this reason, satisfiability modulo theories (SMT) generalize the SAT problem with supporting theories to capture formulas involving, for instance, linear arithmetic and operations over arrays. SMT solvers map the atoms in an SMT formula to fresh boolean variables: a SAT decision procedure checks the rewritten formula for satisfiability, and a theory solver checks the model generated by the SAT procedure.
— baldoni:compsurv:2018
[SMT-COMP website] is very significant and probably a good way to find SMT solvers and to select one or two to consider for a new project.
List of major solvers
- https://boolector.github.io
- https://cvc4.github.io
- Z3 solver
- https://yices.csl.sri.com
- https://stp.github.io
- https://alt-ergo.ocamlpro.com
- https://ultimate.informatik.uni-freiburg.de/smtinterpol/
- https://monteverdi.informatik.uni-freiburg.de/tomcat/Website/?ui=tool&tool=eliminator
And Vampire, that is a theorem prover pretending to be an SMT solver? https://vprover.github.io
Testing of SMT solvers
brummayer:sat:2010 and mansur:arxiv:2020 tested SMT solvers and found bugs. There are several proposals such as stump:fmsd:2013 and barrett:mlf:2015 for a proof format that would allow SMT proofs to be checked.
[SMT-COMP website]: https://smt-comp.github.io/
Notes related to SMT solver
CVC4 solver, Omega library, SAT solver, SMT-LIB format, Z3 theorem prover
Papers related to SMT solver
- A framework for cooperating decision procedures [barrett:cade:2000]
- CVC4 [barrett:cav:2011]
- Proofs in satisfiability modulo theories [barrett:mlf:2015]
- The Satisfiability Modulo Theories Library (SMT-LIB) [barrett:smtlib:2016]
- The Axiom profiler: Understanding and debugging SMT quantifier instantiations [becker:tacas:2019]
- Automated testing and debugging of SAT and QBF solvers [brummayer:sat:2010]
- Satisfiability modulo theories: Introduction and applications [demoura:cacm:2011]
- Z3: An efficient SMT solver [demoura:tacas:2008]
- Spectector: Principled detection of speculative information flows [guarnieri:sandp:2020]
- VeriFast: A powerful, sound, predictable, fast verifier for C and Java [jacobs:nfm:2011]
- VeriFast: Imperative programs as proofs [jacobs:vstte:2010]
- TracerX: Dynamic symbolic execution with interpolation [jaffar:arxiv:2020]
- The human in formal methods [krishnamurthi:fm:2019]
- DAG inlining: A decision procedure for reachability-modulo-theories in hierarchical programs [lal:pldi:2015]
- Developing verified programs with Dafny [leino:icse:2013]
- Dafny: An automatic program verifier for functional correctness [leino:lpair:2010]
- Reasoning about comprehensions with first-order SMT solvers [leino:sac:2009]
- Just fuzz it: Solving floating-point constraints using coverage-Guided fuzzing [liew:fse:2019]
- Boolean satisfiability from theoretical hardness to practical success [malik:cacm:2009]
- Detecting critical bugs in SMT solvers using blackbox mutational fuzzing [mansur:arxiv:2020]
- Dataflow-based pruning for speeding up superoptimization [mukherjee:oopsla:2020]
- Viper: A verification infrastructure for permission-based reasoning [muller:vmcai:2016]
- Boolector 2.0 [niemetz:jsat:2015]
- Symbolic execution with SymCC: Don't interpret, compile! [poeplau:usenix:2020]
- SMT proof checking using a logical framework [stump:fmsd:2013]
- Parameterized unit tests [tillmann:fse:2005]
- Synthesizing MILP constraints for efficient and robust optimization [wang:pldi:2023]