Cat-sat-val type for matrix core?

Indeed! olist means that the list might be non-empty, but if it is non-empty, then every element on it is [ OPT + ]. I’m actually not sure off the top of my head what cat-sat was created for, but you’re right that it won’t do what you want here. Your solution (SPR < > on the complement) is what I would do.