3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-20 21:03:39 +00:00

adding monomial bounds

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-05-13 18:44:04 -07:00
parent bdecbe4ed7
commit 4e51633e6f
6 changed files with 136 additions and 117 deletions

View file

@ -89,21 +89,23 @@ bool dep_intervals::separated_from_zero_on_upper(const interval& i) const {
std::ostream& dep_intervals::display(std::ostream& out, const interval& i) const {
if (m_imanager.lower_is_inf(i)) {
out << "(-oo";
} else {
}
else {
out << (m_imanager.lower_is_open(i)? "(":"[") << rational(m_imanager.lower(i));
}
out << ",";
if (m_imanager.upper_is_inf(i)) {
out << "oo)";
} else {
}
else {
out << rational(m_imanager.upper(i)) << (m_imanager.upper_is_open(i)? ")":"]");
}
if (i.m_lower_dep) {
out << "\nlower deps\n";
// out << "\nlower deps\n";
// TBD: print_dependencies(i.m_lower_dep, out);
}
if (i.m_upper_dep) {
out << "\nupper deps\n";
// out << "\nupper deps\n";
// TBD: print_dependencies(i.m_upper_dep, out);
}
return out;
@ -125,21 +127,21 @@ bool dep_intervals::is_empty(interval const& a) const {
bool dep_intervals::is_above(const interval& i, const rational& r) const {
if (lower_is_inf(i))
return false;
if (m_num_manager.lt(lower(i), r.to_mpq()))
return false;
if (m_num_manager.eq(lower(i), r.to_mpq()) && !m_config.lower_is_open(i))
return false;
return true;
if (m_num_manager.lt(r.to_mpq(), lower(i)))
return true;
if (m_num_manager.eq(lower(i), r.to_mpq()) && m_config.lower_is_open(i))
return true;
return false;
}
bool dep_intervals::is_below(const interval& i, const rational& r) const {
if (upper_is_inf(i))
return false;
if (m_num_manager.lt(upper(i), r.to_mpq()))
return false;
if (m_num_manager.eq(upper(i), r.to_mpq()) && !m_config.upper_is_open(i))
return false;
return true;
return true;
if (m_num_manager.eq(upper(i), r.to_mpq()) && m_config.upper_is_open(i))
return true;
return false;
}

View file

@ -411,12 +411,10 @@ private:
void add(const interval& a, const interval& b, interval& c, interval_deps_combine_rule& deps) { m_imanager.add(a, b, c, deps); }
void combine_deps(interval const& a, interval const& b, interval_deps_combine_rule const& deps, interval& i) const {
SASSERT(&a != &i && &b != &i);
m_config.add_deps(a, b, deps, i);
}
void combine_deps(interval const& a, interval_deps_combine_rule const& deps, interval& i) const {
SASSERT(&a != &i);
m_config.add_deps(a, deps, i);
}