> < ^ Date: Mon, 06 Feb 1995 09:44:00 -0700
> < ^ From: Frank Celler <frank.celler@math.rwth-aachen.de >
< ^ Subject: Re: How to reduce words in FpGroups

Dear Jan de Wit,

you wrote:

permutation group - and the FpGroup above. (Yes, this is brute force, and I
should write a program in C for it, but I want to try it using GAP).
Maybe there are other ways of doing this that I'm not aware of yet...

As Derek has explained the complexity of a brute force algorithm is (n-1)!,
so I doubt that even using assembler or a very good C optimizer will help
to speed up the computation by a factor of 15!/11! ~ 30000 to get a
pratical algorithm for groups of size 16 (which is the next "interesting"
size, 13 & 15 being cyclic, 14 being cyclic or dihedral) instead of 12.

what the exact elements are, and start working on that. Then it would be
possible ,for instance, to check isomorphism between CyclicGroup(6) - a
permutation group - and the FpGroup above. (Yes, this is brute force, and I

If you need that isomorphism explicitly then you have to implement Derek's
algorithm, if you only want to know if two groups are isomorphic you can
use 'GroupId' for permutations/ag groups of size less than 101 (this
function will *not* work for fp groups, so you have to convert a fp group

gap> f := FreeGroup(2);
Group( f.1, f.2 )
gap> g := f / [ f.1^4, f.2^2, f.1^f.2/f.1^-1 ];
Group( f.1, f.2 )
gap> p := OperationCosetsFpGroup( g, TrivialSubgroup(g) );
Group( (1,2,4,7)(3,6,8,5), (1,3)(2,5)(4,8)(6,7) )
gap> GroupId(p);
  catalogue := [ 8, 4 ],
  names := [ "D8" ],
  3primes := [ "A", 2 ],
  size := 8,
  pGroupId := 3 )

The entry 'catalogue' identifies the groups of size less than 101 and two
such groups are isomorphic if and only if their 'catalogue' numbers are
equal. The other entries in this record ('3primes' and 'pGroupId') refer
to other classifications, please see the manual for details.

Now that wasn't too easy to follow, wasn't it?
To solve this problem I wrote a function which loops through the list,
counts the number of lines printed, and at regular intervals calls a func-
tion waitKey, defined like this:

Yes, the GAP output is sometimes hard to read or too verbose. GAP 4.1 will
address this problem by being brief per default and might offer a pager if
asked to be verbose.

Is it possible to load the libraries more selectively, so that when I type
G:=Group((1,2),(1,2,3)); not nearly all the libraries are loaded?
I mean, I want to work with permutation groups, not with Cohomology- or
SagGroups !

Again, GAP 4.1 will solve this problem by loading only library files which
are needed, but the current version of GAP indeed reads quite a lot of
stuff which is not necessary to define, say, <(1,2)>.

You can remove the line 'ReadLib("ratclass")' in "permgrp.g", this will
avoid loading the solvable group functions. Removing this line however
will break the functions 'RationalClasses', 'ConjugacyClasses' because
'RationalClasses' computes the classes by taking the Sylow subgroups,
converting them into ag groups and using ag group methods there.

Unfortunately, GAP is at the moment quite generous when reading in files,
so if you define a permutation group, GAP reads in every file you might
need. Even if you are never going to use 'RationalClasses' (or functions
which rely on the classes) it will fetch the methods used to compute
classes in permutation groups in advance.

best wishes

> < [top]