mirror of
https://github.com/Z3Prover/z3
synced 2025-04-22 16:45:31 +00:00
fix #3899 regression from transitioning to decompose_monomial
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
61fb134653
commit
a7123062a0
2 changed files with 14 additions and 11 deletions
|
@ -183,7 +183,7 @@ namespace smt {
|
|||
}
|
||||
};
|
||||
|
||||
num_threads = 1;
|
||||
// num_threads = 1;
|
||||
|
||||
while (true) {
|
||||
vector<std::thread> threads(num_threads);
|
||||
|
|
|
@ -1339,20 +1339,23 @@ expr * theory_arith<Ext>::factor(expr * m, expr * var, unsigned d) {
|
|||
m_nl_new_exprs.push_back(result);
|
||||
return result;
|
||||
}
|
||||
SASSERT(is_pure_monomial(m));
|
||||
unsigned idx = 0;
|
||||
|
||||
ptr_buffer<expr> new_args;
|
||||
for (expr * arg : *to_app(m)) {
|
||||
if (arg == var) {
|
||||
if (idx < d)
|
||||
idx++;
|
||||
else
|
||||
new_args.push_back(arg);
|
||||
}
|
||||
else {
|
||||
unsigned idx = 0;
|
||||
auto insert = [&](expr* arg) {
|
||||
if (idx < d && var == arg)
|
||||
++idx;
|
||||
else
|
||||
new_args.push_back(arg);
|
||||
};
|
||||
while (m_util.is_mul(m) && idx < d) {
|
||||
unsigned sz = to_app(m)->get_num_args();
|
||||
for (unsigned i = 0; i + 1 < sz; ++i) {
|
||||
insert(to_app(m)->get_arg(i));
|
||||
}
|
||||
m = to_app(m)->get_arg(sz - 1);
|
||||
}
|
||||
insert(m);
|
||||
SASSERT(idx == d);
|
||||
TRACE("factor_bug", tout << "new_args:\n"; for(unsigned i = 0; i < new_args.size(); i++) tout << mk_pp(new_args[i], get_manager()) << "\n";);
|
||||
expr * result = mk_nary_mul(new_args.size(), new_args.c_ptr(), m_util.is_int(var));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue