I have:
1) a "starting set" of not-necessarily-unique elements, e.x. { x, y, z, z },
2) a set of transformations, e.x. (x,z) = y, (z,z) = z, x = z, y = x, and
3) a "target set" that I am trying to get by applying transformations to the starting set, e.x. { z }.
I'd like to find an algorithm to generate the (possibly infinite) possible applications of the transformations to the starting set that result in the target set. For example:
{ x, y, z, z }, y => x
{ x, x, z, z }, x => z
{ z, x, z, z }, x => z
{ z, z, z, z }, (z, z) => z
{ z, z, z }, (z, z) => z
{ z, z }, (z, z) => z
{ z }
This sounds like something that's probably an existing (named) problem, but I don't recognize it. Can anyone help me track it down, or suggest further reading on something similar?