Scala implementation of space logic
Abstract sealed types, or-types, Boolean and Java enums can be decomposed
Decompose a type into subspaces -- assume the type can be decomposed
Whether the extractor is irrefutable
Whether the counterexample is satisfiable. The space is flattened and non-empty.
Whehter counter-examples should be further checked? True for GADTs.
Show friendly type name with current scope in mind
E.g. C.this.B --> B if current owner is C C.this.x.T --> x.T if current owner is C X[T] --> X C --> C if current owner is C !!!
Parameter types of the case class type
tp. Adapted from
unapplyPlan in patternMatcher