3
0
Fork 0
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:
CEisenhofer 2026-04-02 15:58:15 +02:00
parent 1282e4de11
commit 5ec28d3bc8
4 changed files with 58 additions and 14 deletions

View file

@ -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) {

View file

@ -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); }