mirror of
https://github.com/Z3Prover/z3
synced 2026-05-15 22:55:33 +00:00
Eliminate length gradients from regexes
This commit is contained in:
parent
1282e4de11
commit
5ec28d3bc8
4 changed files with 58 additions and 14 deletions
|
|
@ -925,6 +925,16 @@ func_decl* arith_util::mk_mod0() {
|
|||
return m_manager.mk_func_decl(arith_family_id, OP_MOD0, 0, nullptr, 2, rs, mk_int());
|
||||
}
|
||||
|
||||
app *arith_util::mk_divides(expr *arg1, expr *arg2) {
|
||||
rational val;
|
||||
bool is_int_num = false;
|
||||
if (is_numeral(arg1, val, is_int_num) && is_int_num && val.is_int32()) {
|
||||
parameter p(val.get_int32());
|
||||
return m_manager.mk_app(arith_family_id, OP_IDIVIDES, 1, &p, 1, &arg2);
|
||||
}
|
||||
return mk_eq(mk_mod(arg2, arg1), mk_int(0));
|
||||
}
|
||||
|
||||
bool arith_util::is_bounded(expr* n) const {
|
||||
expr* x = nullptr, * y = nullptr;
|
||||
while (true) {
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ public:
|
|||
app * mk_ge(expr * arg1, expr * arg2) const { return m_manager.mk_app(arith_family_id, OP_GE, arg1, arg2); }
|
||||
app * mk_lt(expr * arg1, expr * arg2) const { return m_manager.mk_app(arith_family_id, OP_LT, arg1, arg2); }
|
||||
app * mk_gt(expr * arg1, expr * arg2) const { return m_manager.mk_app(arith_family_id, OP_GT, arg1, arg2); }
|
||||
app * mk_divides(expr* arg1, expr* arg2) { return m_manager.mk_app(arith_family_id, OP_IDIVIDES, arg1, arg2); }
|
||||
app * mk_divides(expr* arg1, expr* arg2);
|
||||
|
||||
app * mk_add(unsigned num_args, expr * const * args) const { return num_args == 1 && is_app(args[0]) ? to_app(args[0]) : m_manager.mk_app(arith_family_id, OP_ADD, num_args, args); }
|
||||
app * mk_add(expr * arg1, expr * arg2) const { return m_manager.mk_app(arith_family_id, OP_ADD, arg1, arg2); }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue