mirror of
https://github.com/Z3Prover/z3
synced 2026-07-03 05:46:08 +00:00
Update seq_rewriter.cpp
This commit is contained in:
parent
1d9c770d74
commit
bcc3523b23
1 changed files with 10 additions and 11 deletions
|
|
@ -3336,6 +3336,15 @@ expr_ref seq_rewriter::mk_regex_union_normalize(expr* r1, expr* r2) {
|
||||||
result = r1;
|
result = r1;
|
||||||
else if (re().is_dot_plus(r2) && re().get_info(r1).min_length > 0)
|
else if (re().is_dot_plus(r2) && re().get_info(r1).min_length > 0)
|
||||||
result = r2;
|
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 {
|
else {
|
||||||
// Range ∪ Range: [a,b] ∪ [c,d] = [min(a,c), max(b,d)] when overlapping or adjacent
|
// 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;
|
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
|
else
|
||||||
result = merge_regex_sets(r1, r2, re().mk_full_seq(r1->get_sort()), test, compose);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue