check_satisfiability
Verify if SMT-LIB constraints are jointly satisfiable, cross-checking Z3 and cvc5 to return verdicts, witnesses, and caveats.
Instructions
Check whether a set of constraints is jointly satisfiable, cross-checked in both Z3 and cvc5.
YOU (the calling model) are responsible for translating the user's prose
question into declarations and constraints. This server does NOT
interpret English — it only runs the SMT-LIB you hand it. Pass the user's
original wording in prose so the English and the formalization travel
together in the evidence trail.
Before presenting the verdict to the user as an answer about their original
English question, SHOW THEM THE FORMALIZATION (the declarations and
constraints, or the assembled smtlib_script) and get their agreement that
it captures what they meant. A verdict from this tool is a fact about the
formalization, not directly about the user's English.
Report exactly what the solvers returned. An UNSATISFIABLE verdict is
bounded-unsat relative to the constraints and declarations as written, not
an unbounded proof about the world — do not upgrade it into a stronger
claim. Read the caveats list and pass its contents along (quantifiers,
nonlinear arithmetic, uninterpreted sorts, or bounded checks each get their
own caveat). If status comes back DISAGREEMENT, that is the headline:
the two solvers returned different verdicts and the result must not be
trusted.
declarations are full SMT-LIB forms, e.g. (declare-const x Int).
constraints are bare boolean terms, e.g. (> x 5) — this tool wraps each
in (assert ...) for you (a constraint that already starts with (assert
is accepted as-is).
Example: declarations = ["(declare-const x Int)"] constraints = ["(> x 5)", "(< x 8)"] -> satisfiable (both solvers find a witness, e.g. x = 6).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| logic | No | ||
| prose | No | ||
| timeout_ms | No | ||
| constraints | Yes | ||
| declarations | Yes |