Path: blob/main/course-contents/notes-RT--Groups-and-GAP.md
908 views
------Note: In class, I promised I'd include these in the notes... you'll have to read the docs a bit to figure out how to get Character Tables. (The notes her might help you get started).
A overview of GAP
GAP is
GAP - Groups, Algorithms, Programming - a System for Computational Discrete Algebra
You can find lots of information at the preceding link, including a tutorial and a variety of learning resources.
My basic goal here is to try to give you some idea of what you might be able to do with GAP (something of a trailer for the tutorial, perhaps?)
Installation
The installation instructions for GAP can be found here.
Personally, my computer's OS is Debian GNU/Linux, and I installed GAP by running the command
But while that is handy, I don't think the install process should be too difficult on any machine.
Starting GAP
After installing GAP, open a terminal on the computer and run GAP; you should see something like the following:
The bit at the end -- i.e. gap> -- is a prompt, and it indicates that GAP is waiting for you to type a command. Once you do so and press Enter, GAP will (try to) execute the command you entered.
It will print any output (or errors) from the command on the screen, and then it will display another prompt and again wait for input.
Permutation Groups
In GAP, probably the most straightforward way of representing (finite) groups is as permutation groups -- i.e. subgroups of for some .
For example, one knows that the symmetric group is generated by an -cycle and a transposition. In GAP, we may check this for some chosen -- say, -- as follows:
Note that elements are represented as products of disjoint cycles. If you enter them otherwise, GAP rewrites your representation as a product of disjoint cycles:
We can ask about the derived subgroup of :
And we can ask about simplicity of groups:
We can ask about Sylow subgroups:
Let's define a function that takes a (finite) group as an argument and prints the "sylow information".
If we enter the above function in GAP, we can call it for different groups:
Finally, I'll point out that we can ask about group isomorphisms.
Let's look at a dihedral group:
Note that "tau * sigma * tau = sigma^-1". e.g.
We've now defined the function MyDihedralGroup, and MyDihedralGroup(n) returns the subgroup of generated by sigma(n) and tau(n).
Now, GAP has a built-in function DihedralGroup; here DihedralGroup(n) returns a copy of the dihedral group of order n (so n needs to be even...).
Let's check that we get isomorphic groups:
The function IsomorphismGroups takes two groups as arguments, and returns an isomorphism (if one exists) or "fails". In the preceding case, GAP found an explicit isomorphism between GAP's DihedralGroup(18) and MyDihedralGroup(9).
You can check it for other values of n...
And in the other order:
And you can observe that it fails on nonsense:
Matrix groups over finite fields
Finite fields
Recall the following:
a finite field has order for some prime and some
the multiplicative group is cyclic of order .
GAP writes Z(p,n) or Z(q) for a generator of the multiplicative group .
Now you can perform field operations with these elements:
You can get the elements 0 or 1 viewed as members of a finite field using 0*Z(p,n) for 0 and Z(p,n)^0 for 1.
Matrices
A row vector is just a list; e.g.
A matrix is a list of row vectors:
Matrix Groups
In GAP, we can create the general linear group of invertible matrices over the field of order using a command of the form G:=GL(n,q);; for example:
Similarly, we can construct the special linear group -- the kernel of
-- using SL(n,q).
GAP has constructors for other matrix groups (projective special linear group, symplectic group, unitary group , orthogonal group, ...) which I'm going to ignore today.
It is a fact that unless (n,q) ∈ [(2,2),(2,3)] one knows that SL(n,q) is a simple group , which we can confirm in some cases in GAP:
In fact, the quotient of SL(n,q) by its center is simple (at least when and aren't "tiny"):
GAP can compute the conjugacy classes of a finite group:
For each of these conjugacy classes, one may use the function Representative to choose a representative element.
Let's write some code that takes as input a whole number n, a prime power q=p^m and a matrix M and finds the conjugacy class in GL(n,q) containing M*Z(q).
This code uses the boolean-valued function IsConjugate. Note that First(list,f) applies the boolean-valued function f to successive elements of list, and returns the first element of list for which f evaluates to true.
So for example:
A bit more on group actions
Let's consider a finite field and a 2 dimensional vector space over .
The group G=GL(4,q) acts on by matrix multiplication.
For a particular q, we can ask GAP for the list of G orbits on elements of V as follows:
Now, the stabilizer of a 1-dimensional subspace is the "upper triangular subgroup", which we can construct as the normalizer of a -sylow subgroup.
A 13-sylow subgroup is equal to
and the normalizer this sylow is
Let's describe using GAP in two ways:
As normalizer:
And as stabilizer:
Now, since the action of on lines in is transitive, the set of cosets identifies with the set of such lines.
Thus there are 14 lines in . Since acts on lines, we get a (transitive) action of on a set of 14 elements, which we are going to view as the cosets of in :
This action corresponds to a homomorphism which we can create in GAP as follows: