The programs

Typically, you would: These steps are documented below.

The SAGE script

You can download the script here. CD where the script is and run SAGE. Type in:
sage: from sw_sage_module import *
Then pick a GAP group, eg:
sage: G= gap("SmallGroup(8,4)")
Then you set things up with:
sage: info= rep_info(G)
You start the various computations with:
sage: info.write_complex_repring()
sage: info.write_real_repring()
(some output)
sage: info.restrictions_elemab()
A base name will be chosen automatically for the files, of the form gpN_K where N is the order of G and K its number in the Small Groups Library. The files created are Note: G must be a group for which the IdGroup() method works! Most (all?) groups in the Small Groups Library will be fine. If something went wrong, try:
sage: G.IdGroup()
Check whether you get an error message. If so, you can edit the script and change the lines 54-57. It is self explanatory, really: just set self.name to anything. Sorry about this.

The C++ program rep

(rep is for representation ring, not a very good name...)

Usage: ./rep 'name' [options]
Options:

This program computes the formal ring of Stiefel-Whitney classes of a given group.

It expects a name on the command line, which will be used as a prefix for all the names of input and output files. Say you want to work with the quaternion group of order 8. Since its GAP number is 4, you can for example use 'gp8_4' as a base name, and use:

./sw gp8_4

Input files: rep looks for three files, all of them presumably produced by GAP (see corresponding documentation):

The first, resp second, describes the complex, resp real, representation ring. The third file describes the restriction of these representation rings to elementary abelian subgroups.

Also, rep needs a bunch of files called elemab-ranki.gaprep.real for various integers i between 1 and the 2-rank of the group under consideration (eg elemab-rank3.gaprep.real). It is a good idea to place all the files elemab-ranki.gaprep.real for, say, 1<= i <= 6 once and for all in the folder where rep is, if you are studying groups whose order divides 26.

Output files: Then rep produces four files:

The C++ program hom

(hom is for homomorphisms)

Usage: ./hom 'name' [options]
Options:

This program finds all the well-defined homomorphisms between the formal ring of Stiefel-Whitney classes (computed by the program rep) and the mod 2 cohomology of the group. Then it checks whether there is "essentially" only one homomorphism, up to some reasonable equivalence.
When this is the case, hom goes on to add the minimum number of variables to the formal ring in order to make the homomorphism surjective, and compute its kernel. It also checks that this new kernel does not depend on the homomorphism taken in the unique equivalence class, and some other details. When everything is well, it returns 0, meaning that the computation is complete.

It expects a name on the command line, which will be used as a prefix for all the names of input and output files. Say you want to work with the quaternion group of order 8. Since its GAP number is 4, you can for example use 'gp8_4' as a base name, and use:

./hom gp8_4

Input files: The program needs the following files:

Output files: The following files are produced:

The C++ program milnor

(milnor suggests the algebra of "Milnor constants")

Usage: ./milnor 'name' [options]
Options:

This program computes the algebra of Milnor constants, that is, even-degree elements which are killed by the Milnor derivations.

It expects a name on the command line, which will be used as a prefix for all the names of input and output files. Say you want to work with the quaternion group of order 8. Since its GAP number is 4, you can for example use 'gp8_4' as a base name, and use:

./milnor gp8_4

Input files: The program needs the following file:

Output files: The following file is produced: