Skip to content

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

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

Successfully merging this pull request may close these issues.

Yices2 produces invalid SMTLIB output when dumping formulas
2 participants