mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
fix a lambda bug
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
f9de65a464
commit
20c02f4f45
|
@ -281,11 +281,28 @@ private:
|
||||||
// */
|
// */
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
void limit_j(unsigned bound_j, const mpq& u, bool coeff_before_j_is_pos, bool is_lower_bound, bool strict)
|
||||||
void limit_j(unsigned bound_j, const mpq& u, bool coeff_before_j_is_pos, bool is_lower_bound, bool strict){
|
{
|
||||||
unsigned row_index = this->m_row_index;
|
unsigned row_index = this->m_row_index;
|
||||||
auto explain = [bound_j, coeff_before_j_is_pos, is_lower_bound, strict, row_index,this]() {
|
auto* lar = &m_bp.lp();
|
||||||
return explain_bound_on_var_on_coeff((B*)&m_bp, bound_j, coeff_before_j_is_pos, is_lower_bound, strict, row_index);
|
auto explain = [bound_j, coeff_before_j_is_pos, is_lower_bound, strict, row_index, lar]() {
|
||||||
|
TRACE("bound_analyzer", tout << "explain_bound_on_var_on_coeff, bound_j = " << bound_j << ", coeff_before_j_is_pos = " << coeff_before_j_is_pos << ", is_lower_bound = " << is_lower_bound << ", strict = " << strict << ", row_index = " << row_index << "\n";);
|
||||||
|
int bound_sign = (is_lower_bound ? 1 : -1);
|
||||||
|
int j_sign = (coeff_before_j_is_pos ? 1 : -1) * bound_sign;
|
||||||
|
|
||||||
|
SASSERT(!tv::is_term(bound_j));
|
||||||
|
u_dependency* ret = nullptr;
|
||||||
|
for (auto const& r : lar->get_row(row_index)) {
|
||||||
|
unsigned j = r.var();
|
||||||
|
if (j == bound_j)
|
||||||
|
continue;
|
||||||
|
mpq const& a = r.coeff();
|
||||||
|
int a_sign = is_pos(a) ? 1 : -1;
|
||||||
|
int sign = j_sign * a_sign;
|
||||||
|
u_dependency* witness = sign > 0 ? lar->get_column_upper_bound_witness(j) : lar->get_column_lower_bound_witness(j);
|
||||||
|
ret = lar->join_deps(ret, witness);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
};
|
};
|
||||||
m_bp.add_bound(u, bound_j, is_lower_bound, strict, explain);
|
m_bp.add_bound(u, bound_j, is_lower_bound, strict, explain);
|
||||||
}
|
}
|
||||||
|
@ -320,26 +337,7 @@ private:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static u_dependency* explain_bound_on_var_on_coeff(B* bp, unsigned bound_j, bool coeff_before_j_is_pos, bool is_lower_bound, bool strict, unsigned row_index) {
|
|
||||||
TRACE("bound_analyzer", tout << "explain_bound_on_var_on_coeff, bound_j = " << bound_j << ", coeff_before_j_is_pos = " << coeff_before_j_is_pos << ", is_lower_bound = " << is_lower_bound << ", strict = " << strict << ", row_index = " << row_index << "\n";);
|
|
||||||
auto& lar = bp->lp();
|
|
||||||
int bound_sign = (is_lower_bound ? 1 : -1);
|
|
||||||
int j_sign = (coeff_before_j_is_pos ? 1 : -1) * bound_sign;
|
|
||||||
|
|
||||||
SASSERT(!tv::is_term(bound_j));
|
|
||||||
u_dependency* ret = nullptr;
|
|
||||||
for (auto const& r : lar.get_row(row_index)) {
|
|
||||||
unsigned j = r.var();
|
|
||||||
if (j == bound_j)
|
|
||||||
continue;
|
|
||||||
mpq const& a = r.coeff();
|
|
||||||
int a_sign = is_pos(a) ? 1 : -1;
|
|
||||||
int sign = j_sign * a_sign;
|
|
||||||
u_dependency* witness = sign > 0 ? lar.get_column_upper_bound_witness(j) : lar.get_column_lower_bound_witness(j);
|
|
||||||
ret = lar.join_deps(ret, witness);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue