So, in more generally, `::y` is "something", `::x` is "can have `::a`", and the combined generation must make `y` valid but in some way congruent with `x`. Pretty sure the only reasonable way is to change the `y` generator based on the value of `x`. I've updated my answer.