mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 06:03:23 +00:00
parent
6cbcd13224
commit
29f3f6a7aa
1 changed files with 27 additions and 7 deletions
|
@ -636,18 +636,37 @@ namespace nlsat {
|
||||||
SASSERT(k == atom::LT || k == atom::GT || k == atom::EQ);
|
SASSERT(k == atom::LT || k == atom::GT || k == atom::EQ);
|
||||||
if (sz == 0) {
|
if (sz == 0) {
|
||||||
switch (k) {
|
switch (k) {
|
||||||
case atom::LT: return false_literal; // 1 < 0
|
case atom::LT: return false_literal; // 0 < 0
|
||||||
case atom::EQ: return false_literal; // 1 == 0
|
case atom::EQ: return true_literal; // 0 == 0
|
||||||
case atom::GT: return true_literal; // 1 > 0
|
case atom::GT: return false_literal; // 0 > 0
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
return null_literal;
|
return null_literal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
bool is_const = true;
|
||||||
return literal(mk_ineq_atom(k, sz, ps, is_even), false);
|
polynomial::manager::scoped_numeral cnst(m_pm.m());
|
||||||
|
m_pm.m().set(cnst, 1);
|
||||||
|
for (unsigned i = 0; is_const && i < sz; ++i) {
|
||||||
|
if (m_pm.is_const(ps[i])) {
|
||||||
|
auto const& c = m_pm.coeff(ps[i], 0);
|
||||||
|
m_pm.m().mul(cnst, c, cnst);
|
||||||
|
if (is_even[i]) {
|
||||||
|
m_pm.m().mul(cnst, c, cnst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
is_const = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (is_const) {
|
||||||
|
if (m_pm.m().is_pos(cnst) && k == atom::GT) return true_literal;
|
||||||
|
if (m_pm.m().is_neg(cnst) && k == atom::LT) return true_literal;
|
||||||
|
if (m_pm.m().is_zero(cnst) && k == atom::EQ) return true_literal;
|
||||||
|
return false_literal;
|
||||||
|
}
|
||||||
|
return literal(mk_ineq_atom(k, sz, ps, is_even), false);
|
||||||
|
}
|
||||||
|
|
||||||
bool_var mk_root_atom(atom::kind k, var x, unsigned i, poly * p) {
|
bool_var mk_root_atom(atom::kind k, var x, unsigned i, poly * p) {
|
||||||
polynomial_ref p1(m_pm), uniq_p(m_pm);
|
polynomial_ref p1(m_pm), uniq_p(m_pm);
|
||||||
|
@ -1564,9 +1583,10 @@ namespace nlsat {
|
||||||
m_explain.set_full_dimensional(is_full_dimensional());
|
m_explain.set_full_dimensional(is_full_dimensional());
|
||||||
bool reordered = false;
|
bool reordered = false;
|
||||||
|
|
||||||
if (!m_incremental && m_inline_vars)
|
if (!m_incremental && m_inline_vars) {
|
||||||
if (!simplify())
|
if (!simplify())
|
||||||
return l_false;
|
return l_false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!can_reorder()) {
|
if (!can_reorder()) {
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue