3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-13 17:36:15 +00:00

change in the test lp.cpp and in a trace statement

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2020-01-29 11:03:18 -08:00
parent 1dfe1a975b
commit 9694dc0c74
2 changed files with 34 additions and 37 deletions

View file

@ -764,8 +764,7 @@ bool lar_solver::row_is_correct(unsigned i) const {
r += c.coeff() * m_mpq_lar_core_solver.m_r_x[c.var()]; r += c.coeff() * m_mpq_lar_core_solver.m_r_x[c.var()];
} }
CTRACE("lar_solver", !is_zero(r), tout << "row = " << i << ", j = " << m_mpq_lar_core_solver.m_r_basis[i] << "\n"; CTRACE("lar_solver", !is_zero(r), tout << "row = " << i << ", j = " << m_mpq_lar_core_solver.m_r_basis[i] << "\n";
print_row(A_r().m_rows[i], tout); tout << "\n"; print_row(A_r().m_rows[i], tout); tout << " = " << r << "\n";
); );
return is_zero(r); return is_zero(r);
} }

View file

@ -2933,49 +2933,47 @@ void test_term() {
lar_solver solver; lar_solver solver;
unsigned _x = 0; unsigned _x = 0;
unsigned _y = 1; unsigned _y = 1;
unsigned _one = 2; var_index x = solver.add_named_var(_x, true, "x");
var_index x = solver.add_var(_x, false); var_index y = solver.add_named_var(_y, true, "y");
var_index y = solver.add_var(_y, false); enable_trace("lar_solver");
var_index one = solver.add_var(_one, false); enable_trace("cube");
vector<std::pair<mpq, var_index>> pairs;
vector<std::pair<mpq, var_index>> term_one; pairs.push_back(std::pair<mpq, var_index>(mpq(2), x));
term_one.push_back(std::make_pair(mpq(1), one)); pairs.push_back(std::pair<mpq, var_index>(mpq(1), y));
int ti = 0; int ti = 0;
unsigned j = solver.add_term(term_one, ti++); unsigned x_plus_y = solver.add_term(pairs, ti++);
solver.add_var_bound(j, lconstraint_kind::LE, mpq(0)); solver.add_var_bound(x_plus_y, lconstraint_kind::GE, mpq(5, 3));
solver.add_var_bound(j, lconstraint_kind::GE, mpq(0)); solver.add_var_bound(x_plus_y, lconstraint_kind::LE, mpq(14, 3));
pairs.pop_back();
vector<std::pair<mpq, var_index>> term_ls; pairs.push_back(std::pair<mpq, var_index>(mpq(-1), y));
term_ls.push_back(std::pair<mpq, var_index>(mpq(1), x)); unsigned x_minus_y = solver.add_term(pairs, ti++);
term_ls.push_back(std::pair<mpq, var_index>(mpq(1), y)); solver.add_var_bound(x_minus_y, lconstraint_kind::GE, mpq(5, 3));
term_ls.push_back(std::make_pair(mpq(3), one)); solver.add_var_bound(x_minus_y, lconstraint_kind::LE, mpq(14, 3));
var_index z = solver.add_term(term_ls, -1); auto status = solver.solve();
vector<std::pair<mpq, var_index>> ls;
ls.push_back(std::pair<mpq, var_index>(mpq(1), x));
ls.push_back(std::pair<mpq, var_index>(mpq(1), y));
ls.push_back(std::pair<mpq, var_index>(mpq(1), z));
j = solver.add_term(ls, ti++);
solver.add_var_bound(j , lconstraint_kind::LE, mpq(0));
solver.add_var_bound(j , lconstraint_kind::GE, mpq(0));
ls.clear();
ls.push_back(std::pair<mpq, var_index>(mpq(1), x));
j = solver.add_term(ls, ti++);
solver.add_var_bound(j, lconstraint_kind::LT, mpq(0));
ls.push_back(std::pair<mpq, var_index>(mpq(2), y));
j = solver.add_term(ls, ti++);
solver.add_var_bound(j, lconstraint_kind::GT, mpq(0));
auto status = solver.solve();
std::cout << lp_status_to_string(status) << std::endl; std::cout << lp_status_to_string(status) << std::endl;
std::unordered_map<var_index, mpq> model; std::unordered_map<var_index, mpq> model;
if (status != lp_status::OPTIMAL) if (status != lp_status::OPTIMAL) {
std::cout << "non optimal" << std::endl;
return; return;
solver.get_model(model); }
solver.print_constraints(std::cout);
std::cout << "\ntableau before cube\n";
solver.m_mpq_lar_core_solver.m_r_solver.pretty_print(std::cout);
std::cout << "\n";
int_solver i_s(&solver);
solver.set_int_solver(&i_s);
lia_move m = i_s.find_cube();
std::cout <<"\n" << lia_move_to_string(m) << std::endl;
model.clear();
solver.get_model(model);
for (auto & t : model) { for (auto & t : model) {
std::cout << solver.get_variable_name(t.first) << " = " << t.second.get_double() << ","; std::cout << solver.get_variable_name(t.first) << " = " << t.second.get_double() << ",";
} }
std::cout << std::endl;
std::cout << "\ntableu after cube\n";
solver.m_mpq_lar_core_solver.m_r_solver.pretty_print(std::cout);
std::cout << "Ax_is_correct = " << solver.ax_is_correct() << "\n";
} }