From hoey@aic.nrl.navy.mil Mon Dec 27 17:52:28 1993 Received: from Sun0.AIC.NRL.Navy.Mil by life.ai.mit.edu (4.1/AI-4.10) for /com/archive/cube-lovers id AA23079; Mon, 27 Dec 93 17:52:28 EST Received: from sun30.aic.nrl.navy.mil by Sun0.AIC.NRL.Navy.Mil (4.1/SMI-4.0) id AA08057; Mon, 27 Dec 93 17:52:17 EST Return-Path: Received: by sun30.aic.nrl.navy.mil; Mon, 27 Dec 93 17:52:16 EST Date: Mon, 27 Dec 93 17:52:16 EST From: hoey@aic.nrl.navy.mil Message-Id: <9312272252.AA22049@sun30.aic.nrl.navy.mil> To: Cube-Lovers@life.ai.mit.edu Cc: Jerry Bryan Subject: Group theory basics (Re: Symmetry) Jerry Bryan asked a bunch of questions a couple of weeks ago, and I'll try to get to them all. The first bunch has to do with some fairly basic stuff, that I thought had been pretty well understood since the beginning of the mailing list, but maybe we need a refresher, or an explicit statement. In the message of Tue, 14 Dec 1993 20:50:51 EST, Jerry describes his representation of cube positions and transformations. > In my computer model, the corner facelets are simply numbered from > 1 to 24, and any configuration of the corners is an order-24 row > vector. The rotation and reflection operators are also order-24 row > vectors, again with each cell simply containing a number from 1 to > 24. That is the most usual way of doing it, but it's important to specify what you represent by those vectors. When I do it, I number the corner facelet locations from 1 to 24, and these locations retain their numbers through manipulations of the cube. I use a vector A to specify a position in which the facelet whose home location is i has been moved to location A(i), for each i. I use a vector P to specify the transformation that moves the facelet in location i to location A(i), for each i. I'll assume you're doing the same, though you could, for instance, be representing the inverse of the operators, or the locations from which the facelets originate. Note that a position is represented by the same vector that represents the transformation that takes SOLVED to that position. > Well, if P is a rotation operator, you could perform a rotation > two ways. I guess one is pre-multiplication and one is > post-multiplication. > 1) For i = 1 to 24 B(i) = A(P(i)) I would write this as B = P A, and say that A is premultiplied by P, or equivalently that P is postmultiplied by A. In a general group, we could have B = P A where the multiplication is not considered to be the composition of permutations. But it turns out we can restrict our attention to permutation groups without loss of generality. For instance, when we are dealing with the supergroup, we can consider the orientation of a face center to be a permutation of the corners of the face center. > 2) For i = 1 to 24 B(i) = P(A(i)) Here B = A P, A is postmultiplied by P, and P is premultiplied by A. (Note that the operator or position name appears in the reverse order from the prefix format. Algebraists sometimes avoid this by writing (i)B = ((i)A)P. I kid you not.) > (As an aside, this illustrates the question I raised in my previous > post about "which is the operator and which is the thing being > operated on?" Is P operating on A, or is A operating on P?) Well, the answer is ``both''. I agree it's easy to get confused, which is why proofs are a good idea. > Finally, if Q is a reflection (actually, if Q1 is the identity and > Q2 is the reflection), then we have > For j = 1 to 24 for k = 1 to 24 for m = 1 to 2 > for i = 1 to 24 Bj,k,m(i) = Qm(Pj(A(Qm(Pk(i))))) > I believe this loop calculates Dan Hoey's M. On the the theory that proofs are a good idea, let's see what this loop calculates. I'm going to put brackets around the subscripts. Then I'll substitute "R" for "Q", because I use Q for the set of quarter-turns of faces. Furthermore, I'll use "C" instead of "P", because the P[j] are just the elements of C, the group of cube rotations. So you are computing B[j,k,m] = C[k] R[m] A C[j] R[m] (1) for j in {1,...,24}, k in {1,...,24}, and m in {1,2}. Now every member of M (the group of cube rotations and reflections) has a unique representation as M[n] = C[k] R[m]. Let us define Cind() and Rind() as the functions for which M[n]=C[Cind(M[n])] R[Rind(M[n])]. So we can write (1) as B[j,k,m] = M[n] A M'[n] (M[n] C[j] R[Rind(M[n])]) Note that (M[n] C[j] R[Rind(M(n))] must be an element of C. So B is a set of elements of the form M[n] A M'[n] C[o]. To see that we have all such elements, first observe that (M[n]' C[o] R[Rind(M[n])]') is an element of C, say C[j]. So equation (1) includes: C[Cind(M[n])] R[Rind(M[n])] A C[j] R[Rind(M[n])] = M[n] A (M[n]' C[o] R[Rind(M[n])]') R[Rind(M[n])] = M[n] A M'[n] C[o]. Thus the set of all B[j,k,m] is the set of all M[n] A M'[n] C[o]. Or in English, that's the set of all M-conjugates of A, operated on by all whole-cube rotations. > In my data base, I store the minimum of Bj,k,m over j = 1 to 24, > k = 1 to 24, and m = 1 to 2. I tend to call the minimum of Bj,k,m a > canonical form. I am not sure if that is the best terminology. The > minimal element is not any simpler than any other. It is just that > I need a function to choose an element from a set, and picking the > minimal element seems very natural. Any other element would do as > well, provided I could always be sure of picking the same element. It's pretty common terminology. You might be slightly better off calling it a ``representative element,'' as that connotes that the element is ordinary except in that it represents the equivalence class (like representatives in the U.S. Congress). > Also, my criterion for equivalence is slightly > different (but isomorphic, I think) than the one described by > Dan Hoey. Suppose A and B are two cubes. > Rather than mapping A to B or B to A in M, I map both A and B > to their respective canonical forms. A and B are equivalent if > their respective canonical forms are equal. This is straightforward once we show that M-conjugacy is an equivalence relation, and B[j,k,m] is an equivalence class. If A ~ Representative[A] = Representative[B] ~ B, then by transitivity A ~ B. Conversely, if A ~ B, then Class[A] = Class[B], and therefore Representative[A] = Representative[B]. This shows that the criteria are equivalent. > Now, as to the centers. I still sometimes have a certain doubt > about the centers. They are fixed, so how can you reduce the > problem (i.e., increase the size of the equivalence classes) > by both rotating the cube and rotating the colors (by both pre- > and post-multiplication)? What you have done is to increase the size of the whole cube problem by a factor of 24, by dealing with all rotations of the cube, and the equivalence classes expand by the same factor, from 48 to 1152. This has allowed you to calculate something like M-conjugacy classes for cube problems that lack face centers. But the size of the equivalence classes doesn't shrink the problem for cubes that have face centers. You could have just calculated M-conjugates and got the same answer. > I am not sure if this answers Dan's question about my model > with centers added. It's clear now. I hadn't realized you were rotating the cube in space when the face centers were present. I expected that to be a wasted effort. But I am impressed by the way it allows you to shrink the database by storing positions together that differ only by whole-cube moves of the face centers. I think it should be possible to shrink the database without the effort, though. In your message of Thu, 16 Dec 1993 15:36:58 EST, on the ``Duality of Operators and Operatees'': > I have mentioned several times my discomfort about "an operator" as > opposed to "the thing being operated on" when it comes to groups. I > am never quite sure just which of the two it is that people are > talking about, even (or especially) when I am listening to myself > talk. It is hard to keep it straight. Sometimes we all get it wrong. The best way to avoid errors, as far as possible, is to avoid such language and talk about group multiplication. But then we have to explain what is going on with the cube, so we get caught into talking about operators again. It's a discomfort that must be endured. > The code to translate between the ASCII string X and > the EBCDIC string Y is something like > for i = 1 to n Y(i) = T(X(i)) > where T is the translate table. Yes, or Y = X T as above. > I am going to continue reading, but perhaps I could pose a question to > Dan Hoey anyway: is reversing the role of X and T in the TRANSLATE > function above essentially the same thing as switching between > pre-multiplication and post-multiplication? Yes. Dan Hoey Hoey@AIC.NRL.Navy.Mil