3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-06-25 01:50:33 +00:00

fix range rewrite again, again

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2026-06-22 11:02:18 -07:00
parent ba1a05ec76
commit bcdb43451d

View file

@ -4836,6 +4836,7 @@ br_status seq_rewriter::mk_re_complement(expr* a, expr_ref& result) {
auto empty_re = [&]() { return re().mk_empty(srt); };
auto len0_re = [&]() { return re().mk_to_re(str().mk_empty(seq_sort)); };
auto full_re = [&]() { return re().mk_full_seq(srt); };
auto len2_plus_re = [&]() { return re().mk_concat(re().mk_full_char(srt), re().mk_plus(re().mk_full_char(srt))); };
if (!has_left && !has_right) {
// [0, max_c]: complement is empty
result = empty_re();
@ -4847,18 +4848,18 @@ br_status seq_rewriter::mk_re_complement(expr* a, expr_ref& result) {
}
if (!has_left) {
// [0, b]: complement is [b+1, max]
result = re().mk_union(len0_re(), re().mk_concat(re().mk_range(srt, hi_v + 1, max_c), full_re()));
result = re().mk_union(len0_re(), re().mk_union(re().mk_range(srt, hi_v + 1, max_c), len2_plus_re()));
return BR_DONE;
}
if (!has_right) {
// [a, max]: complement is [0, a-1]
result = re().mk_union(len0_re(), re().mk_concat(re().mk_range(srt, 0u, lo_v - 1), full_re()));
result = re().mk_union(len0_re(), re().mk_union(re().mk_range(srt, 0u, lo_v - 1), len2_plus_re()));
return BR_DONE;
}
// General: [a, b] → [0, a-1] [b+1, max]
auto left = re().mk_range(srt, 0u, lo_v - 1);
auto right = re().mk_range(srt, hi_v + 1, max_c);
result = re().mk_union(len0_re(), re().mk_concat(re().mk_union(left, right), full_re()));
result = re().mk_union(len0_re(), re().mk_union(left, re().mk_union(right, len2_plus_re())));
return BR_DONE;
}
return BR_FAILED;