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: every query runs under a wall-clock deadline
(Solver::check_with_deadline, ordeal ≥0.15) so an adversarial query
degrades to a clean conservative Unknown instead of hanging. See
[DEFAULT_DEADLINE_MS] for the budget, the env overrides and the
documented limitation.
Structs§
- Ordeal
Solver - The default engine: pure-Rust
ordealunder a per-query wall-clock deadline (with a conflict budget as the disabled-deadline fallback).
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: