Expand description
The thin solver trait behind which the SMT engines sit (#553).
Queries are built once as solver-agnostic terms (crate::term) and
discharged through BvSolver:
OrdealSolver— the default engine:ordeal, the pure-Rust, certificate-checked QF_BV solver (everyUnsatcarries an LRAT proof the trustedordeal-lratchecker validated before it is reported). No C++ toolchain, noz3-sysbuild.Z3Solver(featurez3-solver) — the former engine, retained as the differential oracle.DifferentialSolver— used when both backends are compiled in andSYNTH_SOLVER_DIFF=1: every query runs through both engines. A verdict disagreement (SatvsUnsat) is a hard error (panic — one of the solvers is wrong, and nothing downstream may proceed on either answer). An ordealUnknownfalls through to Z3’s verdict (logged, not fatal —Unknownis the conservative non-answer, not a verdict).
Budget: ordeal decides under a conflict budget (check_with_limit) so an
adversarial query degrades to a clean conservative Unknown instead of
hanging. Override with SYNTH_ORDEAL_MAX_CONFLICTS (0 = unbounded).
Structs§
- Ordeal
Solver - The default engine: pure-Rust
ordealwith a conflict budget.
Enums§
- Check
Outcome - Outcome of a one-shot
checkof the asserted conjunction.
Traits§
- BvSolver
- The thin solver interface: assert boolean terms, check once, read the
model back on
Sat. One instance = one query (no incremental solving — synth’s translation-validation fragment is one-shot by design).
Functions§
- new_
solver - Construct the configured solver: