mirror of
https://github.com/Z3Prover/z3
synced 2025-04-28 19:35:50 +00:00
Api (#7097)
* rename ul_pair to column Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * t Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * simple test passed * remove an assert * relax an assertion * remove an obsolete function Signed-off-by: Lev Nachmanson <levnach@hotmail.com> * access a term by the term column * remove the column index from colunm.h * remove an unused method * remove debug code * fix the build of lp_tst Signed-off-by: Lev Nachmanson <levnach@hotmail.com> --------- Signed-off-by: Lev Nachmanson <levnach@hotmail.com> Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
133546625c
commit
bdb9106f99
45 changed files with 587 additions and 973 deletions
|
@ -71,12 +71,11 @@ struct solver::imp {
|
|||
}
|
||||
}
|
||||
|
||||
for (unsigned i = lra.terms().size(); i-- > 0; ) {
|
||||
auto const& t = lra.term(i);
|
||||
for (auto const iv : t) {
|
||||
auto v = iv.column().index();
|
||||
for (const auto *t : lra.terms() ) {
|
||||
for (auto const iv : *t) {
|
||||
auto v = iv.j();
|
||||
var2occurs.reserve(v + 1);
|
||||
var2occurs[v].terms.push_back(i);
|
||||
var2occurs[v].terms.push_back(t->j());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,17 +98,15 @@ struct solver::imp {
|
|||
todo.push_back(w);
|
||||
|
||||
for (auto ti : var2occurs[v].terms) {
|
||||
for (auto iv : lra.term(ti))
|
||||
todo.push_back(iv.column().index());
|
||||
auto vi = lp::tv::mask_term(ti);
|
||||
todo.push_back(lra.map_term_index_to_column_index(vi));
|
||||
for (auto iv : lra.get_term(ti))
|
||||
todo.push_back(iv.j());
|
||||
todo.push_back(ti);
|
||||
}
|
||||
|
||||
if (lra.column_corresponds_to_term(v)) {
|
||||
if (lra.column_has_term(v)) {
|
||||
m_term_set.insert(v);
|
||||
lp::tv ti = lp::tv::raw(lra.column_to_reported_index(v));
|
||||
for (auto kv : lra.get_term(ti))
|
||||
todo.push_back(kv.column().index());
|
||||
for (auto kv : lra.get_term(v))
|
||||
todo.push_back(kv.j());
|
||||
}
|
||||
|
||||
if (m_nla_core.is_monic_var(v)) {
|
||||
|
@ -517,16 +514,16 @@ struct solver::imp {
|
|||
|
||||
|
||||
|
||||
bool is_int(lp::var_index v) {
|
||||
bool is_int(lp::lpvar v) {
|
||||
return lra.var_is_int(v);
|
||||
}
|
||||
|
||||
polynomial::var lp2nl(lp::var_index v) {
|
||||
polynomial::var lp2nl(lp::lpvar v) {
|
||||
polynomial::var r;
|
||||
if (!m_lp2nl.find(v, r)) {
|
||||
r = m_nlsat->mk_var(is_int(v));
|
||||
m_lp2nl.insert(v, r);
|
||||
if (!m_term_set.contains(v) && lra.column_corresponds_to_term(v)) {
|
||||
if (!m_term_set.contains(v) && lra.column_has_term(v)) {
|
||||
m_term_set.insert(v);
|
||||
}
|
||||
}
|
||||
|
@ -534,14 +531,13 @@ struct solver::imp {
|
|||
}
|
||||
//
|
||||
void add_term(unsigned term_column) {
|
||||
lp::tv ti = lp::tv::raw(lra.column_to_reported_index(term_column));
|
||||
const lp::lar_term& t = lra.get_term(ti);
|
||||
const lp::lar_term& t = lra.get_term(term_column);
|
||||
// code that creates a polynomial equality between the linear coefficients and
|
||||
// variable representing the term.
|
||||
svector<polynomial::var> vars;
|
||||
rational den(1);
|
||||
for (lp::lar_term::ival kv : t) {
|
||||
vars.push_back(lp2nl(kv.column().index()));
|
||||
vars.push_back(lp2nl(kv.j()));
|
||||
den = lcm(den, denominator(kv.coeff()));
|
||||
}
|
||||
vars.push_back(lp2nl(term_column));
|
||||
|
@ -559,7 +555,7 @@ struct solver::imp {
|
|||
m_nlsat->mk_clause(1, &lit, nullptr);
|
||||
}
|
||||
|
||||
nlsat::anum const& value(lp::var_index v) {
|
||||
nlsat::anum const& value(lp::lpvar v) {
|
||||
polynomial::var pv;
|
||||
if (m_lp2nl.find(v, pv))
|
||||
return m_nlsat->value(pv);
|
||||
|
@ -636,7 +632,7 @@ std::ostream& solver::display(std::ostream& out) const {
|
|||
return m_imp->display(out);
|
||||
}
|
||||
|
||||
nlsat::anum const& solver::value(lp::var_index v) {
|
||||
nlsat::anum const& solver::value(lp::lpvar v) {
|
||||
return m_imp->value(v);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue