Skip to content

Commit 5b4cd6d

Browse files
fix #2604
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent c8908e8 commit 5b4cd6d

File tree

4 files changed

+23
-11
lines changed

4 files changed

+23
-11
lines changed

src/ast/rewriter/arith_rewriter.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ br_status arith_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * c
8787
default: st = BR_FAILED; break;
8888
}
8989
CTRACE("arith_rewriter", st != BR_FAILED, tout << st << ": " << mk_pp(f, m());
90-
for (unsigned i = 0; i < num_args; ++i) tout << mk_pp(args[i], m()) << " ";
91-
tout << "\n==>\n" << mk_pp(result.get(), m()) << "\n";);
90+
for (unsigned i = 0; i < num_args; ++i) tout << mk_pp(args[i], m()) << " ";
91+
tout << "\n==>\n" << mk_pp(result.get(), m()) << "\n";
92+
tout << "args: " << to_app(result)->get_num_args() << "\n";
93+
);
9294
return st;
9395
}
9496

@@ -527,14 +529,15 @@ bool arith_rewriter::is_arith_term(expr * n) const {
527529
}
528530

529531
br_status arith_rewriter::mk_eq_core(expr * arg1, expr * arg2, expr_ref & result) {
532+
br_status st = BR_FAILED;
530533
if (m_eq2ineq) {
531534
result = m().mk_and(m_util.mk_le(arg1, arg2), m_util.mk_ge(arg1, arg2));
532-
return BR_REWRITE2;
535+
st = BR_REWRITE2;
533536
}
534-
if (m_arith_lhs || is_arith_term(arg1) || is_arith_term(arg2)) {
535-
return mk_le_ge_eq_core(arg1, arg2, EQ, result);
537+
else if (m_arith_lhs || is_arith_term(arg1) || is_arith_term(arg2)) {
538+
st = mk_le_ge_eq_core(arg1, arg2, EQ, result);
536539
}
537-
return BR_FAILED;
540+
return st;
538541
}
539542

540543
expr_ref arith_rewriter::neg_monomial(expr* e) const {

src/ast/rewriter/poly_rewriter_def.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,18 @@ expr * poly_rewriter<Config>::mk_mul_app(unsigned num_args, expr * const * args)
117117
return new_args[0];
118118
}
119119
else {
120+
numeral a;
121+
if (new_args.size() > 2 && is_numeral(new_args.get(0), a)) {
122+
return mk_mul_app(a, mk_mul_app(new_args.size() - 1, new_args.c_ptr() + 1));
123+
}
120124
return m().mk_app(get_fid(), mul_decl_kind(), new_args.size(), new_args.c_ptr());
121125
}
122126
}
123127
else {
128+
numeral a;
129+
if (num_args > 2 && is_numeral(args[0], a)) {
130+
return mk_mul_app(a, mk_mul_app(num_args - 1, args + 1));
131+
}
124132
return m().mk_app(get_fid(), mul_decl_kind(), num_args, args);
125133
}
126134
}
@@ -180,12 +188,14 @@ br_status poly_rewriter<Config>::mk_flat_mul_core(unsigned num_args, expr * cons
180188
flat_args.push_back(args[j]);
181189
}
182190
}
191+
br_status st = mk_nflat_mul_core(flat_args.size(), flat_args.c_ptr(), result);
183192
TRACE("poly_rewriter",
184193
tout << "flat mul:\n";
185194
for (unsigned i = 0; i < num_args; i++) tout << mk_bounded_pp(args[i], m()) << "\n";
186195
tout << "---->\n";
187-
for (unsigned i = 0; i < flat_args.size(); i++) tout << mk_bounded_pp(flat_args[i], m()) << "\n";);
188-
br_status st = mk_nflat_mul_core(flat_args.size(), flat_args.c_ptr(), result);
196+
for (unsigned i = 0; i < flat_args.size(); i++) tout << mk_bounded_pp(flat_args[i], m()) << "\n";
197+
tout << st << "\n";
198+
);
189199
if (st == BR_FAILED) {
190200
result = mk_mul_app(flat_args.size(), flat_args.c_ptr());
191201
return BR_DONE;

src/smt/theory_arith_core.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ namespace smt {
336336
template<typename Ext>
337337
theory_var theory_arith<Ext>::internalize_mul(app * m) {
338338
rational _val;
339-
TRACE("arith", tout << mk_pp(m, get_manager()) << "\n";);
339+
TRACE("arith", tout << m->get_num_args() << " " << mk_pp(m, get_manager()) << "\n";);
340340
SASSERT(m_util.is_mul(m));
341341
expr* arg0 = m->get_arg(0);
342342
expr* arg1 = m->get_arg(1);
@@ -366,7 +366,7 @@ namespace smt {
366366
add_row_entry<false>(r_id, numeral::one(), s);
367367
init_row(r_id);
368368
return s;
369-
}
369+
}
370370
else {
371371
return internalize_mul_core(m);
372372
}

src/util/symbol_table.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ class symbol_table {
143143
if (e != nullptr) {
144144
m_trail_stack.push_back(e->m_data);
145145
e->m_data.m_data = data;
146-
return;
147146
}
148147
else {
149148
m_trail_stack.push_back(dummy);

0 commit comments

Comments
 (0)