Skip to content

Update Yices to version 2.7.0#524

Open
daniel-raffler wants to merge 36 commits intomasterfrom
yices-2.7.0
Open

Update Yices to version 2.7.0#524
daniel-raffler wants to merge 36 commits intomasterfrom
yices-2.7.0

Conversation

@daniel-raffler
Copy link
Contributor

Hello,
this PR updates Yices to version 2.7.0 and closes #402. Other than that the new version mainly includes improvements to the MCSat solver, which we're not using at the moment. Here is a full changelog.

Yices2 has some additional features that we may want to include:

  • Nonlinear arithmetic is supported with the MCSat solver
  • MCSat also support interpolation (link), but not unsat core (yet?)
  • Dpll (which we currently use) has unsat core, but no interpolation or non-linear arithmetic
  • Only Dpll can be compiled with the --thread-safety option that allows multiple solver instances to run in parallel
  • Arrays have been added separately, see here for the other pull request
  • Yices can use Cadical/Kissat/CryptoMiniSat as backend for SAT solving. This could be significantly faster, but is currently limited to QF_BV logic

In this PR I stuck with Dpll as solver and just enabled the --thread-safety option. We could still add MCSat support and maybe even the external SAT solvers. Yices then picks the solver based on the logic, which would give us the best feature set. The big downside is that MCSat is not compatible with --thread-safety, which means that multiple parallel solver instances are not possible

@daniel-raffler
Copy link
Contributor Author

@kfriedberger
I can try uploading the binaries this time. What architecture should I compile for? Yices2 seems to use --march=znver3 when I compile it on my laptop. Is that OK, or should I try to pick something else?

@kfriedberger
Copy link
Member

@daniel-raffler
We did use the Ubuntu docker image (18.04 if possible without further overhead, else the 22.04) for building binary solvers.
The steps for publication are documented in https://github.com/sosy-lab/java-smt/blob/master/doc/Developers-How-to-Release-into-Ivy.md#publishing-yices2 ... wait ... that seems quite outdated for Yices2. I will have a deeper look the next days.

Copy link
Member

@kfriedberger kfriedberger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good. I will make a deeper test the next days.

*/
DEFINE_FUNC(int, 1has_1mcsat) WITHOUT_ARGS
CALL0(int, has_mcsat)
INT_RETURN
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could maybe add BOOL_RETURN for such methods.

@daniel-raffler
Copy link
Contributor Author

@daniel-raffler We did use the Ubuntu docker image (18.04 if possible without further overhead, else the 22.04) for building binary solvers. The steps for publication are documented in https://github.com/sosy-lab/java-smt/blob/master/doc/Developers-How-to-Release-into-Ivy.md#publishing-yices2 ... wait ... that seems quite outdated for Yices2. I will have a deeper look the next days.

Thanks! I've been able to build the binaries in the 18.04 image

Should I build with --thread-safety or --enable-mcsat? Unfortunately these options can't be combined and I'm not quite sure which one is more important to us

# Conflicts:
#	lib/ivy.xml
#	src/org/sosy_lab/java_smt/solvers/yices2/Yices2FormulaCreator.java
#	src/org/sosy_lab/java_smt/solvers/yices2/Yices2Model.java
#	src/org/sosy_lab/java_smt/test/SolverConcurrencyTest.java
#	src/org/sosy_lab/java_smt/test/VariableNamesTest.java
@disteph
Copy link

disteph commented Mar 2, 2026

Yices2 has some additional features that we may want to include:

* Nonlinear arithmetic is supported with the MCSat solver

* MCSat also support interpolation ([link](https://yices.csl.sri.com/doc/context-operations.html#c.yices_check_context_with_interpolation)), but not `unsat core` ([yet?](https://github.com/SRI-CSL/yices2/pull/578))

Just FYI, support for unsat cores in MCSAT has been merged into master (both through SMTLib2 input and through API calls): SRI-CSL/yices2#578.

It will be part of the upcoming Yices release 2.8.

@baierd
Copy link
Contributor

baierd commented Mar 2, 2026

Thank you for that info! Both features are actually requested by users that i talk to a lot currently!
@daniel-raffler we should focus on finishing this PR. It will most likely not make 6.0.0, but we can just publish 6.1 once this is done.

@baierd baierd self-requested a review March 2, 2026 08:19
# Conflicts:
#	src/org/sosy_lab/java_smt/test/ProverEnvironmentTest.java
#	src/org/sosy_lab/java_smt/test/SolverConcurrencyTest.java
#	src/org/sosy_lab/java_smt/test/SolverFormulaWithAssumptionsTest.java
@daniel-raffler daniel-raffler added this to the Release after 6.0.0 milestone Mar 2, 2026
@daniel-raffler
Copy link
Contributor Author

The branch has now been switched to MCSAT, and I'll add interpolation support in the next few days. Unfortunately the --enable-thread-safety and --enable-mcsat options have to be set at build time and can't be combined. This means the new version will not be thread safe, and only a single thread may use Yices at a time

We may be able to ship two binaries, one for MCSAT and one that allows parallel contexts, similar to how the issue is handled in MathSAT/OptiMathSAT. At run-time users can then choose which version to use when opening their SolverContext

If this turns out to be too complex, we may also consider adding a global lock for Yices, and simply forbidding all access that does not come from the original thread

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

Yices2 produces invalid SMTLIB output when dumping formulas

4 participants