3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

use a simpler encoding for term indices

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2020-03-14 19:55:14 -07:00
parent 1c0e583abc
commit 8af245a410
10 changed files with 117 additions and 143 deletions

View file

@ -965,7 +965,7 @@ class theory_lra::imp {
}
SASSERT(!m_left_side.empty());
vi = lp().add_term(m_left_side, v);
SASSERT (lp().is_term(vi));
SASSERT (lp::is_term(vi));
TRACE("arith_verbose", tout << "v" << v << " := " << mk_pp(term, m) << " slack: " << vi << " scopes: " << m_scopes.size() << "\n";
lp().print_term(lp().get_term(vi), tout) << "\n";);
}
@ -1480,7 +1480,7 @@ public:
lp::impq get_ivalue(theory_var v) const {
SASSERT(can_get_ivalue(v));
lpvar vi = get_lpvar(v);
if (!lp().is_term(vi))
if (!lp::is_term(vi))
return lp().get_column_value(vi);
m_todo_terms.push_back(std::make_pair(vi, rational::one()));
lp::impq result(0);
@ -1488,7 +1488,7 @@ public:
vi = m_todo_terms.back().first;
rational coeff = m_todo_terms.back().second;
m_todo_terms.pop_back();
if (lp().is_term(vi)) {
if (lp::is_term(vi)) {
const lp::lar_term& term = lp().get_term(vi);
for (const auto & i: term) {
m_todo_terms.push_back(std::make_pair(i.var(), coeff * i.coeff()));
@ -1510,7 +1510,7 @@ public:
if (m_variable_values.count(vi) > 0)
return m_variable_values[vi];
if (!lp().is_term(vi)) {
if (!lp::is_term(vi)) {
return rational::zero();
}
@ -1520,7 +1520,7 @@ public:
lpvar wi = m_todo_terms.back().first;
rational coeff = m_todo_terms.back().second;
m_todo_terms.pop_back();
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
const lp::lar_term& term = lp().get_term(wi);
for (const auto & i : term) {
if (m_variable_values.count(i.var()) > 0) {
@ -1921,7 +1921,7 @@ public:
expr_ref_vector ts(m);
for (auto const& p : term) {
lpvar wi = p.var();
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
ts.push_back(multerm(p.coeff(), term2expr(lp().get_term(wi))));
}
else {
@ -1964,7 +1964,7 @@ public:
for (auto const& p : term) {
lpvar wi = p.var();
out << p.coeff() << " * ";
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
lp().print_term(lp().get_term(wi), out) << "\n";
}
else {
@ -2755,7 +2755,7 @@ public:
void add_use_lists(lp_api::bound* b) {
theory_var v = b->get_var();
lpvar vi = register_theory_var_in_lar_solver(v);
if (!lp().is_term(vi)) {
if (!lp::is_term(vi)) {
return;
}
m_todo_vars.push_back(vi);
@ -2765,7 +2765,7 @@ public:
lp::lar_term const& term = lp().get_term(vi);
for (auto const& p : term) {
lpvar wi = p.var();
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
m_todo_vars.push_back(wi);
}
else {
@ -2780,7 +2780,7 @@ public:
void del_use_lists(lp_api::bound* b) {
theory_var v = b->get_var();
lpvar vi = get_lpvar(v);
if (!lp().is_term(vi)) {
if (!lp::is_term(vi)) {
return;
}
m_todo_vars.push_back(vi);
@ -2790,7 +2790,7 @@ public:
lp::lar_term const& term = lp().get_term(vi);
for (auto const& coeff : term) {
lpvar wi = coeff.var();
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
m_todo_vars.push_back(wi);
}
else {
@ -2877,14 +2877,14 @@ public:
r.reset();
theory_var v = b.get_var();
lpvar vi = get_lpvar(v);
SASSERT(m_solver->is_term(vi));
SASSERT(lp::is_term(vi));
lp::lar_term const& term = m_solver->get_term(vi);
for (auto const mono : term) {
lp::var_index wi = mono.var();
lp::constraint_index ci;
rational value;
bool is_strict;
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
return false;
}
if (mono.coeff().is_neg() == is_lub) {
@ -3033,8 +3033,8 @@ public:
bool set_bound(lpvar vi, lp::constraint_index ci, rational const& v, bool is_lower) {
if (lp().is_term(vi)) {
lpvar ti = lp().adjust_term_index(vi);
if (lp::is_term(vi)) {
lpvar ti = lp::unmask_term(vi);
auto& vec = is_lower ? m_lower_terms : m_upper_terms;
if (vec.size() <= ti) {
vec.resize(ti + 1, constraint_bound(UINT_MAX, rational()));
@ -3081,7 +3081,7 @@ public:
bool has_lower_bound(lpvar vi, lp::constraint_index& ci, rational const& bound) { return has_bound(vi, ci, bound, true); }
bool has_bound(lpvar vi, lp::constraint_index& ci, rational const& bound, bool is_lower) {
if (lp().is_term(vi)) {
if (lp::is_term(vi)) {
theory_var v = lp().local_to_external(vi);
rational val;
TRACE("arith", tout << vi << " " << v << "\n";);
@ -3091,7 +3091,7 @@ public:
}
auto& vec = is_lower ? m_lower_terms : m_upper_terms;
lpvar ti = lp().adjust_term_index(vi);
lpvar ti = lp::unmask_term(vi);
if (vec.size() > ti) {
constraint_bound& b = vec[ti];
ci = b.first;
@ -3327,7 +3327,7 @@ public:
SASSERT(m_nra);
SASSERT(m_use_nra_model);
lpvar vi = get_lpvar(v);
if (lp().is_term(vi)) {
if (lp::is_term(vi)) {
m_todo_terms.push_back(std::make_pair(vi, rational::one()));
@ -3348,7 +3348,7 @@ public:
for (auto const & arg : term) {
lpvar wi = arg.var();
c1 = arg.coeff() * wcoeff;
if (lp().is_term(wi)) {
if (lp::is_term(wi)) {
m_todo_terms.push_back(std::make_pair(wi, c1));
}
else {
@ -3616,8 +3616,8 @@ public:
void term2coeffs(lp::lar_term const& term, u_map<rational>& coeffs, rational const& coeff) {
for (const auto & ti : term) {
theory_var w;
if (lp().is_term(ti.var())) {
//w = m_term_index2theory_var.get(lp().adjust_term_index(ti.m_key), null_theory_var);
if (lp::is_term(ti.var())) {
//w = m_term_index2theory_var.get(lp::unmask_term(ti.m_key), null_theory_var);
//if (w == null_theory_var) // if extracting expressions directly from nested term
lp::lar_term const& term1 = lp().get_term(ti.var());
rational coeff2 = coeff * ti.coeff();
@ -3685,7 +3685,7 @@ public:
app_ref mk_obj(theory_var v) {
lpvar vi = get_lpvar(v);
bool is_int = a.is_int(get_enode(v)->get_owner());
if (lp().is_term(vi)) {
if (lp::is_term(vi)) {
return mk_term(lp().get_term(vi), is_int);
}
else {