Problem
The finite-domain satisfiability adapter can perform up to 32,769 checks. Each check currently rebuilds the entire Z3 variable/constraint graph, and the governed 5-second timeout starts only inside solver.check(). Python-side expression construction and the total multi-check operation are therefore outside the claimed runtime bound.
Decision
Build one deterministic incremental QF_LIA solver session per normalized model. Encode each clause once behind a Boolean assumption, use assumptions for selected clauses and fixed witness indices, and preserve the incumbent initial-decision, lexicographic witness, and sorted-deletion core semantics. Add one monotonic 5-second operation deadline covering model construction, every check, and result selection. Each Z3 call receives only its remaining deadline (capped at 5000 ms); a result returned after the operation deadline is rejected. No partial SAT/UNSAT evidence is emitted.
Acceptance
- one solver and one expression graph are built per analysis;
- deterministic SAT witnesses and subset-minimal UNSAT cores remain byte-identical to the incumbent algorithm on generated bounded models;
- timeout includes Python model construction and all repeated checks;
- timeout/exhaustion/unknown remain typed operational failures with safe phase, check count/budget, and bounded reason;
- performance regression covers the published maximum check-count shape without rebuilding solvers;
- replay and solver-configuration evidence remain compatible.
Requirement: ASR-530. Related: #826, PR #1083.
Problem
The finite-domain satisfiability adapter can perform up to 32,769 checks. Each check currently rebuilds the entire Z3 variable/constraint graph, and the governed 5-second timeout starts only inside
solver.check(). Python-side expression construction and the total multi-check operation are therefore outside the claimed runtime bound.Decision
Build one deterministic incremental QF_LIA solver session per normalized model. Encode each clause once behind a Boolean assumption, use assumptions for selected clauses and fixed witness indices, and preserve the incumbent initial-decision, lexicographic witness, and sorted-deletion core semantics. Add one monotonic 5-second operation deadline covering model construction, every check, and result selection. Each Z3 call receives only its remaining deadline (capped at 5000 ms); a result returned after the operation deadline is rejected. No partial SAT/UNSAT evidence is emitted.
Acceptance
Requirement: ASR-530. Related: #826, PR #1083.