mirror of
https://github.com/Z3Prover/z3
synced 2025-07-18 10:30:44 +00:00
skip non-overlap simplification in rewriter
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
e68c72755a
commit
d41ecda03e
3 changed files with 35 additions and 7 deletions
|
@ -63,16 +63,21 @@ namespace smt {
|
|||
bool seq_regex::is_string_equality(literal lit) {
|
||||
expr* s = nullptr, *r = nullptr;
|
||||
expr* e = ctx.bool_var2expr(lit.var());
|
||||
expr_ref id(a().mk_int(e->get_id()), m);
|
||||
unsigned idx = 0;
|
||||
VERIFY(str().is_in_re(e, s, r));
|
||||
sort* seq_sort = m.get_sort(s);
|
||||
vector<expr_ref_vector> patterns;
|
||||
auto mk_cont = [&](unsigned idx) {
|
||||
return sk().mk("seq.cont", id, a().mk_int(idx), seq_sort);
|
||||
};
|
||||
if (seq_rw().is_re_contains_pattern(r, patterns)) {
|
||||
expr_ref t(m);
|
||||
expr_ref_vector ts(m);
|
||||
sort* seq_sort = m.get_sort(s);
|
||||
ts.push_back(m.mk_fresh_const("seq.cont", seq_sort));
|
||||
ts.push_back(mk_cont(idx));
|
||||
for (auto const& p : patterns) {
|
||||
ts.append(p);
|
||||
ts.push_back(m.mk_fresh_const("seq.cont", seq_sort));
|
||||
ts.push_back(mk_cont(idx));
|
||||
}
|
||||
t = th.mk_concat(ts, seq_sort);
|
||||
th.propagate_eq(lit, s, t, true);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue