> < ^ Date: Thu, 02 Feb 1995 12:10:00 +0100
^ From: Jan de Wit <jwit@cs.ruu.nl >
> ^ Subject: How to reduce words in FpGroups

Hello,

I am learning to use GAP for about a week now, and I have some questions and
suggestions. I haven't had the time to read the forum9??.txts entirely yet, so
there might be some 'old hat' among them.
In no particular order:

1. Given an FpGroup, ie FreeGroup(2)/[a^3,b^2,a*b*a^-1*b^-1] (cyclic group of
order 6). You can get the elements of this group by using Elements, and now
I want to compute (a^2*b) * (a). You get a^2*b*a, which is NOT in the list
of elements. It seems to me that GAP has a way of reducing this expression
to one which is in the list. How do you do this ?
The reason I want to do this is to make a data structure containing the
*entire* multiplication table for a (hopefully small) group, no matter
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
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...

2. It would be nice to be able to get some input from the user while executing
a function. As an example, try
PrintArray(RecFields(GroupOps));
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:

waitKey:=function()
Print("Press Ctrl-D to continue\n"); ## ctrl-d works for MS-DOS
Read(*stdin*);
end;

I don't think this is particularly elegant or easy. To make GAP programs
interactive, ie. accept numbers or strings as input you would have to do
something like

readInt:=function()
  local input;
  while not IsBound(input) do
    Print("Enter 'input:=' <the number you want> ';' + ctrl-d");
    Read(*stdin*);
    if not IsInt(input) then
      Unbind(input);
    fi;
  od;
  return input;
end;
I haven't tried this yet, but it's the only solution I can think of.

3. 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 !
For most people this is not a problem, but for me it is, running GAP on an
MS-DOS machine with 4M (ie 3M extended space): after the group libraries
have loaded, I have about 300K free space left (and swapping to disk is
SSSLLLLLOOOOOWWWW, goodbye GAPSTONES!).

4. Have the algorithms and their implementations been proved correct by some
kind of formal method? If not you might just try something that's so
complicated you can't verify the result by hand (Imagine someone writing
a thesis using incorrect results obtained by GAP...). I guess most of the
abstract algorithms have been proved correct, but I wonder about the
implementation.

Well, that's about it, I hope my questions aren't too stupid for you to ponder
over. I want to add that GAP looks great, most features I don't even know
(I'm just a third-year mathematics student at Utrecht University ).

Yours sincerely,
Jan de Wit


> < [top]