3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-22 16:45:31 +00:00

fix add_constraint and substitute_terms_in_linear_expression

Signed-off-by: Lev Nachmanson <levnach@microsoft.com>
This commit is contained in:
Lev Nachmanson 2017-05-18 10:56:50 -07:00
parent e9d9354885
commit b92f0acae3
3 changed files with 7 additions and 15 deletions

View file

@ -2705,9 +2705,16 @@ void test_term() {
ls.push_back(std::pair<mpq, var_index>((int)1, z));
solver.add_constraint(ls, lconstraint_kind::EQ, mpq(0));
ls.clear();
ls.push_back(std::pair<mpq, var_index>((int)1, x));
solver.add_constraint(ls, lconstraint_kind::LT, mpq(0));
ls.push_back(std::pair<mpq, var_index>((int)2, y));
solver.add_constraint(ls, lconstraint_kind::GT, mpq(0));
auto status = solver.solve();
std::cout << lp_status_to_string(status) << std::endl;
std::unordered_map<var_index, mpq> model;
if (status != OPTIMAL)
return;
solver.get_model(model);
for (auto & t : model) {

View file

@ -204,24 +204,12 @@ void lar_solver::add_var_bound_on_constraint_for_term(var_index j, lconstraint_k
}
constraint_index lar_solver::add_constraint(const vector<std::pair<mpq, var_index>>& left_side_with_terms, lconstraint_kind kind_par, const mpq& right_side_parm) {
this->print_linear_combination_of_column_indices(left_side_with_terms, std::cout);
std::cout << std::endl;
vector<std::pair<mpq, var_index>> left_side;
mpq rs = - right_side_parm;
std::cout << "before rs = " << rs << std::endl;
substitute_terms_in_linear_expression(left_side_with_terms, left_side, rs);
std::cout << "after rs = " << rs << std::endl;
this->print_linear_combination_of_column_indices(left_side, std::cout);
std::cout << std::endl;
unsigned term_index = add_term(left_side, zero_of_type<mpq>());
constraint_index ci = m_constraints.size();
add_var_bound_on_constraint_for_term(term_index, kind_par, -rs, ci);
std::cout << "constraint = ";
print_constraint(ci, std::cout);
std::cout << std::endl;
return ci;
}

View file

@ -557,9 +557,6 @@ void lar_solver::substitute_terms_in_linear_expression(const vector<std::pair<mp
register_one_coeff_in_map(coeffs, t.first, j);
} else {
const lar_term & term = * m_terms[adjust_term_index(t.second)];
std::cout << "term = ";
print_term(term, std::cout);
std::cout << std::endl;
for (auto & p : term.coeffs()){
register_one_coeff_in_map(coeffs, t.first * p.second , p.first);
}