Does it make sense to have canBeMinimized in conjunction with hasPositiveValue? If not, maybe add up 1 or 0 for each flag and make sure it's at most 1 so we don't need n^2 invariants here.