This file contains the mails sent to the GAP forum in April-June 1995.

Name                Email address                           Mails   Lines
Martin Schoenert    Martin.Schoenert@Math.RWTH-Aachen.DE       13     572
Frank Celler        Frank.Celler@Math.RWTH-Aachen.DE            6     114
Thomas Breuer       Thomas.Breuer@Math.RWTH-Aachen.DE           5     169
Bruce Merz          bamerz@okcins.okanagan.bc.ca                5     103
Steve Linton        sal@dcs.st-andrews.ac.uk                    4      94
Joachim Neubueser   Joachim.Neubueser@Math.RWTH-Aachen.DE       3     170
Derek Holt          dfh@maths.warwick.ac.uk                     3     108
Frank Harou         fharou@laplace.univ-rennes1.fr              3      38
Burkhard Hoefling   hoefling@mat.mathematik.uni-mainz.de        2     282
Alexander Hulpke    Alexander.Hulpke@Math.RWTH-Aachen.DE        2     142
Heiko Theissen      Heiko.Theissen@Math.RWTH-Aachen.DE          2     127
Walter Carlip       c3ar@math.uchicago.edu                      2      73
Jacob Hirbawi       jcbhrb@cerf.net                             2      55
Dima Pasechnik      pasec@can.nl                                2      47
Barry Monson        barry@conway.math.unb.ca                    2      25
Werner Nickel       Werner.Nickel@Math.RWTH-Aachen.DE           1     164
Frank Luebeck       luebeck@euterpe.iwr.uni-heidelberg.de       1      56
Lewis McCarthy      lmccarth@klingon.cs.umass.edu               1      34
Eamonn O'Brien      eamonn.obrien@maths.anu.edu.au              1      30
Peter F. Blanchard  pfb3h@weyl.math.virginia.edu                1      23
assist              rassist@oksw53.okanagan.bc.ca               1      21
Peter Prohle        prohlep@konig.elte.hu                       1      20
Tim Boykett         tim@bruckner.stoch.uni-linz.ac.at           1      17
Stephan Rosebrock   rosebro@math.uni-frankfurt.de               1      16
Greg Cheak          pp002119@interramp.com                      1      12
W.A. de Graaf       wdg@win.tue.nl                              1      10
Q. Yang             qiyang@okuc02.okanagan.bc.ca                1       7

This  file is in Berkeley mail drop format, which means you can read this
file with 'mail -f <name-of-the-file>'  or 'mailx -f <name-of-the-file>'.
It is also possible however to read this file with any text editor.



From c3ar@math.uchicago.edu Sat Apr  1 17:07:00 1995
Date:         Sat, 01 Apr 95 17:07:00 -0600
From:         "Walter Carlip" <c3ar@math.uchicago.edu>
Subject:      Z

Perhaps this is a "newbie" question: 

   Today after a long computation (I let it run overnight) I
obtained a particular sought-after subgroup of a general linear
group over a finite field, say GL(3,7).  I needed to study 
properties of the center of this group G, and carfully defined
Z := Centre(G).  Much to my surprise everything broke down, since
Z is evidently an "internal" function used in conjunction with
finite fields.

   After making such a blunder, is there any way to recover
the original definition of the internal function Z?

Thanks,

--Walter



From pasec@can.nl Thu Apr  6 12:39:00 1995
Date:         Thu, 06 Apr 95 12:39:00 +0000
From:         "Dima Pasechnik" <pasec@can.nl>
Subject:      permutations from MappingByFunction

Dear Forum,

I came across a necessity to convert a mapping defined by
MappingByFunction into a permutation. Is there any GAP-function to do
it?

My particular example arises when I want to define the group 
$G=P\Gamma L(n,q)$
in its action on the points of projective space $PG(n,q)$.
It is straightforward to get $PGL(n,q)$ and the extra mapping
f (Frobenius automorphism) needed to generate $G$.
However f is given as MappingByFunction and I don't see a regular
way to convert f into a permutation.

Best regards,
Dima

-----------------------------------------------------------------
Dmitrii V. Pasechnik
RIACA/CAN
419 Kruislaan
1098 VA Amsterdam
The Netherlands
phone: +31 20 560 8490
fax:   +31 20 560 8448
email: dima@can.nl



From alexander.hulpke@math.rwth-aachen.de Thu Apr  6 09:42:00 1995
Date:         Thu, 06 Apr 95 09:42:00 -0400
From:         "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Subject:      Re: Z

Dear GAP-Forum,

Walter Carlip wrote:

>    Today after a long computation (I let it run overnight) I
> obtained a particular sought-after subgroup of a general linear
> group over a finite field, say GL(3,7).  I needed to study 
> properties of the center of this group G, and carfully defined
> Z := Centre(G).  Much to my surprise everything broke down, since
> Z is evidently an "internal" function used in conjunction with
> finite fields.
> 
>    After making such a blunder, is there any way to recover
> the original definition of the internal function Z?

Not really. The only thing you can do at this point is printing the results
--- if possible --- to a file and starting anew. If you fear, that you are
prone to do such an error again (though probably the loss of a day's work is
scaring enough to remember not to use a variable 'Z'), you can do the
following:
Create or edit Your '.gaprc' file (on UNIX machines this file is in Your home
directory but will only be listed by 'ls -a', so do not wonder if it seems
to have disappeared) and add the following line:

TheOriginalDefinitionOfZ:=Z;

This will copy the original definition of Z to a variable
(which is presumably weirdly enough named to be misused). As it is in the
'.gaprc' file, the assignement is executed every time you start GAP, so you
don't have to do anything special afterwards. If you
accidentally redefine Z, you can get back the original definition by an
assignement the other way round.

Keep in mind that redefinements of E, EA-EZ, CF and GF will lead to
similarly catastrophical situations. However all GAP functions and variables
(ignoring for a moment 'time' which is more internal) provided by the
library start with upper case letters. So making all your own variables to
be lower case will always force you to be on the safe side.

Hope this helps,

Alexander



From thomas.breuer@math.rwth-aachen.de Fri Apr  7 11:58:00 1995
Date:         Fri, 07 Apr 95 11:58:00 WET
From:         "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Subject:      Re: permutations from MappingByFunction

Dear Forum,

Dima Pasechnik wrote

> I came across a necessity to convert a mapping defined by
> MappingByFunction into a permutation. Is there any GAP-function to do
> it?
> 
> My particular example arises when I want to define the group 
> $G=P\Gamma L(n,q)$
> in its action on the points of projective space $PG(n,q)$.
> It is straightforward to get $PGL(n,q)$ and the extra mapping
> f (Frobenius automorphism) needed to generate $G$.
> However f is given as MappingByFunction and I don't see a regular
> way to convert f into a permutation.

Here is one way to solve this problem.

    gap> # We act on the lines of a two-dimensional space over GF(4).
    gap> elms:= NormedVectors( GF(4)^2 );
    [ [ 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2) ], [ Z(2)^0, Z(2)^0 ], 
      [ Z(2)^0, Z(2^2) ], [ Z(2)^0, Z(2^2)^2 ] ]
    gap>
    gap> # Get the general linear group.
    gap> g:= GL(2,4);
    GL(2,4)
    gap>
    gap> # Define the Frobenius automorphism, acting on lines.
    gap> normedfrob2:= MappingByFunction( elms, elms,
    >                     x -> NormedVector( List( x, y -> y^2 ) ) );;
    gap>
    gap> # Compute the permutations induced by the generators of GL(2,4).
    gap> p1:= Permutation( g.1, elms, OnLines );
    (3,5,4)
    gap> p2:= Permutation( g.2, elms, OnLines );
    (1,2,3)
    gap>
    gap> # Compute the permutation induced by the Frobenius automorphism.
    gap> p3:= GroupElementsOps.Permutation( normedfrob2, elms, OnPoints );
    (4,5)
    gap>
    gap> # We have constructed a permutation representation of
    gap> # the group is P\GammaL(2,4).
    gap> Group( p3, p2, p1 );
    Group( (4,5), (3,5,4), (1,2,3) )

Maybe in a forthcoming version of GAP 'Permutation' will also work for
computing the permutation action of mappings (that are bijections).
For the moment the method sketched above should suffice.

Kind regards
Thomas Breuer



From martin.schoenert@math.rwth-aachen.de Mon Apr 10 19:28:00 1995
Date:         Mon, 10 Apr 95 19:28:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: Memory Use

Walter Carlip wrote in his e-mail message of 1995/03/29

    I'm puzzled by Gap's use of memory.  I find that "Gasman" fails to obtain
    "bags" for many computations I attempt.  Let me give a particular
    example.  I was investigating the cardinality of the set
    {g | <A,g> has abelian Sylow 2-subgroup} as A ranges over the conjugacy
    classes of subgroups of a group G and g ranges over elements of G.  I
    have Gap the group G = SymmetricGroup(6), which is not too large (720).
    While Gap had no difficulty computing the ConjugacyClassesSubgroups, or
    doing other computations with G, it choked on my program:

    Myvector := function(group,classes,prime)
      local A,g,i,v;    v:=[];
      for A in classes do
        i:= 0;
        for g in Elements(group) do
          if IsAbelian(SylowSubgroup(Closure(A.representative,g),prime)) then
            i:= i+1;
          fi;
        od;
        Append(v,[i]);
      od;
      return(v);
    end;

Sorry that it took me so long to answer, but I had a hard time to find
the reason for this problem (an early experiment lead me totally astray).
This behaviour is caused by a bug in the GAP library.  This problem will
be fixed in the upgrade to 3.4.2.  If you can't wait until then, simply
insert the following line in your function.

    Myvector := function(group,classes,prime)
      local A,g,i,v;    v:=[];
      for A in classes do
        i:= 0;
        ...
        Append(v,[i]);  # why don't you use 'Add(v,i)' here?
        A.representative.sylowSubgroups[2].parent := group;
      od;
      return(v);
    end;

With this modification the entire computation can be done with a 16 MByte
workspace.  It can be made quite a bit faster if you first test whether
the Sylow subgroup of the representative itself is abelian, before you
extend the representative with all the elements.

    Myvector := function(group,classes,prime)
      local A,g,i,v;    v:=[];
      for A in classes do
        i:= 0;
        if IsAbelian(SylowSubgroup(A.representative,2)) then
	  ...
        fi;
        Append(v,[i]);
        A.representative.sylowSubgroups[2].parent := group;
      od;
      return(v);
    end;

There are of course many additional tricks that can be used to speed up
this computation.  Probably the most worthwhile is to test the size of
the closure first, to avoid to compute the Sylow subgroup.  If 4 does not
divide 'Size(<closure>)', then <closure> has an abelian Sylow subgroup.
On the other hand, if 16 divides 'Size(<closure>)', then <closure> has a
non-abelian Sylow subgroup.

And now for those who are interested, a description of the problem.

GAP stores in 'group.conjugacyClassesSubgroups' the list of conjugacy
classes.  If <class> is such a class, '<class>.representative' is its
representative.  If <class> has been handled in the outer for-loop, then
'<class>.representative.sylowSubgroups[2]' is a Sylow 2-subgroup of the
representative (this is computed during the first iteration through the
inner for-loop, when the representative is extended with the identity).
This subgroup <sylow> should contain in '<sylow>.parent' a reference
back to 'group'.

But in certain situations (basically if '<class>.representative' or an
appropriate factor acts transitively but imprimitively), a copy of
'group' is made and assigned to '<sylow>.parent'.  This is a full copy of
'group', i.e., the conjugacy classes, their representatives, and the
Sylow subgroups of the representatives are also copied.  Thus the size of
the data approximately doubles.

This doubling happens every time the certain situation occurs.  Until the
30th class it happens only once or twice, so it is not a problem.  But
after that it happens for almost every class, so it comes to an
exponential explosion.  After the 46th class, the data occupies about
32 MByte.  By extrapolation we see that we would need about 32 GByte to
complete the computation.

Walter Carlip continued

    Question: Is Gap having difficulty with this because it attempts to save
    every bit of information it computes, i.e., a list of each subgroup <A,g>
    together with its sylow 2-subgroup?  If this is the problem, is there a
    way to tell Gap to discard intermediate results (when known to be no
    longer needed)?

GAP saves the group, its conjugacy classes, their representative, and the
Sylow subgroups of the representatives.  But this is not a problem, all
in all it amounts to less than 1/2 MByte.  GAP does *not* remember each
subgroup <A,g> together with its Sylow subgroup.  But if GAP would store
those, then the way to discard them would be to find out where they are
saved, and to use 'Unbind' to get rid of them.

Hope this helps.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From pfb3h@weyl.math.virginia.edu Wed Apr 12 10:05:00 1995
Date:         Wed, 12 Apr 95 10:05:00 -0400
From:         "Peter F. Blanchard" <pfb3h@weyl.math.virginia.edu>
Subject:      names I have used

Dear Gap Forum,

	As always, many many thanks to the creators and maintainers
of Gap.  Accept my  apologies if this question has been addressed
in this forum before. 

	Unless I know there will be a lengthy calculation involved,
I tend to use Gap interactively.  It happens that I define a number of 
groups, elements, maps, etc with my own names.  My question is whether
there is a method of recalling the names I have used.  

	For example, suppose I issue the following command:

gap> grp := Group((1,2,3,4));; a := (1,3)(2,4); els := Elements(grp);

I may refer to the group, the element, and the list of elements
by the names grp, a and els.  Can I get a list of those names as the
ones I have already used?

Thanks again,

Peter Floodstrand Blanchard



From lmccarth@klingon.cs.umass.edu Sat Apr 15 02:41:00 1995
Date:         Sat, 15 Apr 95 02:41:00 -0400
From:         "Lewis McCarthy" <lmccarth@klingon.cs.umass.edu>
Subject:      Survey: Substitution in GAP, etc.

Dear fellow GAP users-

   As part of my Master's research (in Computer Science), I have been studying
ways of performing substitutions of one term for another in a GAP expression.
Having had some experience with Maple, I was initially surprised to discover
that GAP provides no analogue of the "subs" function in Maple. The issue 
arose because I had a polynomial in (Q(alpha))[x], within which I wanted to
substitute beta for alpha to obtain a new polynomial in (Q(beta))[x]. (alpha
and beta were algebraic numbers lying in different minimal inclusive fields.)
My immediate solution was to write a special-purpose substitution routine for
the task at hand, but I was left wondering about the absence of a more general
facility.

   I think I now understand the reasons no such facility exists. In designing
some limited substitution facilities, however, I've envisioned some kinds of
substitutions which may well be feasible, but not actually useful to anyone.
So (getting to the point of this message at last !) I would like to hear from
other users of GAP, and other symbolic math systems, about this question. 
What kinds of substitutions do you find useful in GAP (et al.) ?  What kinds 
of substitutions are possible but not helpful (or even meaningful) to you in 
other systems ?  Please describe cases of substitutions you would like to
perform in GAP, and the approach you've taken to handling them.

I greatly appreciate your time in reading this, and in replying if you choose
to do so.  I get bombarded with email daily, so I certainly know the effort
involved in processing it all and still getting everything else done !

I'd be happy to summarize private responses to the Forum, and let you know
what comes out of this if you'd like.

Thanks
-Lewis McCarthy
	for replies to this, please use: lmccarth@klingon.cs.umass.edu



From martin.schoenert@math.rwth-aachen.de Sat Apr 15 18:44:00 1995
Date:         Sat, 15 Apr 95 18:44:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: names I have used

Peter F. Blanchard wrote in his e-mail message of 1995/04/12

    	Unless I know there will be a lengthy calculation involved,
    I tend to use Gap interactively.  It happens that I define a number of 
    groups, elements, maps, etc with my own names.  My question is whether
    there is a method of recalling the names I have used.  

This is not possible in GAP 3.4.  But you can easily add this feature
(or you can wait for GAP 3.4.2, which is in internal testing currently).
Add the following function to 'idents.c'.

/****************************************************************************
**
*F  FunIdents(<hdCall>) . . . . . . . . . . . . .  list of global identifiers
*/
#include        "integer.h"

TypHandle       FunIdents ( hdCall )
    TypHandle           hdCall;
{
    TypHandle           hdList;
    TypHandle           hdName;
    unsigned long       i, k;

    hdList = NewBag( T_LIST, SIZE(HdIdenttab)+SIZE_HD );
    k = 0;
    for ( i = 0; i < SIZE(HdIdenttab)/SIZE_HD; i++ ) {
        if ( PTR(HdIdenttab)[i] != 0 ) {
            hdName = NewBag( T_STRING, SIZE(PTR(HdIdenttab)[i])-SIZE_HD );
            SyStrncat( (char*)PTR(hdName),
                       (char*)(PTR( PTR(HdIdenttab)[i] )+1),
                       SyStrlen( (char*)(PTR( PTR(HdIdenttab)[i] )+1) ) );
            k = k + 1;
            PTR(hdList)[k] = hdName;
        }
    }
    PTR(hdList)[0] = INT_TO_HD( k );

    return hdList;
}

Then add the following line to the end of 'InitIdents'.

    InstIntFunc( "Idents", FunIdents );

Finally add the followinf two lines to your '.gaprc' file.

    IDENTS := Set( Idents() );
    MyIdents := function () return Difference( Set(Idents()), IDENTS ); end;

And, volia, 'MyIdents();' will give a list of the global identifiers
introduced since '.gaprc' was read.  Since '.gaprc' is read after the
library is initialized, 'MyIdents();' will not print the library
identifiers.

Hope this helps,

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From martin.schoenert@math.rwth-aachen.de Fri Apr 21 11:34:00 1995
Date:         Fri, 21 Apr 95 11:34:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: Survey: Substitution in GAP, etc.

Lewis McCarthy wrote in his e-mail message of 1995/04/15

        As part of my Master's research (in Computer Science), I have been
    studying ways of performing substitutions of one term for another in a
    GAP expression.  Having had some experience with Maple, I was initially
    surprised to discover that GAP provides no analogue of the "subs"
    function in Maple.

    I think I now understand the reasons no such facility exists.

Let me clarify it for the sake of those who have no experience with
Maple.

In Maple there is basically just one type of objects: expressions.
That is the objects one deals with in Maple consist of numbers, symbols,
function applications, and are composed through algebraic operations
such as addition, multiplication.  Those objects correspond very
closely to the written representation.

In this context it makes sense to ``substitute'' one term by another.
Note however, that this process is a purely lexical substitution.
This leads to behaviour that is sometimes surprising.
For example suppose you have a polynomial <f> in Z[x].
To replace <x> with <y>+1 you can simply write 'subs( x=y+1, f )'.
On the other hand suppose that <f> is a multiple of <x>^2.
To replace <x>^2 with <y>+1 you *cannot* write 'subs( x^2=y+1, f )',
because Maple will not recognize that <x>^4 is (<x>^2)^2
(you could write 'subs( x=(y+1)^(1/2), f )').

In GAP on the other hand there are many different types of objects:
permutations, matrices, elements of cyclotomic fields, and so on.
Those objects are not composed from simpler objects (from GAP's point of
view).  And the correspondence to the written representation is sometimes
not that easy.

In this context it makes no sense to ``substitute''.  At least not in the
Maple sense.  A substitution is basically something that happens to the
(written) representation.  This is fine in Maple where the distance
between the written representation and the actual object is small.  But
in GAP this distance is sometimes rather large.

Our philosophy is to view such a transformation as something that happens
to the object, not to its representation.  And we think that the correct
mathematical concept for this are homomorphisms.

Lewis continued

        In designing some limited substitution facilities, however, I've
    envisioned some kinds of substitutions which may well be feasible, but
    not actually useful to anyone.  So (getting to the point of this message
    at last !) I would like to hear from other users of GAP, and other
    symbolic math systems, about this question.  What kinds of substitutions
    do you find useful in GAP (et al.) ?  What kinds of substitutions are
    possible but not helpful (or even meaningful) to you in other systems ?
    Please describe cases of substitutions you would like to perform in GAP,
    and the approach you've taken to handling them.

I would like to add the following questions.  Can you view your problem
in terms of homomorphisms?  What homomorphisms would you need to solve
your problem?

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From c3ar@math.uchicago.edu Fri Apr 21 15:17:00 1995
Date:         Fri, 21 Apr 95 15:17:00 -0500
From:         "Walter Carlip" <c3ar@math.uchicago.edu>
Subject:      Loop Efficiency

Here's another naive beginner question . . .

I have a problem which requires checking (something) for every
element of a vector space.  The code . . .

    for v in Elements(RowSpace(field,generators)) do
         (something)

works fine *except* it requires building a list of all elements
of the vector space first. (When the field or dimension is moderately
large, there is insufficent space to save the entire list.)

I tried instead several ways to iterate elements of the vector space
for example

    for a in field
      for b in field
        for c in field
          for d in field
            v = [a,b,c,d];
            (something)
          od;
        od;
      od;
    od;

or

    for i in [1..Size(field)^dimension] do
      v := fieldelement(i)
      (something)
    od;

where "fieldelement" turned i into a vector like
[1,2,2,5] and produced the vector consisting of the
first, second, second and fifth field elements.

None of my attempts have been very satisfactory. I tested things
using a six-dimensional field over GF(7).  Gap was barely able
store the elemetns of the field and (something) took about 12 seconds
to run on all vectors.  With every iteration method I could think
of, Gap took considerably more than 2 minutes to run through the
list of vectors.  

My question:  Is there a quick way to iterate the elements of 
a vector space or to ask Gap for the elements without gap having
to compute them all first?

Thanks,

--Walter
_____________________________________________________________________________
Walter C3arlip 				**** carlip@ace.cs.ohiou.edu ****
(the "3" is silent)                     **** c3ar@zaphod.uchicago.edu ****
_____________________________________________________________________________



From pp002119@interramp.com Fri Apr 21 23:47:00 1995
Date:         Fri, 21 Apr 95 23:47:00 -0700
From:         "Greg Cheak" <pp002119@interramp.com>
Subject:      GAP and Wheel Systems

I'm curious if anyone has worked with systems known as covers or "Wheel Systems". It would seem that GAP is 
well suited for working with these systems, however, being new to the program I am not quite sure how to go 
about it. It appears that there are several different ways to "slice and dice" a set in GAP. I'm curious what 
functions would be most suited for these types of constructions?


04/21/95 23:47:04
-------------------------------------	           
Greg Cheak				         
pp002119@interramp.com (Greg Cheak)	        
-------------------------------------		    



From alexander.hulpke@math.rwth-aachen.de Tue Apr 25 10:44:00 1995
Date:         Tue, 25 Apr 95 10:44:00 -0400
From:         "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Subject:      Re: Loop Efficiency

Dear GAP-Forum,

Walter Carlip wrote:

> I have a problem which requires checking (something) for every
> element of a vector space.  The code . . .

> I tried instead several ways to iterate elements of the vector space
> for example
> 
>     for a in field
>       for b in field
>         for c in field
>           for d in field
>             v := [a,b,c,d];
>             (something)
>           od;
>         od;
>       od;
>     od;

> None of my attempts have been very satisfactory. I tested things
> using a six-dimensional field over GF(7).  Gap was barely able
> store the elemetns of the field and (something) took about 12 seconds
> to run on all vectors.  With every iteration method I could think
> of, Gap took considerably more than 2 minutes to run through the
> list of vectors.  
> 
> My question:  Is there a quick way to iterate the elements of 
> a vector space or to ask Gap for the elements without gap having
> to compute them all first?

If you don't need to keep the single vectors, then there is a very easy way
to speed up the procedure. Replace your code by:

     v:=[1,2,3,4]; # only here allocate space for list
     for a in field do
       v[1]:=a;
       for b in field do
	 v[2]:=b;
         for c in field do
	   v[3]:=c;
           for d in field do
	     v[4]:=d;
             (something)
           od;
         od;
       od;
     od;

This runs by magnitudes faster as new space for the list 'v' is not needed
to be allocated in every iteration. However in each iteration the old vector
'v' will be overwritten.
As a user might want to keep some (or all) of these vectors, the routines
provided by standard always create new lists to avoid otherwise possible
side-effects.

This (faster) code might be suitable for your purposes, but keep in mind,
that for storing certain vectors, you cannot use

Add(store,v);

as contents will be overwritten (the same space is used for creating other
vectors), but you have to use

Add(store,ShallowCopy(v));

To get an independent copy of the vector, which will not be overwritten
later.

In a slight disgression from the original question I'd also like to remark,
that we are currently planning to introduce a generic scheme for enumerating
algebraic objects. This would allow you to use something like a single for-loop
to run through all elements of an object ('Iterator').
Similarly, functions to create a bijection between the object and a (subset
of the) integers will be provided, assigning each object a number and each
number an object ('Enumerator'). Thus an iterator can be regarded as a loop
over a subset of the integers, automatically invocing an enumerating
function.
The use of enumerators also helps to store larger sets of elements, as
usually a number takes much less storage space than group elements. As
usual this gain in memory has to be paid with runtime for the convcersion
process.

In the case of vectorspaces iterators as well as enumerators
would again create new elements, leading to the same memory allocation
problem again.

> Thanks,

You're welcome,

Alexander

--     Alexander Hulpke, Lehrstuhl D f"ur Mathematik, RWTH, 52056 Aachen,
       ahulpke@bert.math.rwth-aachen.de     ,
until April '95: Concordia University, Montreal, Canada
		 hulpke@abacus.concordia.ca         



From luebeck@euterpe.iwr.uni-heidelberg.de Wed Apr 26 10:03:00 1995
Date:         Wed, 26 Apr 95 10:03:00 +0200
From:         "Frank Luebeck" <luebeck@euterpe.iwr.uni-heidelberg.de>
Subject:      Loops and iterators

Dear GAP-Forum,

I  have  written some  time  ago an example  of an "iterator"-function
which I use in my programs.

Since these functions  may be useful for  other GAP-users too,  I have
put them into a file named 'IRTransversal.g', added some documentation
and  copied   this    file   to   ftp.math.rwth-aachen.de,   directory
pub/incoming.

Here is the documentation part of this file:
##  
##  This file  contains GAP-functions for  looping through a list of right
##  coset representatives for a  permutation  group  modulo some  subgroup
##  (which may be trivial), but without producing such a list.
##
##  The two functions to use are  called  'IterativeRightTransversal'  and
##  'NextIRT'.
##  
##  Let g be a permutation group in GAP and u a subgroup of g.  The output
##  of 'IterativeRightTransversal(g,u)'  is  a  record <IRT>  which mainly
##  contains   the stabilizer chain   of the  bigger  group.   The call of
##  'NextIRT(<IRT>)' produces a  new coset representative  as long as  the
##  record component <IRT>.more equals 'true'.
##  
##  The easiest way to understand the usage may be to look at an example:
##  
##
##      gap> g:=Group((1,2,3,4),(1,2));
##      Group( (1,2,3,4), (1,2) )
##      gap> u:=Subgroup(g,[(1,2),(3,4)]);        
##      Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2), (3,4) ] )
##      gap> irt:=IterativeRightTransversal(g,u);;
##      gap> while irt.more do Print(NextIRT(irt),"\n"); od;
##      ()
##      (2,4,3)
##      (1,4,2,3)
##      (2,3,4)
##      (1,4)
##      (1,2,3,4)
##      gap> irt.more;
##      false
##      gap> NextIRT(irt); # from now always the last element is returned:
##      (1,2,3,4)
##      gap> 
##
##  (OK, this  is  example is not  very  interesting because  in this case
##  'irt' is bigger than the output of 'RightTransversal'.)
##  

I'm anxious  to know how  such constructs will  be realized  in future
versions of GAP.

Best regards,
  Frank Luebeck



From joachim.neubueser@math.rwth-aachen.de Thu Apr 27 19:47:00 1995
Date:         Thu, 27 Apr 95 19:47:00 +0200
From:         "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Subject:      Re: GAP and Wheel Systems

Dear colleagues,

Last Monday a message from Greg Cheak

  I'm  curious if  anyone has  worked  with  systems known as  covers or
  "Wheel Systems". It would  seem that GAP  is  well suited for  working
  with these systems, however,  being new to  the program I am not quite
  sure how to  go about it. It appears  that there are several different
  ways to  "slice and dice" a   set in GAP.  I'm curious  what functions
  would be most suited for these types of constructions?

appeared  in the GAP-forum. I  have  waited until  today if from  some
discussion  of it in  the forum I could   learn silently what a "Wheel
System" is without having to betray my ignorance. However since nobody
reacted and since in  our group in Aachen I   found nobody either  who
could educate me,  I dare to infer  that the notion  is perhaps not so
widely known that I make an absolute  fool of myself, admitting that I
do not know it.  Could you  explain it to  me (and perhaps other forum
members as well), Greg?

By the way, what affiliation does 'interramp.com' indicate?

Thanks for some explanation.    Joachim Neubueser



From frank.celler@math.rwth-aachen.de Thu May  4 13:33:00 1995
Date:         Thu, 04 May 95 13:33:00 WET
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      Bug in 'CoprimeComplement'

Dear Forum,

there is a bug in 'CoprimeComplement', such that the function sometimes
returns a non-complement.  A temporary fix is to set GS_LIMIT := 1 before
using 'CoprimeComplement', 'Complement', or 'Complementclasses'.

sorry for any inconvenience
  Frank



From bamerz@okcins.okanagan.bc.ca Tue May  9 13:04:00 1995
Date:         Tue, 09 May 95 13:04:00 -0700
From:         "Bruce Merz" <bamerz@okcins.okanagan.bc.ca>
Subject:      Obtaining the gap manual.

I was attempting to download the gap manual from the http site:
www.math.rwth.aachen-de:8000/GAP/
while using Mosaic-Netscape.  It seems that I can only print the manual
section by section.  I was wondering if there was an easier way to 
print the manual.  The method I mentioned would involve me being present
the entire time to select each new section, and then print it.  Is
there perhaps a file which is the entire manual itself?  Then I could
perhaps choose the command to print it, and I could go away while it
prints out the entire manual (which would probably be a day or two of
printing).  

Do you have any suggestions for an easy obtaining of the manual in
paper form?  If so, please write me back.

Thank you.

Bruce Merz
mathematical research assistant at OUC, Kelowna, B.C., Canada



From martin.schoenert@math.rwth-aachen.de Wed May 10 13:33:00 1995
Date:         Wed, 10 May 95 13:33:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: Obtaining the gap manual.

Bruce Merz wrote in his message of 1995/05/09

    I was attempting to download the gap manual from the http site:
    www.math.rwth.aachen-de:8000/GAP/
    while using Mosaic-Netscape.  It seems that I can only print the manual
    section by section.  I was wondering if there was an easier way to 
    print the manual.

The easiest way to print the manual is to get the TeX DVI file from
'ftp://ftp.math.rwth-aachen.de/pub/gap/split/dvi3r4p1.zoo' and the
'unzoo' extractor from 'ftp://ftp.math.rwth-aachen.de/pub/gap/unzoo.c'.
Compile 'unzoo.c', use it to extract the DVI file from 'dvi3r4p1.zoo',
and print the it according to the local customs for printing DVI files.

If you want to run the manual through TeX yourself, get the LaTeX source
from 'ftp://ftp.math.rwth-aachen.de/pub/gap/split/doc3r4p1.zoo'.  Note
that the Manual is 1100 pages long, so you may have trouble running it
through small versions of TeX on PCs and MACs.

The HyperText version you were reading is derived from this manual.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From rosebro@math.uni-frankfurt.de Wed May 10 14:51:00 1995
Date:         Wed, 10 May 95 14:51:00 +0200
From:         "Stephan Rosebrock" <rosebro@math.uni-frankfurt.de>
Subject:      GAP for Linux

Hi Forum,

   did anybody compile GAP for linux yet? Where can I get this?

Best regards,
Stephan Rosebrock



------------------------------------------------------------------
Stephan Rosebrock       rosebrock@mathematik.uni-frankfurt.d400.de
                        rosebro@math.uni-frankfurt.de

Fachbereich Mathematik; Johann Wolfgang Goethe-Universitaet
                        Postfach 11 19 32; 60054 Frankfurt; Germany



From sal@dcs.st-andrews.ac.uk Wed May 10 09:16:00 1995
Date:         Wed, 10 May 95 09:16:00 +0100
From:         "Steve Linton" <sal@dcs.st-andrews.ac.uk>
Subject:      Re: Obtaining the gap manual.

Bruce Merz asked:

> 
> I was attempting to download the gap manual from the http site:
> www.math.rwth.aachen-de:8000/GAP/
> while using Mosaic-Netscape.  It seems that I can only print the manual
> section by section.  I was wondering if there was an easier way to 
> print the manual.  The method I mentioned would involve me being present
> the entire time to select each new section, and then print it.  Is
> there perhaps a file which is the entire manual itself?  Then I could
> perhaps choose the command to print it, and I could go away while it
> prints out the entire manual (which would probably be a day or two of
> printing).  
> 
> Do you have any suggestions for an easy obtaining of the manual in
> paper form?  If so, please write me back.
> 

The hypertext manual that yuo were browsing is derived from the
original LaTeX GAP manual. The LaTeX source can be fetched by FTP
from ftp://ftp.math.rwth-aachen.de/pub/gap/split/doc3r4p1.zoo and
the LaTeX output (DVI) from
ftp://ftp.math.rwth-aachen.de/pub/gap/split/dvi3r4p1.zoo.

You will need the unzoo program, if you do not have it it can be
obtained from 

ftp://ftp.math.rwth-aachen.de/pub/gap/unzoo.c

If you have already obtained a full GAP installation  then the LaTeX
source and DVI files are included in the doc subdirectory of the GAP
directory tree.

How you arrange to print from the DVI files very much depends on
your local setup. Beware that the manual is some 1100 pages long.
Some PC and Macintosh implementations of TeX are actually unable to
format a document of this length.

	Steve Linton



From frank.celler@math.rwth-aachen.de Thu May 11 10:43:00 1995
Date:         Thu, 11 May 95 10:43:00 +0100
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      Loops and Iterators

Dear GAP-Forum,

Frank Luebeck wrote:

    I'm anxious to know how such constructs [iterators] will be realized in
    future versions of GAP.

All I can say is that GAP 4.1 will support Iterators, for example allowing
such constructs as "for x in Group((1,2,3),(2,3)) do ... od", but details how
this is implemented are not yet fixed.

best wishes
  Frank



From frank.celler@math.rwth-aachen.de Fri May 12 09:41:00 1995
Date:         Fri, 12 May 95 09:41:00 +0100
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      RE: GAP for Linux

Dear Forum,

Stephan Rosebrock asked:

   did anybody compile GAP for linux yet? Where can I get this?

GAP will compile under Linux using GCC which is part of all standard
distributions of Linux.  All you need to ftp is the file

  ftp://ftp.math.rwth-aachen.de/pub/gap/gap3r4p1.zoo

(which will be replaced by

  ftp://ftp.math.rwth-aachen.de/pub/gap/gap3r4p2.zoo

in the near future) and

  ftp://ftp.math.rwth-aachen.de/pub/gap/unzoo.c

in case you don't have zoo.  The Readme in the first archive contains
information on how to compile GAP on a Unix system, you basically have
to unpacked the archive, cd into the directory "gap3r4p1/src" and type
"make ibm-i386-linux-gcc2".

best wishes
  Frank



From prohlep@konig.elte.hu Thu May 11 16:16:00 1995
Date:         Thu, 11 May 95 16:16:00 +0200
From:         "Peter Prohle" <prohlep@konig.elte.hu>
Subject:      Re: GAP for Linux

> 
> Hi Forum,
> 
>    did anybody compile GAP for linux yet? Where can I get this?
> 
> Best regards,
> Stephan Rosebrock
> 
Yes, I did. I work on a GAP implementation of the Knuth-Bendix
algorithm for groups using the LINUX environment (at home).
GAP over LINUX is reliable, and easy to compile and install.

Can I help you? Write me your problems directly to my address:
        PROHLEP@LUDENS.ELTE.HU
instead of yielding an extra load for the gap-forum.

I offer my help concerning GAP over LINUX to anybody else as well.

Best regards: Peter Prohle.



From barry@conway.math.unb.ca Mon May 15 10:58:00 1995
Date:         Mon, 15 May 95 10:58:00 -0300
From:         "Barry Monson" <barry@conway.math.unb.ca>
Subject:      Normalizer of a subset of a group

Dear Gap users:
     I wish to find the normalizer of a subset T  of a group G,
where T need not be a subgroup. For example, say

     G:= Group(a,b,c,d);        # a,b,c,d permutations,say

     T:= [a,d];                 # a subset of the generating set
                                # -- perhaps not quite a legitimate
                                # data structure, 
                                # but you get the idea 
Note that T is not the subgroup generated by a,d . Nevertheless, I want

                     N:= Normalizer in G of T 

     How do I proceed?  My apologies if I have missed something obvious
in the documentation. Thanks for your advice.

Barry Monson.
(bmonson@unb.ca)



From sal@dcs.st-andrews.ac.uk Mon May 15 16:10:00 1995
Date:         Mon, 15 May 95 16:10:00 +0100
From:         "Steve Linton" <sal@dcs.st-andrews.ac.uk>
Subject:      Re: Normalizer of a subset of a group

Barry Monson asks

>      I wish to find the normalizer of a subset T  of a group G,
> where T need not be a subgroup. For example, say
> 
>      G:= Group(a,b,c,d);        # a,b,c,d permutations,say
> 
>      T:= [a,d];                 # a subset of the generating set
>                                 # -- perhaps not quite a legitimate
>                                 # data structure, 
>                                 # but you get the idea 
> Note that T is not the subgroup generated by a,d . Nevertheless, I want
> 
>                      N:= Normalizer in G of T 
> 
>      How do I proceed?  My apologies if I have missed something obvious
> in the documentation. Thanks for your advice.
> 

One possibility is to use 

T := Set(T);
Stabilizer(G,T,OnSets);

	Steve



From fharou@laplace.univ-rennes1.fr Mon May 15 16:11:00 1995
Date:         Mon, 15 May 95 16:11:00 +0100
From:         "Frank Harou" <fharou@laplace.univ-rennes1.fr>
Subject:      help!

I would like computing the rank of K/[K,K] where K is the kernel of a morphisme \psi defined as follow :

        un:=Z(7)^0;
        zero:=0*Z(7);

        gk1:=[[1,1],[0,1]];
        gk2:=[[1,0],[-E(3),1]];

        gi1:=[[un, un], [zero, un]];
        gi2:=[[un, zero], [2*un, un]];

        GammaK:=Group([[1,1],[0,1]], [[1,0],[-E(3),1]]);
        GammaI:=Group(gi1,gi2);

        psi:=GroupHomomorphismByImages(GammaK,GammaI,
                        GammaK.generators,GammaI.generators);
   
Does a trick exist to avoid the instruction kernel(psi) ?



From dfh@maths.warwick.ac.uk Tue May 16 12:22:00 1995
Date:         Tue, 16 May 95 12:22:00 +0100
From:         "Derek Holt" <dfh@maths.warwick.ac.uk>
Subject:      Re:  help!

Frank Harou writes:

> 
> I would like computing the rank of K/[K,K] where K is the kernel of a morphisme \psi defined as follow :
> 
>         un:=Z(7)^0;
>         zero:=0*Z(7);
> 
>         gk1:=[[1,1],[0,1]];
>         gk2:=[[1,0],[-E(3),1]];
> 
>         gi1:=[[un, un], [zero, un]];
>         gi2:=[[un, zero], [2*un, un]];
> 
>         GammaK:=Group([[1,1],[0,1]], [[1,0],[-E(3),1]]);
>         GammaI:=Group(gi1,gi2);
> 
>         psi:=GroupHomomorphismByImages(GammaK,GammaI,
>                         GammaK.generators,GammaI.generators);
>    
> Does a trick exist to avoid the instruction kernel(psi) ?
> 

My feeling is that this is difficult without more information on the group
GammaK. It is difficult to carry out nontrivial calculations in an infinite
matrix group without further information, since all one can do is multiply
elements and check for equality.
Of course, since the image of your map psi has finite order (336), one could
work out Schreier generators for the kernel K, but there would be 337 of
those, and it might be hard to do much with them.
The most satisfactory form would be a presentation of GammaK on
the defining generators. I know a presentation of the Bianchi group SL_2(O_3),
where O_3 is the ring Z[E(3)], but that has more generators, and Gammak
may well be a proper subgroup of SL_2(O_3).

Derek Holt.



From rassist@oksw53.okanagan.bc.ca Tue May 16 07:36:00 1995
Date:         Tue, 16 May 95 07:36:00 -0700
From:         "assist" <rassist@oksw53.okanagan.bc.ca>
Subject:      Some "Windows" questions...

First off, I was wondering whether Gap is available for Windows on a PC.  
>From what I can gather with our copy, obtained from ftp://archives.math.utk.edu,it is simply EXECUTABLE from Windows.  Is this correct?  If it is not available
for Windows yet, when do the creators think they will have it ready for Windows?My second question is very related.  When executing 'gap.bat' from Windows in 
the "gap3r4p1\bin" directory, gap compiles, but just before it gives the "gap>" 
prompt, it gives the error message "Error, can't read from "/RUN".  What is 
"/RUN"?  Is it something I should be worried about?  Do you know how I can 
fix the error?  

One last question...  When attempting to install Gap on our IBM-486 machine,
with DOS 6.2 and Windows 3.1, the computer gave a message which said that
the CPU must be in REAL mode, and that extended memory shouldn't be disabled.
So I rebooted the machine and held SHIFT at the appropriate time so that it
wouldn't execute the AUTOEXEC.bat file.  Then Gap was installed without any
problems.  Further more, I can RUN Gap without having to do the SHIFT trick.
Can you tell me what was happening there?  Do I have an old version of Gap?
It is Version 3.4.

Thank you for your help.

Bruce



From heiko.theissen@math.rwth-aachen.de Wed May 17 15:31:00 1995
Date:         Wed, 17 May 95 15:31:00 WET
From:         "Heiko Theissen" <Heiko.Theissen@Math.RWTH-Aachen.DE>
Subject:      Re: Normaliser of a subset of a group

Dear GAP users,

Barry Monson  wants to compute the  normaliser in  a permutation group
<G> of a sub*set*  <T>. There is  no function for this special purpose
built into GAP. However, there are several more general functions that
can be applied to this problem.

*** Numbers 1 to 3 apply to an arbitrary group <G>. ***

1. <G> acts by  conjugation on the  union of the conjugacy classes  of
the elements in <T>, and in  this representation the set normaliser is
simply a    set stabiliser. To  convert  the  result back  to  <G>, an
operation homomorphism is used.

    classes := List( T, t -> Orbit( G, t ) );
    newdomain := Union( classes );
    newT := Set( List( T, t -> Position( newdomain, t ) ) );
    O := Operation( G, newdomain );
    hom := OperationHomomorphism( G, O );
    S := Stabilizer( O, newT, OnSets );
    N := PreImage( hom, S );  # <N> is the set stabilizer of <T>

This  method has several bottlenecks, however.   First, if the classes
are  large the  domain will  take  up  much storage   space; also  the
conversion done  by 'Operation' will  take some time since it requires
applying every generator  of <G> to  every element of  <newdomain> and
finding  the result in the list  <newdomain> again. Second, the degree
of <O> will be the size of <newdomain> --- probably much more than the
degree of  <G>, and this will  slow down 'Stabilizer'. Third,  the set
stabilizer routine is  still a backtrack, and  the set stabilizer is a
really hard problem, so it may not be faster than methods below.

As an example, take <G>  the Mathieu group of degree  11 and <T> a set
containing  one element from each  of the two  8-classes. Then the set
stabilizer on   the 1980 elements from both    8-classes takes about 6
minutes and the preimage under   the operation homomorphism takes  one
more minute. (Your timing may vary.)

2. Steve Linton has suggested the simplest solution, namely to use

    T := Set( T );
    Stabilizer( G, T, OnSets );

At the   present  stage,  this setting (operation    on  sets of group
elements)  causes  GAP to  invoke  the  all-purpose stabilizer routine
which calculates  the orbit and  applies  Schreier's subgroup theorem.
Since the elements of the orbit are  sets of group elements, the orbit
can  become quite large:  in the  example of  the last  paragraph, the
orbit has length 990 and the calculation takes about 30 seconds.

While method 1 requires an orbit whose length is  the sum of the class
lengths, this approach  involves an  orbit  whose length  can be  much
greater, so  in other examples  with more than  two elements in <T> it
will probably be slower than method 1.

However, the set normaliser must preserve certain invariants (like the
order) of the elements, so  it may be possible  to partition <T>  into
smaller sets <T_i> such that  the set normaliser  of  <T> is just  the
intersection  of the  set  normalisers  of   <T_i>. This  leads  to an
iterative method.

3. With both methods, the computation will be faster if the normaliser
of <T> is computed not in <G> but instead in a smaller group <N> which
still contains the normaliser. Such  a smaller group is, for  example,
the normaliser of the subgroup  generated by <T>,  so in method 2  one
could write

    T := Set( T );
    N := Normalizer( G, Subgroup( G, T ) );
    Stabilizer( N, T, OnSets );

One could also calculate normalisers of subgroups generated by all <t>
in  <T> which  have a   certain order (cf.   the <T_i>  from the  last
paragraph) and intersect these various normalisers.

*** Numbers 4 and 5 only apply if <G> is a permutation group. ***

4.  The  function 'PermGroupOps.SubgroupProperty(   G,  prop  )'  will
calculate the fulfilling   subgroup of any property  <prop>,  provided
that the fulfilling set *is* a subgroup. <prop> must be a GAP function
that returns 'true' or 'false', so in this case one could write

    T := Set( T );
    PermGroupOps.SubgroupProperty( G, g -> OnSets( T, g ) = T );

This is much faster than the previous methods, it takes only 7 seconds
in the M_11-example.

5. 'PermGroupOps.SubgroupProperty'   can be  given a  third  argument,
which must be a subgroup of the  subgroup in question. This will speed
up the   backtrack   search  which 'SubgroupProperty'  performs.   For
example,  the centraliser of the  subgroup generated by  <T> is such a
subgroup, and it can be computed as

    C := Centralizer( G, Subgroup( G, T ) );
    PermGroupOps.SubgroupProperty( G, g -> ..., C );

If the elements of <T> all have distinct  orders, then <C> is equal to
the set normaliser.

If 'PermGroupOps.SubgroupProperty'  is called  with the normaliser <N>
instead of <G>  and with the  centraliser  <C> as  known subgroup, the
computation of the M_11-example takes less than half a second.

Hope this helps, Heiko Theissen

---------------------------------------------------------------------------
Heiko Thei{\ss}en,    Heiko.Theissen@Math.RWTH-Aachen.DE,    +49 241 804551
Lehrstuhl D f\"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From fharou@laplace.univ-rennes1.fr Wed May 17 15:00:00 1995
Date:         Wed, 17 May 95 15:00:00 +0200
From:         "Frank Harou" <fharou@laplace.univ-rennes1.fr>
Subject:      Help

I can reformulate more precisely my problem :

	first, I have an exact sequence 

	0 -> K -> G -> H -> 0

	H is PSL(2,Z/7Z) so order(H) is 168.
	G is < x,y | x^-1 * y * x * y^-1 * x * y * x^-1 * y^-1 * x >

I try to find a presentation of K for computing the rank of K/[K,K].
I have a representation of G in PSL(2,O_3) and the homomorphism
G -> H for this presentation but it seem to give no more information because
the order of G is infinite. What could I do ? 



From dfh@maths.warwick.ac.uk Wed May 17 16:03:00 1995
Date:         Wed, 17 May 95 16:03:00 +0100
From:         "Derek Holt" <dfh@maths.warwick.ac.uk>
Subject:      Re:  Help

F. Harou writes:

> 
> I can reformulate more precisely my problem :
> 
> 	first, I have an exact sequence 
> 
> 	0 -> K -> G -> H -> 0
> 
> 	H is PSL(2,Z/7Z) so order(H) is 168.
> 	G is < x,y | x^-1 * y * x * y^-1 * x * y * x^-1 * y^-1 * x >
> 
> I try to find a presentation of K for computing the rank of K/[K,K].
> I have a representation of G in PSL(2,O_3) and the homomorphism
> G -> H for this presentation but it seem to give no more information because
> the order of G is infinite. What could I do ? 
> 

The map you gave yesterday was onto SL(2,7), not PSL(2,7), and with the
given generators it does not appear to be a homomorphic image of G.

gap>         un:=Z(7)^0;
gap>         zero:=0*Z(7);
gap> gi1:=[[un, un], [zero, un]];
gap>          gi2:=[[un, zero], [2*un, un]];
gap> x:=gi1;; y:=gi2;;
gap> x^-1 * y * x * y^-1 * x * y * x^-1 * y^-1 * x;
[ [ Z(7)^3, Z(7)^2 ], [ Z(7)^5, Z(7) ] ]

The value of the relator is not the identity in the image group.
If you tell me the correct images of x and y in G in PSL(2,7), then I can
show you how to calculate a presentation of the kernel K, and hence K/[K,K].

Roughly, you work out the map of G onto the regular permutation of PSL(2,7),
and use that to form a coset table for G, from which you can get a
presentation of the subgroup (which is the stabiliser of a point in the
regular permutation representation - i.e. K).

Derek Holt.



From werner.nickel@math.rwth-aachen.de Wed May 17 17:13:00 1995
Date:         Wed, 17 May 95 17:13:00 WET
From:         "Werner Nickel" <Werner.Nickel@Math.RWTH-Aachen.DE>
Subject:      Re: help!

Dear GAP-Forum,

Frank Harou writes in his first email

    I would like computing the rank of K/[K,K] where K is the kernel of a
    morphisme \psi defined as follow :

           un:=Z(7)^0;
           zero:=0*Z(7);

           gk1:=[[1,1],[0,1]];
           gk2:=[[1,0],[-E(3),1]];

           gi1:=[[un, un], [zero, un]];
           gi2:=[[un, zero], [2*un, un]];

           GammaK:=Group([[1,1],[0,1]], [[1,0],[-E(3),1]]);
           GammaI:=Group(gi1,gi2);

           psi:=GroupHomomorphismByImages(GammaK,GammaI,
                           GammaK.generators,GammaI.generators);

    Does a trick exist to avoid the instruction kernel(psi) ?

GAP cannot  compute  directly  the  kernel of <psi>  for  the infinite
matrix group GammaK.  To be  able to compute  with this group, we will
first convert it to a finitely presented group.

Let  O = Z[E(3)]  be the   ring of algebraic  integers  in Q[E(3)].  A
presentation  for SL(2,O) together  with  representing matrices can be
found in

    R.G. Swan: Generators and Relations for certain Special Linear Groups
               Advances in Mathematics 6, 1-77 (1971).

The presentation for SL(2,O) is as follows:

    gap> F5 := FreeGroup( 5 );
    gap> T := F5.1; U := F5.2; J := F5.3; L := F5.4; A := F5.5;
    gap> SL2O := F5 / [
    >        Comm( T, U ),
    >        J^2,  L^3,
    >        T^L * U * T,
    >        U^L / T,
    >        Comm( T, J ), Comm( U, J ), Comm( L, J ), Comm( A, J ),
    >        A^2 / J,  (A*L)^2 / J,  (T*A)^3 / J,  (U*A*L)^3 / J ];;
    gap> T := SL2O.1;; U := SL2O.2;; J := SL2O.3;; L := SL2O.4;; A := SL2O.5;;

The generators correspond to the following matrices:

    gap> T_m := [ [      1,      1 ], [      0,      1 ] ];;
    gap> U_m := [ [      1,   E(3) ], [      0,      1 ] ];;
    gap> J_m := [ [     -1,      0 ], [      0,     -1 ] ];;
    gap> L_m := [ [ E(3)^2,      0 ], [      0,   E(3) ] ];;
    gap> A_m := [ [      0,     -1 ], [      1,      0 ] ];;

>From these we see that the subgroup GammaK is  generated by T and U^A.
We may now  try to use the modified  Todd-Coxeter to compute the index
of SL(2,O) over GammaK as well as a presentation for GammaK.

    gap> P := PresentationSubgroupMtc( SL2O, Subgroup(SL2O,[T,U^A]) );;
    gap> GK := FpGroupPresentation( P );;

GK is now a finitely  presented group isomorphic  to the group  GammaK
defined by  Frank Harou.  The  presentation has two generators and one
relator:

    gap> Print( GK.generators, "\n", GK.relators, "\n" );
    [ _x1, _x2 ]
    [ _x1^-1*_x2*_x1*_x2^-1*_x1*_x2*_x1^-1*_x2^-1*_x1*_x2^-1 ]

Just to be sure, we check if the matrix  generators for GammaK satisfy
the relations for GK.  There is only one relation to check:

    gap> MappedWord( GK.relators[1], GK.generators,
    >                [ [[1,1],[0,1]], [[1,0],[-E(3),1]] ] );
    [ [ 1, 0 ], [ 0, 1 ] ]

We now construct the homomorphism psi:

    gap> gi1 := [[1,1],[0,1]] * Z(7)^0;;
    gap> gi2 := [[1,0],[2,1]] * Z(7)^0;;
    gap> GammaI := Group( gi1, gi2 );;
    gap> psi := GroupHomomorphismByImages( GK, GammaI,
    >               GK.generators, GammaI.generators );;

It turns out that psi is not a homomorphism:

    gap> IsHomomorphism( psi );
    false

This is because <gi1> and <gi2> do not satisfy the relation for GK:

    gap> MappedWord( GK.relators[1], GK.generators,
    >                [ gi1, gi2 ] );
    [ [ Z(7)^2, Z(7)^2 ], [ Z(7)^3, Z(7) ] ]

The  ``homomorphism''  <psi> defined by    Frank Harou  appears to  be
induced by the map

     O    --->  GF(7),
   -E(3)  |-->  2

which does not define a ring honomorphism.  If we use the ring
homomorphism 

     O   --->  GF(7)
   E(3)  |-->  2

instead, then the induced <psi> is indeed a homomorphism:

    gap> gi1 := [[1,1],[0,1]] * Z(7)^0;;
    gap> gi2 := [[1,0],[-2,1]] * Z(7)^0;;
    gap> GammaI := Group( gi1, gi2 );;
    gap> psi := GroupHomomorphismByImages( GK, GammaI,
    >               GK.generators, GammaI.generators );;
    gap> IsHomomorphism( psi );
    true

Compute the kernel. This takes a little while.

    gap> K := Kernel( psi );;

Compute the abelian invariants.

    gap> AbelianInvariants( K );
    [ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0 ]

Voila!  The  result of    the last  command  shows that    K/[K,K]  is
isomorphic to the direct  product of a cyclic  group of order 7 and 48
copies of the integers.

Note that we   could also use   the ring map E(3)  |-->  4.  This also
induces   a homomorphism  <psi>.    This homomorphism  has a different
kernel, but this kernel has the same abelian invariants.

Werner Nickel.

PS.: I  have just received   Frank  Harou's second  mail to  the  GAP-
Forum. He writes:

    I can reformulate more precisely my problem :
    
    	first, I have an exact sequence 
    
    	0 -> K -> G -> H -> 0
    
    	H is PSL(2,Z/7Z) so order(H) is 168.
    	G is < x,y | x^-1 * y * x * y^-1 * x * y * x^-1 * y^-1 * x >

The relator here differs slightly from the one GAP has obtained :
                     x^-1 * y * x * y^-1 * x * y * x^-1 * y^-1 * x * y^-1.

    I try  to find  a presentation of  K   for computing the   rank of
    K/[K,K].  I have a representation of G in PSL(2,O_3) and the
    homomorphism  G -> H for this presentation but it seem to give no
    more information because the order of G is infinite. What could I
    do ?  

The kernel of the homomorphism to PSL(2,7) can be obtained by a slight
modification of the approach above.



From barry@conway.math.unb.ca Wed May 17 14:24:00 1995
Date:         Wed, 17 May 95 14:24:00 -0300
From:         "Barry Monson" <barry@conway.math.unb.ca>
Subject:      Thanks for Normaliser of a subset of a group

Thanks! I am proceeding with suggestions from various
contributors.

Barry Monson.



From fharou@laplace.univ-rennes1.fr Thu May 18 06:16:00 1995
Date:         Thu, 18 May 95 06:16:00 +0100
From:         "Frank Harou" <fharou@laplace.univ-rennes1.fr>
Subject:      Thanks for all

	I thanks a lot for all informations. It's the first time that I work
with such a problem and your help is very usefull. 
				
				Franck Harou



From martin.schoenert@math.rwth-aachen.de Fri May 19 11:14:00 1995
Date:         Fri, 19 May 95 11:14:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: Some "Windows" questions...

Bruce Merz asked in his message of 1995/05/16

    First off, I was wondering whether Gap is available for Windows on a PC.
    From what I can gather with our copy, obtained from
    ftp://archives.math.utk.edu,it is simply EXECUTABLE from Windows.  Is
    this correct?  If it is not available for Windows yet, when do the
    creators think they will have it ready for Windows?

We distribute an executable for DOS.  Like most well behaved DOS
programs, it does run under Windows, i.e., it is executable from Windows.
But it runs only in a DOS box of course, so it doesn't present nice
scrollbars, menues, and so on.  Especially it does not offer the features
that XGAP offers X Windows users.  Somebody here is working on a Windows
version, but it is too early to say when this will become available.

Bruce continued

    My second question is very related.  When executing 'gap.bat' from
    Windows in the "gap3r4p1\bin" directory, gap compiles, but just before it
    gives the "gap>" prompt, it gives the error message "Error, can't read
    from "/RUN".  What is "/RUN"?  Is it something I should be worried about?
    Do you know how I can fix the error?

Somebody (probably Windows) is passing this argument '/RUN' to the
script.  The script passes it on to the GAP kernel.  The GAP kernel then
interprets it as the name of a file it should read.  Since no such file
exists, it tells you "Error, can't read from '/RUN'".  So you see, no
need to worry.  When you run GAP from within Windows, you should have
Windows directly call the executable ('gapdjg.exe'), not the script.  You
must of course instruct Windows to pass the appropriate arguments
(e.g., '-l <libdir>' and '-m <memory>').

Bruce continued

    One last question...  When attempting to install Gap on our IBM-486
    machine, with DOS 6.2 and Windows 3.1, the computer gave a message which
    said that the CPU must be in REAL mode, and that extended memory
    shouldn't be disabled.  So I rebooted the machine and held SHIFT at the
    appropriate time so that it wouldn't execute the AUTOEXEC.bat file.  Then
    Gap was installed without any problems.  Further more, I can RUN Gap
    without having to do the SHIFT trick.  Can you tell me what was happening
    there?  Do I have an old version of Gap?  It is Version 3.4.

This is not a problem with GAP, but with the 'unzoo' archive extactor.
It was compiled with an older version of the compiler.  The DOS extender
that came with this older version could not handle some configurations.
It could for example be that you started your 'EMM' memory manager
(this is usually started in 'config.sys') with the 'NOEMS' switch.
Since you managed to install GAP, you shouldn't worry about that anymore.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From martin.schoenert@math.rwth-aachen.de Wed May 24 19:51:00 1995
Date:         Wed, 24 May 95 19:51:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Upgrade for GAP 3.4 patchlevel 1 (V3R4P1) to patchlectl 2 (V3R4P2)

This is to announce  the availability of  the second upgrade for GAP 3.4.
This upgrade brings version 3 release 4  patchlevel 1 (V3R4P1) to version
3  release  4 patchlevel  2 (V3R4P2).   The priority   of this upgrade is
medium.  That means that you may choose to skip this upgrade if you  have
no problems with GAP V3R4P1 and don't want the new contributed packages.

This upgrade  fixes  all  reported  bugs.  All  those  bugs  were  either
harmless or impossible to miss.

This upgrade adds the Cohomology package by D.Holt, and the GUAVA package
by R.Baart, J.Cramwinckel, E.Roijackers.

This upgrade *does* change the kernel.  Thus you must recompile.

The upgrade is  *not* available as patch file.   Such a patch file  would
simply be too large (mostly because of the two contributed packages).

Because 'ftp' connections  between Aachen and  US/Canada sites are *very*
slow   for once the problem is   not in Aachen  ;-),  I would like to ask
USA/Canada users   to get the upgrade  fron  one  of the  mirror servers,
either  from  'ftp://archives.math.utk.edu:/software/multi-platform/gap/'
or from ftp://'ftp.mth.pdx.edu:/pub/math/gap/'.

Enjoy, Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From bamerz@okuc02.okanagan.bc.ca Wed May 24 10:38:00 1995
Date:         Wed, 24 May 95 10:38:00 -0700
From:         "Bruce Merz" <bamerz@okuc02.okanagan.bc.ca>
Subject:      About the XGap Package...

In Section 56.21 of the GAP 3.4 Manual, it is stated that XGap is 
written in C and the package can only be installed under UNIX running
X-Windows 11R5.  It is next mentioned that it has been tested on a
PC-386, among others.  I was wondering if it ready yet to install on 
a DOS running GAP.  If not, do you know when?  Also, are the packages
Vector Enumeration, ANU Sq, and NQ going to be available for DOS?

Thank you for any information.
Bruce



From bamerz@okuc02.okanagan.bc.ca Wed May 24 15:13:00 1995
Date:         Wed, 24 May 95 15:13:00 -0700
From:         "Bruce Merz" <bamerz@okuc02.okanagan.bc.ca>
Subject:      RE: Upgrade for GAP 3.4 patchlevel 1 (V3R4P1) to patchlectl 2 (V3R4P2)

Just wondering about how much the manual has changed.  More specifically,
I'm wondering whether the only change in the manual is the addition of
chapters explaining the 2 new packages, and consequently the index being
different... Or perhaps the page numbering is entirely different, and a
new copy of the entire manual is needed for the new update.

Other than that, thanks for the new update!!  It will be much appreciated,
especially the 2 new packages!

Bruce



From dfh@maths.warwick.ac.uk Thu May 25 11:42:00 1995
Date:         Thu, 25 May 95 11:42:00 +0100
From:         "Derek Holt" <dfh@maths.warwick.ac.uk>
Subject:      Re:  Upgrade for GAP 3.4 patchlevel 1 (V3R4P1) to patchlectl 2 (V3R4P2)

Re: New Cohomology Package in GAP 3.4.

Here is a brief summary of what this package can do - see the manual
chapter for details on the GAP functions. Any problems or questions about
this package should probably be directed to me.
I uses a Bourne Shell script, and so will presumably only work on UNIX machines.

Derek Holt (dfh@maths.warwick.ac.uk).



All of the functions require a finite permutation group  G  and a prime  p
as input.
Some of them require a finitely presented group  F  isomorphic to  G,
in which the generators correspond to those of  G.
Others require a finite dimensional KG-module M, where K is the finite field
of order  p, and M is defined by a list of matrices over K corresponding to
the generators of  G.

1. The p-component S_p of the Schur Multiplier (S = H_2(G) ) of G can be
computed (as a list of orders of the invariant factors).

2. Given F as above, a presentation of a covering group of S_p by  G can
be computed.

3. Given M as above, the dimensions of the first and second cohomology groups
H^1(G,M) and H^2(G,M) over K can be computed.

4. Given F and M as above, presentations of the extensions (split and nonsplit)
of M by G can be computed.



From martin.schoenert@math.rwth-aachen.de Thu May 25 13:03:00 1995
Date:         Thu, 25 May 95 13:03:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: Upgrade for GAP 3.4 patchlevel 1 (V3R4P1) to patchlectl 2 (V3R4P2)

I wrote about the second upgrade

    This upgrade  fixes  all  reported  bugs.  All  those  bugs  were  either
    harmless or impossible to miss.

It has been brought to my  attention that this  is not true.  There is at
least  one  bug (the one in  'CoprimeComplement'  mentioned in this forum
1995/05/04), that may produce incorrect (but plausible) results.

Consequently this upgrade  has *high* priority,  and we suggest  that you
upgrade, even if you were happy with GAP 3.4.1.

Sorry for the confusion.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From bamerz@okcins.okanagan.bc.ca Fri May 26 10:58:00 1995
Date:         Fri, 26 May 95 10:58:00 -0700
From:         "Bruce Merz" <bamerz@okcins.okanagan.bc.ca>
Subject:      Trouble with "?_______".

I have recently installed the latest update, gap3r4p2, but I am having
trouble with the help feature.  Whenever I type in, for example, ?group
or ?CHR or ?'whatever topic...' and hit enter, it displays the topic
just fine, but when it is done giving me the text on the topic, it
gives me the "gap>" prompt but automatically types in the help statement
I just issued again.  Then it just displays it over and over again in the
same fashion.  If it is a long help, it gives me the "-- <space> for more --"
prompt, but after it is fully done the topic it displays it once again.
I have to hit "CTRL-C" or "break" to make it stop, but then it ejects
me from the program.  Can you help?

If it helps, it is installed on a 486 IBM-PC with DOS 6.2 and Windows 3.1.
Also, the previous version, gap3r4
p1, didn't do this at all.  I am 
currently downloading doc3r4p2 to reinstall just that part of it.  I am
doing this because of some experimenting I did, like transferring some
files from gap3r4p1 to gap3r4p2 untill it worked again.  DOC seems to 
contain the problem.   

Thanks for any help!  I also ask the gap-forum to please excuse all the 
software/technical questions I have been asking lately.  Thank you.

Bruce



From joachim.neubueser@math.rwth-aachen.de Mon May 29 08:57:00 1995
Date:         Mon, 29 May 95 08:57:00 +0200
From:         "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Subject:      subscription/unsubscription

Dear Forum members,

Recently  we  had two  messages 'unsubscribe  gap-forum'  sent  to the
forum, at least in  the first case just because  of a change of e-mail
address.  May I remind all forum  members, who want to unsubscribe for
whatever reason, that they should *not* send the message

unsubscribe gap-forum 

as well as (in  case you want   to subscribe under a different  e-mail
address) a message

subscribe gap-forum <your full name>

to the forum since  it  then goes to  all  forum members but has   not
automatically the wanted effect.

These messages *should* be sent to the address

miles@math.rwth-aachen.de

The requests  will then be fulfilled automatically.

Thank you,    Joachim Neubueser



From hoefling@mat.mathematik.uni-mainz.de Tue May 30 11:57:00 1995
Date:         Tue, 30 May 95 11:57:00 +0100
From:         "Burkhard Hoefling" <hoefling@mat.mathematik.uni-mainz.de>
Subject:      executables of GAP 3.4.2 for the Apple Macintosh

Dear GAP forum,

I have just uploaded the binaries file for GAP for the Apple Macintosh
into ftp.math.rwth-aachen.de/pub/incoming; its name is

bin3r4p2-Mac-68K-SyC.sea.bin

It should be downloaded as *binary*, since the file is in MacBinary
format. If you download from an Apple Macintosh, the ftp program
should be able to decode MacBinary on the fly. Otherwise, use any of
the standard file compression/decompression utilities (such as
Stuffit Lite, Stuffit expander, MacBinary) to decode the file. Then
launch the self-extracting archive. This file contains

- the GAP application
- the unzoo application
- a short description on the peculiarities
  of the Macintosh port of GAP

I have sent the documentation of the changes I have made to the GAP
3.4.2 sources to the GAP forum yesterday (but it seems not to have
appeared yet).

I hope you enjoy GAP for the Macintosh.

Burkhard Hoefling.



From frank.celler@math.rwth-aachen.de Tue May 30 13:55:00 1995
Date:         Tue, 30 May 95 13:55:00 WET
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      GAP 3r4p2 under MS-DOS

Dear Forum,

the archive "bin3r4p2-ibm-i386-dos.zoo" from May 18th of length 230578
bytes on ftp.math.rwth-aachen.de contained a corrupted GAP binary for
MS-DOS in which the help function didn't work.

I have replaced the archive with a new one.  The new archive is from
May 30th and 230994 bytes long.  The source code is not affected, so
you can either ftp the new executable or create a working GAP
executable by recompiling GAP using DJGPP and the source code
distributed in "gap3r4p2.zoo".

sorry for any inconvenience
  Frank



From hoefling@mat.mathematik.uni-mainz.de Mon May 29 11:43:00 1995
Date:         Mon, 29 May 95 11:43:00 +0100
From:         "Burkhard Hoefling" <hoefling@mat.mathematik.uni-mainz.de>
Subject:      Compiling GAP 3.4.2 on the Apple Macintosh

Dear GAP forum,

although not yet officially announced, the distribution of GAP 3.4.2
contains an almost working port of GAP for the Apple Macintosh with
the Symantec Think C / C++ compilers, based on the Macintosh port I
sent to Aachen at the end of last year (which, in turn, relies in
part on the MPW port by Dave Bayer). This Macintosh port fixes some
of the problems with the MPW port. In particular, it offers command
line editing as described in the manual, or, alternatively, a Mac-like
user interface which allows copying and pasting from/to other
applications. Also, it can handle more than 8 Megabyte of workspace
and allows to run GAP in the background.

Unfortunately, some bugs have crept into the Symantec C port, as
distributed with GAP 3.4.2, so I will briefly describe how to fix
them and how to compile GAP 3.4.2 with the Symantec C++ 7.0 compiler.

Note that unzoo *is* available for the Macintosh ( Dave Bayer's version
is in the GAP 3.4.1 distribution; on the Aachen server ftp.math.rwth-aachen.de
, it is in the directory pub/gap-3.4/bin).

If you have any questions, bug reports or suggestions, please don't
hesitate to contact me. I would also like to know who is really
interested in a Macintosh port of GAP, in order to find out whether it
is worth while spending too much time on improvements.


Burkhard H"ofling, University of Mainz, Germany 
(e-mail: hoefling@mat.mathematik.uni-mainz.de).


1. Code overflow error
======================

If you compile GAP, you will get a code overflow error when compiling
the file COSTAB.C. This is due to the size of the  variables dedgen
and dedcos, defined in COSTAB.C. My solution, part  of which has
already been incorporated into the file SYSTEM.C, is to  allocate
these variables on the system heap. In order to do this, the  file
COSTAB.C has to be modified as follows: Change the lines

static long           dedgen [40960];   /* deduction list keeping gens     */
static long           dedcos [40960];   /* deduction list keeping cosets   */
static long           dedSize = 40960;  /* size of deduction list buffers  */

to:

#ifdef SYS_IS_MAC_SYC
extern long * dedgen, * dedcos, dedSize; 
#else
static long           dedgen [40960];   /* deduction list keeping gens     */
static long           dedcos [40960];   /* deduction list keeping cosets   */
static long           dedSize = 40960;  /* size of deduction list buffers  */
#endif

With this modification, you should be able to compile and run GAP 
successfully. 


2. Memory allocation
====================

If GAP tries to allocate more workspace than is available, the system
crashes. This can be fixed as follows. Find SyGetmem for the Mac with
Symantec C, then change the lines

    if ( syWorkspace == 0 ) {
        syWorkspace = (char*)NewPtr( size + 3 );
        syWorkspace = (char*)(((long)syWorkspace + 3) & ~3);
        memset( syWorkspace, 0, size );

to

    if ( syWorkspace == 0 ) {
        syWorkspace = (char*)NewPtr( size + 3 );
        if (syWorkspace == 0)
           return (char*)-1;
        syWorkspace = (char*)(((long)syWorkspace + 3) & ~3);
        memset( syWorkspace, 0, size );

Be sure you change the right version of SyGetmem, since the MPW port
for the Mac looks very similar (and probably contains the same bug).
In my opinion, the MPW version contains another bug: it does not clear
the workspace, which will confuse Gasman). 


3. Power Macintosh compatibility 
================================

For all those who might try to compile GAP as a native program for the
Power Macintosh, I would like to mention that the port distributed
from Aachen contains a direct reference to a low-memory global 
variable at 0x016A (which does not exist on the Power Mac). As a
consequence, you might not be able to interrupt a native version of
GAP. To avoid this problem, in the code for the procedure SyIsIntr in
the file SYSTEM.C, the expression

(*(long*)0x016A)

should be replaced by

LMGetTicks()

(there are four references to 0x016A in SyIsIntr).


4. Cutting and pasting
======================

Sometimes, it is convenient to use the -n switch on the Macintosh. On
the one side, this disables GAP's command line editing and also the
history function. On the other side, with the -n option on, cutting and
pasting are activated. There is only one problem with the new port: if
GAP detects a user interrupt (CMD-. key) during line editing, GAP
quits. The reason is that an i/o error is signalled, which GAP
interprets as an EOF and aborts. Unfortunately, this cannot be
intercepted by the interrupt signal procedure.  This makes the
following fixes necessary. The following changes in SyFgets  (in the
file SYSTEM.C) solve the problem:

Change the lines

#if SYS_MAC_SYC
extern  int             syGetch2   P(( long fid, int cur ));
#endif
    
to

#if SYS_MAC_SYC
extern  int             syGetch2   P(( long fid, int cur ));
#include <errno.h>
#endif
      
and replace

    /* no line editing if the user disabled it                             */
    if ( syLineEdit == 0 ) {
        syStopTime = SyTime();
        p = fgets( line, (int)length, syBuf[fid].fp );
        syStartTime += SyTime() - syStopTime;
        return p;
    }

by the lines

    /* no line editing if the user disabled it                             */
    if ( syLineEdit == 0 ) {
        syStopTime = SyTime();
#if SYS_MAC_SYC        
		   errno = 0;
           p = fgets( line, (int)length, syBuf[fid].fp );
           if (errno == EINTR) {
              line[0] = '\n';
              line[1] = '\0';
              p = line;
           }
#else        
        p = fgets( line, (int)length, syBuf[fid].fp );
#endif
        syStartTime += SyTime() - syStopTime;
        return p;
    }

The procedures SyAnswerInt and SyIsIntr should be replaced by the
following:

void            syAnswerIntr ( signr )
    int                 signr;
{
    /* reinstall the signal handler                                        */
    signal( SIGINT, &syAnswerIntr );
    syIsIntr = true;

}


long            SyIsIntr ()
{
    struct QHdr *       queue;
    struct EvQEl *      qentry;
    EventRecord         theEvent;


    /* don't check for interrupts every time 'SyIsIntr' is called          */
    if ( LMGetTicks() <= syIsIntrCount )
        return 0;
    syIsIntrCount = LMGetTicks() + syIsIntrFreq;

    /* allow for system activities                                         */
    if ( syIsBackCount < LMGetTicks() ) {
        syIsBackCount = LMGetTicks() + syIsBackFreq;
        SystemTask();
        SEvtEnb = false;
        GetNextEvent( activMask, &theEvent );
    }

    /* look through the event queue for <command>-'.' or <control>-'C'     */
    queue = GetEvQHdr();
    qentry = (struct EvQEl *)(queue->qHead);
    while ( qentry ) {
        if ( qentry->evtQWhat == keyDown
            &&   ( ((qentry->evtQModifiers & controlKey) != 0)
                && ((qentry->evtQMessage & charCodeMask) ==   3))
              || ( ((qentry->evtQModifiers & cmdKey    ) != 0)
                && ((qentry->evtQMessage & charCodeMask) == '.')) ) {
            syIsIntr = true;
        }
        qentry = (struct EvQEl *)(qentry->qLink);
    }

    /* flush away all keyboard events after an interrupt                   */
    if ( syIsIntr ) {
        FlushEvents( keyDownMask, 0 );
        syIsIntr = false;
        return true;
    }
    else
    	return false;
}

#endif

This also includes the Power Macintosh fix that I have described 
in Section 2 above.


5. Compiling GAP using a Symantec compiler
==========================================

Here are the necessary steps to compile GAP with the Symantec C++ 7.0
compiler (other Symantec Compilers, such as Think C 6.0, should be
similar). Unless you have upgraded to Symantec C++ v.7.04, do *not*
use the code motion global optimization, because there seems to be a
bug in C++ v.7.00! (but do use the other optimizations). 

GAP has to be compiled with the 4 byte ints option on, so make copies
of the ANSI and Unix libraries and recompile them using this option,
as described in the C++ manual. 

Now create a new project (empty project) and remove main.c from the
project window. Then choose 'Add files' from the source window and
add the modified ANSI Unix libraries to the project. Then click ANSI
settings in the Think C language options; after that select the
Think C language extensions. 

In the prefix dialog (prefix dialog in the Think C options), delete
the line #include <MacHeaders.h> and any other contents, and add the
line

    #define SYS_IS_MAC_SYC

Finally, choose 'Set project type ...' from the project menu. Set the
partition size to 5120K and the Size flags to 1880. Then click Far
Data and Separate Strings. Now you are ready to compile GAP.



From martin.schoenert@math.rwth-aachen.de Tue May 30 15:37:00 1995
Date:         Tue, 30 May 95 15:37:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      RE: Upgrade for GAP 3.4 patchlevel 1 (V3R4P1) to patchlevel 2 (V3R4P2)

Bruce Merz wrote

    Just wondering about how much the manual has changed.  More specifically,
    I'm wondering whether the only change in the manual is the addition of
    chapters explaining the 2 new packages, and consequently the index being
    different... Or perhaps the page numbering is entirely different, and a
    new copy of the entire manual is needed for the new update.

The only changes are the 2 new chapters for the two new contributed
packages.  All the page numbers have changed slightly, since the
table of contents is now two pages longer.  Keeping the 3.4.1 manual
and just printing the two new chapters should work well enough.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From martin.schoenert@math.rwth-aachen.de Tue May 30 15:39:00 1995
Date:         Tue, 30 May 95 15:39:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: About the XGap Package...

Bruce Merz wrote

    I was wondering if it [XGAP] ready yet to install on a DOS running GAP.
    If not, do you know when?

XGAP is only available on UNIX workstations under X Windows.
We are working on a window handler for MS Windows,
but it is too early to say when this will be available.

Bruce Merz continued

    Also, are the packages Vector Enumeration, ANU Sq,
    and NQ going to be available for DOS?

It is probably not too difficult to port the Vector Enumerator to DOS
(maybe that has already happened Steve?).  But the ANU SQ resp. the NQ
use the VE resp. GAP to solve subtasks, and the mechanism to call those
programs is UNIX specific.  The same is true for the mechanism that makes
the VE, SQ, and NQ programs available from within GAP, as described in
the manual.  (All in all it is probably much easier to install Linux or
FreeBSD on your PC ;-)

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From qiyang@okuc02.okanagan.bc.ca Wed May 31 10:52:00 1995
Date:         Wed, 31 May 95 10:52:00 -0700
From:         "Q. Yang" <qiyang@okuc02.okanagan.bc.ca>
Subject:      meataxe for DOS

To use the MeatAxe Package, the manual refers the user to see Michael
Ringe's The C MeatAxe, Release 1.5.  Do you know where I could find this
on the internet, if it's there?

Thanks.
Q. Yang



From heiko.theissen@math.rwth-aachen.de Thu Jun  1 09:30:00 1995
Date:         Thu, 01 Jun 95 09:30:00 WET
From:         "Heiko Theissen" <Heiko.Theissen@Math.RWTH-Aachen.DE>
Subject:      The C MeatAxe Release 1.5

Dear GAP users,

Q. Yang asked where one could find  the manual ``The C MeatAxe Release
1.5'' by  Michael Ringe,   which is  mentioned in   the GAP manual  as
reference for the MeatAxe share package. The full TeX source and a DVI
file  of    this    manual  in   contained    in   the    subdirectory
`gap/pkg/meataxe/doc'  of GAP-3.4 (current  patchlevel 2), so it comes
along with the MeatAxe package.

This package  is  part  of  the GAP-3.4 patch  2   release and can  be
obtained from the usual ftp servers.

Note that  the  current release  number  of the MeatAxe  manual is 2.0
instead of 1.5 (as mentioned in the GAP manual).

Heiko Theissen



From thomas.breuer@math.rwth-aachen.de Thu Jun  1 09:54:00 1995
Date:         Thu, 01 Jun 95 09:54:00 WET
From:         "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Subject:      Re: meataxe for DOS

Dear Mrs. and Mr. Forum,

in addition to Heiko's answer to Q. Yang's question it should be noted
that there is also an archive 'meataxe.zoo' in the 'pub/incoming' directory
of our server, which contains the MeatAxe together with its documentation.
This might be interesting for people who are just interested in the
MeatAxe.

Kind regards
Thomas Breuer



From sal@dcs.st-andrews.ac.uk Thu Jun  1 09:26:00 1995
Date:         Thu, 01 Jun 95 09:26:00 +0100
From:         "Steve Linton" <sal@dcs.st-andrews.ac.uk>
Subject:      Re: meataxe for DOS

> To use the MeatAxe Package, the manual refers the user to see Michael
> Ringe's The C MeatAxe, Release 1.5.  Do you know where I could find this
> on the internet, if it's there?
> 

This is the package which is included with GAP in the pkg/meataxe directory.

	Steve Linton



From jcbhrb@cerf.net Thu Jun  1 22:08:00 1995
Date:         Thu, 01 Jun 95 22:08:00 -0700
From:         "Jacob Hirbawi" <jcbhrb@cerf.net>
Subject:      Restricted characters

I'm trying to look at the restriction of characters of a group on all of
its subgroups. The function "Restricted" seems like the logical choice, but
for some reason I can't get it to work.

Here's what I tried :

# first define the parent group
gap> group:=PrimitiveGroup(8,3);;
# get a list of (nonconjugate) subgroups 
gap> subgroups:=List(ConjugacyClassesSubgroups(group),Representative);;
# get their characters
gap> chars:=List(subgroups,CharTable);;
# the character of the parent group is the last element in the list 
gap> groupchar:=chars[Length(chars)];
CharTable( PSL(2,7) )
# now for the restriction
gap> Restricted(groupchar,chars[3],groupchar.irreducibles);
false
# even this "dosen't work" (restricting on the group itself)
gap> Restricted(groupchar,groupchar,groupchar.irreducibles);
false

I realize that somehow I have define fusion maps of the subgroups into
the parent group, but I haven't figured out how. I also suspect that their
might be a better approach to the problem. I'd appreciate any suggestitions.

Thanks.

Jacob.

PS: I'm still using version 3r4p0.



From thomas.breuer@math.rwth-aachen.de Fri Jun  2 11:51:00 1995
Date:         Fri, 02 Jun 95 11:51:00 WET
From:         "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Subject:      Re: Restricted Characters

Dear Mrs. and Mr. Forum,

Jacob Hirbawi writes

> I'm trying to look at the restriction of characters of a group on all of
> its subgroups. The function "Restricted" seems like the logical choice, but
> for some reason I can't get it to work.

Probably the GAP manual does not tell enough details about this problem.
Here is a solution.

    # Define the parent group.
    group:= PrimitiveGroup( 8, 3 );
    
    # Compute representatives of conjugacy classes of subgroups,
    # and their character tables.
    subgroups:= List( ConjugacyClassesSubgroups( group ), Representative );;
    tables:= List( subgroups, CharTable );;
    
    # Compute (and store) the class fusions into 'group'.
    List( subgroups, s -> FusionConjugacyClasses( s, group ) );;
    
    # Compute the restricted characters.
    groupchar:= CharTable( group );
    restricted:= List( tables,
                  t -> Restricted( groupchar, t, groupchar.irreducibles ) );
    
    # Example: Compute the decomposition into irreducibles for one subgroup.
    subt:= CharTable( subgroups[11] );;
    MatScalarProducts( subt, subt.irreducibles, restricted[11] );

Your last sentence indicates that you are aware of the fact that the update
GAP-3.4.2 has been released.
However, the above also works in GAP-3.4.0.

Kind regards
Thomas Breuer



From jcbhrb@cerf.net Fri Jun  9 00:18:00 1995
Date:         Fri, 09 Jun 95 00:18:00 -0700
From:         "Jacob Hirbawi" <jcbhrb@cerf.net>
Subject:      unassigned returned values

What happens when you call a function that returns a value, but yet you
don't assign that returned value to anything? 

For example in :

test:=function(n) local a;
  a:=1;
  List([1..n]);          <---- 
  return a;
end;

where does the returned value of  List([1..n]) "go"?

This is more than a curiousity; I have *some* reason to beleive that this can
cause serious problems with your hard disk; especially if the returned values
need a lot of storage. This is far from being conclusive however, but my 
reluctance to experiment should be understandable ;-). So I'd like to see
what the experts have to say on this before I go on.

Thanks.

Jacob.



From thomas.breuer@math.rwth-aachen.de Fri Jun  9 13:06:00 1995
Date:         Fri, 09 Jun 95 13:06:00 WET
From:         "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Subject:      Re: unassigned returned values

Dear Mrs. and Mr. Forum,

Jacob Hirbawi asks

> What happens when you call a function that returns a value, but yet you
> don't assign that returned value to anything? 
> 
> For example in :
> 
> test:=function(n) local a;
>   a:=1;
>   List([1..n]);          <---- 
>   return a;
> end;
> 
> where does the returned value of  List([1..n]) "go"?

Since this value is not bound to a variable, it is garbage and thus
will be thrown away automatically by the next call of the garbage collector.

Let us look at an example.
(Of course it is not necessary to force garbage collections,
here this is done just to look at the used/free space.)

gap> # Switch on the messages about garbage collections.
gap> GASMAN( "message" );
gap> # Define the function.
gap> test:= function( n )
>       # Produce a large object for large value of 'n'.
>       # (The command 'List( [ 1 .. n ] )' would return
>       # a range, whose memory size does not depend on 'n'.)
>       List( [ 1 .. n ], x -> 0 );
>       end;;
gap> # Collect existing garbage.
gap> GASMAN( "collect" );
#G  collect garbage,   3010 used,    459 dead,   2962 KB free,   4096 KB total
gap> # Produce new garbage,
gap> # and look what remains after the next garbage collection.
gap> test( 10^4 ); GASMAN( "collect" );
#G  collect garbage,   4080 used,  10509 dead,   2906 KB free,   4096 KB total
gap> test( 10^4 ); GASMAN( "collect" );
#G  collect garbage,   4080 used,  10011 dead,   2906 KB free,   4096 KB total
gap> test( 10^4 );
gap> test( 10^4 ); GASMAN( "collect" );
#G  collect garbage,   4080 used,  20019 dead,   2906 KB free,   4096 KB total

So after each call of the function 'test' the garbage collector finds
about 10000 ``dead'' objects, namely the list with 10000 zeros.

Kind regards
Thomas Breuer



From pasec@can.nl Sat Jun 10 19:15:00 1995
Date:         Sat, 10 Jun 95 19:15:00 +0000
From:         "Dima Pasechnik" <pasec@can.nl>
Subject:      upgrading from patchlevel 0

Dear Forum,

I would most appreciate someone posting an instruction on how to
upgrade GAP 3.4 from patchlevel 0.

(Certainly the straightforward way would be to reinstall the latest
release from scratch. Are there any ways of getting around it?)

Regards,
Dima
-----------------------------------------------------------------
Dmitrii V. Pasechnik
RIACA/CAN
419 Kruislaan
1098 VA Amsterdam
The Netherlands
phone: +31 20 560 8480
fax:   +31 20 560 8448
email: pasec@can.nl



From sal@dcs.st-andrews.ac.uk Mon Jun 12 13:05:00 1995
Date:         Mon, 12 Jun 95 13:05:00 +0100
From:         "Steve Linton" <sal@dcs.st-andrews.ac.uk>
Subject:      Re: upgrading from patchlevel 0

Dima Pasechnik asked:

> I would most appreciate someone posting an instruction on how to
> upgrade GAP 3.4 from patchlevel 0.
> 
> (Certainly the straightforward way would be to reinstall the latest
> release from scratch. Are there any ways of getting around it?)
> 

In brief, no! 

The 3.4.1 -> 3.4.2 upgrade was too big to make a sensible patch
file. On the other hand, some share libraries and databases like the
two-groups, did not change at all -- I used diff to determine which
share libraries I really needed to recompile (but omitted to record
which ones they were I'm afraid)

	Steve



From martin.schoenert@math.rwth-aachen.de Fri Jun 16 08:30:00 1995
Date:         Fri, 16 Jun 95 08:30:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Installation of GUAVA contributed package

Several people have pointed out that there is no installation instruction
for the GUAVA package.

The GUAVA package consists of a lot of GAP code and three C programs (by
J. Leon) that are used to compute automorphism groups of binary codes and
test isomorphism of binary codes.

Note that GAP *cannot* use those programs under DOS, so you cannot
compute automorphism groups of binary codes or test for isomorphism of
binary codes under DOS.

The GAP code needs no further installation.  You need only say
'RequirePackage( "guava" );' in a GAP session before using GUAVA.

To install the C programs go to 'gap3r4p2/pkg/guava/' and say 'make'.
If you don't want to use the GNU C compiler, say 'make CC=cc CFLAGS=-O'.

This will compile the programs and place the object files and the
executable programs in subdirectory 'bin/<hostname>/', where <hostname>
is the name of the computer on which you compiled the programs
(e.g. in 'bin/bert/' if you compile on a machine called 'bert').

If you want to use GUAVA on several different machines with the same
architecture (e.g. 'bert' and 'tiffy'), just compile on one such machine
(e.g. 'bert'), and make symbolic links for the other machines (e.g.
'ln -s bin/bert bin/tiffy').

If you want to use GUAVA on several different machines with different
architectures, just compile on each such machine.

There is a minor bug in GUAVA.  One cannot compute the automorphism group
of a code whose underlying vectorspace has dimension 1.  For example

    C := GeneratorMatCode( [ [ 1 ] ], "example", GF(2) );
    AutomorphismGroup( C );

results in an error.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From martin.schoenert@math.rwth-aachen.de Fri Jun 16 08:31:00 1995
Date:         Fri, 16 Jun 95 08:31:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Problem in 'RepresentativeOperation' for symmetric groups

Dr. Henk Penning has reported a bug in GAP 3.4.2 (and earlier) to us.

When one computes a representative for an operation on tuples of
permutations in a symmetric group, then GAP signals an error.

    gap> S6 := SymmetricGroup( 6 );
    Group( (1,2), (2,3), (3,4), (4,5), (5,6) )
    gap> RepresentativeOperation( S6, [ (1,2), (3,4) ],
    >                                 [ (3,4), (5,6) ], OnTuples );
    Error, Record: element 'degree' must have an assigned value at
    ...

This problem also bites when one uses 'OperationHomomorphism' from a
symmetric group (because this uses 'RepresentativeOperation' for
preimage representatives).

Basically GAP acts as if subgroups of symmetric groups were also
symmetric groups.

The easy way around this problem is to define the group as an ordinary
permutation group (so that GAP doesn't realize that it is the full
symmetric group).

    gap> S6 := Group( (1,2), (2,3), (3,4), (4,5), (5,6) );
    Group( (1,2), (2,3), (3,4), (4,5), (5,6) )
    gap> RepresentativeOperation( S6, [ (1,2), (3,4) ],
    >                                 [ (3,4), (5,6) ], OnTuples );
    (1,3,5)(2,4,6)

A proper fix for the bug is to change 'G.operations' to 'S.operations' in
lines 1326 and 1330 in file 'gap3r4p2/lib/permoper.g'.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From tim@bruckner.stoch.uni-linz.ac.at Tue Jun 20 02:01:00 1995
Date:         Tue, 20 Jun 95 02:01:00 +0200
From:         "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Subject:      Xgap

Hello,

Is there any good reason to use X-gap? Is there some configuration
stuff that I should do to make it nice: at the moment it is horribly slow
and not pleasantto use, or even usable at all!!

And it just died next to me for no reason :-(

I am running on a Sun machine, using statiuc linking because
I cannot get the right patches, and without specific 
setup stuff in the xgap/bin/xgap script.

Hope someone can help!


tim boykett



From frank.celler@math.rwth-aachen.de Tue Jun 20 08:17:00 1995
Date:         Tue, 20 Jun 95 08:17:00 WET
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      Subdirect Product

Dear Forum,

Mitchell Trott has report a bug in 'SubdirectProduct'.  The projection
returned by 'Projection' doesn't work correctly, the preimages might
not lie in the subdirect product.

The projections work correctly if the arguments are perm groups or ag
groups *not* created as subdirect product, for example, if the
arguments are groups created using 'Group' and subgroups of such
groups.  However, if you iterate this process, i.e., form the
subdirect product of one or two subdirect products, the projections
will show this incorrect behaviour.

A fix is available from "Gap-Trouble@Math.RWTH-Aachen.DE".

best wishes
  Frank



From frank.celler@math.rwth-aachen.de Tue Jun 20 20:33:00 1995
Date:         Tue, 20 Jun 95 20:33:00 -0700
From:         "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Subject:      XGap

Dear Tim Boykett,

you asked:

    Is there any good reason to use X-gap?

at the moment: no.  However the next version will contain a QUOTPIC
like interface.  This will make it much easier to play around with
finitely presented groups, especially because it contains some
functions which are not available as one line commands in GAP.  This
version should be available within two month.

    Is there some configuration stuff that I should do to make it
    nice: at the moment it is horribly slow and not pleasantto use, or
    even usable at all!!

What version of X-Windows do you use?  There is a problem with some of
the older X-Window/OpenWindow versions, the text cursor keeps blinking
and it is next to imposible to even open a menu.  Because you write
"even usable at all" I assume you are suffering from the same kind of
problem.

I have tried XGAP under X11R5 on a Sun Sparc using a Sun 4 as display
without any problem.

best wishes
  Frank

PS: If you don't have a possibility to link XGAP against X11R5, please
write to "Gap-Trouble@Math.RWTH-Aachen.DE".



From wdg@win.tue.nl Wed Jun 21 13:45:00 1995
Date:         Wed, 21 Jun 95 13:45:00 +0200
From:         "W.A. de Graaf" <wdg@win.tue.nl>
Subject:      Gap for Dos

Dear forum,

I would like to have gap for DOS, but the file 'unzoo-ibm-i386-msdos.exe'
seems to have been removed. Is there a new way to make GAP for DOS, or dor I 
have to get the file elsewhere?
Many thanks.

Willem de Graaf
wdg@win.tue.nl



From martin.schoenert@math.rwth-aachen.de Wed Jun 21 18:24:00 1995
Date:         Wed, 21 Jun 95 18:24:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: GAP for Dos

Willem de Graaf wrote in his e-mail message of 1995/06/21

    I would like to have gap for DOS, but the file 'unzoo-ibm-i386-msdos.exe'
    seems to have been removed. Is there a new way to make GAP for DOS, or
    do I have to get the file elsewhere?

No need to look elsewhere.
On 'ftp.math.rwth-aachen.de' in the directory 'pub/gap/bin/'
you will find both the executable kernel 'bin3r4p2-ibm-i386-dos.zoo'
and the 'zoo' archive extractor 'unzoo-ibm-i386-dos.exe'.

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From thomas.breuer@math.rwth-aachen.de Thu Jun 22 08:41:00 1995
Date:         Thu, 22 Jun 95 08:41:00 WET
From:         "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Subject:      bug in 'ConjugacyClasses'

Dear Mrs. and Mr. Forum,

there is a bug in GAP 3.4 that causes wrong results in the computation
of conjugacy classes of AG groups.

It can be fixed by
1. removing the function 'AgGroupOps.ConjugacyClassCanonicalElement'
   in the library file 'agclass.g', and
2. replacing all other occurrences of the string
   'ConjugacyClassCanonicalElement' by 'ConjugacyClass'.

Sorry for the inconveniences.

Thomas Breuer



From martin.schoenert@math.rwth-aachen.de Fri Jun 23 09:18:00 1995
Date:         Fri, 23 Jun 95 09:18:00 WET
From:         "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Subject:      Re: upgrading from patchlevel 0

Dima Pasechnik wrote in his e-mail message of 1995/06/10

    I would most appreciate someone posting an instruction on how to
    upgrade GAP 3.4 from patchlevel 0.

Steve Linton wrote in his e-mail message of 1995/06/12

    The 3.4.1 -> 3.4.2 upgrade was too big to make a sensible patch
    file. On the other hand, some share libraries and databases like the
    two-groups, did not change at all -- I used diff to determine which
    share libraries I really needed to recompile (but omitted to record
    which ones they were I'm afraid)

There was indeed no upgrade file when GAP V3R4P2 was released,
but since 'ftp' connections to Aachen are still a bit shaky,
I decided to make one.

First you have to upgrade from GAP V3R4P0 to V3R4P1 and then from V3R4P1
to V3R4P2.  This is very likely a lot more work than just getting the
V3R4P2 distribution.  But if you insist...

For the first step you must get the upgrade file 'upg3r4p1.dif.gz'
(about 130 KBytes) from 'ftp.math.rwth-aachen.de' in the directory
'old/gap-3.4.1/'.  Uncompress this file with 'gunzip upg3r4p1.dif',
and read its beginning, which tells you what to do.

For the second step you must get the upgrade file 'upg3r4p2.dif.gz'
(about 250 KBytes) from 'ftp.math.rwth-aachen.de' in the directory
'pub/gap/'.  Uncompress this file with 'gunzip upg3r4p2.dif',
and read its beginning, which tells you what to do.

Note that this upgrade file does *not* upgrade the contributed
package Meataxe from version 2.0.9 (which was included with GAP 3.4.1)
to version 2.0.12 (which is included with GAP 3.4.2).  You can get
the new version from 'ftp.math.rwth-aachen.de' in the directory
'pub/incoming/' as the file 'meataxe-2.0.12.zoo' (about 370 KBytes).

Note that this upgrade file does *not* contain the two new contributed
packages Cohomology and GUAVA.  They were left out to keep the size of
the upgrade file reasonably small.  You can get them from
'ftp.math.rwth-aachen.de' in the directory 'pub/incoming/' as files
'cohomolo.zoo' (about 250 KBytes) and 'guava1r2.zoo' (about 500 KBytes).

Martin.

-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany



From eamonn.obrien@maths.anu.edu.au Sun Jun 25 15:52:00 1995
Date:         Sun, 25 Jun 95 15:52:00 +1000
From:         "Eamonn O'Brien" <eamonn.obrien@maths.anu.edu.au>
Subject:      ANU p-Quotient package in GAP

Version 1.3 of the ANU p-Quotient Program is now available
by anonymous FTP. This version can be run as part of the 
anupq share library of GAP 3.2 (and later versions).  
Users of the anupq package in GAP may replace their 
existing anupq directory with this release.

The Unix tar file, pq.v1-3.tar.Z, of the program may be 
fetched by anonymous ftp from the pub/algebra/PQ directory
on pell.anu.edu.au (IP number 150.203.33.4) 
The file is also available from /pub/incoming
on ftp.math.rwth-aachen.de 

The file can be uncompressed and unpacked as follows:
uncompress pq.v1-3.tar.Z
tar -xvf pq.v1-3.tar

This will create a directory called pq and needs 
about 1.5 MB of free disk space.

Instructions for compiling and using the GAP package 
version can be found in the GAP manual. Up-to-date
GAP documentation on this version is supplied in pq/gap

Feedback and bug reports are welcomed.

Eamonn O'Brien

e-mail obrien@maths.anu.edu.au
WWW http://wwwmaths.anu.edu.au/~obrien



From bamerz@okcins.okanagan.bc.ca Thu Jun 29 10:42:00 1995
Date:         Thu, 29 Jun 95 10:42:00 -0700
From:         "Bruce Merz" <bamerz@okcins.okanagan.bc.ca>
Subject:      Memory concerns.

Hello, Gap-Forum.

I am experiencing what I think is a memory problem.  I am manipulating
large lists (1000-3000 elements, with each element being a list containing 
10-12 elements) with some "home-made" functions, and the computer is taking
a long time to complete the calculations.  By introducing a counter into
the function, which displays itself after every [what I would deam]
"major" calculation, I can see that the computer is not actually working
on the calculation but is clearing up its memory, or something.  I can
recodnize this because the same type of  calculation takes only a few 
seconds one moment and then suddenly 4 minutes the next.  Also, during these
times where the counter doesn't change as fast as before (i.e. computer is 
going slow) the hard drive can be heard "grinding" away, whereas it isn't 
barely heard at all when the counter is decreasing at a constant rate.  
Actually, judging by the speed of the counter when going at a constant rate 
(regular computer speed), about 80% of the time taken to complete an entire 
function applied to these lists is taken up with this "memory clearing".  
So here are my questions:  what things should I avoid in programming my own 
functions so as to avoid these memory clearing problems?  Also, what is the 
best way to make use of the Unbind function:  within the main body of the 
function? at the end, just before "return()"?  Some of the built-in functions
that I am using might be troublesome too, I think.  Here are my suspects:
Sublist, Unbind (used quite often, as soon as a local variable which has alot
of information attached to it is no longer needed), Filtered, Copy (used quite
often - maybe too often and when not necessary, but there for safety reason, 
so as not to alter certain variables), and SortParallel.  Also, I use "for" 
loops ALOT, but they are necessary as I'm not the best with recursion.  

The main reason I am concerned is that at present, some calculations are
taking 2 hours to do, and it will be necessary to move to even bigger 
computations which will take much more time, exponentially in fact!

I am using a 66 MHz IBM-486 DX2, with 16 Megabytes of RAM.  In the gap.bat
file found in the \bin directory, I have set the memory to 15.3 m.  Otherwise,
no changes have been made to gap.bat.

Thank you for any help you can give!!
Bruce



From joachim.neubueser@math.rwth-aachen.de Fri Jun 30 16:05:00 1995
Date:         Fri, 30 Jun 95 16:05:00 +0200
From:         "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Subject:      GAP, 1997, me and all that

Dear Forum members,

Some weeks ago, many  of you will have  received  a letter  from three
Australian colleagues, seeking support for  a petition requesting  the
postponement of my retirement  which is due on July  31, 1997.  When I
was informed of this motion some days after that  letter had been sent
out, this came as a  complete surprise to  me, the motion had not been
discussed  with me beforehand,  let  alone  that  I had asked  for it.
Meanwhile  I  have been told  that  such support has   been offered by
several colleagues and  in the first place  I want to  thank these for
their apparent appreciation of my attempts to further GAP.

I have to report however that the  initiative will not change the date
of   my retirement.   In  fact when  the  initiative   was started the
advertisement inviting applications for the professorship, that I hold
at present, was already going into print

The letter of the  Australian colleagues certainly overrated my merits
in  the development of  GAP,  the  names of   the many  (mostly young)
colleagues and students who  really did the  work of creating  GAP and
its documentation are listed  with the 'GAP banner'  that you see when
you call GAP on your computer and on the title page of the manual, and
the names   of those who   contributed the various share  packages are
given with the description of these. I cannot deny however that it has
been my role as chairman of  Lehrstuhl D fuer Mathematik, RWTH Aachen,
to provide the present environment for the development and maintenance
of the central  parts of GAP and for  the service to  the community of
the GAP users.

Therefore the initiative of  the  Australian colleagues may have  left
some of you wondering  what will happen with  GAP after my retirement,
and  in fact the initiative  has made clear to   me that a decision on
this question  has to be found soon.   After careful consideration and
discussion with various colleagues, I  have come to the conclusion not
to take the risk if my successor as chairman of Lehrstuhl D, who after
all might get determined only    short before my retirement, will   be
interested to further the  development of GAP in a   similar way as  I
have done. It seemed to be better and  safer for GAP and the community
of its users  to  hand the  responsibility for GAP  in time  before my
retirement to a group of colleagues who are both competent and willing
to take  over the work of the  further development  and maintenance of
GAP.

I am happy  to announce that  the colleagues at St. Andrews, Scotland,
whom I approached  with this request,   are not only offering to  take
over but have indicated strong  interest in this  task. Let me briefly
introduce them:

As members of the GAP-forum you will know Dr. Steve Linton who already
for a long  time has frequently helped  answering questions raised  in
the  GAP-forum or  GAP-trouble.  Many  of  you  will further know  him
through his research in CGT  and through his  contributions to GAP. In
my opinion Steve probably   knows GAP interna  best among   all people
outside Aachen.

Many of  you will  also know  Professor  Ed Robertson  and Dr.   Colin
Campbell, not only  by their work,   e.g.  in the  area of algorithmic
investigation of f.p.  groups, but also  as splendid organisers of the
'Groups St.   Andrews conferences'. Ed in  addition for the past years
has    been the coordinator  of   an  EC-sponsored 'Human Capital  and
Mobility'  project  on  CGT  that joins teams    from 11 West European
universities working in  this field. Together  with Dr. John O'Connor,
who also  works on  CGT at  St.   Andrews,  Ed has won   the 'European
Academic Software   Award 1994' for  the   mathematics teaching system
MacTutor.

St.   Andrews moreover enjoys a  close  cooperation of mathematics and
computer science in   a  joint department.  In fact   Professor Ursula
Martin   and Professor   Mike Atkinson, both    professors of computer
science in  this department, the latter being   its present head, both
started as group theoreticians and continue to  work in areas in which
algebra and computer science meet.  Many of you  will know Mike as the
editor of the 1982 Durham proceedings, still a must in CGT.

I am most  confident that GAP will continue  to grow and to improve in
the hands of the colleagues in St. Andrews.

Let me  briefly  indicate  the  present  state  of the  planning.   As
mentioned before in the Forum, the Aachen team is presently working on
a version 4 of GAP,  which, while being  upward compatible again, will
offer for instance much better facilities  for the introduction of new
algebraic structures, improvements of certain kernel functions etc. We
hope that a first version (4.1) will become available during the first
half of 1996 and a second version (4.2) with additions to the library,
some  of which are already under  construction, may follow not so long
after.  We plan  that these  developments   will still take  place  in
Aachen.  The final move of 'GAP headquarters' to  St. Andrews may then
happen in  about 18 -   22 months from  now.  This gives us  plenty of
leeway  to prepare for  an  absolutely smooth  move,  e.g. by frequent
visits between St.  Andrews  and Aachen, for which the above-mentioned
EC project provides both a fitting frame and financial support.

Let me add that in discussions  with several colleagues, some of which
took place during  the recent DIMACS meeting on  CGT,  we talked about
still  closer international cooperation  in the development of GAP, in
which other  teams could increasingly bring in  special expertise.  As
just  one  example  let me mention    that my colleague  Prof. Herbert
Pahlings in Lehrstuhl  D   will (of course)  continue to   support the
representation  theoretic parts of the  GAP  program and data library.
However I want to leave it to the St.  Andrews team to possibly set up
a more formal structure for such enterprises. This may in fact be done
as a first step in a gradual take-over.

Let me finally  state  a point  that is very   important to me.    The
colleagues  in St. Andrew completely agree  with me that also in their
hands GAP will remain a system that can be obtained free of charge and
with  completely  open source  of kernel, library  and  data. Also the
present  support of   the community of  GAP  users  by  GAP-forum  and
GAP-trouble will be maintained.

I hope that with this report I have been able to convince you that all
is  being  done to make  sure  that my   retirement will not  have any
negative effects on the further development of GAP, rather I hope that
the new team will bring in  fresh ideas.  In line  with policy that we
have followed all the time  you will be  kept fully informed about all
later steps taken in moving GAP to St. Andrews.

Wishing you fun and success using GAP long beyond that date in 1997,

Joachim Neubueser



