Skip to content

Commit d0fc463

Browse files
fix #2581
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 38ad66c commit d0fc463

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

src/qe/nlqsat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ namespace qe {
609609
if (a.is_power(n, n1, n2) && a.is_numeral(n2, r) && r.is_unsigned()) {
610610
return;
611611
}
612-
if (a.is_div(n) && s.m_mode == qsat_t) {
612+
if (a.is_div(n) && s.m_mode == qsat_t && is_ground(n)) {
613613
m_has_divs = true;
614614
return;
615615
}

src/smt/theory_arith_core.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,22 +339,32 @@ namespace smt {
339339
template<typename Ext>
340340
theory_var theory_arith<Ext>::internalize_mul(app * m) {
341341
rational _val;
342+
TRACE("arith", tout << mk_pp(m, get_manager()) << "\n";);
342343
SASSERT(m_util.is_mul(m));
343-
SASSERT(!m_util.is_numeral(m->get_arg(1)));
344-
if (m_util.is_numeral(m->get_arg(0), _val)) {
344+
expr* arg0 = m->get_arg(0);
345+
expr* arg1 = m->get_arg(1);
346+
if (m_util.is_numeral(arg1)) {
347+
std::swap(arg0, arg1);
348+
}
349+
SASSERT(!m_util.is_numeral(arg1));
350+
if (m_util.is_numeral(arg0, _val)) {
345351
SASSERT(m->get_num_args() == 2);
346352
numeral val(_val);
353+
if (_val.is_zero()) {
354+
return internalize_numeral(m, val);
355+
}
356+
SASSERT(!val.is_zero());
347357
SASSERT(!val.is_one());
348358
unsigned r_id = mk_row();
349359
scoped_row_vars _sc(m_row_vars, m_row_vars_top);
350-
if (is_var(m->get_arg(1))) {
360+
if (is_var(arg1)) {
351361
std::ostringstream strm;
352362
strm << mk_pp(m, get_manager()) << " contains a free variable";
353363
throw default_exception(strm.str());
354364
}
355365
if (reflection_enabled())
356-
internalize_term_core(to_app(m->get_arg(0)));
357-
theory_var v = internalize_mul_core(to_app(m->get_arg(1)));
366+
internalize_term_core(to_app(arg0));
367+
theory_var v = internalize_mul_core(to_app(arg1));
358368
add_row_entry<true>(r_id, val, v);
359369
enode * e = mk_enode(m);
360370
theory_var s = mk_var(e);

0 commit comments

Comments
 (0)