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

rebase with master

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2025-02-03 19:21:24 -10:00 committed by Lev Nachmanson
parent a19e10912f
commit 99538567a7
5 changed files with 18 additions and 17 deletions

View file

@ -300,7 +300,7 @@ private:
int a_sign = is_pos(a) ? 1 : -1; int a_sign = is_pos(a) ? 1 : -1;
int sign = j_sign * a_sign; 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); u_dependency* witness = sign > 0 ? lar->get_column_upper_bound_witness(j) : lar->get_column_lower_bound_witness(j);
ret = lar->mk_join(ret, witness); ret = lar->join_deps(ret, witness);
} }
return ret; return ret;
}; };

View file

@ -843,7 +843,8 @@ namespace lp {
if (!lia.column_is_int(p.var())) if (!lia.column_is_int(p.var()))
return false; return false;
} }
return true; return lia.column_is_int(term.j());
} }
void delete_column(unsigned j) { void delete_column(unsigned j) {
@ -1470,9 +1471,9 @@ namespace lp {
if (lra.has_upper_bound(j, b_dep, rs, is_strict)) { if (lra.has_upper_bound(j, b_dep, rs, is_strict)) {
if (m_c > rs || (is_strict && m_c == rs)) { if (m_c > rs || (is_strict && m_c == rs)) {
u_dependency* dep = u_dependency* dep =
lra.mk_join(explain_fixed(lra.get_term(j)), lra.join_deps(explain_fixed(lra.get_term(j)),
explain_fixed_in_meta_term(m_term_with_index.m_data)); explain_fixed_in_meta_term(m_term_with_index.m_data));
dep = lra.mk_join( dep = lra.join_deps(
dep, lra.get_bound_constraint_witnesses_for_column(j)); dep, lra.get_bound_constraint_witnesses_for_column(j));
for (constraint_index ci : lra.flatten(dep)) { for (constraint_index ci : lra.flatten(dep)) {
m_infeas_explanation.push_back(ci); m_infeas_explanation.push_back(ci);
@ -1483,9 +1484,9 @@ namespace lp {
if (lra.has_lower_bound(j, b_dep, rs, is_strict)) { if (lra.has_lower_bound(j, b_dep, rs, is_strict)) {
if (m_c < rs || (is_strict && m_c == rs)) { if (m_c < rs || (is_strict && m_c == rs)) {
u_dependency* dep = u_dependency* dep =
lra.mk_join(explain_fixed(lra.get_term(j)), lra.join_deps(explain_fixed(lra.get_term(j)),
explain_fixed_in_meta_term(m_term_with_index.m_data)); explain_fixed_in_meta_term(m_term_with_index.m_data));
dep = lra.mk_join( dep = lra.join_deps(
dep, lra.get_bound_constraint_witnesses_for_column(j)); dep, lra.get_bound_constraint_witnesses_for_column(j));
for (constraint_index ci : lra.flatten(dep)) { for (constraint_index ci : lra.flatten(dep)) {
m_infeas_explanation.push_back(ci); m_infeas_explanation.push_back(ci);
@ -1539,14 +1540,14 @@ namespace lp {
lconstraint_kind kind = lconstraint_kind kind =
upper ? lconstraint_kind::LE : lconstraint_kind::GE; upper ? lconstraint_kind::LE : lconstraint_kind::GE;
u_dependency* dep = prev_dep; u_dependency* dep = prev_dep;
dep = lra.mk_join(dep, explain_fixed_in_meta_term(m_term_with_index.m_data)); dep = lra.join_deps(dep, explain_fixed_in_meta_term(m_term_with_index.m_data));
u_dependency* j_bound_dep = upper u_dependency* j_bound_dep = upper
? lra.get_column_upper_bound_witness(j) ? lra.get_column_upper_bound_witness(j)
: lra.get_column_lower_bound_witness(j); : lra.get_column_lower_bound_witness(j);
dep = lra.mk_join(dep, j_bound_dep); dep = lra.join_deps(dep, j_bound_dep);
dep = lra.mk_join(dep, explain_fixed(lra.get_term(j))); dep = lra.join_deps(dep, explain_fixed(lra.get_term(j)));
dep = dep =
lra.mk_join(dep, lra.get_bound_constraint_witnesses_for_column(j)); lra.join_deps(dep, lra.get_bound_constraint_witnesses_for_column(j));
TRACE("dioph_eq", tout << "jterm:"; TRACE("dioph_eq", tout << "jterm:";
print_lar_term_L(lra.get_term(j), tout) << "\ndep:"; print_lar_term_L(lra.get_term(j), tout) << "\ndep:";
print_deps(tout, dep) << std::endl;); print_deps(tout, dep) << std::endl;);
@ -1570,7 +1571,7 @@ namespace lp {
if (is_fixed(p.j())) { if (is_fixed(p.j())) {
u_dependency* bound_dep = u_dependency* bound_dep =
lra.get_bound_constraint_witnesses_for_column(p.j()); lra.get_bound_constraint_witnesses_for_column(p.j());
dep = lra.mk_join(dep, bound_dep); dep = lra.join_deps(dep, bound_dep);
} }
} }
return dep; return dep;

View file

@ -26,10 +26,10 @@ class explanation {
typedef vector<std::pair<unsigned, mpq>> pair_vec; typedef vector<std::pair<unsigned, mpq>> pair_vec;
typedef hashtable<unsigned, u_hash, u_eq> ci_set; typedef hashtable<unsigned, u_hash, u_eq> ci_set;
// Only one of the fields below is used. The first call adding an entry decides which one it is. // Only one of the fields below is used. The first call adding an entry decides which one it is.
public:
vector<std::pair<constraint_index, mpq>> m_vector; vector<std::pair<constraint_index, mpq>> m_vector;
ci_set m_set; ci_set m_set;
explanation() {} public:
explanation() = default;
template <typename T> template <typename T>
explanation(const T& t) { explanation(const T& t) {

View file

@ -323,7 +323,7 @@ public:
m_dep = nullptr; m_dep = nullptr;
for (auto c : *m_ex) for (auto c : *m_ex)
m_dep = lia.lra.mk_join(lia.lra.dep_manager().mk_leaf(c.ci()), m_dep); m_dep = lia.lra.join_deps(lia.lra.dep_manager().mk_leaf(c.ci()), m_dep);
TRACE("gomory_cut_detail", dump_cut_and_constraints_as_smt_lemma(tout); TRACE("gomory_cut_detail", dump_cut_and_constraints_as_smt_lemma(tout);
lia.lra.display(tout)); lia.lra.display(tout));
@ -470,10 +470,10 @@ public:
if (!p.coeff().is_int()) continue; if (!p.coeff().is_int()) continue;
// the explanation for all above have been already added // the explanation for all above have been already added
if (lia.at_lower(j)) if (lia.at_lower(j))
ret = lia.lra.dep_manager().mk_join(lia.column_lower_bound_constraint(j), ret); ret = lia.lra.join_deps(lia.column_lower_bound_constraint(j), ret);
else { else {
SASSERT(lia.at_upper(j)); SASSERT(lia.at_upper(j));
ret = lia.lra.dep_manager().mk_join(lia.column_upper_bound_constraint(j), ret); ret = lia.lra.join_deps(lia.column_upper_bound_constraint(j), ret);
} }
} }
return ret; return ret;

View file

@ -606,7 +606,7 @@ public:
} }
void explain_fixed_column(unsigned j, explanation& ex); void explain_fixed_column(unsigned j, explanation& ex);
u_dependency* mk_join(u_dependency* a, u_dependency *b) { return m_dependencies.mk_join(a, b); } u_dependency* join_deps(u_dependency* a, u_dependency *b) { return m_dependencies.mk_join(a, b); }
inline constraint_set const& constraints() const { return m_constraints; } inline constraint_set const& constraints() const { return m_constraints; }
void push(); void push();
void pop(); void pop();