\documentstyle{article}
\textheight9in \headsep 0in \headheight0in \topmargin0in
\textwidth 6.5in \oddsidemargin0in

\begin{document}

\def\GA{{\em Group Analyzer}}
\def\NI{\noindent}

\title{Guide to Group Analyzer - 3.0}
\author{Paul G. Glenn\\Department of Mathematics
\\Catholic University of America\\
Washington, DC 20064 \\
Phone: 202-319-5221, E-mail: glenn@cua.edu}
\date{January, 1995}

\maketitle

\tableofcontents

\section{Introduction}

\subsection{What \GA\ is, briefly}

{\em Group Analyzer} is a program for students and instructors of
elementary group theory. It enables students to perform various finite
group computations in a calculator-like manner with groups of order
up to 400.
They can find various
subgroups and quotient groups, and in general experiment with the
group. The goal of such calculations, performed in many different
groups, is for the student to get a better grasp of the basic
concepts.

The information for each individual group is contained in a separate
file which the user loads in while using \GA. Once the information
about a particular group is input from a stored file, a user inputs
one or more subsets of the group, as appropriate, chooses a command,
and then \GA\ performs the operation and displays the output. Results
can be saved temporarily in ``memory'' and recalled when needed. The
user can keep a record of all the calculations in the form of a
``journal'' saved as a plain text-file. One can load in a new group
at any time and keep working.

The software ``package'' includes a small collection of samples and
also includes separate programs which can create many other such
files.

\subsection{\GA 's role in an algebra course}

Students work, typically, with two types of examples. One type
involves very small order groups in which explicit calculations are
easy for beginners. A second type, requiring familiarity with the
basics and some experience, involves larger groups whose properties
and characteristics are found using theorems and ad hoc indirect
reasoning. With this type of example, one would almost certainly {\em
not} want to hand-calculate lists of elements e.g. cosets, the set of
commutators, etc.

One purpose of \GA\ is to make feasible another approach to examples.
As with very small groups, the students work directly in terms of an
explicit complete specification of the group's operation (in the form
of a table stored in the computer's memory). However, the groups are
of ``intermediate'' size, of order up to 400, and are big enough to
illustrate various ideas of finite groups in non-trivial ways. With
such examples, students can illustrate or conjecture theorems, search
for counter-examples and check assertions based on indirect
reasoning. Thus the software serves as an adjunct to indirect
reasoning. At the same time, it allows students to work with larger
groups in an explicit way similar to their experience with very small
groups.

\subsection{Availability}

Group Analyzer and the auxiliary programs are offered {\bf free} to
the academic community. The package is available at the Mathematics
Software Archive ({\tt archives.math.utk.edu}).

\section{Overview}

This section describes what appears on \GA 's screen. Since the program
functions in a fairly intuitive way, the next section (in question and
answer form) may be the quickest way to learn how to use \GA. More detail
is provided in later sections.

\subsection{Group data files}
The basic information for a given group dealt with by Group Analyzer is
contained in a file called a group data file. A group's data file
consists of the names of its elements and a coded form of its
multiplication table. The same information may be used to work with
any homomorphic image of any subgroup of the given group. Group
Analyzer handles groups of order up to 400.

The first step in using Group Analyzer is to input a group data file.
This is done using the usual Macintosh ``open file'' dialog.

\subsection{The index of an element}
The elements of a group or order $n$ are indexed $1,\cdots,n$ with $1$
always reserved for the identity element. \GA\ keeps track of
elements' names, and stores the multiplication table of the group in
terms of these index numbers.

\subsection{The display}

\subsubsection{The stack: input and output}
The upper half of the screen displays the input and output of various
calculations you make. Some commands require no user-supplied input.
The input for all other commands consists of either one or two subsets
of the group. The space for input and output is organized in rows (or
``levels''). The top of the screen shows level 0, the next row down is
level 1 etc. The most recent input/output appears on level 0, the next
most recent on level 1 and so on. As new  subsets appear, older
material moves to the next level and eventually (after level 40)  is
removed. (See \ref{stackQA} and \ref{stackops}).

\subsubsection{The element boxes}
In the lower half of the screen, 3 rows of 4 boxes contain the names of
12 of the group's elements. Fewer boxes appear if the group has fewer
than 12 elements. With larger groups, you can change which 12 are
shown by clicking the ``Up'' and ``Down'' boxes at the lower
left. You select one or more elements of the group for further
calculation by clicking the box(es) containing the element('s)
name(s), then clicking the ``Input to lev 0'' box.

\subsubsection{The command message}
After every command, a short descriptive message will appear either at
the bottom of the screen (larger monitors) or in the Information box
at the lower right (small monitors). (See \ref{infobox}.)

\subsubsection{Help messages}
There is a built-in ``Help'' facility activated either by clicking the
``Help'' button at the bottom of the screen or by typing the letter
`h'. A second click deactivates ``Help''.

\subsection{Journals and new group data files} There are two kinds of
file output. (1) One can save a plain-text ``journal'' (see
\ref{journal}) which records commands and their results. (2) One can
create new group data files for subgroups and quotient groups. (See
\ref{saveambgroup}.)

Note: There are auxiliary applications which create group data files
for various kinds of groups. Group data files are plain text files
whose format is described in section \ref{formatinfo}. Users may
therefore write their own programs for creating group data files.

\subsection{List of all commands}

\NI {\bf APPLE menu}: 

About Group Analyzer; Help.

\NI {\bf FILE menu}: 

Open, Save ambient group, Journal$\ldots$ (Open journal,
Close journal), Quit.

\NI {\bf EDIT menu}: 

Change elem name $\ldots$, Use original names, Use generic names.

\NI {\bf GROUP OPS menu}: 

Gen Subgp, Normalizer, Centralizer, Conjugate,
Conj Class, Multiply, Invert, Union, Intersection, Normal Closure,
Power, Difference, Inverse Image.

\NI {\bf STACK OPS menu}: 

Drop, Swap, Duplicate, Restore, Clear Stack,
Roll Up, Roll Down.

\NI {\bf STRUCTURE menu}: 

Conjugacy Classes, Commutator subset, Select
as subgroup, Show subgroup, Show coset reps, Center, Order $n$ elements,
Show cosets, Conjugacy class reps, Generate by names, Use original names.

\NI {\bf AMBIENT GROUP menu}: 

New ambient group, Show ambient group,
Show upper group, Show lower group, Prev ambient group, Use original group.

\section{Basic questions - Short Answers} \label{qa}

\subsection{How do I load in a new group? How long should that take?}

Use command-O or ``open'' in the FILE menu. Select a group data file
in the standard Macintosh file dialog which appears. The time it
takes to load in a group increases roughly as the square of the order
of the group. On a Mac LC III, approximate loading times are 3.5 sec
(order 50), 12 sec (order 100), 43 sec. (order 200), 94 sec. (order
300), 168 sec. (order 400, the maximum).

\subsection{How do I start/end a journal?} 

To start a journal: In the FILE menu, select ``Journal...'' then ``New
journal''. After you type in a name (standard Mac dialog), a text file
of all subsequent work will be saved in a file of that name. To end a
journal: In the FILE menu, select ``Journal...'' then ``Close
journal''. See section \ref{journal}

\subsection{How do I undo something?}

Use ``Restore'' in the STACK OPS menu.

\subsection{What's the stack?}
\label{stackQA}

The ``stack'' is a sequence of 41 subsets of the group, numbered 0
through 40 and referred to as the subsets at level 0, level 1 etc.
Initially, all these subsets are empty. The stack is analogous to the
display of a calculator. All input for, and results of, group
calculations  appear on the stack. The program displays as much of
the stack as will fit in the top half of the screen with the level 0
subset at the top, the level 1 subset next below it, and so on.

Every calculation which takes a subset or subsets as input, takes that
input from level 0 or levels 0 and 1. You can maneuver things around
the stack. See questions \ref{seelevels}, \ref{poslevel}, \ref{swap}
and \ref{dup}. See section \ref{stackops}.

\subsubsection{How are the results of a calculation displayed on the
stack?}

Every calculation results in one or more possibly empty subsets of the
group. These are placed on the stack starting at level 0 and displace
previous subsets on the stack which move to higher numbered levels.

\subsubsection{How do I see different levels in the stack?}
\label{seelevels}

``Roll Up'' moves each subset on the stack to the next higher level
(downscreen), and level 40 moves to level 0. ``Roll down'' moves each
subset on the stack to the next lower level (upscreen), and level 0
moves to level 40. Thus any subset on the stack can be moved into view
and placed at level 0. See section \ref{stackops}

\subsubsection{How can I position a level in the stack as level 0?}
\label{poslevel}
Use ``Roll up'' or ``Roll down''. See question \ref{seelevels}.

\subsubsection{How do I clear the stack?}

Select the command ``Clear stack'' in the STACK OPS menu. In effect,
each subset on the stack is set to the empty set. See section
\ref{clearstack}

\subsubsection{What does ``Drop'' do?}

Removes the subset at level 0, and moves every other subset on the
stack to the next lower level. Level 40 becomes empty.

\subsubsection{What does ``Swap'' do?} \label{swap}

Interchanges the subsets at levels 0 and 1.

\subsubsection{What does ``Duplicate'' do?} \label{dup}

Moves levels 1 through 39 to levels 2 through 40, puts a copy of level
0 into level 1. The earlier level 40 subset is lost in the process.

\subsection{How do I put an element or elements in level 0 of the
stack?}

Click the boxes containing the elements' names. They'll appear in
reverse video. (To ``unselect'' an element, click on its box a second
time). When you've clicked all the ones you want, then click the
``Input to lev 0'' box (or press ``return''). See \ref{selectsets}.
Can't see the element you want? Go to question \ref{findelem}.

\subsection{How do I adjoin elements to the ones already on level 0?}

Click the boxes containing the names of the elements you want. Then
click the ``Adjoin to lev 0'' box. You could also input the
additional elements to form a new level 0, then use the ``Union''
command. See section \ref{unionop}

\subsection{How do I remove some elements from level 0?}

Click the boxes containing the names of the elements you want to
remove. Then click the ``del from lev 0'' box. You could also
input the elements you want to remove, then use the ``difference''
command. See section \ref{diffop}

\subsection{How do I find a particular element in the group?}
\label{findelem}

If that element doesn't appear in one of the 12 element boxes on
the screen, click either the ``Up'' or ``Down'' box. These make
the display scroll through the elements of the group three rows (12
elements) at a time. Initially, the identity element is at the
top left. When you scroll all the way through, the identity will
again be positioned there. You can combine element selection
with scrolling. Thus, if you have selected an element, it
remains selected even if you scroll it out of view.

\subsection{How do I store/recall a subset?}

{\bf Storing}: Position at level 0 the subset you want to store. (See
question \ref{seelevels}). Then click the ``Store'' box at the bottom
of the screen (or press `s') and click any of the numbered boxes just
to the right of it. If any of those boxes has an asterisk, then
something has already been stored ``there'' and will be overwritten.
The newly stored subset will not be removed from the stack.

\noindent {\bf Recalling}: Click on the numbered box
``containing'' the subset you want to recall. It will appear at level
0 and the other subsets on the stack will move to the next higher
number. (The previous level 40 is lost).

\subsection{Why did I get a blank level 0 as a result?}

The calculation you performed had the empty set as a result. Empty
subsets appear as blanks in the display.

\subsection{How do I multiply or invert elements?}

To calculate the product $xy$, select $y$ and put it on level 0
then select $x$ and put it on level 0. (So $y$ is at level 1 now). Then
select the ``multiply'' command from the GROUP OPS menu. To invert $x$,
select it and put it on level 0. Select the ``invert'' command from
the GROUP OPS menu.

\subsection{What does it mean to multiply or invert subsets?}

If $A$ and $B$ are subsets of a group, then their product $AB$ is the
subset consisting of all products $ab$ where $a$ belongs to $A$ and
$b$ belongs to $B$. To calculate $AB$ using Group Analyzer, put
subset $A$ at level 0 and subset $B$ at level 1. Then select
``multiply''.

The inverse of a subset $A$ consists of the inverses of the elements
of $A$. To invert a subset $A$, put it on level 0 then select
the``invert'' command.

\subsection{What does the number in the ``Power/Order'' box mean? How do I
set that number?}

The number, $n$ say,  in the ``Power/Order'' box is used in the
``power'' command in the GROUP OPS menu and the ``elements of order
$n$'' command in the STRUCTURE menu. When you select ``power'' from
GROUP OPS, the result is the set of $n$'th powers of each element at
level 0. (See \ref{power}.) When you select ``elements of order $n$''
from STRUCTURE, the result is the set of all elements of the group,
if any, whose order is $n$. (See \ref{ordnelem}) Initially, the value
of $n$ is set to 1.

To change the value of $n$, click the
``Power/Order'' box (or type `p'), type the value of $n$ you want, then
click the ``OK'' button (or press ``return''). The value of $n$ has to
be between 1 and 999. If it isn't or if you type anything but a
number, the power value will be set to 1.

\subsection{How  do I ``select'' a subgroup?}

Here, ``select'' means that you want to single out a particular
subgroup for subsequent calculations. Put the subgroup you want to
``select'' at level 0 and choose the ``select as subgroup'' command
from the STRUCTURE menu. The result is that the subset at level 0 is
stored in a special ``place'' in the program. The commands ``show
subgroup'', ``show coset reps'' and ``Show cosets'' from STRUCTURE all
refer to the subgroup stored by the ``select as subgroup command''.
Also see section \ref{ambgroup}

\subsection{What's the ``ambient group'' and how do I obtain it?}
\label{makeambgroup}

The ``ambient group'' is the group you're working with at the moment.
The original group you loaded in (let's call it $G_0$) can be used to
do calculations in any subgroup and any quotient group of any subgroup
without your needing to load in a new group data file. Any of these
groups can be made the ``ambient group''.

After you load in the group data file for $G_0$, the ambient group is
$G_0$. If $G$ is any subgroup of $G_0$ and if $H$ is any normal
subgroup of $G$, you can set the ambient group to be $G/H$ by putting
$G$ at level 1, $H$ at level 0 then selecting ``New Ambient Group''
from the AMBIENT GROUP menu. See section \ref{ambgroup} for further detail.

\subsection{How can I create my own group data files?}
\label{saveambgroup}

One way is to change the ambient group and save it. Use the command
``Save ambient group'' in the FILE menu. See
\ref{makeambgroup}, section \ref{ambgroup} and the next item.
Besides this, there are a number of auxiliary applications to create
the group data files for various kinds of groups (e.g. cyclic groups,
matrix groups). For users who are interested in programming: the
text-file format of a group data file is given in section
\ref{formatinfo}. You can write your own group data file-making
program.

\subsection{How can I save the ambient group in its own group data file?}
\ref{saveambgroup}
Use the ``Save ambient group'' command in the FILE menu.

\subsection{How can I change the names of a group or of its elements?}

\GA\ has several commands which modify elements' names. These commands
affect only the display. The group data file is unaffected by them.

\begin{enumerate} 

\item Click an element's box, then choose ``Change
elem name $\ldots$'' from the EDIT menu. Type the new name you want,
as prompted. (Keyboard shortcut: click the element box while pressing
the ``option'' key).

\item Choose ``Use original names'' from either the EDIT menu or
STRUCTURE menu. Then all names will revert to the original names
contained in the group's data file.

\item Choose ``Use generic names'' from the EDIT menu. All element
names will be changed to the form ``$xi$'' where $i$ is the index of
the element.

\item Put several elements on level 0, then choose ``Generate by names''
in the STRUCTURE menu. The selected elements will be given single
letter names with the convention that lowercase/uppercase pairs are
inverses. Further, all elements in the subgroup generated by the
chosen elements will be renamed in terms of the names of the selected
elements. (See \ref{genbyname})

\end{enumerate}

Although none of the operations above changes the original group
data file, one may save a group with its names changed as
a separate group data file.

There are two other methods for changing names. First, the auxiliary
program {\em Mystery group maker} takes a group data file and writes a
new data file with the elements' names changed to generic names:
$x_1, x_2 \cdots$.

Finally, each group data file is a plain text file which can be edited
by any text- or word-processor. The first line of a group data file
is the group's name. You can change that at will. The second line is
the order of the group (which should not be changed). The next $n$
lines ($n$=order of the group) are the individual elements' names.
These can be changed at will but should not be more than 30
characters in length.

\subsection{How can I get the whole group on level 0?}

Use the ``Show ambient group'' command from the AMBIENT GROUP menu.

\subsection{Can Group Analyzer show the whole multiplication table for a group?}

No.

\section{Input/output}

\subsection{Loading group data files}

Choose ``open'' (FILE menu). Within the usual Macintosh open-file-dialog,
select a group data file then click the ``open'' button in the
dialog.

Group Analyzer will perform some checks on the file to see if the
structure loaded is really a group. If it isn't, some appropriate
message will be shown.

The program will probably bomb if you try to open any file other than
a group data file.

\subsection{Creating new group data files}

Use the ``Save ambient group'' command in the FILE menu. Also see
\ref{ambgroup}, \ref{makeambgroup} and \ref{saveambgroup}.

\subsection{Journals} \label{journal}

A ``journal'' is a plain text file containing all the results of
calculations done by Group Analyzer. It serves as a record which can
be examined and edited later by any word- or text- processor.

``Open journal'' (FILE menu) starts the usual Macintosh save-file
dialog. Choose a name and location for the journal and click the
"Save" button in the dialog. The first thing written to that new file
is the current group's name and names of all its elements. Then,
after each calculation, Group Analyzer will write the name of the
command performed, the results of the command (that is, all the
subsets which comprise the results) and the command message to the
journal file.

You can keep a journal open as long as you want and open new group
data files while a journal is open.

Group Analyzer can't: open, or append new data to, an existing
journal file or have more than one open journal file at a time.

``Close journal'' (FILE menu) closes an open journal file. If you quit
Group Analyzer without closing an open journal file, the program
closes (and saves) the file automatically.


\section{Stack Operations  - STACK OPS menu}
\label{stackops}
\subsection{Drop}

Removes level 0 and moves all remaining subsets to one lower level.
Level 40 becomes empty.

\subsection{Swap}

Interchanges levels 0 and 1.

\subsection{Duplicate}

Moves subsets in levels 2 through 39 to one higher level, removes level
40 and puts a copy of level 0 into level 1.

\subsection{Restore}

Restores the all subsets in levels 0 through 40 to what they were prior
to the previous command. Exception: it does not work if you load in a
new group.

\subsection{Clear stack} \label{clearstack}

Puts the empty set at every level.

\subsection{Roll up}

Moves the subsets in levels 0 through 39 to one higher level, and moves
the
subset in level 40 to level 0. No subset is removed.

\subsection{Roll down}

Moves the subsets in levels 1 through 40 to one lower level, and moves
the subset in level 0 to level 40. No subset is removed.

\section{Operations and Information}

\subsection{Selecting subsets}
\label{selectsets}

This section describes how to select  elements of the group
``manually'' and place the selected elements onto level 0.

To keep track of group elements, the program assigns an index number to
each one and refers to it by that number. The identity element is
always the first element of the group, i.e. with index number 1.

The groups elements are displayed, up to 12 at a time, in the 3 rows of
4 boxes in the lower half of the screen. Initially, the names of
elements 1 through 12 are shown. Of course, if the group has fewer
than 12 elements, only that smaller number of boxes appears.\smallskip

\noindent {\bf Up} button

Clicking on this box changes the display to show
elements 12 through 24. That is, the indices of the elements shown
moves up by 12. Each time ``Up'' is clicked, the shown indices
move up by 12 until the beginning of the group is reached. When that
happens, the index 1 element (the identity) appears in the first box
in the first row again.\smallskip

\noindent {\bf Down} button

Clicking on this box moves the indices displayed down
by 12.\smallskip

\noindent {\bf Choosing a subset}

To designate an element for the subset to be placed on level 0, click
its box once. Designated elements appear in reverse video. Click the
box a second time to undo this designation. Many elements may be
designated. A designated element remains so even if it is scrolled
away using ``Up'' or ``Down''.\smallskip

\noindent {\bf Input to lev 0}

To place the designated elements at level 0,
click the ``Input to lev 0'' box once. The selected elements' boxes
will return to normal video. (Shortcut: after the elements have been
designated, press the ``return'' key.)\smallskip

\noindent {\bf Adjoin to lev 0}

To adjoin elements to the existing level 0 subset, designate the
additional elements by clicking on their boxes. Then click the
``Adjoin to lev 0'' box once.\smallskip

\noindent {\bf Del from lev 0}

To remove some elements from the existing
level 0 subset, designate the elements to be removed and then click
the ``Del from lev 0'' box once.

\subsection{Storing and recalling subsets}

Besides the stack, there are 10 separate storage ``locations'' for
subsets. Initially, they are empty. An asterisk appears in those boxes
which have non-empty subsets. To store the subset at level 0 into
``location'' n, click the ``Store'' box once (or press `s') and then
click the box labelled ``n''. To move the subset in ``location'' n to
level 0, click box ``n'' once.

\subsection{``Power/Order'' box}
\label{powerbox}
The number appearing in this box is used in two commands: ``Power'' in
GROUP OPS (see \ref{power}) and ``Order n elements'' in STRUCTURE (see
\ref{ordnelem}). To set the value, click the ``Power/Order''
box once, type a number between 1 and 999 then click the ``OK'' button
(or press ``Return'').
If the number isn't between 1 and 999 or you typed anything but a
number then the power value will be set to 1. (Shortcut: type the letter
`p' instead of clicking the ``Power/Order'' box.)

\subsection{Information box} \label{infobox}

This box at the lower right of the screen shows the group's name, the
order of the group and the size of level 0. If level 0 contains just
one element, then its order is shown.

If the ambient group (see section \ref{ambgroup}) is anything
other than the original group, the first line states ``image of
$\ldots$''. Any time after the ``Conjugacy classes'' or ``Conj Class
Reps'' commands have been performed, the number of conjugacy classes
is shown.

On small-screen Macs: The command message appears at the bottom of the
Information box. Also, if there is just one element on level 0, then
the order of that element is shown instead of the number of conjugacy
classes.

\subsection{Command messages}

On large monitors, a short descriptive message is written at the bottom
left of the screen after each command is performed. On small monitors,
it appears in the Information box.

\section{Ambient group commands} \label{ambgroup}

The ``ambient group'' at any moment is the group in which the
calculations are performed. It can be any group of the form $G/H$
where $G$ is any subgroup of the original group ($G_0$, say) and $H$
is any normal subgroup of $G$. If $H$ is non-trivial, then an element
of $G/H$ is denoted by the element of that left coset of smallest
index.

Initially, just after a group data file has been loaded, $G=G_0$
and $H=1$, the trivial subgroup. A description of each command in
the AMBIENT GROUP menu follows.\smallskip

\noindent {\bf New ambient group}

Input: the subgroup $G$ at level 1 and the
subgroup $H$ (normal in $G$) at level 0. Output: The ambient group is
set to $G/H$ and only the coset representatives of the cosets are displayed
in the element boxes. If $H$ is not a normal subgroup of $G$, then an
error message is shown and the ambient group is not changed.

The previous ambient group is remembered and may be recovered by the
``Prev ambient group'' command.\smallskip

\noindent {\bf Show ambient group}

This command puts all the elements of the
ambient group on level 0.\smallskip

\noindent {\bf Show upper group}

Puts the elements of $G$ at level 0 where the
ambient group is $G/H$.\smallskip

\noindent {\bf Show lower group}

Puts the elements of $H$ at level 0 where the
ambient group is $G/H$.\smallskip

\noindent {\bf Prev ambient group}

Resets the ambient group to be the previous
one used.\smallskip

\noindent {\bf Use original group}

Resets the ambient group to be $G_0$.

\section{Operations} \label{operations}

The operations in Group Analyzer take 0, 1 or 2 subsets of the group as
input. The input subsets, if any, are always those at levels 0 and 1.
These are {\em removed} from the stack unless otherwise indicated.

The results of the operations are one or more subsets. These are placed
starting at level 0 and all subsets not part of the input are moved to
higher levels of the stack. Any subset moved ``past'' level 40 is
removed from the stack. Note that it's possible that the results of an
operation will displace everything else from the stack. Also, some
operations will have more than 41 subsets in the result. If that
happens, only the last 41 subsets will be on the stack. To keep track
of the entire result, create a journal. See \ref{journal}. No matter
how large the results, the earlier stack can be recovered using
``Restore'' (immediately after the command) from STACK OPS.

\subsection{Gen subgp}

Menu: GROUP OPS

\NI Input: Subset on level 0.

\NI Result: The smallest subgroup which contains the elements on level 0.

\subsection{Multiply}

Menu: GROUP OPS

\NI Input: Subsets on levels 0 and 1.

\NI Result: All elements of the form xy where x belongs to level 0 and y
belongs to level 1 are placed at level 0.

\subsection{Invert}

Menu: GROUP OPS

\NI Input: Subset on level 0. 

\NI Result: The subset consisting of the inverse
of each element in level 0. If the input is empty then so is the
result.

\subsection{Union}
\label{unionop}

Menu: GROUP OPS

\NI Input: Subsets at levels 0 and 1.

\NI Result: All elements belonging to level 0 or level 1.

\subsection{Intersection}

Menu: GROUP OPS

\NI Input: Subsets at levels 0 and 1. 

\NI Result: All elements belonging to
level 0 and level 1 are placed at level 0.

\subsection{Difference}
\label{diffop}

Menu: GROUP OPS

\NI Input: Subsets at levels 0 and 1.

\NI Result: All elements belonging to level 1 but not level 0.

\subsection{Power} \label{power}

Menu: GROUP OPS

\NI Input: None required.

\NI Result: Puts the $n$'th power of each element of level 0 on the stack,
where $n$ is the number in the ``Power/Order'' box. See section
\ref{powerbox}

\subsection{Order $n$ elements} \label{ordnelem}

Menu: STRUCTURE

\NI Input: None required.

\NI Result: Puts the set of elements of order $n$ on the stack, where $n$
is the number in the ``Power/Order'' box. See \ref{powerbox}.

\subsection{Conjugate}

Menu: GROUP OPS

\NI Input: Subsets at levels 0 and 1.

\NI Result: All elements of the form $xyx^{-1}$ where $x$ belongs to the
level 0 subset and $y$ belongs to the level 1 subset are placed on
level 0. If level 0 or level 1 is empty, then the result is empty
too.

\subsection{Conj class}

Menu: GROUP OPS

\NI Input: Subset at level 0.

\NI Result: The conjugacy class for each element at level 0 is placed on
the stack. Notes: If level 0 has more than 41 elements, then only 41
of the resulting conjugacy classes appear on the stack. Also, all
conjugacy classes (even duplicates) are calculated and placed on the
stack.

\subsection{Conjugacy classes}

Menu: STRUCTURE

\NI Input: None required.

\NI Result: The conjugacy classes of the group, {\em excluding} the trivial
class of the identity element. The number of conjugacy classes is then
indicated in the Information box which shows the name and order of the
group.

\subsection{Conjugacy class reps}

Menu: STRUCTURE

\NI Input: None required.

\NI Result: Puts a set of conjugacy class representatives on the stack; the
trivial class of the identity element is omitted. Each conjugacy class
is represented by the element in it of lowest index.

\subsection{Select as subgroup}

Menu: STRUCTURE

\NI Input: Subset at level 0 which is a subgroup.

\NI Result: Designates the subset at level 0 for certain subgroup-related
calculations. (The coset representatives are calculated also). The
stack does not change. This command is needed prior to ``Show coset
reps''. 

If the subset at level 0 is not a subgroup, then a message
about that appears.

\subsection{Show subgroup}

Menu: STRUCTURE

\NI Input: None required, but a subgroup must first be selected.

\NI Result: The designated subgroup (from ``Select as subgroup''), if
there is one.

\subsection{Show cosets}

Menu: STRUCTURE

\NI Input: None required, but a subgroup must first be selected. 

\NI Result: The subgroup's left cosets, one coset per level. If there
are more than 41 cosets, then only 41 of the cosets will appear. (Use
a journal if you need to record all the cosets).

\subsection{Show coset reps}

Menu: STRUCTURE

\NI Input: None required, but a subgroup must first be selected.

\NI Result: The set of left coset representatives. Each coset is represented
by the element in it of lowest index.

\subsection{Inverse image} \label{invimage}

Menu: GROUP OPS

\NI Input: Subset of level 0. (The ambient group is $G/H$). 

\NI Result: The set of all elements of $G$ whose image in $G/H$ belongs to
the input subset.

\subsection{Center}

Menu: STRUCTURE

\NI Input: None required.

\NI Result: The center of the group.

\subsection{Centralizer}

Menu: GROUP OPS

\NI Input: Subset at level 0. 

\NI Result: The centralizer of the subset at
level 0. The result is empty if the input is empty.

\subsection{Commutator subset}

Menu: STRUCTURE

\NI Input: None required.

\NI Result: The subset of all elements of the group of the form
$aba^{-1}b^{-1}.$

\subsection{Normalizer}

Menu: GROUP OPS

\NI Input: Subset at level 0.

\NI Result: The normalizer of the subset at level 0.
The result is empty if the input is empty.

\subsection{Normal closure}

Menu: GROUP OPS

\NI Input: Subset at level 0.

\NI Result: The smallest normal subgroup containing the subset at level 0
is placed on the stack. If input is empty, then the result is the
trivial (one-element) subgroup.

\subsection{Change element name $\cdots$} 

Menu: EDIT

\NI Input: None required. However, at least one element box must be selected
(in reverse video). The action applies to the selected element box
of lowest index.

\NI Result: A dialog box appears prompting you to type in
a new name string of length at most 30 characters.
The name change occurs if the OK button is clicked or the RETURN key
is pressed. (Keyboard shortcut: hold down the OPTION key while clicking
an element box).

If the CANCEL button is clicked, no change occurs. If the ORIGINAL
button is clicked, the chosen element is given its original name from
the group data file.

\subsection{Generate by name}
\label{genbyname}

Menu: STRUCTURE

\NI Input: Subset on level 0. 

\NI Result: The following calculations and changes occur. The identity
element is renamed ``$*$'' and the other elements are renamed (in
index order) as $a, b, \ldots, A, B, \ldots$ with the convention that
$a$ and $A$ are inverses, $b$ and $B$ are inverses etc. If the
alphabet a,b,...,z,A,B,...,Z is used up, then {\em nothing} changes.

Next, the subgroup generated by the chosen subset is calculated and
the elements in that subgroup are also renamed by concatenating the
names of the factors from the generating set. Each resulting name is
shortened in the following ways. First, any adjacent factors which
are inverses of each other are removed. Second, any two adjacent
factors which commute are transposed if the index of the first
(leftmost) factor is greater than that of the second factor. These
two steps are then repeated until no further change occurs.

Finally, whenever a power 3 or higher occurs in a name, it is
replaced by $\langle \mbox{letter} \rangle \langle
\mbox{power}\rangle$. For example, $aabAccccb$ would be changed to
$aabAc4b$.

When the calculations are finished, the original subset remains
at level 0 and all the name changes made appear in the stack and in
the element boxes.

\subsubsection{Element name rules}

An element box can show a name of up to 20 characters and an element
name can as long as 30 characters. If an element's name is more than
20 characters long, it is shown with its generic name in an element
box but is shown with its full name on the stack. The ``generic name''
has the form ``$xi$'' where $i$ is the index of the element.

If the ``Generate by names'' command results in a name which is
longer than 30 characters, then the element's {\em original} name is
used.

The auxiliary programs which create group data files usually name
elements so that the names are short enough to fit into the element
boxes. Exceptions might occur in items 5 and 6.
\begin{enumerate}
\item The elements of the $2 \times 2$ matrix groups are denoted by
$>a,b,c,d$ indicating the entries in row order.
\item The elements of permutation groups are denoted by the usual
disjoint cycle factorizations where ``;'' is used to separate
distinct cycles.
\item The elements of the cyclic groups and groups of units in $Z_n$
are denoted as themselves.
\item The elements of quotient groups calculated by \GA\ are denoted
by their representatives, where the element of lowest index in a
coset is always chosen as the representative.
\item Elements of a group formed using the auxiliary program {\em
products} have names of the form ``$a,b$'' where the group is $A
\times B$ and $a \in A$, $b \in B$.
\item Elements of a group formed using the auxiliary program {\em
SemiDirProduct} have names of the form ``$a;b$'' where $a \in A$
and $b \in B$.
\item The auxiliary program {\em Mystery Group Maker} converts all element
names of a group data file to generic names.
\end{enumerate}

\subsection{Use original names}

Menu: STRUCTURE or EDIT

\NI Input: None required. 

\NI Result: All elements' names are reset to the
ones given in the group data file.

\subsection{Use generic names}

Menu: EDIT

\NI Input: None required.

\NI Result: Each element is renamed with the form ``$xi$'' where $i$
is the index of the element.


\section{Technical information}\label{techinfo}
\subsection{The format of a group data file}\label{formatinfo}

Every group data file is a plain text file which may be viewed or 
edited by any text- or word-processor. This is its format:

Line 1 contains the name of the group, a string of length up to 255.
Only the first portion (about 25 characters) of a very long name will
fit into the ``Information box'' on the screen.

Line 2 contains the order of the group, an integer.

The next $n$ lines (where $n$ is order of the group) contain the names
of the group elements. Each name is a string of length at most 30.

The remaining lines are each 80 characters long, except possibly for
the last line. They comprise a coded representation of the group's
multiplication table. Here is how the coding works.

The elements of the group are numbered from 1 (always the identity
element) to n where n is at most 400. Except for $n=400$, each of
those index numbers is represented in the data file by its base 20
representation (leading 0 included) with each base 20 digit
represented by a letter where A=0, B=1, ..., T=19. The number 400
is represented by `UA'.

Thus, for example, $145 = (7)(20)+(5)(1)$ is encoded as `HF'  
since H=7 and F=5. The number 16 is encoded as `AQ'.

Now think of the group's multiplication table as an $n \times n$ array
of index numbers converted to their two-character representations.
Then concatenate the rows to form a long character string of length 
$2n^2.$ Each line (except possibly the last) of this portion of the
group data file consists of 40 table entries (80 characters). If $n^2$
is not a multiple of 40, then the last line of the group data file
necessarily has fewer than 80 characters.

Thus any auxiliary program designed to create a group data file must
index each element by integers $1,2,\ldots,n$ with index 1 reserved
for the identity element. It must output n strings as names of the
elements. Finally, it must calculate each entry in the multiplication
table, convert the resulting index to a 2-character string
as described above, and then
output those entries, 40 per line to the data file (except possibly
fewer for the last line).

\subsection{Memory use}

When you load a group data file, the program attempts to reserve memory
(always the same amount) to hold the data for the group. If for some
reason, there isn't enough memory to load in the data, the program
will terminate gracefully. In that case, select the program's icon,
choose ``Get Info'' from the Finder's File menu, and then make sure
that the ``Preferred size'' number is set to at least 768 K. Setting
it higher will neither hurt nor help.

\end{document}
