Reading the RM 1.1.0 data types spec, in DV_INTERVAL and Interval types I think we are missing an invariant, for instance, if lower_included = true and lower = NULL, is that valid? Same with upper.
I’m not seeing any constraint/invariant that says something about those cases. IMO lower/upper_included should imply lower/upper is not NULL.
You could do this to be strict - the original invariant specification was designed with the sense that if lower_unbounded or upper_unbounded = True, it doesn’t actually matter if any value is attached to lower or upper. The simpler way to state the stricter conditions is: