void project_plugin::partition_args(model& model, app_ref_vector const& selects, expr_ref_vector& lits) { ast_manager& m = selects.get_manager(); if (selects.empty()) return; unsigned num_args = selects[0]->get_decl()->get_arity(); for (unsigned j = 1; j < num_args; ++j) { expr_ref_vector args(m); for (unsigned i = 0; i < selects.size(); ++i) { args.push_back(selects[i]->get_arg(j)); } project_plugin::partition_values(model, args, lits); } }
static expr_ref_vector mk_ineqs(app* x, app* y, app_ref_vector const& nums) { ast_manager& m = nums.get_manager(); arith_util a(m); expr_ref_vector result(m); for (unsigned i = 0; i < nums.size(); ++i) { expr_ref ax(a.mk_mul(nums[i], x), m); result.push_back(a.mk_le(ax, y)); result.push_back(m.mk_not(a.mk_ge(ax, y))); result.push_back(m.mk_not(a.mk_gt(y, ax))); result.push_back(a.mk_lt(y, ax)); } return result; }