I now have doubts about the feasibility. At least it's not trivial. The AUFs are killing it.
I'd like to use dynamic programming with a table like this:
ways[SET][CASE] = number of ways to order the PLLs in the set SET and end up with case CASE
This would start with:
ways[NONE][SOLVED] = 1
Then fill the table from there and read the result from:
ways[ALL][SOLVED]
Here's my problem: Let's say
ways[{Aa,R,J,H}][H] = 23
ways[{Aa,R,J,H}][E] = 42
and I'd like to compute
ways[{Aa,R,J,H,T}][F]
and consider T as the last in the order.
Using T we can get to F from both H and E, so we should add their numbers to the new cell, right? Sadly not, as because of AUFs,
the same order of {Aa,R,J,H} can lead to both H and E, so just adding them together we'd double count.
However, this still works to tell *whether* there is any way to use a set of PLLs to reach a case. And I've envisioned that as the main application anyway - starting your PLL attack some way you want, and have the program tell you whether you can get back to solved using the remaining PLLs (and perhaps show one or several possible ways). On the other hand, I suspect that with six or so left, it's always possible, and that's small enough to brute-force anyway.