Skip to content

Commit

Permalink
fix #6686
Browse files Browse the repository at this point in the history
  • Loading branch information
NikolajBjorner committed Apr 13, 2023
1 parent eba0732 commit f0afbcb
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
9 changes: 9 additions & 0 deletions src/math/interval/interval.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class im_default_config {
void set_upper_is_open(interval & a, bool v) { a.m_upper_open = v; }
void set_lower_is_inf(interval & a, bool v) { a.m_lower_inf = v; }
void set_upper_is_inf(interval & a, bool v) { a.m_upper_inf = v; }


// Reference to numeral manager
numeral_manager & m() const { return m_manager; }
Expand Down Expand Up @@ -184,6 +185,14 @@ class interval_manager {
bool upper_is_open(interval const & a) const { return m_c.upper_is_open(a); }
bool lower_is_inf(interval const & a) const { return m_c.lower_is_inf(a); }
bool upper_is_inf(interval const & a) const { return m_c.upper_is_inf(a); }
bool is_empty(interval const& a) const {
if (lower_is_inf(a) || upper_is_inf(a))
return false;
ext_numeral_kind lk = lower_kind(a), uk = upper_kind(a);
if (lower_is_open(a) || upper_is_open(a))
return !(::lt(m(), lower(a), lk, upper(a), uk));
return ::lt(m(), upper(a), uk, lower(a), lk);
}

bool lower_is_neg(interval const & a) const { return ::is_neg(m(), lower(a), lower_kind(a)); }
bool lower_is_pos(interval const & a) const { return ::is_pos(m(), lower(a), lower_kind(a)); }
Expand Down
4 changes: 2 additions & 2 deletions src/math/interval/interval_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ void interval_manager<C>::set(interval & t, interval const & s) {
}
set_lower_is_open(t, lower_is_open(s));
set_upper_is_open(t, upper_is_open(s));
SASSERT(check_invariant(t));
SASSERT(is_empty(t) || check_invariant(t));
}

template<typename C>
Expand Down Expand Up @@ -813,7 +813,7 @@ void interval_manager<C>::add(interval const & a, interval const & b, interval &
set_upper_is_inf(c, new_u_kind == EN_PLUS_INFINITY);
set_lower_is_open(c, lower_is_open(a) || lower_is_open(b));
set_upper_is_open(c, upper_is_open(a) || upper_is_open(b));
SASSERT(check_invariant(c));
SASSERT(is_empty(a) || is_empty(b) || check_invariant(c));
}

template<typename C>
Expand Down

0 comments on commit f0afbcb

Please sign in to comment.