modeled as a list of lists because, even though a type definition may
specify only one list of patterns (indicating that valid values must
match at least one of them), derived types may add more. And
patterns added in derivations are meant to be in logical AND.
For example if a base type defines patterns [p1;p2] and a derivation
adds [p3;p4], valid values for the resulting [[p1;p2];[p3;p4]]
must match (p1 OR p2) AND (p3 OR p4)