## GROUP-LAB Overview Demonstration

Below is the output produced when the DEMO feature of GROUP-LAB is used to present the OVERVIEW.GLD demonstration file.

```  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

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.

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 the  key.
* PAUSE - Press any key to continue *

GL> cls

GL> out:=off
[This ends the OVERVIEW demonstration]
```