nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

nasty-symmetries.md (4846B)


      1 *The explanation below is an informal description of the issues that arise
      2 in generating a pruning table when working with a complex cube coordinate
      3 that has a symmetric component. It is an excerpt of an email exchange
      4 between me and [Arhan Chaudhary](https://github.com/ArhanChaudhary).*
      5 
      6 Let's say we are working with what I call a
      7 *symmetric-composite coordinate* in my
      8 [cube coordinate page](https://sebastiano.tronto.net/speedcubing/coordinates).
      9 So you have one coordinate that is reduced by symmetry composed with
     10 one that is not. As an example:
     11 
     12 * The symmetry-reduced coordinate is "corners", a coordinate that
     13   determines the orientation and permutation of corners, reduced by
     14   symmetry. Before reducing it by symmetry it would be a number
     15   0 <= x < 8! * 3^7, after applying symmetry that number is between 0
     16   and ~(8! * 3^7)/48 (because here are 48 possible symmetries).
     17 * The other coordinate is "edges", given by a number between 0 and
     18   12! * 2^11. This coordinate is NOT reduce by symmetry.
     19 
     20 This is obviously a very large coordinate, not usable in practice,
     21 but it is easy to explain.
     22 
     23 Computing the value of this combined coordinate is done like this
     24 (it is also explained in the paged I linked above):
     25 
     26 1. Compute the coordinate value c of "corners".
     27 2. Find the cube transformation that brings the corner position to the
     28    representative of its symmetry class.
     29 3. Transform the cube by the transformation found in step 2.
     30 4. Compute the value e of "edges" of the transformed cube.
     31 5. Compute c * (12! * 2^11) + e (the number we multiply by is the
     32    maximum value of "edges" +1).
     33 
     34 (Some of the information we need, like which one is the representative
     35 of a symmetry class or whic transformation leads to a representative,
     36 is pre-computed).
     37 
     38 Now let's consider a position that is symmetrical as far as corners
     39 are concerned, but not symmetrical (or less symmetrical) as far as
     40 edges are concerned:
     41 
     42 * The corners are all solved;
     43 * The edges are off by an H-perm on the top layer (UF swapped with UB and
     44   UR swapped with UL).
     45 
     46 We'll call this position P1. This P1 is equivalent to a position P2
     47 that has corners all solved and an H-perm on the bottom, but these two
     48 positions DO NOT have the same value according to the coordinate we
     49 defined: in step 3 above, in both case the transformation is going to
     50 be trivial (i.e. no transformation is performed), because there is only
     51 one element in the symmetry class of this corner position, the solved
     52 position; this must also be the representative. This leads in one case
     53 to use the value of e coming from "H-perm on top" and in the other case
     54 that coming from "H-perm on the bottom".
     55 
     56 The problem we have now is this: will the pruning table values for
     57 P1 and P2 be initialized correctly?  Let's say that there is only one
     58 shortest path from the solved cube to P1, and it ends with the move U,
     59 and let's call Q1 the position before this last U. (In reality this can't
     60 be the case, because then also U' would work, but this is not going to
     61 break our reasoning here.) Similarly, let's call Q2 the position before
     62 the last D move in the shortest path from solved to P2 (by symmetry,
     63 the last move must be D, like it was U for P1).
     64 
     65 Q1 and Q2 are of course equivalent, in the same sense that P1 and P2
     66 were. But more than that, they actually have the same coordinate value,
     67 unlike P1 and P2! This is because their edge position is "less symmetric":
     68 the "transformation to representative" of step 2 above must bring each
     69 of Q1 and Q2 with the turned side (U or D respectively) to the same side.
     70 
     71 This means that when we scan the list of positions at distance N
     72 (the distance of Q1/Q2 to solved) to fill the positions at distance
     73 N+1 (such as P1/P2), this position Q1/Q2 is reached only once; and
     74 we apply the move U (or equivalent) to it only once. Therefore, we
     75 cannot reach both P1 and P2 with this strategy! As I explain
     76 [here](https://sebastiano.tronto.net/speedcubing/coordinates/#pruning-tables):
     77 we'll have to add an extra step to fill in correctly the positions like
     78 P1 and P2.
     79 
     80 In the previous paragraph I am assuming that we are filling the pruning
     81 table in a specific way, i.e. "scanning the list of position at distance N
     82 to fill the positions at distance N+1". This not the only techniques for
     83 filling a pruning table, but I hope it is clear that any other technique
     84 that takes advantage of symmetry (by considering Q1 and Q2 as the same)
     85 is going to lead to the same problem with P1 and P2.
     86 
     87 Trying to summarize all of the above:
     88 
     89 * When using the "symmetric-composed coordinates" technique, there are
     90   positions that are technically equivalent but have distinct values.
     91 * When we fill the pruning table, we may reach these positions from
     92   positions that do not have this characteristic. This is going to "hide"
     93   some equivalent positions that have distinct values.