mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 06:03:23 +00:00
renaming the smon fields to distingush them from monomial fields
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
4cbb586947
commit
7eeba3a917
3 changed files with 312 additions and 316 deletions
|
@ -33,13 +33,13 @@ namespace nla {
|
||||||
*/
|
*/
|
||||||
class smon {
|
class smon {
|
||||||
lpvar m_var; // variable representing original monomial
|
lpvar m_var; // variable representing original monomial
|
||||||
svector<lpvar> m_vars;
|
svector<lpvar> m_rvars;
|
||||||
bool m_sign;
|
bool m_rsign;
|
||||||
unsigned m_next; // next congruent node.
|
unsigned m_next; // next congruent node.
|
||||||
unsigned m_prev; // previous congruent node
|
unsigned m_prev; // previous congruent node
|
||||||
mutable unsigned m_visited;
|
mutable unsigned m_visited;
|
||||||
public:
|
public:
|
||||||
smon(lpvar v, unsigned idx): m_var(v), m_sign(false), m_next(idx), m_prev(idx), m_visited(0) {}
|
smon(lpvar v, unsigned idx): m_var(v), m_rsign(false), m_next(idx), m_prev(idx), m_visited(0) {}
|
||||||
lpvar var() const { return m_var; }
|
lpvar var() const { return m_var; }
|
||||||
unsigned next() const { return m_next; }
|
unsigned next() const { return m_next; }
|
||||||
unsigned& next() { return m_next; }
|
unsigned& next() { return m_next; }
|
||||||
|
@ -47,30 +47,32 @@ public:
|
||||||
unsigned& prev() { return m_prev; }
|
unsigned& prev() { return m_prev; }
|
||||||
unsigned visited() const { return m_visited; }
|
unsigned visited() const { return m_visited; }
|
||||||
unsigned& visited() { return m_visited; }
|
unsigned& visited() { return m_visited; }
|
||||||
svector<lpvar> const& vars() const { return m_vars; }
|
svector<lpvar> const& vars() const { return m_rvars; }
|
||||||
svector<lp::var_index>::const_iterator begin() const { return vars().begin(); }
|
svector<lp::var_index>::const_iterator begin() const { return vars().begin(); }
|
||||||
svector<lp::var_index>::const_iterator end() const { return vars().end(); }
|
svector<lp::var_index>::const_iterator end() const { return vars().end(); }
|
||||||
unsigned size() const { return m_vars.size(); }
|
unsigned size() const { return m_rvars.size(); }
|
||||||
lpvar operator[](unsigned i) const { return m_vars[i]; }
|
lpvar operator[](unsigned i) const { return m_rvars[i]; }
|
||||||
bool sign() const { return m_sign; }
|
bool sign() const { return m_rsign; }
|
||||||
rational rsign() const { return rational(m_sign ? -1 : 1); }
|
rational rsign() const { return rational(m_rsign ? -1 : 1); }
|
||||||
void reset() { m_sign = false; m_vars.reset(); }
|
void reset() { m_rsign = false; m_rvars.reset(); }
|
||||||
void push_var(signed_var sv) { m_sign ^= sv.sign(); m_vars.push_back(sv.var()); }
|
void push_var(signed_var sv) { m_rsign ^= sv.sign(); m_rvars.push_back(sv.var()); }
|
||||||
void done_push() {
|
void done_push() {
|
||||||
std::sort(m_vars.begin(), m_vars.end());
|
std::sort(m_rvars.begin(), m_rvars.end());
|
||||||
}
|
}
|
||||||
std::ostream& display(std::ostream& out) const {
|
std::ostream& display(std::ostream& out) const {
|
||||||
out << "v" << var() << " := ";
|
// out << "v" << var() << " := ";
|
||||||
if (sign()) out << "- ";
|
// if (sign()) out << "- ";
|
||||||
for (lpvar v : vars()) out << "v" << v << " ";
|
// for (lpvar v : vars()) out << "v" << v << " ";
|
||||||
|
SASSERT(false);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::ostream& operator<<(std::ostream& out, smon const& m) { return m.display(out); }
|
inline std::ostream& operator<<(std::ostream& out, smon const& m) { return m.display(out); }
|
||||||
|
|
||||||
|
|
||||||
class emonomials : public var_eqs_merge_handler {
|
class emonomials : public var_eqs_merge_handler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief singly-lined cyclic list of monomial indices where variable occurs.
|
\brief singly-lined cyclic list of monomial indices where variable occurs.
|
||||||
|
@ -147,7 +149,7 @@ inline std::ostream& operator<<(std::ostream& out, smon const& m) { return m.dis
|
||||||
void set_visited(monomial const& m) const;
|
void set_visited(monomial const& m) const;
|
||||||
bool is_visited(monomial const& m) const;
|
bool is_visited(monomial const& m) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
\brief emonomials builds on top of var_eqs.
|
\brief emonomials builds on top of var_eqs.
|
||||||
push and pop on emonomials calls push/pop on var_eqs, so no
|
push and pop on emonomials calls push/pop on var_eqs, so no
|
||||||
|
@ -371,8 +373,8 @@ inline std::ostream& operator<<(std::ostream& out, smon const& m) { return m.dis
|
||||||
|
|
||||||
void unmerge_eh(signed_var r2, signed_var r1) override;
|
void unmerge_eh(signed_var r2, signed_var r1) override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::ostream& operator<<(std::ostream& out, emonomials const& m) { return m.display(out); }
|
inline std::ostream& operator<<(std::ostream& out, emonomials const& m) { return m.display(out); }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,12 +107,6 @@ std::ostream& common::print_monomial(const monomial & m, std::ostream& out) cons
|
||||||
return c().print_monomial(m, out);
|
return c().print_monomial(m, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
//std::ostream& common::print_rooted_monomial(const smon& rm, std::ostream& out) const {
|
|
||||||
// return c().print_rooted_monomial(rm, out);
|
|
||||||
//}
|
|
||||||
//std::ostream& common::print_rooted_monomial_with_vars(const smon& rm, std::ostream& out) const {
|
|
||||||
// return c().print_rooted_monomial_with_vars(rm, out);
|
|
||||||
//}
|
|
||||||
std::ostream& common::print_factor(const factor & f, std::ostream& out) const {
|
std::ostream& common::print_factor(const factor & f, std::ostream& out) const {
|
||||||
return c().print_factor(f, out);
|
return c().print_factor(f, out);
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ void monotone::print_monotone_array(const monotone_array_t& lex_sorted,
|
||||||
bool monotone::monotonicity_lemma_on_lex_sorted_rm_upper(const monotone_array_t& lex_sorted, unsigned i, const smon& rm) {
|
bool monotone::monotonicity_lemma_on_lex_sorted_rm_upper(const monotone_array_t& lex_sorted, unsigned i, const smon& rm) {
|
||||||
const rational v = abs(vvr(rm));
|
const rational v = abs(vvr(rm));
|
||||||
const auto& key = lex_sorted[i].first;
|
const auto& key = lex_sorted[i].first;
|
||||||
TRACE("nla_solver", tout << "rm = " << rm << "i = " << i << std::endl;);
|
TRACE("nla_solver", tout << "rm = " << rm << ", i = " << i << std::endl;);
|
||||||
for (unsigned k = i + 1; k < lex_sorted.size(); k++) {
|
for (unsigned k = i + 1; k < lex_sorted.size(); k++) {
|
||||||
const auto& p = lex_sorted[k];
|
const auto& p = lex_sorted[k];
|
||||||
const smon& rmk = c().m_emons.canonical[p.second];
|
const smon& rmk = c().m_emons.canonical[p.second];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue