mirror of
https://github.com/Z3Prover/z3
synced 2025-04-14 21:08:46 +00:00
add regular expression membership for range of int.to.str functions. Issue #957
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
be3cc91323
commit
4140afa4cb
|
@ -304,6 +304,7 @@ public:
|
||||||
|
|
||||||
app* mk_to_re(expr* s) { return m.mk_app(m_fid, OP_SEQ_TO_RE, 1, &s); }
|
app* mk_to_re(expr* s) { return m.mk_app(m_fid, OP_SEQ_TO_RE, 1, &s); }
|
||||||
app* mk_in_re(expr* s, expr* r) { return m.mk_app(m_fid, OP_SEQ_IN_RE, s, r); }
|
app* mk_in_re(expr* s, expr* r) { return m.mk_app(m_fid, OP_SEQ_IN_RE, s, r); }
|
||||||
|
app* mk_range(expr* s1, expr* s2) { return m.mk_app(m_fid, OP_RE_RANGE, s1, s2); }
|
||||||
app* mk_concat(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_CONCAT, r1, r2); }
|
app* mk_concat(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_CONCAT, r1, r2); }
|
||||||
app* mk_union(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_UNION, r1, r2); }
|
app* mk_union(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_UNION, r1, r2); }
|
||||||
app* mk_inter(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_INTERSECT, r1, r2); }
|
app* mk_inter(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_INTERSECT, r1, r2); }
|
||||||
|
|
|
@ -2345,6 +2345,17 @@ bool theory_seq::add_itos_axiom(expr* e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
add_axiom(mk_eq(e2, n, false));
|
add_axiom(mk_eq(e2, n, false));
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
expr_ref num_re(m), opt_re(m);
|
||||||
|
num_re = m_util.re.mk_range(m_util.str.mk_string(symbol("0")), m_util.str.mk_string(symbol("9")));
|
||||||
|
num_re = m_util.re.mk_plus(num_re);
|
||||||
|
opt_re = m_util.re.mk_opt(m_util.re.mk_to_re(m_util.str.mk_string(symbol("-"))));
|
||||||
|
num_re = m_util.re.mk_concat(opt_re, num_re);
|
||||||
|
app_ref in_re(m_util.re.mk_in_re(e, num_re), m);
|
||||||
|
internalize_term(in_re);
|
||||||
|
propagate_in_re(in_re, true);
|
||||||
|
#endif
|
||||||
m_trail_stack.push(push_replay(alloc(replay_axiom, m, e)));
|
m_trail_stack.push(push_replay(alloc(replay_axiom, m, e)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue