3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-20 12:53:38 +00:00

prepare to hook up pdd_grobner

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2019-12-26 12:31:32 -08:00
parent 610a2837ea
commit c6ea5c2263
8 changed files with 71 additions and 39 deletions

View file

@ -86,28 +86,6 @@ bool dep_intervals::separated_from_zero_on_upper(const interval& i) const {
return true;
}
bool dep_intervals::check_interval_for_conflict_on_zero(const interval & i, u_dependency*& dep) {
return check_interval_for_conflict_on_zero_lower(i, dep) || check_interval_for_conflict_on_zero_upper(i, dep);
}
bool dep_intervals::check_interval_for_conflict_on_zero_upper(const interval & i, u_dependency*& dep) {
if (!separated_from_zero_on_upper(i))
return false;
TRACE("dep_intervals", display(tout, i););
dep = m_dep_manager.mk_join(dep, i.m_upper_dep);
return true;
}
bool dep_intervals::check_interval_for_conflict_on_zero_lower(const interval & i, u_dependency*& dep) {
if (!separated_from_zero_on_lower(i)) {
return false;
}
TRACE("dep_intervals", display(tout, i););
dep = m_dep_manager.mk_join(dep, i.m_lower_dep);
return true;
}
std::ostream& dep_intervals::display(std::ostream& out, const interval& i) const {
if (m_imanager.lower_is_inf(i)) {
out << "(-oo";

View file

@ -255,15 +255,44 @@ public:
inline bool separated_from_zero(const interval& i) const {
return separated_from_zero_on_upper(i) || separated_from_zero_on_lower(i);
}
bool check_interval_for_conflict_on_zero(const interval& i, u_dependency*&);
bool check_interval_for_conflict_on_zero_lower(const interval& i, u_dependency*&);
bool check_interval_for_conflict_on_zero_upper(const interval& i, u_dependency*&);
template <typename T>
bool check_interval_for_conflict_on_zero(const interval& i, u_dependency*& dep, std::function<void (const T&)> f) {
return check_interval_for_conflict_on_zero_lower(i, dep, f) || check_interval_for_conflict_on_zero_upper(i, dep, f);
}
template <typename T>
bool check_interval_for_conflict_on_zero_lower(const interval& i, u_dependency*& dep, std::function<void (const T&)> f) {
if (!separated_from_zero_on_lower(i)) {
return false;
}
TRACE("dep_intervals", display(tout, i););
dep = m_dep_manager.mk_join(dep, i.m_lower_dep);
T expl;
linearize(dep, expl);
f(expl);
return true;
}
template <typename T>
bool check_interval_for_conflict_on_zero_upper(const interval& i, u_dependency*& dep, std::function<void (const T&)> f) {
if (!separated_from_zero_on_upper(i))
return false;
TRACE("dep_intervals", display(tout, i););
dep = m_dep_manager.mk_join(dep, i.m_upper_dep);
T expl;
linearize(dep, expl);
f(expl);
return true;
}
mpq const& lower(interval const& a) const { return m_config.lower(a); }
mpq const& upper(interval const& a) const { return m_config.upper(a); }
bool is_empty(interval const& a) const;
void set_interval_for_scalar(interval&, const rational&);
template <typename T>
void linearize(u_dependency* dep, T& expl) const { m_dep_manager.linearize(dep, expl); }
void linearize(u_dependency* dep, T& expl) const {
vector<unsigned, false> v;
m_dep_manager.linearize(dep, v);
for (unsigned ci: v)
expl.push_back(ci);
}
void reset() { m_dep_manager.reset(); }