diff --git a/src/ast/rewriter/seq_rewriter.cpp b/src/ast/rewriter/seq_rewriter.cpp index 7dabfe364..2b9d738c0 100644 --- a/src/ast/rewriter/seq_rewriter.cpp +++ b/src/ast/rewriter/seq_rewriter.cpp @@ -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; }