After spending a while collecting opponent chain data, I'm tentatively concluding:

A set of moves is pre-defined (by Kinak?) for each processor value for each opponent. These chains assume that infinite memory is available. If an opponent doesn't have enough memory, then there is an ordered series of substations that can be made to reduce the memory requirements for that move. For example, for a Gatekeeper with four processors starts with the following five chains:

G:F:CD:DP

G:JD:CD:DP

G:JD:F

G:JD:F:DP

JD:F:CD:DP

And then there's the following rules or substitutions that can be made to reduce the attacks memory requirements. (Note that they are ordered, so the first substitution happens first, if possible. If that still doesn't reduce the memory enough, then the second substitution happens if possible, etc.)

1. JD:DP -> F

2. DP -> -

3. JD:F -> JD:DP

4. JD:CD -> JD

5. CD -> DP

6. F -> -

7. JD -> DP

8. G -> JD