3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-27 17:32:45 +00:00
z3/src
Lev Nachmanson 1d936e2384
opt: keep infinitesimal LP optimum instead of falling back to model value
When an objective's optimum is an open (strict) bound, the arithmetic
relaxation returns a value carrying a non-zero infinitesimal (e.g.
minimizing a real x subject to x > 0, whose infimum is the unattained 0,
reported as "epsilon"). opt_solver::maximize_objective validates such a
hint with check_bound(), which asserts the objective is >= val via mk_ge
and searches for a model reaching it. mk_ge cannot faithfully encode the
infinitesimal (it drops a negative infinitesimal and turns a positive one
into a strict bound), so this validation always fails spuriously for an
open optimum. Since #10028 (fdc32d0e6) stopped committing the hint before
validation, this false negative now discards the true infinitesimal
optimum and reports an attainable - strictly worse - model value instead
(x = 1 rather than epsilon).

Treat a hint with a non-zero infinitesimal as valid in check_bound: for
such open bounds the relaxation value is exact. Hints without an
infinitesimal (such as the integer objective of #10028) are still
validated normally, so that fix is preserved.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-05 02:31:15 -07:00
..
ackermannization block ackermann over nested selects 2026-06-19 10:41:56 -07:00
api Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
ast fix build 2026-07-04 12:51:52 -07:00
cmd_context updates to tptp_frontend 2026-07-04 14:34:21 -07:00
math Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
model updates to tptp_frontend 2026-07-04 14:34:21 -07:00
muz Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
nlsat Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
opt opt: keep infinitesimal LP optimum instead of falling back to model value 2026-07-05 02:31:15 -07:00
params Porting seq_split to master (#9840) 2026-06-30 10:18:28 -07:00
parsers Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
qe Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
sat Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
shell Fixes necessary to compile z3 included in clang-tidy via FetchContents. (#9768) 2026-06-08 19:44:01 -07:00
smt disable unsound filter on equalities for beta redex completeness 2026-07-04 15:42:46 -07:00
solver stop complaining abot Char in QF_S benchmarks 2026-07-04 14:27:34 -07:00
tactic fix build 2026-07-04 12:51:52 -07:00
test [snapshot-regression-fix] Keep symbolic re.range non-empty; fix soundness regression on range membership (#10017) 2026-07-02 14:00:51 -07:00
util Remove unnecessary semicolons (Attempt 2) (#10020) 2026-07-02 12:47:29 -07:00
CMakeLists.txt git bindings v1.0 2026-02-18 21:02:25 -08:00