We will discuss each of these in turn in an order that one would probably see them in an abstract algebra course.
Zn is the set of elements {0, 1, 2, ... , n-1} under the operation of addition mod n. For example, in Z5, 4+3 = 2. The program syntax for elements in this group are simply non-negative integers. Any input greater than or equal to n is replaced with itself mod n. So if you are working with Z5 and use some input of 12 it will be converted to 2.
Un is the set of elements {0, 1, 2, ... , n-1} under the operation of multiplication mod n. Note that the elements used in the program need not be relatively prime to n. For example, in U6, 2*3 = 0. The program syntax for elements in this group are simply non-negative integers. Any input greater than or equal to n is replaced with itself mod n. So if you are working with U5 and use some input of 12 it will be converted to 2.
Dn is the set of all symmetry transformations of a regular
n-gon, also known as the Dihedral group. Hence Dn contains 2n elements, n rotations and n reflections
or flips. The operation is composition of transformations.
For example, D4 is the symmetry group of the square. There are
four rotations (0, 90, 180, and 270 degrees) and four flips (one over the
horizontal, one over y=x, one over the vertical and one over y=-x).
Graphically we can represent the elements of this group by the following figure.
The original
square is in the upper left. The rotations are down the first column and the
flips are down the second column.
When representing these elements in the computer we can not easily use degree or radian measurement for rotations, especially when the angle does not divide evenly into 360 (for example, with D7). So we have adopted the following scheme. R0 represents rotation by 0 degrees, that is, the identity element of Dn. R1 represents the first rotation that is a symmetry. So in D4, R1 represents rotation by 90 degrees, in D5 R1 represents rotation by 72 degrees and in D6 R1 represents rotation by 60 degrees. In general, in Dn R1 represents rotation by 360/n degrees. R2 is the second such rotation, that is, rotation by 360*2/n degrees and so on up to R(n-1). The flips are represented by F0, F1, ..., F(n-1). F0 is the flip over the horizontal. F1 is the first possible flip that is a symmetry. In in D4, F1 represents the flip over the line that is 45 degrees from the horizontal, in D5 F1 represents the flip over the line that is 36 degrees from the horizontal, and in D6 F1 the flip over the line that is 30 degrees from the horizontal. And so on. All of our angle measurements are counterclockwise, of course.
So from our above example of D4, we have,
The operation for this group is composition of functions. We use the right to left convention of composing functions. For example, R1 * F2 = F3 and F2 * R1 = F1.
The Quaternions is a noncommutative group of order 8 consisting
of the elements {1, -1, i, -i, j, -j, k, -k} with
i2 = j2 = k2 = -1 and a circular
definition for multiplying i, j, and k. If we consider the following
circle with i, j, and k on it. To find the product of i * j we start at
i and go around the circle to j (using the smallest arc) then we keep going
to the next letter,
which is of course k. Now if we moved in a clockwise direction we use
a positive k and if we had to go counterclockwise we use a -k.
So we see that, i*j = k, j*i = -k, j*k = i, k*j = -i, ... Multiplication by 1 and -1 is the same as with integers, -1 * i = -i and so on.
The Quaternions can also be defined as the group of order 8 having two generators x and y satisfying the relations x2 = y2 and xyx = y. Since the first representation is more common in introductory abstract algebra classes we use it in this program. The element syntax for the program is simply 1, -1, i, -i, j, -j, k, -k, where i, j, and k can be lower or upper case.
Sn is the group of permutations on n letters, also called the symmetric group on n letters. There are several ways to represent the elements of this group but we have adopted the cycle notation since it is easier to input from a keyboard and is a little faster to do the necessary calculations. For example, if we are working in S7 the permutation (2 3 5 4 7) means that 2 is sent to 3, 3 is sent to 5, 5 is sent to 4, 4 is sent to 7, 7 is sent to 2, and both 1 and 6 are fixed. The identity element is represented by (1). The operation for this group is composition and as with the Dihedral groups we do composition from right to left. For example,
The program syntax for Sn is just how it is written mathematically. A cycle must start with a ( have numbers between 1 and n separated by at least one space and ending with a ). For permutations that are composed of two or more disjoint cycles we simply use juxtaposition. For example, (1 3 2)(4 6 5). The program outputs cycles in a standard form with the smallest numerical entry in the cycle at the beginning. As a user, you do not need to input cycles in that form. For example, (1 3 2) can be input as (3 2 1) or as (2 1 3).
Qn is the generalized quaternion group, n > 2. It is a group of order 2n generated by two elements a and b under the following relations.
The element syntax for this group is any string of a and b to positive powers. For example, the user can input aba, babbab, a^2b^3, b^2a^3, and so on. Since every element of the generalized quaternions can be rewritten in the form a^tb^r with 0 <= t <= 2n-1 and 0 <= r <= 1 the program will simplify every element to this form.
Cn is the dicyclic group, n > 1. It is a group of order 4n generated by two elements a and b under the following relations.
The element syntax for this group is any string of a and b to positive powers. For example, the user can input aba, babbab, a^2b^3, b^2a^3, and so on. Since every element of the dicyclic group can be rewritten in the form a^tb^r with 0 <= t <= 2n-1 and 0 <= r <= 1 the program will simplify every element to this form. One thing to note is that when n is a power of 2 the dicyclic group is isomorphic to a generalized quaternion group. More specifically, C2^n is isomorphic to Qn+2 and C2 is isomorphic to the quaternion group.
User-defined structures use the element names that you supply as the element syntax. Remember that these are not case sensitive.
When dealing with products we simply use ordered tuple notation. If your group is Z3 X Z5 then an element would look like (2, 3). If your group is Z3 X D23 X S7 X Q then an element would look like (2, F10, (1 3 5)(2 4), -J). As with the group syntax, the spaces are not important, except for the elements of Sn where at least one space is needed between each of the numbers in a cycle. A tuple must begin with a (, end with a ) and have a single comma between each of the components. One note of caution with products is that tuple simplification is done automatically. That is, if our group is input as Z24 X (S7 X D9) the program will view it as Z24 X S7 X D9 and hence elements should be input in the form (19, (1 2 3), R5) and not (19, ((1 2 3), R5)).
For elements in
quotient groups we simply ignore the modded subgroup in the element syntax.
For example, if our group is Z10/<5> an
element would be represented as 3 and not as 3 + <5>.
There is a printing option for cosets
like 3 + <5> but the input parser would not understand the syntax.
Similarly, if our group
is Z10/<5> X Q an element would look like (3, J). One final example,
say our group was
(Z10/<5> X Q/<K> X D10)/<(3, J, F2), (2, -I, R3)> then an
element would look like (1, J, R1).