mirror of
https://github.com/Z3Prover/z3
synced 2026-06-30 12:28:53 +00:00
Fix regression timeouts via range condition simplification
- Simplify trivial range bounds in derive_range: when lo=0, omit the lo<=x condition; when hi=max_char, omit the x<=hi condition. Full charset ranges return epsilon directly. - Add char_le(0,x)=true and char_le(x,max)=true to eval_cond for always-valid bounds. - Add range implication logic to simplify_ite_rec: when path has negated/positive char_le constraints, detect implied or contradicted char_le conditions (e.g., ¬(x<=127) implies 128<=x). - Add is_subset(a, .+) check: non-nullable regexes are subsets of .+ - In update_state_graph, skip recursive exploration of nullable targets to avoid state explosion. These fixes resolve timeouts on 5724 (all problems), 5721 P1, and 5693. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
88a177f6c5
commit
d54d62a07a
3 changed files with 170 additions and 6 deletions
|
|
@ -123,6 +123,7 @@ namespace seq {
|
|||
std::pair<expr_ref, expr_ref> simplify_ite_rec(path_t& path, expr* c, expr* t, expr* e);
|
||||
void push_path(path_t& path, expr* c, bool sign);
|
||||
lbool eval_cond(expr* cond);
|
||||
lbool eval_path_cond(path_t const& path, expr* c);
|
||||
|
||||
sort* re_sort(expr* r) { return r->get_sort(); }
|
||||
sort* seq_sort(expr* r) { sort* s = nullptr; m_util.is_re(r, s); return s; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue