3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-06 03:10:25 +00:00

outline of interface contract

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-07-11 18:44:41 +02:00
parent 46284c434a
commit 6bcee13158

View file

@ -218,14 +218,18 @@ namespace nlsat {
lbool check(literal_vector& assumptions);
//
// check satisfiability of asserted formulas relative to assumptions.
// produce either,
// l_true - a model is availabe (rvalues can be ignored) or,
// l_true - a model is available (rvalues can be ignored) or,
// l_false - update the list of assumptions (possibly reset it to empty), and a set of polynomials in core,
// such that the conjunction of the assumptions and the polynomials in core is unsatisfiable.
// l_undef - if the search was interrupted by a resource limit.
// We associate literals with the polynomials in the core based on their sign with respect to rvalues.
// If p(rvalues) > 0, then the literal is p <= 0, p(rvalues) < 0, then p(rvalues) >= 0, and p(rvalues) = 0, then p != 0.
// Core is a list of polynomials. We associate literals as follows:
// For ~ in { >, <, = } If p(rvalues) ~ 0, then lit is p ~ 0. Their negations are used in the conflict clause.
// (this constrains the kind of literals for the conflict clause and may be revisited).
// Different implementations of check are possible. One where core comprises of linear polynomials could
// produce lemmas that are friendly to linear arithmetic solvers.
//
lbool check(literal_vector& assumptions, assignment const& rvalues, polynomial_ref_vector& core);