Option#isDefined works this way I believe, so there's a common precedent to this redundancy regardless of how we do this.

Regarding intersections, part of me thinks it'd be better to prevent folks from instantiating Intersection directly all together.  I believe all the Interval#intersect implementations here already handle returning Empty when appropriate.  The last part would be to provide an object that lets you unapply an intersection into upper and lower components.  But maybe that's too messy?