spire.math.interval
Intervals are nonEmpty and don't intersect lower.upperBound is strictly less than upper.lowerBound.
Intervals are equal
Non empty intervals, for which holds: upper ∋ lower.upperBound && upper ∌ lower.lowerBound For example: (-2, 10] and [5, 13)
inner is a subset of outer.
inner is a subset of outer. Empty interval is always a subset of any other, so all overlaps on empty intervals go here, except (Ø).overlap(Ø), that results in equality.
(Ø).overlap(Ø)
For example [1,4) and [1, 5]