3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-06-16 21:56:22 +00:00

Update seq_rewriter.cpp

This commit is contained in:
Nikolaj Bjorner 2026-06-16 14:14:49 -06:00 committed by GitHub
parent 1d9c770d74
commit bcc3523b23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3336,6 +3336,15 @@ expr_ref seq_rewriter::mk_regex_union_normalize(expr* r1, expr* r2) {
result = r1;
else if (re().is_dot_plus(r2) && re().get_info(r1).min_length > 0)
result = r2;
// (R1 \ R2) U (R2 \ R1) = R1 xor R2
else if (false && re().is_intersection(r1, a1, a2) && re().is_intersection(r2, b1, b2) &&
is_complement(a1, b2) && is_complement(a2, b1)) {
result = re().mk_xor(a1, re().mk_complement(a2));
}
else if (false && re().is_intersection(r1, a1, a2) && re().is_intersection(r2, b1, b2) &&
is_complement(a1, b1) && is_complement(a2, b2)) {
result = re().mk_xor(a1, re().mk_complement(a2));
}
else {
// Range Range: [a,b] [c,d] = [min(a,c), max(b,d)] when overlapping or adjacent
unsigned lo1_v = 0, hi1_v = 0, lo2_v = 0, hi2_v = 0;
@ -3348,17 +3357,7 @@ expr_ref seq_rewriter::mk_regex_union_normalize(expr* r1, expr* r2) {
else
result = merge_regex_sets(r1, r2, re().mk_full_seq(r1->get_sort()), test, compose);
}
// (R1 \ R2) U (R2 \ R1) = R1 xor R2
else if (false && re().is_intersection(r1, a1, a2) && re().is_intersection(r2, b1, b2) &&
is_complement(a1, b2) && is_complement(a2, b1)) {
result = re().mk_xor(a1, re().mk_complement(a2));
}
else if (false && re().is_intersection(r1, a1, a2) && re().is_intersection(r2, b1, b2) &&
is_complement(a1, b1) && is_complement(a2, b2)) {
result = re().mk_xor(a1, re().mk_complement(a2));
}
else
result = merge_regex_sets(r1, r2, re().mk_full_seq(r1->get_sort()), test, compose);
return result;
}