3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-28 08:58:44 +00:00

propagate monomial is nla

This commit is contained in:
Lev Nachmanson 2023-09-05 18:49:59 -07:00
parent 318d7d7564
commit 41f59cb1ed
11 changed files with 210 additions and 115 deletions

View file

@ -1532,11 +1532,12 @@ namespace smt {
bool max,
bool maintain_integrality,
bool& has_shared) {
return UNBOUNDED;
m_stats.m_max_min++;
unsigned best_efforts = 0;
bool inc = false;
SASSERT(!maintain_integrality || valid_assignment());
SASSERT(satisfy_bounds());

View file

@ -511,6 +511,7 @@ bool theory_arith<Ext>::propagate_nl_downward(expr * n, var_power_pair const& p)
*/
template<typename Ext>
bool theory_arith<Ext>::propagate_nl_bounds(expr * m) {
return false;
TRACE("non_linear", tout << "propagate several bounds using:\n"; display_monomial(tout, m); tout << "\n";);
bool result = propagate_nl_upward(m);
buffer<var_power_pair> vp;
@ -530,6 +531,7 @@ bool theory_arith<Ext>::propagate_nl_bounds(expr * m) {
*/
template<typename Ext>
bool theory_arith<Ext>::propagate_nl_bounds() {
return false;
m_dep_manager.reset();
bool propagated = false;
for (unsigned i = 0; i < m_nl_monomials.size(); i++) {
@ -1632,6 +1634,7 @@ bool theory_arith<Ext>::is_cross_nested_consistent(row const & r) {
*/
template<typename Ext>
bool theory_arith<Ext>::is_cross_nested_consistent(svector<theory_var> const & nl_cluster) {
return true;
for (theory_var v : nl_cluster) {
if (!is_base(v))
continue;

View file

@ -2163,8 +2163,14 @@ public:
if (!m_nla)
return;
m_nla->propagate(m_nla_lemma_vector);
for (nla::lemma const& l : m_nla_lemma_vector)
false_case_of_check_nla(l);
if (lp().get_status() == lp::lp_status::INFEASIBLE) {
TRACE("arith", tout << "propagation conflict\n";);
get_infeasibility_explanation_and_set_conflict();
}
else {
for (nla::lemma const& l : m_nla_lemma_vector)
false_case_of_check_nla(l);
}
}
bool should_propagate() const {