We keep the last consistent SAT environment with the Dolmen key
`partial_model` in `Solving_loop`. This solution isn't sufficient to
implement correctly `get-value`. Indeed, we need to ensure `get-model`
statements located after some `get-value` statements will still print
the same model. To obtain this behaviour, now we keep the last model
and the last unknown reason after a `check-sat` in a separate key.
Support `get-value` in Solving_loop
Add support for the SMT-LIB statement `get-value` in `Solving_loop`.
With the current implementation of the solver, it's not easy to keep
a consistent environment of the SAT solver without reassuming all the
formulas as we do in `Solving_loop`.
Instead, we save the last consistent environment obtained after a `check-sat`
statement in the Dolmen state and we have to keep the last model and unknown
reason with different keys. Indeed, after using `get-value`, the
`get-model` statement has to output the same model.
Create a new type name in `Symbols`
Refactoring `get-value` support
This commit adds a better support of `get-value` and `get-assignment`.
These features are implemented using a new wrapper functor on the top of
the SAT solvers of Alt-Ergo.
- Values for bool expressions are computed by the SAT solver;
- Before launching the solver to compute some model terms, we check if
there aren't already available in the boolean or first-order models;
- Thanks to the wrapper functor, the feature works well with the legacy
solver FunSAT;
We also test our generated models by non-regression tests using the
`get-value`.
Add option `--verify-models`
This option will be useful to check our models with the new
`get-value` command. Adding `--verify-models` turns on the model
generation (as we did with the `--produce-models` option). If our
best-effort model checker doesn't find a contradiction, we don't print
anything.
fix documentation
Add the location for get-value
À la C
Use first-class module instead of functor
Add Expr.Core.of_bool
Reinit GetValue cpt
spelling
Documentation of the module Graph
Derive comparison function of name_space
Restore the documentation of `name`
Remove the joke :(
Remove the joke :(
New exception for wrong model
We raise a new exception `Wrong_model` in `get_value` in order to
clarify the API.
Rebase artefacts
Removing get-value statements to check models
Add a new SMT option for the CLI option `--verify-models`
Use `Stdcompat.Either` for OCaml 4.08
Reset decisions only for get-value statements
We need to reset the decision level of SatML after calling the `unsat`
function as the decision level of this solver isn't necessary zero. This
hotfix is only necessary for SatML.
Add a new function `reset_decisions` in the SAT API.
Saved the boolean model before resetting decisions
The call `SAT.reset_decisions` may erase part of the boolean models in
`get_value`. For sake of efficiency, we save the boolean model before
resetting decisions.
Add tests
Add a link to issue 1063
Address partially review