abstract space logic
Is the type
tp decomposable? i.e. all values of the type can be covered
by its decomposed types.
Abstract sealed class, OrType, Boolean and Java enums can be decomposed.
Get components of decomposable types
Flatten space to get rid of
Or for pretty print
Intersection of two spaces
a a subspace of
b? Equivalent to
a - b == Empty, but faster
The space of a not covered by b
Display space in string format
Simplify space using the laws, there's no nested union after simplify