@@ -60,19 +60,19 @@ Only a few SMT solvers provide support for theories like Arrays, Floating Point,
6060
6161JavaSMT supports several SMT solvers (see [ Getting Started] ( doc/Getting-started.md ) for installation):
6262
63- | SMT Solver | Linux x64 | Linux arm64 | Windows x64 | Windows arm64 | MacOS x64 | MacOS arm64 | Description |
64- | --- | :--------------------- :| :------------------- :| :---:| :---:| :--------------------------------------------------- ---:| :---:| :--- |
65- | [ Bitwuzla] ( https://bitwuzla.github.io/ ) | :heavy_check_mark : ² | :heavy_check_mark : ² | :heavy_check_mark : | | | | a fast solver for bitvector logic |
66- | [ Boolector] ( https://boolector.github.io/ ) | :heavy_check_mark : | | | | | | a fast solver for bitvector logic, misses formula introspection, deprecated |
67- | [ CVC4] ( https://cvc4.github.io/ ) | :heavy_check_mark : | | | | | | |
68- | [ CVC5] ( https://cvc5.github.io/ ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | | :heavy_check_mark : | :heavy_check_mark : | |
69- | [ MathSAT5] ( http://mathsat.fbk.eu/ ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/430 ) ³ | | |
70- | [ OpenSMT] ( https://verify.inf.usi.ch/opensmt ) | :heavy_check_mark : ² | :heavy_check_mark : ² | | | | | |
71- | [ OptiMathSAT] ( http://optimathsat.disi.unitn.it/ ) | :heavy_check_mark : | | | | | | based on MathSAT5, with support for optimization queries |
72- | [ Princess] ( http://www.philipp.ruemmer.org/princess.shtml ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | Java-based SMT solver |
73- | [ SMTInterpol] ( https://ultimate.informatik.uni-freiburg.de/smtinterpol/ ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | Java-based SMT solver |
74- | [ Yices2] ( https://yices.csl.sri.com/ ) | :heavy_check_mark : | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/215 ) | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/400 ) ³ | | |
75- | [ Z3] ( https://github.com/Z3Prover/z3 ) | :heavy_check_mark : ² | :heavy_check_mark : ² | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | mature and well-known solver |
63+ | SMT Solver | Linux x64 | Linux arm64 | Windows x64 | Windows arm64 | MacOS x64 | MacOS arm64 | Description |
64+ | --- | :---:| :---:| :---:| :---:| :---:| :---:| :--- |
65+ | [ Bitwuzla] ( https://bitwuzla.github.io/ ) | :heavy_check_mark : ² | :heavy_check_mark : ² | :heavy_check_mark : | | | | a fast solver for bitvector logic |
66+ | [ Boolector] ( https://boolector.github.io/ ) | :heavy_check_mark : | | | | | | a fast solver for bitvector logic, misses formula introspection, deprecated |
67+ | [ CVC4] ( https://cvc4.github.io/ ) | :heavy_check_mark : | | | | | | |
68+ | [ CVC5] ( https://cvc5.github.io/ ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | | :heavy_check_mark : | :heavy_check_mark : | |
69+ | [ MathSAT5] ( http://mathsat.fbk.eu/ ) | :heavy_check_mark : ³ | :heavy_check_mark : ³ | :heavy_check_mark : | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/430 ) ⁴ | | |
70+ | [ OpenSMT] ( https://verify.inf.usi.ch/opensmt ) | :heavy_check_mark : ² | :heavy_check_mark : ² | | | | | |
71+ | [ OptiMathSAT] ( http://optimathsat.disi.unitn.it/ ) | :heavy_check_mark : | | | | | | based on MathSAT5, with support for optimization queries |
72+ | [ Princess] ( http://www.philipp.ruemmer.org/princess.shtml ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | Java-based SMT solver |
73+ | [ SMTInterpol] ( https://ultimate.informatik.uni-freiburg.de/smtinterpol/ ) | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | Java-based SMT solver |
74+ | [ Yices2] ( https://yices.csl.sri.com/ ) | :heavy_check_mark : | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/215 ) | | [ maybe] ( https://github.com/sosy-lab/java-smt/pull/400 ) ⁴ | | |
75+ | [ Z3] ( https://github.com/Z3Prover/z3 ) | :heavy_check_mark : ³ | :heavy_check_mark : ³ | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | :heavy_check_mark : | mature and well-known solver |
7676
7777We support a reasonable list of operating systems and versions.
7878- Our main target is Linux (mainly Ubuntu or comparable Linux distributions).
@@ -88,7 +88,9 @@ available with Ubuntu 18.04 or later.
8888
8989² Solver requires at least ` GLIBC_2.29 ` /` GLIBCXX_3.4.26 ` or ` GLIBC_2.34 ` /` GLIBCXX_3.4.29 ` ,
9090available with Ubuntu 22.04 or later.
91- ³ We do not provide a signed solver library for macOS. The user needs to compile and sign it.
91+ ³ Solver requires at least ` GLIBC_2.38 ` /` GLIBCXX_3.4.31 ` ,
92+ available with Ubuntu 24.04 or later.
93+ ⁴ We do not provide a signed solver library for macOS. The user needs to compile and sign it.
9294
9395#### Solver Features
9496
@@ -109,7 +111,7 @@ If something specific is missing, please [look for or file an issue](https://git
109111
110112#### Multithreading Support
111113
112- | SMT Solver | Concurrent context usage⁴ | Concurrent prover usage⁵ |
114+ | SMT Solver | Concurrent context usage⁵ | Concurrent prover usage⁶ |
113115| --- | :---:| :---:|
114116| [ Bitwuzla] ( https://bitwuzla.github.io/ ) | :heavy_check_mark : | |
115117| [ Boolector] ( https://boolector.github.io/ ) | :heavy_check_mark : | |
@@ -126,13 +128,13 @@ If something specific is missing, please [look for or file an issue](https://git
126128Interruption using a [ ShutdownNotifier] [ ] may be used to interrupt a solver from any thread.
127129Formulas are translatable in between contexts/provers/threads using _ FormulaManager.translateFrom()_ .
128130
129- ⁴ Multiple contexts, but all operations on each context only from a single thread.
130- ⁵ Multiple provers on one or more contexts, with each prover using its own thread.
131+ ⁵ Multiple contexts, but all operations on each context only from a single thread.
132+ ⁶ Multiple provers on one or more contexts, with each prover using its own thread.
131133
132134#### Garbage Collection in Native Solvers
133135
134136JavaSMT exposes an API for performing garbage collection on solvers implemented in a native language.
135- As a native solver has no way of knowing whether the created formula object is still referenced
137+ As a native solver has no way of knowing whether the created formula object is still referenced
136138by the client application, this API is necessary to avoid leaking memory.
137139Note that several solvers already support _ hash consing_ and thus,
138140there is never more than one copy of an identical formula object in memory.
@@ -141,9 +143,9 @@ in the application, it is not necessary to perform any garbage collection at all
141143Additionally, the memory for formulas created on user-side (i.e., via JavaSMT) is negligible
142144compared to solver-internal memory-consumption when solving a hard SMT query.
143145
144- - ** Z3** : The parameter ` solver.z3.usePhantomReferences ` may be used to control
145- whether JavaSMT will attempt to decrease references on Z3 formula
146- objects once they are no longer referenced.
146+ - ** Z3** : The parameter ` solver.z3.usePhantomReferences ` may be used to control
147+ whether JavaSMT will attempt to decrease references on Z3 formula objects
148+ once they are no longer referenced.
147149- ** MathSAT5** : Currently we do not support performing garbage collection for MathSAT5.
148150- ** CVC4, CVC5, Bitwuzla, OpenSMT** : Solvers using SWIG bindings do perform garbage collection.
149151- ** Other native SMT solvers** : we do not perform garbage collection.
0 commit comments