From 9764007c97222ef303d13e8d9081b200a0e1b85c Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Tue, 26 May 2020 20:55:02 -0700 Subject: [PATCH] lorem ipsum Signed-off-by: Nikolaj Bjorner --- src/smt/seq_regex.cpp | 22 +++++++++------------- src/smt/seq_regex.h | 2 ++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/smt/seq_regex.cpp b/src/smt/seq_regex.cpp index 4b2db66f8..b06a72a15 100644 --- a/src/smt/seq_regex.cpp +++ b/src/smt/seq_regex.cpp @@ -267,7 +267,7 @@ namespace smt { return true; } - void seq_regex::propagate_eq(expr* r1, expr* r2) { + expr_ref seq_regex::symmetric_diff(expr* r1, expr* r2) { expr_ref r(m); if (re().is_empty(r1)) std::swap(r1, r2); @@ -276,29 +276,25 @@ namespace smt { else r = re().mk_union(re().mk_diff(r1, r2), re().mk_diff(r2, r1)); rewrite(r); + return r; + } + + void seq_regex::propagate_eq(expr* r1, expr* r2) { + expr_ref r = symmetric_diff(r1, r2); sort* seq_sort = nullptr; VERIFY(u().is_re(r, seq_sort)); expr_ref emp(re().mk_empty(seq_sort), m); - literal lit = ~th.mk_eq(r, emp, false); expr_ref is_empty = sk().mk_is_empty(r, emp); - th.add_axiom(~lit, th.mk_literal(is_empty)); + th.add_axiom(~th.mk_eq(r, emp, false), th.mk_literal(is_empty)); } void seq_regex::propagate_ne(expr* r1, expr* r2) { - expr_ref r(m); - if (re().is_empty(r1)) - std::swap(r1, r2); - if (re().is_empty(r2)) - r = r1; - else - r = re().mk_union(re().mk_diff(r1, r2), re().mk_diff(r2, r1)); - rewrite(r); + expr_ref r = symmetric_diff(r1, r2); sort* seq_sort = nullptr; VERIFY(u().is_re(r, seq_sort)); expr_ref emp(re().mk_empty(seq_sort), m); - literal lit = ~th.mk_eq(r, emp, false); expr_ref is_non_empty = sk().mk_is_non_empty(r, emp); - th.add_axiom(~lit, th.mk_literal(is_non_empty)); + th.add_axiom(th.mk_eq(r, emp, false), th.mk_literal(is_non_empty)); } bool seq_regex::is_member(expr* r, expr* u) { diff --git a/src/smt/seq_regex.h b/src/smt/seq_regex.h index e79fe7894..ebcbc53b1 100644 --- a/src/smt/seq_regex.h +++ b/src/smt/seq_regex.h @@ -67,6 +67,8 @@ namespace smt { bool is_member(expr* r, expr* u); + expr_ref symmetric_diff(expr* r1, expr* r2); + public: seq_regex(theory_seq& th);