GROUP-LAB is a command-oriented program for experimenting with small finite groups of orders not exceeding 250. At start-up a default group, the octohedral group, isomorphic to the symmetric group S4, is initialized. User-defined groups may be introduced almost at will by specifying an appropriate set of relations in up to four generators, in a manner to be illustrated later in this demo. We may display the defining relations and order of the currently defined group by entering the command "?". GL> ? [aaaa,bb,ababab] 24 elements Group elements are denoted by integers 1,2,... n, where 1 is the group identity and n is the order of the group. The currently defined group can always be referenced by the name "z", and its elements displayed by entering "z". GL> z {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24} * PAUSE - Press any key to continue * GL> cls Aside from the name Z representing the entire group, other user names for sets of elements, numbers, etc. are A, B, C, D, X, and Y. These are NOT case sensitive, so a is equivalent to A. An assignment command can be used to define one of these variable names. The assignment operator is ":='. Here is a simple example. GL> a:=3 An assignment does not cause a variable to be displayed, but simply entering its name as a command does. In a command, all text following a semicolon (;) is understood to be a comment. GL> a ; Here is set A. {3} The set union operator may be used to form larger sets. GL> a:=a+1 ; Add the identity to A. GL> a ; This is now the value of A. {1,3} * PAUSE - Press any key to continue * GL> cls The group composition operator is denoted by * and may be thought of as the group product. GL> 2*3 ; The product 2 times 3 (in that order). {1} Let's now find a subgroup of the current group. GL> a ; display A again. {1,3} A product of sets is defined as the set of all products of single elements, one from each set, in the indicated order. Also, the symbol @ denotes the most recently displayed or assigned set, so @*@ denotes A*A. GL> @*@ {1,3,5} GL> @*@ ; Repeat until no new elements are obtained. {1,2,3,5} * PAUSE - Press any key to continue * GL> cls GL> @*@ ; Repeat until no new elements are obtained. {1,2,3,5} GL> @*@ {1,2,3,5} Note that we have found a set that is closed under the group operation, so it must be a subgroup of Z. Let's confirm this with the ISSUBG(A,Z) command. GL> issubg(@,z) True GROUP-LAB has a built-in command, SUBS, for finding ALL subgroups. We can use it to show that the subgroup {1,2,3,5} that we found above is just one of the 30 subgroups of the current group. * PAUSE - Press any key to continue * GL> cls GL> subs(z) ; This takes 5-6 seconds on a 66 MHz pentium machine. (1){1}[1] (2){1,2,3,5}[4] (3){1,2,3,5,20,22,23,24}[8] (4){1,4}[2] (5){1, 4,5,10,15,20,21,24}[8] (6){1,4,12,16,19,23}[6] (7){1,4,13,17,18,22}[6] (8){ 1,4,21,24}[4] (9){1,5}[2] (10){1,5,6,7,8,9,16,17,18,19,20,24}[12] (11){1,5, 11,12,13,14,20,24}[8] (12){1,5,20,24}[4] (13){1,5,22,23}[4] (14){1,6,9}[3] (15){1,6,9,13,21,23}[6] (16){1,7,8}[3] (17){1,7,8,12,21,22}[6] (18){1,10, 15,24}[4] (19){1,11,14,20}[4] (20){1,12}[2] (21){1,12,13,20}[4] (22){1,13} [2] (23){1,16,19}[3] (24){1,17,18}[3] (25){1,20}[2] (26){1,21}[2] (27){1, 22}[2] (28){1,23}[2] (29){1,24}[2] (30) Arg[24] 4.73 seconds The first proper subgroup listed is the one we found above. Each subgroup found by SUBS may be referenced by the symbol H(n), where n is the indicated number of the subgroup. Thus h(2) denotes the subgroup found above. Arg refers to the argument of SUBS( ). GL> h(2) {1,2,3,5} * PAUSE - Press any key to continue * GL> cls We can now illustrate the fact that the intersection of two subgroups of a given group is also a subgroup of that group. We first recall the subgroups h(3) and h(5). GL> h(3) {1,2,3,5,20,22,23,24} GL> h(5) {1,4,5,10,15,20,21,24} GL> h(3)&h(5); Intersect. of H2 and H4. Note the intersection operator {1,5,20,24} GL> h(12) ; Showing that h(3) intersect h(5) equals h(12). {1,5,20,24} * PAUSE - Press any key to continue * GL> cls Recall the definition of coset of a subgroup as the set of elements formed by the products of a given fixed element with the elements the subgroup. GL> 2*h(2) ; The coset 2 times h(2). {1,2,3,5} GL> 3*h(2) ; The coset 3 times h(2). {1,2,3,5} GL> 4*h(2) ; ...etc {4,8,9,15} GL> 5*h(2) {1,2,3,5} The current default group contains 24 elements, so there are 24 cosets, not all of them distinct. GROUP-LAB has the command COSETS(h(2),z) which lists ALL distinct cosets of h(2) in Z. * PAUSE - Press any key to continue * GL> cls GL> cosets(h(2),z) ; Find and display all cosets of h(2) in Z. Coset representatives: {1,4,6,7,10,20} Cosets: {1,2,3,5} {4,8,9,15} {6,11,12,18} {7,13,14,19} {10,16,17,21} {20,22,23,24} The command GRAPH(A) causes a Cayley diagram/graph of the current group to be calculated an displayed. When the graph is completed, press A to show arrows indicating the direction of mapping of an element (vertex) by a generator, then press X to eXit the graph. * PAUSE - Press any key to continue * GL> cls GL> graph(z) [OF COURSE, THE GRAPH DOES NOT SHOW UP IN THE OUTPUT "DIARY" TEXT FILE.] In order to illustrate certain features of GROUP-LAB, it would be nice to have a smaller group, so we will now switch to the 16- element dicyclic group Q8. This group is generated by the elements x and y satisfying the relations xxxxxxxx=1, yyXXXX=1, and yxYx=1, where uppercase letters denote the inverses of the corresponding lowercase letters. The correct syntax for entering this into GROUP-LAB is shown in the next command. GL> gdef:=[xxxxxxxx,yyXXXX,yxYx] 16 Elements The TABLE command in GROUP-LAB displays the full composition (product) table of the current group. * PAUSE - Press any key to continue * GL> table(z) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ---------------------------------------------------------------- 1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 | 2 6 1 7 8 13 14 15 3 4 5 16 12 11 10 9 3 | 3 1 9 10 11 2 4 5 16 15 14 13 6 7 8 12 4 | 4 10 7 12 1 15 13 3 14 16 2 5 8 6 9 11 5 | 5 11 8 1 12 14 3 13 15 2 16 4 7 9 6 10 6 | 6 13 2 14 15 12 11 10 1 7 8 9 16 5 4 3 7 | 7 4 14 16 2 10 12 1 11 9 6 8 15 13 3 5 8 | 8 5 15 2 16 11 1 12 10 6 9 7 14 3 13 4 9 | 9 3 16 15 14 1 10 11 12 8 7 6 2 4 5 13 10 | 10 15 4 13 3 8 6 9 7 12 1 11 5 2 16 14 11 | 11 14 5 3 13 7 9 6 8 1 12 10 4 16 2 15 12 | 12 16 13 5 4 9 8 7 6 11 10 1 3 15 14 2 13 | 13 12 6 11 10 16 5 4 2 14 15 3 9 8 7 1 14 | 14 7 11 9 6 4 16 2 5 3 13 15 10 12 1 8 15 | 15 8 10 6 9 5 2 16 4 13 3 14 11 1 12 7 16 | 16 9 12 8 7 3 15 14 13 5 4 2 1 10 11 6 * PAUSE - Press any key to continue * GL> cls A more informative (and attractive) display is provided by the CTABLE command, which re-orders the elements according to the cosets of a specified subgroup and then displays the group table in color, all elements of the same coset having the same color. The command COMMSUB calculates the commutator subgroup. GL> commsub(z) ; Display the commutator subgroup of Z. {1,6,9,12} GL> a:=@ ; Assign COMMSUB(z) to A. The CTABLE command will now be used to re-order elements according to the cosets of A and color elements according the the coset of which they are a member. * PAUSE - Press any key to continue * GL> ctable(z,a) 1 6 9 12 2 3 13 16 4 5 14 15 7 8 10 11 ---------------------------------------------------------------- 1 | 1 6 9 12 2 3 13 16 4 5 14 15 7 8 10 11 6 | 6 12 1 9 13 2 16 3 14 15 5 4 11 10 7 8 9 | 9 1 12 6 3 16 2 13 15 14 4 5 10 11 8 7 12 | 12 9 6 1 16 13 3 2 5 4 15 14 8 7 11 10 2 | 2 13 3 16 6 1 12 9 7 8 11 10 14 15 4 5 3 | 3 2 16 13 1 9 6 12 10 11 7 8 4 5 15 14 13 | 13 16 2 3 12 6 9 1 11 10 8 7 5 4 14 15 16 | 16 3 13 2 9 12 1 6 8 7 10 11 15 14 5 4 4 | 4 15 14 5 10 7 8 11 12 1 6 9 13 3 16 2 5 | 5 14 15 4 11 8 7 10 1 12 9 6 3 13 2 16 14 | 14 4 5 15 7 11 10 8 9 6 12 1 16 2 3 13 15 | 15 5 4 14 8 10 11 7 6 9 1 12 2 16 13 3 7 | 7 10 11 8 4 14 15 5 16 2 13 3 12 1 9 6 8 | 8 11 10 7 5 15 14 4 2 16 3 13 1 12 6 9 10 | 10 8 7 11 15 4 5 14 13 3 2 16 6 9 12 1 11 | 11 7 8 10 14 5 4 15 3 13 16 2 9 6 1 12 Notice that distinct colors occur in unbroken blocks. This is because A is a normal subgroup of Z. [UNFORTUNATELY, THE COLORS DO NOT SHOW UP IN THIS OUTFILE] * PAUSE - Press any key to continue * Of course, the table of color blocks can be interpreted as the quotient qroup Z/A. * PAUSE - Press any key to continue * GL> cls GROUP-LAB demonstrations such as this, covering any appropriate aspect of elementary group theory, can be easily written with any text editor. From within GROUP-LAB, the command "$edit mydemo.gld" opens the MS-DOS text editor for editing the demonstration file MYDEMO.GLD. This permits easy switching between editing the file and actually executing it as a demo. Or you may replace EDIT with the name of your favorite text editor. In addition, GROUP-LAB environments, with embedded macro files that contain mini-demonstrations or carry out repetitive calculations with rudimentary flow control, can be saved to disk with the SAVE command and retrieved with the LOAD command. Such files should have the extension .GLE, in which case they may be listed with the DIR command. * PAUSE - Press any key to continue * GL> cls GL> dir ; List all previously saved GROUP-LAB environments. FILE1.GLE G48_1.GLE ICOSAHED.GLE FILE2.GLE GRAPH6.GLE ORD125G3.GLE FILE3.GLE FILE4.GLE PRETTY96.GLE SYLOV1.GLE NUMSOL1.GLE COMMSER.GLE NRMLSUB1.GLE NRMLPROP.GLE GRAPH2_2.GLE GRAPH2_3.GLE CHAN1.GLE CONSUBS.GLE GRAPH2_1.GLE GRAPH2_4.GLE Let's now load in the file NRMLSUB1.GLE, which will find and list the normal subgroups of the tetrahedral group. GL> load 24 Elements This file has an embedded macro1 that tests each of the 28 proper subgroups and lists those that are normal. The macro can be executed by the command EXEC(1) or by the short command "/" which also executes macro1. * PAUSE - Press any key to continue * GL> cls GL> / ; Execute macro1. ; FIND ALL NORMAL SUBGROUPS OF THE CURRENT GROUP ; First find all subgroups of the current group. (1){1}[1] (2){1,2,3,5}[4] (3){1,2,3,5,20,22,23,24}[8] (4){1,4}[2] (5){1, 4,5,10,15,20,21,24}[8] (6){1,4,12,16,19,23}[6] (7){1,4,13,17,18,22}[6] (8){ 1,4,21,24}[4] (9){1,5}[2] (10){1,5,6,7,8,9,16,17,18,19,20,24}[12] (11){1,5, 11,12,13,14,20,24}[8] (12){1,5,20,24}[4] (13){1,5,22,23}[4] (14){1,6,9}[3] (15){1,6,9,13,21,23}[6] (16){1,7,8}[3] (17){1,7,8,12,21,22}[6] (18){1,10, 15,24}[4] (19){1,11,14,20}[4] (20){1,12}[2] (21){1,12,13,20}[4] (22){1,13} [2] (23){1,16,19}[3] (24){1,17,18}[3] (25){1,20}[2] (26){1,21}[2] (27){1, 22}[2] (28){1,23}[2] (29){1,24}[2] (30) Arg[24] 4.72 seconds ;-------------------------------------------------------------- ; Listing Normal Subgroups {1} {1,5,6,7,8,9,16,17,18,19,20,24} {1,5,20,24} {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24} You may view the macro with the command DEFM(1). Fewer than half of the commands and operations of GROUP-LAB have been used in this demonstration. The others are left for you to learn as you work with the program. Don't forget the HELP and QUIT commands. Just enter HELP or QUIT, followed by thekey. * PAUSE - Press any key to continue * GL> cls GL> out:=off [This ends the OVERVIEW demonstration]