This file contains the mails sent to the GAP forum in July-September 1994.

Name                Email address                           Mails   Lines
Martin Schoenert    Martin.Schoenert@Math.RWTH-Aachen.DE       22     995
Frank Celler        Frank.Celler@Math.RWTH-Aachen.DE           19    1053
Joachim Neubueser   Joachim.Neubueser@Math.RWTH-Aachen.DE      10     387
Alexander Hulpke    Alexander.Hulpke@Math.RWTH-Aachen.DE        9     479
Steve Linton        sl25@cus.cam.ac.uk                          9     259
Leonard Soicher     leonard@qmw.ac.uk                           9     155
Roger A Fenn        r.a.fenn@sussex.ac.uk                       5     153
Thomas Breuer       Thomas.Breuer@Math.RWTH-Aachen.DE           5     134
Lewis McCarthy      lmccarth@klingon.cs.umass.edu               5      96
Steve Fisk          fisk@polar.bowdoin.edu                      4     752
Tim Boykett         tim@bruckner.stoch.uni-linz.ac.at           3     270
Jacob Hirbawi       jcbhrb@cerf.net                             3     212
Harald Boegeholz    hwblist@machnix.mathematik.uni-stuttgart.de 3     167
Eamonn O'Brien      eamonn.obrien@maths.anu.edu.au              3     131
Derek Holt          dfh@maths.warwick.ac.uk                     3     111
Andrew Mathas       a.mathas@ic.ac.uk                           3     101
Dima Pasechnik      dima@maths.uwa.edu.au                       3      64
Chris Charnes       charnes@osiris.cs.uow.edu.au                3      19
Franz Gaehler       gaehler@msc.cornell.edu                     2     255
Volkmar Felsch      Volkmar.Felsch@Math.RWTH-Aachen.DE          2     194
Werner Nickel       Werner.Nickel@Math.RWTH-Aachen.DE           2     112
Chris Wensley       mas023@bangor.ac.uk                         2      58
Charles.Wright      wright@bright.uoregon.edu                   2      41
David Sibley        sibley@math.psu.edu                         2      33
Allan Adler         ara@altdorf.ai.mit.edu                      2      25
Peter F. Blanchard  pfb3h@weyl.math.virginia.edu                1      89
Ottokar Kulendik    kulendor@machnix.mathematik.uni-stuttgart.d 1      40
Daniel Ruberman     ruberman@max.math.brandeis.edu              1      22
Tim Hsu             timhsu@math.princeton.edu                   1      21
Bruce Kaskel        kaskel@math.berkeley.edu                    1      19
Mark Edwin Hall     fscimeh@chulkn.chula.ac.th                  1      18
NIPSY_RUSSELL       satterfieldj@alpha.hendrix.edu              1      17
Jan Andersen        jaa@nov.cri.dk                              1      17
David Rowe          rowe@twain.ee.cornell.edu                   1      16
Noah Dana-Picard    dana@brachot.jct.ac.il                      1      14
Lewis McCarthy      lmccarth%klingon@cs.umass.edu               1      12
Jaroslav Gurican    jaroslav.gurican@mff.uniba.cs               1      12
Carl A. LaCombe     clacombe@jade.tufts.edu                     1      11
Dennis Drapeau      t9xu@math.unb.ca                            1       5
Akos Seress         akos@math.ohio-state.edu                    1       5
Josep M. Arques     arques@melq.uab.es                          1       4

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 charnes@osiris.cs.uow.edu.au Mon Jul 04 10:36:00 1994
From:           "Chris Charnes" <charnes@osiris.cs.uow.edu.au>
Date:           Mon, 04 Jul 94 10:36 +1000
Subject:        no subject (file transmission)

    Dear Gap-forum,

    I need 
    a routine that returns a polynomial of say degree 100 over GF(2) of the
    form: x^100 + x^a + x^b + ... + 1, where each component of (a,b,c,...) is < 100.

    Yours C.Charnes



From Alexander.Hulpke@Math.RWTH-Aachen.DE Mon Jul 04 08:52:00 1994
From:           "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Date:           Mon, 04 Jul 94 08:52 +0200
Subject:        Re: random polynomials

Dear GAP-Forum,

Chris Charnes asked:

>     I need 
>     a routine that returns a polynomial of say degree 100 over GF(2) of the
>     form: x^100 + x^a + x^b + ... + 1, where each component of (a,b,c,...) is >     < 100.

Taking the following routine:

# RandomNormedPol(<Ring>,<degreerange>)

RandomNormedPol := function ( r, deg )
    local  f;
    f := r.operations.Random;
    if not IsField( r )  then
        r := Field( r );
    fi;
    return 
     Polynomial( r, Concatenation( List( [ 1 .. RandomList( deg ) ], function
                  ( i )
                return f( r );
            end ), [ r.one ] ) );
end;

This will do the job:

gap> k:=GF(2);;
gap> RandomNormedPol(k,[100]);

Alexander Hulpke

-- Lehrstuhl D fuer Mathematik, RWTH, Templergraben 64, 52056 Aachen, Germany,
eMail: Alexander.Hulpke@math.rwth-aachen.de



From sl25@cus.cam.ac.uk Mon Jul 04 11:23:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Mon, 04 Jul 94 11:23 +0200
Subject:        Re: no subject (file transmission)

This appears easy - 

l := [a,b,c,...];
f := GF(2);
Add(l,100);
l := Set(l);
v := List([0..100],function(i) if i in l then return f.one; else return f.zero;
fi; end);
Polynomial(f,v);

Have I misunderstodd what you are looking for?

	Steve



From kulendor@machnix.mathematik.uni-stuttgart.de Mon Jul 04 15:43:00 1994
From:           "Ottokar Kulendik" <kulendor@machnix.mathematik.uni-stuttgart.de>
Date:           Mon, 04 Jul 94 15:43 +0200
Subject:        Re: Bug in 'SubdirectProduct' when using the projection

Dear forum,
  
I have another problem using 'Projection()' from the 'SubdirectProduct()':
an error occurs when I try to use 'PreImagesRepresentative():

# again the example usage of 'SubdirectProduct()' from the GAP manual 
s3 := Group( (1,2,3), (1,2) );;
c3 := Subgroup( s3, [ (1,2,3) ] );;
x1 := Operation( s3, Cosets( s3, c3 ), OnRight );;
h1 := OperationHomomorphism( s3, x1 );;
d8 := Group( (1,2,3,4), (2,4) );;
c4 := Subgroup( d8, [ (1,2,3,4) ] );;
x2 := Operation( d8, Cosets( d8, c4 ), OnRight );;
h2 := OperationHomomorphism( d8, x2 );;
s := SubdirectProduct( s3, d8, h1, h2 );

# compute the projection and copy entries from the direct product
# to fix the bug earlier mentioned
p1_s := Projection(s, s3, 1);
d12 := DirectProduct(s3, d8);   
s.news := d12.news;   
s.perms := d12.perms; 
s.olds := d12.olds;  

# try to use 'PreImagesReresentative()' on an arbitrary element of
# the image of the projection
x  := Random(Image(p1_s, p1_s.source));
PreImagesRepresentative( p1_s, x );

GAP responds:

Error, Record: element 'perms' must have an assigned value at
elm := img ^ prj.range.perms[prj.component] ... in
map.operations.PreImagesRepresentative( map, img ) called from
PreImagesRepresentative( p1_s, x ) called from
main loop
brk> 

Ottokar Kulendik



From Alexander.Hulpke@Math.RWTH-Aachen.DE Mon Jul 04 17:34:00 1994
From:           "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Date:           Mon, 04 Jul 94 17:34 +0200
Subject:        Re: Bug in 'SubdirectProduct' when using the projection

Dear GAP-forum,

Ottokar Kulendik wrote:

> I have another problem using 'Projection()' from the 'SubdirectProduct()':
> an error occurs when I try to use 'PreImagesRepresentative():

> PreImagesRepresentative( p1_s, x );
> GAP responds:

> Error, Record: element 'perms' must have an assigned value at

Obviously, this function has never been used by anybody...

The error has been fixed in version 3.4, however it involves substancially
more, that just adding some record components.

Sorry for the inconveniences,

Alexander Hulpke



From ara@altdorf.ai.mit.edu Mon Jul 04 12:23:00 1994
From:           "Allan Adler" <ara@altdorf.ai.mit.edu>
Date:           Mon, 04 Jul 94 12:23 -0400
Subject:        Adding Online Documentation (2)

I have applied the suggestions of Martin Sch"onert for adding online
documentation. They work. ON the other hand, there are a few drawbacks:
(1) One has to recompile the entire manual, which is time consuming.
(2) One has to use Latex, whereas I would prefer to use Plain TeX
(3) The formatting of the manual is itself unfamiliar. For example,
    one has sections and chapters, but it is not clear how to create
    subsections, subsubsections, etc. With more understanding of the
    formatting, one could make one's own modifications to the code.
    WIthout it, there are just chapters and sections.
(4) One really should not hack the manual.


It seems that there are various ways to solve these problems. One would
be to make additional options available to the online help command
such as to look in other places for TeX files, to accept Plain TeX,
etc.

Allan Adler
ara@altdorf.ai.mit.edu



From ruberman@max.math.brandeis.edu Tue Jul 05 10:30:00 1994
From:           "Daniel Ruberman" <ruberman@max.math.brandeis.edu>
Date:           Tue, 05 Jul 94 10:30 +0100 (MET)
Subject:        Two questions on Fp groups

Dear Gap-Forum: I have the following sort of computation which I would like
to do using GAP:  I am given a finitely presented group P, a surjective
homomorphism f from P to a finite group G (given, as, say a subgroup of
a permutation group), and a subgroup H of G.  I would like to compute the
abelianization of the inverse image of H under f.  I realize that this
could be done using the command `AbelianInvariantsSubgroupFpGroup', once
generators have been chosen for the subgroup f^-1(H).  Finding
generators is easy `by hand' starting from a transversal of f^-1(H) in P;
the question is how to find such transversal using GAP.  The key point
seems to be pulling back a transversal of H in G to P.  Does anyone have
any pointers on how this can be done in GAP?

My second question is related: has the Fox free calculus been
implemented in GAP (or something whose output is accessible to GAP)?  From
a computational standpoint, would it be better to use the command
AbelianInvariants... (assuming that the question in the previous
paragraph has a reasonable answer)?  

Thanks for any input.
Daniel Ruberman
ruberman@max.math.brandeis.edu ruberman@binah.cc.brandeis.edu



From Thomas.Breuer@Math.RWTH-Aachen.DE Tue Jul 05 16:22:00 1994
From:           "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Date:           Tue, 05 Jul 94 16:22 WET
Subject:        Re: Can GAP do group rings?

Dear Mrs. and Mr. Forum,

recently Evelyn Hart asked you whether GAP can handle group rings.
She told 

>    I'm interested in the group ring Z[\pi] where Z is the integers
>    and \pi is the group on four generators, a,b,c,d with one relation 
>                  a b 1/a 1/b c d 1/c 1/d.

At the moment GAP has no facilities to do computations with
group rings.  In the near future we will introduce group ring
data structures.  But there is no aim to deal with group rings
of finitely presented groups, since for arithmetic calculations
with group ring elements it is necessary to decide at least
whether or not two group elements are equal, for which there is
no general algorithmic method with finitely presented groups.

Sorry that GAP does not provide the expected tools in any
straightforward way.  However, does anybody have ideas how
to attack problems of this kind algorithmically?

Kind regards
Thomas Breuer
(sam@math.rwth-aachen.de)



From r.a.fenn@sussex.ac.uk Tue Jul 05 17:10:00 1994
From:           "Roger A Fenn" <r.a.fenn@sussex.ac.uk>
Date:           Tue, 05 Jul 94 17:10 +0200
Subject:        Re: Can GAP do group rings?

> 
> Dear Mrs. and Mr. Forum,
> 
> recently Evelyn Hart asked you whether GAP can handle group rings.
> She told 
> 
> >    I'm interested in the group ring Z[\pi] where Z is the integers
> >    and \pi is the group on four generators, a,b,c,d with one relation 
> >                  a b 1/a 1/b c d 1/c 1/d.
> 
> At the moment GAP has no facilities to do computations with
> group rings.  In the near future we will introduce group ring
> data structures.  But there is no aim to deal with group rings
> of finitely presented groups, since for arithmetic calculations
> with group ring elements it is necessary to decide at least
> whether or not two group elements are equal, for which there is
> no general algorithmic method with finitely presented groups.
> 
> Sorry that GAP does not provide the expected tools in any
> straightforward way.  However, does anybody have ideas how
> to attack problems of this kind algorithmically?
> 
> Kind regards
> Thomas Breuer
> (sam@math.rwth-aachen.de)
> 
> 

How about working with the group ring over a finitely generated free
(non) abelian group?
Roger Fenn.



From charnes@osiris.cs.uow.edu.au Wed Jul 06 14:20:00 1994
From:           "Chris Charnes" <charnes@osiris.cs.uow.edu.au>
Date:           Wed, 06 Jul 94 14:20 +1000
Subject:        GF(2)_polynomials

Dear Gap-Forum,
I would like a routine that does the following:
f, g are polynomials over GF(2), deg(f) >> deg(g), I require the remainder
when g divides f; i.e. f=h*g + r, where deg(r) < deg(g). (The Euc. Algorithm).
Yours C. Charnes



From Joachim.Neubueser@Math.RWTH-Aachen.DE Wed Jul 06 09:43:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Wed, 06 Jul 94 09:43 +0200
Subject:        Re: GF(2)_polynomials

Chris Charnes writes:

> I would like a routine that does the following: f, g are polynomials
> over GF(2), deg(f) >> deg(g), I require the remainder when g divides
> f; i.e. f=h*g + r, where deg(r) < deg(g). (The Euc. Algorithm).

There is  in fact  a  GAP function 'EucledianRemainder'  in the manual
which does exactly what you require:

   gap> p := Z(2)^0*(X(GF(2))^4 + X(GF(2))^2 + X(GF(2)) + 1);;
   gap> q := Z(2)^0*(X(GF(2))^2 + 1);;
   gap> EuclideanRemainder( PolynomialRing( GF( 2 ) ), p, q );
   Z(2)^0*(X(GF(2)) + 1)

If  you find the  input of polynomials  of high degree  over GF(2) too
clumsy in this form there is a trick to save some writing:

   gap> p := Polynomial( GF( 2 ), [ 1, 1, 1, 0, 1 ] * GF( 2 ).one );
   Z(2)^0*(X(GF(2))^4 + X(GF(2))^2 + X(GF(2)) + 1)
   gap> q := Polynomial( GF( 2 ), [ 1, 0, 1, ] * GF( 2 ).one );
   Z(2)^0*(X(GF(2))^2 + 1)
   gap> EuclideanRemainder( PolynomialRing( GF( 2 ) ), p, q );
   Z(2)^0*(X(GF(2)) + 1)

Please  excuse me however  for suggesting first to  look up the manual
before writing to 260 members of the GAP forum. Even though the manual
is long it has an index which in this case gives:

   EuclideanRemainder
     . . .
     for polynomials    392

   Polynomials          383

   Field
     . . .
     finite             375

Kind regards,            Joachim Neubueser



From Martin.Schoenert@Math.RWTH-Aachen.DE Wed Jul 06 17:24:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Wed, 06 Jul 94 17:24 +0100 (MET)
Subject:        Re: Adding Online Documentation (2)

Allan Adler writes in his e-mail message of 1994/07/04

    I have applied the suggestions of Martin Sch"onert for adding online
    documentation. They work. ON the other hand, there are a few drawbacks:
    (1) One has to recompile the entire manual, which is time consuming.

You can use the line '\includeonly{<chapter>,...}' at the top of
'manual.tex' to tell LaTeX which chapters to process.  For the other
chapters only the '.aux' files are read.  This is quite a bit faster.
The line numbers in the table of contents and the index wont be correct,
but that doesn't bother the online help at all.

Allan Adler continues

    (2) One has to use Latex, whereas I would prefer to use Plain TeX

This is very easy to fix.  Write a Plain TeX to LaTeX converter.  This
will even be usefull for other tasks, not only for the GAP online help.
But seriously.  In the manual (at least in those parts that can be read
in the online help), we use so few formatting commands (even lists are
forbidden), that it doesn't make a big difference whether we use LaTeX
or Plain TeX.

Allan Adler continues

    (3) The formatting of the manual is itself unfamiliar. For example,
        one has sections and chapters, but it is not clear how to create
        subsections, subsubsections, etc. With more understanding of the
        formatting, one could make one's own modifications to the code.
        WIthout it, there are just chapters and sections.

What is unfamiliar about chapters and sections?  There is no *technical*
reason to allow only chapters and sections, and no subsections or
subsubsections.  However, I think that two levels are enough in online
documentation.  I often get lost in TeXinfo documentation (e.g., the on
for Emacs), because I don't know how far away from the top I am, whether
I want to go to the next node or up and then to the next, etc.

Allan Adler continues

    (4) One really should not hack the manual.

Well, if you want GAP to automatically find your documentation you have
to change some file.  As it happens this file is 'manual.tex'.  And I
really don't see that adding a few lines to this file can be called
``hacking''.

Allan Adler continues

    It seems that there are various ways to solve these problems. One would
    be to make additional options available to the online help command
    such as to look in other places for TeX files, to accept Plain TeX,
    etc.

Yes, there are lots of nice things one could add to the online help.
I'll do them all in our copious free time ;-)

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 Volkmar.Felsch@Math.RWTH-Aachen.DE Wed Jul 06 18:04:00 1994
From:           "Volkmar Felsch" <Volkmar.Felsch@Math.RWTH-Aachen.DE>
Date:           Wed, 06 Jul 94 18:04 +0200
Subject:        Re: Two questions on Fp groups

Daniel Ruberman writes:

> Dear Gap-Forum: I have the following sort of computation which I would like
> to do using GAP:  I am given a finitely presented group P, a surjective
> homomorphism f from P to a finite group G (given, as, say a subgroup of
> a permutation group), and a subgroup H of G.  I would like to compute the
> abelianization of the inverse image of H under f.  I realize that this
> could be done using the command `AbelianInvariantsSubgroupFpGroup', once
> generators have been chosen for the subgroup f^-1(H).  Finding
> generators is easy `by hand' starting from a transversal of f^-1(H) in P;
> the question is how to find such transversal using GAP.  The key point
> seems to be pulling back a transversal of H in G to P.  Does anyone have
> any pointers on how this can be done in GAP?

Here is an example which demonstrates how you can compute the abelian
invariants of the commutator factor group of the inverse image of H
under f:

  gap> # Let P be a product of a free group on 1 generator and a cyclic group
  gap> # of order 2.
  gap> P := FreeGroup( 2 );
  Group( f.1, f.2 )
  gap> P.relators := [ P.2^2 ];;
  gap> 
  gap> # Let G be the symmetric group of degree 3.
  gap> G := SymmetricGroup( 3 );
  Group( (1,3), (2,3) )
  gap> # Ensure that G has 2 generators.
  gap> Length( G.generators );
  2
  gap> 
  gap> # Get in G a subgroup H of order 2.
  gap> H := Subgroup( G, [ (1,2) ] );
  Subgroup( Group( (1,3), (2,3) ), [ (1,2) ] )
  gap> 
  gap> # Compute the permutation group PG induced by G acting on the right
  gap> # costets of H.
  gap> PG := Operation( G, Cosets( G, H ), OnRight );
  Group( (1,3), (1,2) )
  gap> 
  gap> # Construct a coset table of H in G from the generators of PG which
  gap> # respects square relators of P.
  gap> T := [ ];;
  gap> D := [ 1 .. Maximum( List( PG.generators, LargestMovedPointPerm ) ) ];
  [ 1 .. 3 ]
  gap> for i in [ 1 .. Length( P.generators ) ] do
  >     g := PG.generators[i];
  >     T[2*i-1] := OnTuples( D, g );
  >     p := P.generators[i];
  >     if p^2 in P.relators or p^-2 in P.relators then
  >         T[2*i] := T[2*i-1];
  >     else
  >         T[2*i] := OnTuples( D, g^-1 );
  >     fi;
  > od;
  gap> StandardizeTable( T );
  gap> Print( T, "\n" );
  [ [ 2, 1, 3 ], [ 2, 1, 3 ], [ 3, 2, 1 ], [ 3, 2, 1 ] ]
  gap> 
  gap> # Get a subgroup S of P, enter the coset table into its group record.
  gap> # and compute the abelian invariants of S/S'.
  gap> S := ShallowCopy( Subgroup( P, [ ] ) );;
  gap> S.cosetTable := T;;
  gap> A := AbelianInvariantsSubgroupFpGroupRrs( P, S );
  [ 2, 0, 0 ]

Note that what we are doing here is not quite legal: In general, the
subgroup S which is defined by its generators is not consistent with
the coset table T associated to it (in fact, in our example S is the
trivial subgroup of P, that's why we are cautious and use the
ShallowCopy command). In deed, we make use of the fact that the
'AbelianInvariantsSubgroupFpGroup' command ignores the rest of S if a
record component S.cosetTable is given. You should use this only as a
kind of intermediate solution for your problem. In the next patch of
GAP I will change the command such that it allows the second argument
to be a coset table instead of a subgroup. Unfortunately, it is to
late to insert this change into the current release of GAP 3.4.


I would like to add another hint: Werner Nickel at Aachen is just
finishing a file 'ctpg.g' containing some functions which are useful in
the situation described above. He will put it into the directory

   ~ftp/pub/incoming  on  samson.math.rwth-aachen.de

within the next couple of days. For further details you should look
into the comments of that file.

Volkmar Felsch, Aachen



From charnes@osiris.cs.uow.edu.au Thu Jul 07 10:14:00 1994
From:           "Chris Charnes" <charnes@osiris.cs.uow.edu.au>
Date:           Thu, 07 Jul 94 10:14 +1000
Subject:        Re: GF(2)_polynomials

Dear Joachim, my version of the manual (3.3) has on p 392:
IsLaurentPolynomialRing. I couldn't find any reference to the Euclidean algorithm. Yet
now that you mention it I find it the on line manual. Can I get a more up to date manual?
Yours Chris Charnes



From Joachim.Neubueser@Math.RWTH-Aachen.DE Thu Jul 07 09:32:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Thu, 07 Jul 94 09:32 +0200
Subject:        Re: GF(2)_polynomials

> Dear Joachim, my version of the manual (3.3) has on p 392:
> IsLaurentPolynomialRing. I couldn't find any reference to the 
> Euclidean algorithm. Yet now that you mention it I find it the
> on line manual. Can I get a more up to date manual?
> Yours Chris Charnes

The reference 'EuclideanRemainder' *is* further down  the page!  There
is no manual  entry 'Euclidean algorithm'  since the function names in
general try  to reflect  what   the  function  returns, not by   which
algorithm the result is obtained. By the way, I think that the general
usage of the  term 'Euclidean algorithm'  means the algorithm for  the
computation of the gcd by repeated use of division with remainder, not
just the division with remainder. There is also a function Gcd for the
computation of the  gcd.For polynomials it  is descibed on p.  393 (in
the middle of it!). Please note  that the index gives  p.  392 for it.
This  is because  page  numbers in  the  index   mostly refer to   the
beginning of the section in which the function  is described, which in
this case  is section 18.16 'Ring  Functions for Polynomial Rings'.  I
think it is not too difficult to glance through such a section.

But really please let  us now stop now to  bother other members of the
GAP-forum with  this discussion.  If you   want to continue discussion
how to find a reference please write directly to me.
 
As to versions of the  manual, we are  obviously both using the manual
for GAP 3.3, which today is still the latest, however will be replaced
by a new, extended one with the release of version 3.4., which will be
available with the program via ftp as before.

Joachim Neubueser



From sl25@cus.cam.ac.uk Thu Jul 07 16:07:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Thu, 07 Jul 94 16:07 +0200
Subject:        Re: Can GAP do group rings?

> Dear Mrs. and Mr. Forum,
> 
> recently Evelyn Hart asked you whether GAP can handle group rings.
> She told 
> 
> >    I'm interested in the group ring Z[\pi] where Z is the integers
> >    and \pi is the group on four generators, a,b,c,d with one relation 
> >                  a b 1/a 1/b c d 1/c 1/d.
> 
> At the moment GAP has no facilities to do computations with
> group rings.  In the near future we will introduce group ring
> data structures.  But there is no aim to deal with group rings
> of finitely presented groups, since for arithmetic calculations
> with group ring elements it is necessary to decide at least
> whether or not two group elements are equal, for which there is
> no general algorithmic method with finitely presented groups.
> 
> Sorry that GAP does not provide the expected tools in any
> straightforward way.  However, does anybody have ideas how
> to attack problems of this kind algorithmically?

The group in question appears to admit a finite confluent rewriting
system (with the RPO, according to Derek Holt's Knuth-Bendix
program). If this is true (ie if I haven't made a typing mistake)
then the word problem is easily solvable and so computation in the
group ring should be feasible. As yet GAP has neither group rings
nor groups given by confluent rewriting systems (except AG groups) ,
but they could be added within the domain system.

	Steve Linton



From dfh@maths.warwick.ac.uk Thu Jul 07 15:35:00 1994
From:           "Derek Holt" <dfh@maths.warwick.ac.uk>
Date:           Thu, 07 Jul 94 15:35 +0100
Subject:        Re: Can GAP do group rings?

> > recently Evelyn Hart asked you whether GAP can handle group rings.
> > She told 
> > 
> > >    I'm interested in the group ring Z[\pi] where Z is the integers
> > >    and \pi is the group on four generators, a,b,c,d with one relation 
> > >                  a b 1/a 1/b c d 1/c 1/d.
> > 
> > At the moment GAP has no facilities to do computations with
> > group rings.  In the near future we will introduce group ring
> > data structures.  But there is no aim to deal with group rings
> > of finitely presented groups, since for arithmetic calculations
> > with group ring elements it is necessary to decide at least
> > whether or not two group elements are equal, for which there is
> > no general algorithmic method with finitely presented groups.
> > 
> > Sorry that GAP does not provide the expected tools in any
> > straightforward way.  However, does anybody have ideas how
> > to attack problems of this kind algorithmically?
> 
> The group in question appears to admit a finite confluent rewriting
> system (with the RPO, according to Derek Holt's Knuth-Bendix
> program). If this is true (ie if I haven't made a typing mistake)
> then the word problem is easily solvable and so computation in the
> group ring should be feasible. As yet GAP has neither group rings
> nor groups given by confluent rewriting systems (except AG groups) ,
> but they could be added within the domain system.
> 
> 	Steve Linton


There are some tentative plans to add groups given by confluent rewriting
systems to GAP.
The group in question is a two-dimensional surface group, and LeChenadec
proved that all such groups have confluent rewriting systems with
respect to a short-lex ordering (which is preferable to RPO, because words
are reduced to their shortest possible forms). The snag is that the
ordering of the generators that you need for this is not the obvious one.
In this example, the ordering  a < c < b < d works, but a < b < c < d does not.
The complete rewriting system is

a*a^-1 > 1
a^-1*a > 1
c*c^-1 > 1
c^-1*c > 1
b*b^-1 > 1
b^-1*b > 1
d*d^-1 > 1
d^-1*d > 1
b*a*b^-1*a^-1 > c*d*c^-1*d^-1
b^-1*c*d*c^-1 > a*b^-1*a^-1*d
b^-1*a^-1*d*c > a^-1*b^-1*c*d
b*a^-1*b^-1*c > a^-1*d*c*d^-1
d*c*d^-1*c^-1 > a*b*a^-1*b^-1
d*c^-1*d^-1*a > c^-1*b*a*b^-1
d^-1*a*b*a^-1 > c*d^-1*c^-1*b

Derek Holt.



From timhsu@math.princeton.edu Tue Jul 12 18:08:00 1994
From:           "Tim Hsu" <timhsu@math.princeton.edu>
Date:           Tue, 12 Jul 94 18:08 -0400 (EDT)
Subject:        Words for secondary generators

I've been trying to set up a calculation using AugmentedCosetTableRrs.
Now, when you have the statement

    aug := AugmentedCosetTableRrs(G,ct,2,"_q");

(ct is the coset table for a subgroup S in G),
aug.primaryGeneratorWords contains descriptions of the primary
generators of S in terms of words in the generators of G.  According
to the GAP manual, aug.tree, (in some form) contains a description of
the secondary generators of S in terms of the primary relators, so in
theory, you should be able to obtain the secondary generators of S in
terms of words in G.  Could someone tell me how to get this from the
tree?

My next question is, do RewriteSubgroupRelators,
PresentationAugmentedCosetTable, TzGo, or FpGroupPresentation change
the ordering of the generators in any way, other than eliminating
generators?  Thanks very much.

    Tim Hsu



From gaehler@msc.cornell.edu Wed Jul 20 13:31:00 1994
From:           "Franz Gaehler" <gaehler@msc.cornell.edu>
Date:           Wed, 20 Jul 94 13:31 -0400
Subject:        space groups, and a bug

Der GAPers,

I have been trying to do some space group computations with GAP,
and ran into what seems to be a bug (gap3r3p0 on IBM RS/6000).
Since infinite matrix groups are not supported, the only way to 
deal with space groups seemed to be to represent them as finitely 
presented groups. I was interested in the subgroup structure of 
some 6D space group, whose point group is isomorphic to A5. 
In order to make the problem simpler, I have divided all groups 
by a translation sublattice common to all space groups I wanted 
to consider. Here is the session: 

gap> f := FreeGroup("A","B","t1","t2","t3","t4","t5","t6");;
gap> 
gap> A :=f.1;; B := f.2;; 
gap> t1:=f.3;; t2:=f.4;; t3:=f.5;; t4:=f.6;; t5:=f.7;; t6:=f.8;;
gap> 
gap> # relators between rotations
gap> 
gap> rel:=[ A^5, B^3, (A*B)^2 ];;
gap> 
gap> # add relators between translations
gap> 
gap> Append(rel,
>   [(t1*t2)/(t2*t1), (t1*t3)/(t3*t1), (t1*t4)/(t4*t1), 
>    (t1*t5)/(t5*t1), (t1*t6)/(t6*t1),
>    (t2*t3)/(t3*t2), (t2*t4)/(t4*t2), 
>    (t2*t5)/(t5*t2), (t2*t6)/(t6*t2),
>    (t3*t4)/(t4*t3), (t3*t5)/(t5*t3), (t3*t6)/(t6*t3),
>    (t4*t5)/(t5*t4), (t4*t6)/(t6*t4), (t5*t6)/(t6*t5)]);;
gap> 
gap> # add relators beween rotations and translations
gap> 
gap> Append(rel,
>   [(A*t1)/(t1*A), (A*t2)/(t3*A), (A*t3)/(t4*A),
>    (A*t4)/(t5*A), (A*t5)/(t6*A), (A*t6)/(t2*A),
>    (B*t1)/(t2*B), (B*t2)/(t3*B), (B*t3)/(t1*B),
>    (B*t4)/(t6*B), (t4*B*t5)/(B), (t5*B*t6)/(B)]);;
gap> 
gap> # divide by sublattice
gap> 
gap> Append(rel,
>   [t2*t3*t4*t5*t6,     (t1*t3*t6)/(t4*t5), (t1*t4*t2)/(t5*t6),
>    (t1*t5*t3)/(t6*t2), (t1*t6*t4)/(t2*t3), (t1*t2*t5)/(t3*t4)]);;
gap> 
gap> # define the big, symmorphic space group
gap> 
gap> spg:=f/rel;;
gap> 
gap> A :=spg.1;; B :=spg.2;;
gap> t1:=spg.3;; t2:=spg.4;; t3:=spg.5;; t4:=spg.6;; t5:=spg.7;; t6:=spg.8;;
gap> 
gap> # here are some (sub-) space groups having the translation sublattice 
gap> # divided out above
gap> 
gap> ug0:=Subgroup(spg, [A, B]);;
gap> ug1:=Subgroup(spg, [t1*t3^-1*t5*A, B]);;
gap> ug2:=Subgroup(spg, [t1^2*t3^-2*t5^2*A, B]);;
gap> ug3:=Subgroup(spg, [t1^3*t3^-3*t5^3*A, B]);;
gap> ug4:=Subgroup(spg, [t1^4*t3^-4*t5^4*A, B]);;
gap> 
gap> # all these subgroups have index 125 in spg
gap> 
gap> Index(spg, ug0);
125
gap> 
gap> # are there any groups between spg and ug0 ?
gap> 
gap> lst:=LowIndexSubgroupsFpGroup(spg, ug0, 25);
[ Subgroup( Group( A, B, t1, t2, t3, t4, t5, t6 ), [ A, t1 ] ) ]
gap> 
gap> # this is wrong, as is the following result!
gap>
gap> List(lst,h->Index(spg,h));
[ 1 ]  
gap>
gap> # correct is:
gap> 
gap> Index(spg, Subgroup(spg, [ A, t1 ]) );
300
gap> 
gap> Size(spg); Size(ug0); Size( Subgroup(spg, [ A, t1 ]));
7500
60
25

Anyone know what's going on here? I had been asking for subgroups 
of index (at most) 25 in spg, not of order 25!

How do other people deal with space groups? Finitely presented
groups do not seem to be ideal. When I do something like

LowIndexSubgroupsFpGroup(spg, TrivialSubgroup(spg), 125);

it takes ages (after some 30 hours (on an IBM RS/6000) it was still
not finished, so I stopped it).

Another option would be to represent space group elements by
augmented matrices. The problem of infinite matrix groups could
be circumvented by dividing out a suitable sublattice. The
translation part of augmented matrices then would have to
be taken modulo a lattice. If matrices are expressed with respect
to a lattice basis of that lattice, the translation components
had to be taken modulo 1, at least when comparing matrices,
possibly also in matrix multiplication, in order to prevent
elements from growing indefinitely.

Perhaps even better would be to set up a group of translations as
Z^n modulo some sublattice L of Z^n (possibly with L=m*Z^n).
If representatives of such equivalence classes could be represented
as integral vectors modulo L, one would have a natural action
of a matrix point group on such translation vectors. One could then
build a semi-direct product of a finite matrix (point) group with
such a finite translation group, and consider suitable subgroups
thereof.

What would be involved in using such a scheme? Implementation of
a new domain of 'augmented matrices modulo a lattice', or a new
domain of translations in 'Z^n modulo L'? Would this be feasible? 
How could this be implemented? And would it be efficient? 

Thanks for any suggestions.

                            Best regards, Franz Gaehler



From Martin.Schoenert@Math.RWTH-Aachen.DE Wed Jul 20 22:53:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Wed, 20 Jul 94 22:53 +0100 (MET)
Subject:        'samson' died

Monday 11th our central server 'samson' died.  Since neither Frank nor I
were in Aachen for that week, the broken machine could not be replaced
until Saturday 16th.  E-mail messages mailed between Monday evening and
Wednesday noon bounced back to the originator.  Later E-mail messages
might have been lost.  So if you mailed an e-mail message last week to
one of us here in Aachen and are still waiting for a response, you should
send that e-mail message again.  Other services, e.g., 'ftp' were also
unavailable during this week.  By now everything should be back to
normal.  Sorry for any inconveniences.

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 gaehler@msc.cornell.edu Wed Jul 20 13:31:00 1994
From:           "Franz Gaehler" <gaehler@msc.cornell.edu>
Date:           Wed, 20 Jul 94 13:31 -0400
Subject:        space groups, and a bug

[Almost all mailer daemons rejected this message originally,
because the 'From:' line contained a single unbalanced '"'.
Apologies to those who have more forgiving mailer daemons,
and see this message now for the second time.  mS]

Der GAPers,

I have been trying to do some space group computations with GAP,
and ran into what seems to be a bug (gap3r3p0 on IBM RS/6000).
Since infinite matrix groups are not supported, the only way to 
deal with space groups seemed to be to represent them as finitely 
presented groups. I was interested in the subgroup structure of 
some 6D space group, whose point group is isomorphic to A5. 
In order to make the problem simpler, I have divided all groups 
by a translation sublattice common to all space groups I wanted 
to consider. Here is the session: 

gap> f := FreeGroup("A","B","t1","t2","t3","t4","t5","t6");;
gap> 
gap> A :=f.1;; B := f.2;; 
gap> t1:=f.3;; t2:=f.4;; t3:=f.5;; t4:=f.6;; t5:=f.7;; t6:=f.8;;
gap> 
gap> # relators between rotations
gap> 
gap> rel:=[ A^5, B^3, (A*B)^2 ];;
gap> 
gap> # add relators between translations
gap> 
gap> Append(rel,
>   [(t1*t2)/(t2*t1), (t1*t3)/(t3*t1), (t1*t4)/(t4*t1), 
>    (t1*t5)/(t5*t1), (t1*t6)/(t6*t1),
>    (t2*t3)/(t3*t2), (t2*t4)/(t4*t2), 
>    (t2*t5)/(t5*t2), (t2*t6)/(t6*t2),
>    (t3*t4)/(t4*t3), (t3*t5)/(t5*t3), (t3*t6)/(t6*t3),
>    (t4*t5)/(t5*t4), (t4*t6)/(t6*t4), (t5*t6)/(t6*t5)]);;
gap> 
gap> # add relators beween rotations and translations
gap> 
gap> Append(rel,
>   [(A*t1)/(t1*A), (A*t2)/(t3*A), (A*t3)/(t4*A),
>    (A*t4)/(t5*A), (A*t5)/(t6*A), (A*t6)/(t2*A),
>    (B*t1)/(t2*B), (B*t2)/(t3*B), (B*t3)/(t1*B),
>    (B*t4)/(t6*B), (t4*B*t5)/(B), (t5*B*t6)/(B)]);;
gap> 
gap> # divide by sublattice
gap> 
gap> Append(rel,
>   [t2*t3*t4*t5*t6,     (t1*t3*t6)/(t4*t5), (t1*t4*t2)/(t5*t6),
>    (t1*t5*t3)/(t6*t2), (t1*t6*t4)/(t2*t3), (t1*t2*t5)/(t3*t4)]);;
gap> 
gap> # define the big, symmorphic space group
gap> 
gap> spg:=f/rel;;
gap> 
gap> A :=spg.1;; B :=spg.2;;
gap> t1:=spg.3;; t2:=spg.4;; t3:=spg.5;; t4:=spg.6;; t5:=spg.7;; t6:=spg.8;;
gap> 
gap> # here are some (sub-) space groups having the translation sublattice 
gap> # divided out above
gap> 
gap> ug0:=Subgroup(spg, [A, B]);;
gap> ug1:=Subgroup(spg, [t1*t3^-1*t5*A, B]);;
gap> ug2:=Subgroup(spg, [t1^2*t3^-2*t5^2*A, B]);;
gap> ug3:=Subgroup(spg, [t1^3*t3^-3*t5^3*A, B]);;
gap> ug4:=Subgroup(spg, [t1^4*t3^-4*t5^4*A, B]);;
gap> 
gap> # all these subgroups have index 125 in spg
gap> 
gap> Index(spg, ug0);
125
gap> 
gap> # are there any groups between spg and ug0 ?
gap> 
gap> lst:=LowIndexSubgroupsFpGroup(spg, ug0, 25);
[ Subgroup( Group( A, B, t1, t2, t3, t4, t5, t6 ), [ A, t1 ] ) ]
gap> 
gap> # this is wrong, as is the following result!
gap>
gap> List(lst,h->Index(spg,h));
[ 1 ]  
gap>
gap> # correct is:
gap> 
gap> Index(spg, Subgroup(spg, [ A, t1 ]) );
300
gap> 
gap> Size(spg); Size(ug0); Size( Subgroup(spg, [ A, t1 ]));
7500
60
25

Anyone know what's going on here? I had been asking for subgroups 
of index (at most) 25 in spg, not of order 25!

How do other people deal with space groups? Finitely presented
groups do not seem to be ideal. When I do something like

LowIndexSubgroupsFpGroup(spg, TrivialSubgroup(spg), 125);

it takes ages (after some 30 hours (on an IBM RS/6000) it was still
not finished, so I stopped it).

Another option would be to represent space group elements by
augmented matrices. The problem of infinite matrix groups could
be circumvented by dividing out a suitable sublattice. The
translation part of augmented matrices then would have to
be taken modulo a lattice. If matrices are expressed with respect
to a lattice basis of that lattice, the translation components
had to be taken modulo 1, at least when comparing matrices,
possibly also in matrix multiplication, in order to prevent
elements from growing indefinitely.

Perhaps even better would be to set up a group of translations as
Z^n modulo some sublattice L of Z^n (possibly with L=m*Z^n).
If representatives of such equivalence classes could be represented
as integral vectors modulo L, one would have a natural action
of a matrix point group on such translation vectors. One could then
build a semi-direct product of a finite matrix (point) group with
such a finite translation group, and consider suitable subgroups
thereof.

What would be involved in using such a scheme? Implementation of
a new domain of 'augmented matrices modulo a lattice', or a new
domain of translations in 'Z^n modulo L'? Would this be feasible? 
How could this be implemented? And would it be efficient? 

Thanks for any suggestions.

                            Best regards, Franz Gaehler



From Martin.Schoenert@Math.RWTH-Aachen.DE Wed Jul 20 23:54:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Wed, 20 Jul 94 23:54 +0100 (MET)
Subject:        GAP version 3 release 4 finally release

Lehrstuhl D  f"ur Mathematik is  pleased to announce  the availability of
GAP version 3 release 4.

GAP 3.4  contains   many new functions.   The  following  lists  only the
highlights, not the many improvments throughout the library.

GAP now supports algebras, modules, and character functions.

GAP now contains functions to compute Galois groups and field extensions.

GAP now  contains functions   for   the determination of  ``special    ag
systems'' of solvable groups,  which e.g. allow  the determination of all
maximal subgroups, pre-Frattini groups, and Eulerian functions.

GAP  contains  new data  libraries of  transitive  permutation groups and
crystallographic groups.

The Meataxe, Vector Enumerator, Smash, and ANU SQ packages are new.

Currently GAP 3.4 can only  be found on 'ftp.math.rwth-aachen.de', but it
should make its way to the other 'ftp' servers soon.

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 Werner.Nickel@Math.RWTH-Aachen.DE Fri Jul 22 09:29:00 1994
From:           "Werner Nickel" <Werner.Nickel@Math.RWTH-Aachen.DE>
Date:           Fri, 22 Jul 94 09:29 WET
Subject:        Re: space groups and a bug

Dear Forum,

Franz G"ahler  reported in the GAP-Forum about  a bug he observed with
the   command  LowIndexSubgroupsFpGroup() and, moreover,  raised  some
general questions  about handling space groups in  GAP. Let  us answer
these in turn.

1. There is indeed a bug in LowIndexSubgroupsFpGroup(). However, it is
easily corrected.  What  happens  is  the following. Let  as  a second
argument  of that  command  a non-trivial   subgroup U  be   given and
therefore, subgroups V  containing  U  be  sought. Then   the  command
produces all these subgroups but gives as output only sets of elements
that together  with generating    elements  of U  will generate    the
subgroups V.  Of course,  what should  have been done   is to  give as
output a full generating set for each V  which can easily be obtained.
Otherwise, the command seems to work correctly  and indeed in the case
investigated by Franz   G"ahler the only subgroup properly  containing
ug0 is the  full group. GAP knows  in addition to the generating  sets
for the subgroups V also their coset tables and that is why it reports
correctly from this knowledge that the  only subgroup V, it found, has
index 1.

Unfortunately, the  bug   is still  in  GAP  3.4 that  has  just  been
released. It will be corrected in the first patch.

2. Using the command  LowIndexSubgroupsFpGroup() on this group  with a
presentation on 8  generators and asking for  subgroups of index up to
125   is indeed  hopeless. Please  note   that  this command  works by
searching  in a  backtrack   fashion  for homomorphic  images  of  the
finitely presented  group in the  symmetric group on 125 letters. Even
though that backtrack is  rather clever, this is hopeless.  Generally,
it should be understood that this command  has reasonable chances only
for  rather small numbers  of generators  (2  or 3 say) and  that `low
index' is better understood even  in most such cases  to be well under
100.

3. We  do not have special  routines for investigating space groups in
GAP as yet. But  even though this  is not at the  top of  our priority
list, there are intentions to implement such. Please note that GAP 3.4
provides for the  first time the  library of  all  space groups up  to
dimension 4 from  Brown et al.  One way to  get certain information is
certainly to   follow  the suggestion of   Franz  G"ahler to calculate
modulo  certain invariant sublattices of  the translation lattice. For
such finite factor  groups of the  space group one can, for  instance,
use faithful permutation  representations. In the  case of the  factor
group of the    space group that Franz  G"ahler   investigates  such a
faithful permutation representation can be obtained  on the 125 cosets
of   the subgroup ug0.    A permutation group   of degree  125 can, of
course, be very well handled in GAP:

gap> T := CosetTableFpGroup( spg, ug0 );;
#I  CosetTableFpGroup called:
#I      defined deleted alive   maximal
#I	127	2	125	127
gap> Pspg := Group( List( T{[1,3..15]}, t->PermList(t) ), () );;
gap> Size( Pspg );
7500

However, eventually it would indeed be better  to create a new kind of
group elements   calculating   with  affine  matrices  modulo  certain
translations as Franz G"ahler suggests.

We  would like to mention  in this context that   at present with some
students we are  looking at the task of  finding  the (Wyckoff classes
of)  special positions for a given  space  group. However, it may take
some time until such functions will be available.

Joachim Neub"user, Werner Nickel.



From Joachim.Neubueser@Math.RWTH-Aachen.DE Fri Jul 22 10:07:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Fri, 22 Jul 94 10:07 +0200
Subject:        Re: Words for secondary generators

Tim Hsu asked in the forum:
 
> I've been trying to set up a calculation using AugmentedCosetTableRrs.
> Now, when you have the statement
> 
>     aug := AugmentedCosetTableRrs(G,ct,2,"_q");
> 
> (ct is the coset table for a subgroup S in G),
> aug.primaryGeneratorWords contains descriptions of the primary
> generators of S in terms of words in the generators of G.  According
> to the GAP manual, aug.tree, (in some form) contains a description of
> the secondary generators of S in terms of the primary relators, so in
> theory, you should be able to obtain the secondary generators of S in
> terms of words in G.  Could someone tell me how to get this from the
> tree?
> 
> My next question is, do RewriteSubgroupRelators,
> PresentationAugmentedCosetTable, TzGo, or FpGroupPresentation change
> the ordering of the generators in any way, other than eliminating
> generators?  Thanks very much.
 
I just want to acknowledge that the message has  been read. The person
who has  implemented these routines, and  therefore probably  can best
answer  these questions, is Volkmar   Felsch,  who  at present is   on
holidays. We will come back to the  question whatever the exact answer
will be, please excuse the delay.    Joachim Neubueser



From leonard@qmw.ac.uk Fri Jul 22 15:04:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Fri, 22 Jul 94 15:04 BST
Subject:        Gap 3.4

Dear Forum,

Yesterday, I ftp'd Gap 3.4, and it set up effortlessly on my IBM PC
(after I deleted Gap 3.3 to make room).  Of course I immediately wanted
to check out GRAPE 2.2 (the Gap-only functions should work under
MS-DOS).  When I did  RequirePackage("grape");  I got a message that
grape was not installed.  The problem was solved by changing certain
"/" to "\\" in gap3r4p0\lib\abattoir.g, so that the pathnames would
work with MS-DOS.  Is there any way to code the path construction so
that the same library functions work under both Unix and MS-DOS?

But anyway, I look forward to exercising many of the new features in 3.4.

Best regards,   Leonard.



From leonard@qmw.ac.uk Fri Jul 22 15:32:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Fri, 22 Jul 94 15:32 BST
Subject:        Grape 2.2 in Gap 3.4

Dear Grape Users,

The new release of Gap 3.4 contains the new release of Grape 2.2.  Few
changes have been made, but the user is warned that the Grape function
Components  is now called  ConnectedComponents,  the function
Component  is now called  ConnectedComponent,  and requires the input
graph to be simple.  Also, the default MAXN for nauty is now set to
8192.

Have fun.

Leonard Soicher



From dima@maths.uwa.edu.au Sat Jul 23 21:52:00 1994
From:           "Dima Pasechnik" <dima@maths.uwa.edu.au>
Date:           Sat, 23 Jul 94 21:52 WST
Subject:        Read()

Dear Forum,

I encountered a problem with the function Read.
Namely, if I have a file in which a BIG permutation group, as well as
its subgroup is stored in the format I give below, GAP starts
MakeStabChain, which in my case is unnecessary and takes forever to
complete (I discovered this by pressing ^C after waiting for a while for
the prompt to appear.)

The format is as follows:

g:=Group(<permutations>);;
g.name:="g";;
h:=Subgroup(g,[<permutations>]);;

This does NOT happen if the group isn't too big (in my case g is of degree
about 1500 and the number of generators is about 15 for both g and h).
(I can supply the file with it upon request.)

This happens equally for versions 3.3 and 3.4.

(There is a certain way around it, I can keep generators as single
permutations and recreate the group after entering them.)


Regards,
Dima



From Alexander.Hulpke@Math.RWTH-Aachen.DE Sun Jul 24 15:44:00 1994
From:           "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Date:           Sun, 24 Jul 94 15:44 +0200
Subject:        Re: Read() (Rather: 'Subgroup')

Dear Forum,

Dima Pasechnik asked:
> 
> I encountered a problem with the function Read.
> Namely, if I have a file in which a BIG permutation group, as well as
> its subgroup is stored in the format I give below, GAP starts
> MakeStabChain, which in my case is unnecessary and takes forever to
> complete (I discovered this by pressing ^C after waiting for a while for
> the prompt to appear.)

The problem is not due to 'Read' but due to 'Subgroup'.
'Subgroup' will check in general, whether the elements given as generators
are indeed elements of the group. To test this, it has to create a
stabilizer chain (unless the generators are a subset of the groups
generators).

> g:=Group(<permutations>);;
> g.name:="g";;
> h:=Subgroup(g,[<permutations>]);;
> 
> This does NOT happen if the group isn't too big

According to my knowledge, this should as well happen if the group is small
(you may check with 'RecFields(g)' that indeed a stabilizer chain is bound
after loading and creating a subgroup). However for smaller groups this
process is substancially faster and may go unnoticed.

If you really want 'h' to be a 'Subgroup', you could proceed as follows:
As the file you're loading did not fall from the sky, you will probably know
already the size of g. Telling this to GAP will enourmously increase the
speed of creating the stabilizer chain. You can do this, for example by
inserting one line in your file:

> g:=Group(<permutations>);;
> g.name:="g";;
g.size:=xxxxx; # whatever it is
> h:=Subgroup(g,[<permutations>]);;

In this case, a random Schreier/Sims algorithm gets called, which is safe
as the size is already known. In this situation, the random algorithm still
guarantees that the stabilizer chain is correct.
The time of computing the stabilizer chain then should be almost
insignificant compared to loading the file.
This feature is new to version 3.4.

I would like to take the opportunity and remark that by the new command
'StabChain' you can also force a random Schreier/Sims algorithm to be used
even if the groups size is not yet known. In many other cases of large
permutation groups this might be quite helpful.

Alexander Hulpke



From dima@maths.uwa.edu.au Mon Jul 25 08:41:00 1994
From:           "Dima Pasechnik" <dima@maths.uwa.edu.au>
Date:           Mon, 25 Jul 94 08:41 WST
Subject:        Re: Read() (Rather Subgroup(...

Dear Forum,

Let g:=Group(....). Is there any natural way to avoid calling a procedure
checking whether h:=Subgroup(g,[...]) is indeed a subgroup in the
moment of creating h?

As we were told, this checking might be rather expensive if the
generators of h does not form a subset of g.generators.

Suppose one knows that the generators of h are words in g.generators.
Then a strange way to create h fast is to add these words into
g.generators. 
Can it be avoided?

For instance, if g is a matrix group, there are no efficient ways to
check that h<=g, so in fact I several times ran into this problem,
when I created a subgroup of a matrix group, and
gave up without understanding what went wrong.


Regards,
	Dima



From Frank.Celler@Math.RWTH-Aachen.DE Mon Jul 25 10:02:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Mon, 25 Jul 94 10:02 WET
Subject:        Re: Read() (Rather Subgroup(...

Dear Dima,

>>   Let g:=Group(....). Is there any natural way to avoid calling a procedure
>>   checking whether h:=Subgroup(g,[...]) is indeed a subgroup in the
>>   moment of creating h?

in  most cases avoiding the  dispatcher will disable  all test, eg, in
order to create a subgroup without checking the generators one can use
'h  := g.operations.Subgroup( Parent(g), [  <gens>  ] )'. However,  if
<gens> are not elements of <g>  computations with <h> might give wrong
result without warning.

best wishes
  Frank



From a.mathas@ic.ac.uk Mon Jul 25 11:43:00 1994
From:           "Andrew Mathas" <a.mathas@ic.ac.uk>
Date:           Mon, 25 Jul 94 11:43 +0100
Subject:        operations query

Here is a simple question which must have a simple answer. I have defined
a record which has the form:	
	rec (elt := a list, operations := Ops, ...)
where Ops := rec (...). Inside the operations are various functions defining 
printing for the record, addition, and so on. I wanted to add a Length
function for these elements so I wrote a Ops.Length function which of
course doesn not work. Evidiently functions like "Print", "+" and so on
are handled differently than other functions. So how do I add a Length
function to this record?

Incidently, unless I have missed it the description of such things does not
appear to be in the manual. Similarly for the use of "arg" in function
definitions. Are these documented anywhere?

Thanks for your help,
	Andrew Mathas



From fisk@polar.bowdoin.edu Mon Jul 25 11:52:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Mon, 25 Jul 94 11:52 -0400
Subject:        gap 3.4 under emacs 

Dear gap forum, 

If I use the -n option in gap to prevent echoing in my emacs shell
window, then I can not access the help system.  Here is what happens:
(using emacs 19.22)

[gap3r4p0]< 14 > bin/gap -b -m 4 -l lib/ -h doc/

gap> ?
?
    Welcome to GAP ___________________________________________ Welcome to GAP

    Welcome to GAP.

    GAP is a system for computational group theory.

    Enter '?About GAP'    for a step by step introduction to GAP.
    Enter '?Help'         for information how to use the GAP help system.
    Enter '?Chapters'     for a list of the chapters of the GAP help system.
    Enter '?Copyright'    for the terms under which you can use and copy GAP.

    In each case do *not* enter the single quotes(') , they are  used in help
    sections only to delimit text that you actually enter.

gap> 
[gap3r4p0]< 15 > bin/gap -b -n -m 4 -l lib/ -h doc/

gap> ?
Syntax error: expression expected
?
^
> 


-----------

Another question - with the manual growing several hundred pages every
release, it's getting hard to even know what is even available.  Has
anyone written a converter to info?  Such a format would make it easy
to browse the manual.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From eamonn.obrien@maths.anu.edu.au Tue Jul 26 23:21:00 1994
From:           "Eamonn O'Brien" <eamonn.obrien@maths.anu.edu.au>
Date:           Tue, 26 Jul 94 23:21 +1000
Subject:        MeatAxe package of GAP 3.4 

I'm using the MeatAxe package in GAP 3.4 and have computed
a submodule lattice using the Lattice command.

I now use the following command to see the basis for one
of the submodules computed:

gap>  B := GeneratorsSubmodule (L, 6);
MeatAxeMat( "/usr/tmp/aaaa09933/c/g.s5", GF(5^2), [ 4, 16 ] )

gap> Display (B);
MeatAxe.Matrix := [
[0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),0*Z(25),
 0*Z(25),0*Z(25),Z(25)^24,0*Z(25),0*Z(25),0*Z(25)] ];


I can display the basis using the Display function.

However, I want to assign the basis to a variable
back within GAP and work with its vectors.

Can anyone advise me how to do this?

I'm sure it's trivial and present in the 
documentation but I can't seem to find it.

Thanks,
Eamonn 



From Alexander.Hulpke@Math.RWTH-Aachen.DE Tue Jul 26 16:06:00 1994
From:           "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Date:           Tue, 26 Jul 94 16:06 +0200
Subject:        Missing documentation in GAP 3r4p0

Dear GAP-Forum,

due to an error for which I unfortunately cannot blame a computer,
part of the new documentation for GAP 3.4 has not been included in the
release (while the corresponding code is included). This documentation covers:

o The library of transitive groups,

o Generic algebraic extensions of fields and

o Computation of (isomorphism types) of Galois groups.

This documentation will be included in the next patch, that is to be
released in the near future. 

I apologize for this mistake. If anyone is in urgent need of the
documentation, I can provide him the corresponding files already now.

Alexander Hulpke  (Alexander.Hulpke@math.rwth-aachen.de)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

In short, the new commands include:

TransitiveGroup(deg,nr);  

Creates a transitive permutation group of the isomorphy type given in
Butler/McKay: the transitive groups of degree up to 11, CommAlg 11(1983),
863--911

TransitiveIdentification(grp);

if grp is a transitive permutation group of degree d<=11, then this command
yields the number of the permutation isomorphy type of grp, i.e. 
grp ~= TransitiveGroup(d,TransitiveIdentification(grp)).

if f is a polynomial over the rationals, then 

Galois(f);

yields the number of the isomorphism type of the corresponding Galois group.
(This might take substantial time).

ProbabilityShapes(f);

return a list of guesses for the isomorphism type of the Galois group. It is
much faster, but might be wrong.

If f is any polynomial, then

AlgebraicExtension(f);

creates the corresponding algebraic extension,

RootOf(f);

the generating element. The base field is naturally embedded.

Multiple algebraic extensions are not supported.

Polynomial factorization is possible over Algebraic extensions of finite
fields or the rationals (as well as over these ground fields themselves)\
by specifying a polynomial over this field and using 'Factor'.
Polynomial factorization over the rationals has been possible (but
undocumented) already in version 3.3, but this algorithm has been improved
significantly in 3.4.



From leonard@qmw.ac.uk Tue Jul 26 15:47:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Tue, 26 Jul 94 15:47 BST
Subject:        StabChain

Dear Forum,

Why does Gap feel it is necessary to compute a stabilizer chain for  G  in 
order to compute  RepresentativeOperation(G,1,pt)  ?

Regards,   Leonard.



From dima@maths.uwa.edu.au Tue Jul 26 23:07:00 1994
From:           "Dima Pasechnik" <dima@maths.uwa.edu.au>
Date:           Tue, 26 Jul 94 23:07 WST
Subject:        Re: StabChain

> 
> Dear Forum,
> 
> Why does Gap feel it is necessary to compute a stabilizer chain for  G  in 
> order to compute  RepresentativeOperation(G,1,pt)  ?

Most probably, it does not store words in generators of G when it 
computes Orbit(G,1). Knowing these words would be the way around
computing StabChain.

Regards,
Dima



From Frank.Celler@Math.RWTH-Aachen.DE Wed Jul 27 09:30:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Wed, 27 Jul 94 09:30 WET
Subject:        Re: gap 3.4 under emacs

Dear Steve,
  
     If I use the -n option in gap to prevent echoing in my emacs shell
     window, then I can not access the help system.  Here is what happens:
     (using emacs 19.22)

yes, this is correct.  "-n" will prevent  all line editing features including
history and help.  However, there is an EMACS  mode "gap-process", written by
Michael Smith (Michael.Smith@Pell.ANU.Edu.AU), which  might help (the el file
is in gap3r4p0/etc).  This mode implements "?"   with output redirection into
another buffer, but there are problems with large  help sections.  I will try
to find out if Michael has already updated his mode.

     Another question - with the manual growing several hundred pages every
     release, it's getting hard to even know what is even available.  Has
     anyone written a converter to info?  Such a format would make it easy
     to browse the manual.

There was a  discussion on that  subject  some time  ago,  I will  append the
relevant mail.  It should not be too hard to write such a convert, but at the
moment  no one in  Aachen has enough time  to  do so.  If  anyone has already
written  a convert, please upload it  into our incoming directory.  If anyone
needs information  about the  structure of  the  latex files, please  contact
"Gap-Trouble@Math.RWTH-Aachen.DE".

best wishes
  Frank

=============================================================================
Date: Fri, 12 Mar 93 17:18:13 +0100
Comment: GAP Forum
Originator: gap-forum@samson.math.rwth-aachen.de
Errors-To: martin@samson
Reply-To: <gap-forum@samson>
Sender: gap-forum@samson
Version: 5.31 -- Copyright (c) 1991, Anastasios Kotsikonas
From: martin@bert.math.rwth-aachen.de (  Martin Schoenert)
To: Multiple recipients of list <gap-forum@samson>
Subject: Re: RE: new GAP for OS/2 with hypertext documentation


Arnaldo Mandel writes in his e-mail message of 1993/03/11

    One of the things I miss on GAP is good online documentation, fur the
    unix environment implementation.  My favorite choice would be an Emacs
    info document, although I can survive other formats which allow fast
    online search (thus, havin the manual online as a .dvi or .ps file
    will not cut it).  Is there any hope that such a thing will ever
    appear?  Maybe this IPF hypertext can be ported.

I would like to know which features of GNU EMACS' info mode you miss in
GAP's on-line help.  I think that both allow roughly the same.

1)  You know exactly what you are looking for:

    In EMACS you use 'g <name-of-node>'.

    In GAP you use '?<name-of-section>'.

2)  You know roughly what you are looking for:

    In EMACS you go to one of the indices (say with 'g concept index'),
    find the most likely candidate and with 'm <choice>' you go there.

    In GAP you use '??<short string>', select the most likely candidate
    and with '?<name>' you go there.

3)  You want to browse around in the manual:

    In EMACS you go to the top node, select a section and go there
    with 'm <section>'.  In the section you again use 'm <subsection>'
    to go to the next subsection.

    In GAP you say '?chapters', select a chapter and go there with
    '?<chapter>'.  Then you read the first section of the chapter and
    find references (of the form (see "<section>")) to all the
    sections in this chapter.  Then you again use '?<section>' to
    go to the section you are interested in.

4)  You want to go to the next or previous node/section:

    In EMACS you use 'n' and 'p'.

    In GAP you use '?>' and '?<'.

5)  You want to go from a subsection to a section:

    In EMACS you use 'u'.

    In GAP you use '?<<'.

6)  You want to go from a subsection to the next node section:

    In EMACS you use 'u' and 'n'.

    In GAP you use '?>>'.

7)  You want to follow a cross reference.

    In EMACS you use 'f <reference-name>'.

    In GAP cross references are again of the form (see "<section>")
    and you use '?<section>'.

8)  You want to go to the last section that you visited before the
    current one:

    In EMACS you use 'l'.

    In GAP you use '?-'.

One feature I like in David Gillespie's enhanced EMACS's info mode (it is
not in the standard info mode) that is missing in GAP is the function
','.  With 'i' you first specify an pattern.  Then ',' lets you visit in
turn all nodes that have index entries that match this pattern.

One feature I dislike in EMACS' info mode is that I still find it
difficult to decipher the information at the top of each node which
should tell me where I am.  I find GAP's top line much easier to read.

David Sibley replied in his e-mail message of 1993/03/11

    Eh?  I find the GAP online documentation to be excellent.  It's much
    faster and more efficient than anything I ever experienced with EMACS
    info files, where you have to know where an item is in the heirarchy.

"excellent": why, thank you.  "faster": I don't think so.  In EMACS a
special file (info-file) is generated from the TeX manual.  This file
contains information that allows EMACS' info mode to go very fast from
node to node.  In GAP the online help always works from the original
LaTeX files.  To find a node it has to search the 'manual.toc' file, open
the chapter file, search linearly to the section, etc.  It seems to be
fast enough though.

Lee Schumacher replied in his e-mail message of 1993/03/11

    The ? and ?? are quite useful, its true, but hardly a substitute for a
    real structured info tree.  The problem with the GAP facilities is
    that you need to know the NAME of the function or concept before you
    can find it.  Of course the topic of discourse in GAP is sufficiently
    narrow that this is not a problem in general.  However I did read the
    manual off line first and now ? is useful more as a memory jogger.
    Note that emacs info files are intended more for learing new concepts
    and groups of commands or functions.  If you just want to find a
    command and you have a pretty good idea what the name is then you
    use apropos, which provides all of the functionality of ? and ??.

I argue that the GAP manual is tree structured (into chapters and
sections), and that the online help allows you to search through this
structure.  In the online help the top node is '?chapters', with
references to the first sections of all chapters.  And the first section
of each chapter contains references (of the form (see "<section>")) of
all the sections of this chapter.  So the tree is quite shallow (of depth
2, except in "Group", where it has depth 3), but it's a tree
nevertheless.

The chapter that you get with '?About GAP' is certainly not a reference
manual.  It's main purpose is to learn about the (new) concepts in GAP.
I know that not all sections of this chapter are easily read online, but
the first few certainly are.

Arnaldo Mandel replied in his email of 1993/03/11

    I don't [find GAP's online help more convenient than EMACS' info].
              But the whole discussion is boiling down to a matter of
    personal preferences.  Since I live most of the time within emacs, and
    maintain it here, it is perhaps natural that I have become addicted to
    info.  On the other hand, I will retract my complaints about lack of
    "good online documentation" (I had no intention of putting down ? and
    ??), and qualify it instead as a "lack of an online manual of the
    kind *I* find convenient".

    Now, perhaps I would have kept to myself about info, if it wasn't for
    the circunstance that a hypertext version of GAP documentation had been
    created, for another plataform.  The source code for GAP shows that
    emacs was a heavily used tool for development; maybe the developers of
    GAP would have something to say on this matter.

I havn't ever used OS/2's IPF.  Also Hypertext is such a buzzword.  Could
somebody enligthen me about IPF's features?

I use EMACS a lot.  Actually I probably would be lost without EMACS.I
don't think it would be too difficult to make a TeXinfo manual for GAP,
but we are certainly not considering it in the moment.  (I don't miss a
GAP info-file for EMACS, but then I probably have to use the manual less
often than others ;-).

Martin.

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



From leonard@qmw.ac.uk Wed Jul 27 08:52:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Wed, 27 Jul 94 08:52 BST
Subject:        RepresentativeOperation suggestion

Dear Forum,

I suggest the following default strategy for calculating

            RepresentativeOperation(G,x,y,action);

The idea is to build up two partial Schreier trees Tx, Ty (w.r.t.
G.generators), rooted at  x  and  y,  respectively.  One alternately
adds nodes to Tx and Ty until they have a node z, say, in common (if
one of the trees is completed and there is no such node then return
false).  Given such a  z,  one uses  Tx,Ty  in the usual way to
get elements  gx,gy  such that z=action(x,gx)=action(y,gy),
and so the required element taking  x  to  y  is gx/gy.

If  x  and  y  are in the same  G-orbit, then this approach should be
much faster than computing an orbit for  x  until  y  is found, and
much much faster than trying to compute a StabChain if the action is
OnPoints.

Regards,   Leonard Soicher.



From Frank.Celler@Math.RWTH-Aachen.DE Wed Jul 27 09:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Wed, 27 Jul 94 09:58 WET
Subject:        Re: MeatAxe package of GAP 3.4

Dear Eamonn,

     However, I want to assign the basis to a variable
     back within GAP and work with its vectors.

is the function 'GapObject' for MeatAxe objects what you need?  For
example:

  gap> mat1 := MeatAxeMat( PermutationMat( (1,2,3), 3, GF(2) ), GF(2) );;
  gap> mat2 := MeatAxeMat( PermutationMat( (1,2), 3, GF(2) ), GF(2) );;  
  gap> m := NaturalModule( Algebra( GF(2), [ mat1, mat2 ] ) );;
  gap> l := Lattice(m);;
  gap> b := GeneratorsSubmodule( l, 3 );   
  MeatAxeMat( "/var/tmp/tmp.014092/o/g.s2", GF(2), [ 2, 3 ] )
  gap> Display(b);
  MeatAxe.Matrix := [
  [1,0,1],
  [0,1,1]
  ]*Z(2);
  gap> GapObject(b);
  [ [ Z(2)^0, 0*Z(2), Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0 ] ]

best wishes
  Frank



From Frank.Celler@Math.RWTH-Aachen.DE Wed Jul 27 10:32:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Wed, 27 Jul 94 10:32 WET
Subject:        Re: operations query

Dear Andrew,
  
     Here is a simple question which must have a simple answer. I have defined

FLT seems to prove  the opposite.  Unfortunately  the same is true for
your problem.

     function for these elements so I wrote a Ops.Length function which of
     course doesn not work. Evidiently functions like "Print", "+" and so on

'Length' only works for GAP lists, there is no way  (*, at the moment)
to use it together with records.  This behaviour might be considered a
bug  or  an annoying  feature and  it  is possible  that  this will be
changed in future releases (GAP 4.0).

Do you   want to create  a new  type of  lists or just   a new type of
objects? In the  latter case it  might  help to use  'Size' instead of
'Length'.

     Incidently, unless I have missed it the description of such

The  description  is in "Operations    for Records" and  the following
sections.

     things does not appear to be in the manual. Similarly for the use
     of "arg" in function definitions. Are these documented anywhere?

See "Function Calls".  But yes, it is easy to  miss something in >1000
pages.    We  try to reorganise  the   manual, but  this  is a *major*
project.

best wishes
  Frank

==
* = short of defining a dispatcher for Length in GAP,  which will slow
down almost all computations.



From Martin.Schoenert@Math.RWTH-Aachen.DE Wed Jul 27 11:12:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Wed, 27 Jul 94 11:12 +0100 (MET)
Subject:        Re: operations query

Andrew Mathas writes in his e-mail message of 1995/07/25

    Here is a simple question which must have a simple answer.

What makes you think that a simple question must have a simple answer?
After all there are lots of simple questions in mathematics that don't
seem to have simple answers.  And we try to model mathematics as close
as possible with GAP ;-)

He continues

    I have defined a record which has the form:
        rec (elt := a list, operations := Ops, ...)
    where Ops := rec (...). Inside the operations are various functions
    defining printing for the record, addition, and so on. I wanted to add a
    Length function for these elements so I wrote a Ops.Length function which
    of course doesn not work. Evidiently functions like "Print", "+" and so
    on are handled differently than other functions. So how do I add a Length
    function to this record?

That is true.  Only functions and operations that are generally applied
to domains use the dispatching mechanism through the operations record.
Functions that are usually applied to one (or more) of the basic types
(as provided by the kernel), e.g., integers, lists, permutations, etc.,
are not dispatched.

Luckily it is not difficult to work around this.  Simply write

    OLDLength := Length;
    Length := function ( obj )
        if IsList( obj )  then
            return OLDLength( obj );
        else
            return obj.operations.Length( obj );
        fi;
    end;

The problem of course is that this makes 'Length' slower for ``standard''
case.  Since 'Length' is used quite a lot in the library, this will slow
down everything.  I can't say how much, but if you try it, I'd like to
see your results.

He continues

    Incidently, unless I have missed it the description of such things does
    not appear to be in the manual. Similarly for the use of "arg" in
    function definitions. Are these documented anywhere?

The general description is in the section "Dispatchers".  The sections
for the dispatchers contain paragraphs like the following

    'Orbit' calls \\
    '<G>.operations.Orbit( <G>, <d>, <operation> )' \\
    and returns the value.  Note that the third argument  is not optional for
    functions called this way.

But this is not done consistently in the manual, so if you find a section
without such a paragraph, it doesn't mean that the function is not a
dispatcher.

In section "Function Calls" you will find

    An exception again  occurs if the  function has only one  formal argument
    with the name 'arg'.  In this case the values of all the actual arguments
    are  stored in a  list  and this list   is assigned to  the  new variable
    corresponding to the formal argument 'arg'.

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 Jul 27 11:36:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Wed, 27 Jul 94 11:36 +0100 (MET)
Subject:        Re: gap 3.4 under emacs

Steve Fisk writes in his e-mail message of 1994/07/25

    If I use the -n option in gap to prevent echoing in my emacs shell
    window, then I can not access the help system.  Here is what happens:
    (using emacs 19.22)

The option '-n' tells GAP that the standard input 'stdin' is not a
terminal, and that GAP cannot switch it to raw mode.  This is necessary,
because otherwise EMACS and GAP both echo all the input characters.

However GAP needs the input in raw mode for the help, because it expects
the raw <spaces> as answer to '-- <space> for more --'.

It would be possible to fix that, but the easiest solution for now is
probably the GAP mode for EMACS that comes with the standard distribution
in 'gap3r4p0/etc/'.

He continues

    Another question - with the manual growing several hundred pages every
    release, it's getting hard to even know what is even available.  Has
    anyone written a converter to info?  Such a format would make it easy to
    browse the manual.

It would probably not be too difficult to write such a converted.  But
the real problem is, I think, not the mechanism to read the manual.  It
is the manual itself.  The size of the manual is simply ridiculous.  We
are planning a major rewrite for GAP 4, which hopefully will make the
manual much more accessible.

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 leonard@qmw.ac.uk Thu Jul 28 12:45:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Thu, 28 Jul 94 12:45 BST
Subject:        the StabChain function

Dear Forum,

The new StabChain function in Gap 3.4 is very useful for my work on
graphs and geometries, since I often know the size of a given group
acting on a graph. However, sometimes I only know an upper bound, and
was pleased to see that StabChain offers the option of specifying this
upper bound through the limit parameter.  I was disappointed, however,
to find that with this option, StabChain appears to take as long as
when given no extra information, even when this upper bound is
achieved.  Please tell me how to fix this!

Best regards,   Leonard Soicher.

P.S. Log file illustrating this. Timings are for a Sparc 2.

[... stuff deleted ...]
gap> C:=Combinations([1..12],4);;
gap> G:=Operation(SymmetricGroup(12),C,OnSets);;
gap> Length(C);
495
gap> H:=Copy(G);;
gap> Runtime();
275433
gap> StabChain(H);;
gap> Runtime();
390066
gap> H:=Copy(G);;
gap> Runtime();
390133
gap> StabChain(H,rec(size:=Factorial(12)));;
gap> Runtime();
397816
gap> H:=Copy(G);;
gap> Runtime();
397866
gap> StabChain(H,rec(limit:=Factorial(12)));;
gap> Runtime();
514183
gap> quit;



From Martin.Schoenert@Math.RWTH-Aachen.DE Thu Jul 28 14:33:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Thu, 28 Jul 94 14:33 +0100 (MET)
Subject:        Re: the StabChain function

Leonard Soicher writes in his e-mail message of 1994/07/28

    The new StabChain function in Gap 3.4 is very useful for my work on
    graphs and geometries, since I often know the size of a given group
    acting on a graph. However, sometimes I only know an upper bound, and
    was pleased to see that StabChain offers the option of specifying this
    upper bound through the limit parameter.  I was disappointed, however,
    to find that with this option, StabChain appears to take as long as
    when given no extra information, even when this upper bound is
    achieved.  Please tell me how to fix this!

The 'limit' option is currently only honoured by the random method.
The default however is the deterministic method.

The easiest solution is to force using the random method.  You do this
with the 'random' option, using any value less than 1000.

    gap> C := Combinations( [1..12], 4 );;
    gap> G := Operation( SymmetricGroup(12), C, OnSets );;
    gap> StabChain( Copy(G), rec( random := 1000, limit := Factorial(12) );;
    gap> time;
    62353
    gap> StabChain( Copy(G), rec( random :=  999, limit := Factorial(12) );;
    gap> time;
    4867
    gap> StabChain( Copy(G), rec( random := 1000, limit := Factorial(13) );;
    gap> time;
    62524
    gap> StabChain( Copy(G), rec( random :=  999, limit := Factorial(13) );;
    gap> time;
    64566

Of course there is a small chance that the random method will fail.
But with 'random := 999', it is extremly small.

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 Thu Jul 28 15:37:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Thu, 28 Jul 94 15:37 +0100 (MET)
Subject:        Re: StabChain

Leonard Soicher writes in his e-mail message of 1994/07/26

    Why does Gap feel it is necessary to compute a stabilizer chain for G in
    order to compute RepresentativeOperation(G,1,pt) ?

I just looked at the code.  Superficially it appears to be the result of
a mixture of stupidity and laziness.  In truth however, I used the most
stupid and wastefull method I could think of, to see how long it would go
undetected ;-).

Leonard continues in his e-mail message of 1994/07/27

    I suggest the following default strategy for calculating

                RepresentativeOperation(G,x,y,action);

    The idea is to build up two partial Schreier trees Tx, Ty (w.r.t.
    G.generators), rooted at  x  and  y,  respectively.  One alternately
    adds nodes to Tx and Ty until they have a node z, say, in common (if
    one of the trees is completed and there is no such node then return
    false).  Given such a  z,  one uses  Tx,Ty  in the usual way to
    get elements  gx,gy  such that z=action(x,gx)=action(y,gy),
    and so the required element taking  x  to  y  is gx/gy.

    If  x  and  y  are in the same  G-orbit, then this approach should be
    much faster than computing an orbit for  x  until  y  is found, and
    much much faster than trying to compute a StabChain if the action is
    OnPoints.

It is not clear to me that this is indeed a win.  Let us assume that the
group operates transitively on $n$ points and that it has only a small
number $k$ of generators.

Then computing the entire orbit an the corresponding Schreier tree takes
time $O( n k )$.  Your method on the other hand would usually take time
$O( n^(1/2) k )$ (the worst case is of course also $O( n k )$.

However, I think that in most cases the total time will anyhow be
dominated by the time it takes to multiply together the representative.
Namely, under favourable conditions the pathlength from $x$ to $y$ in
this tree will be $O( log(n) )$, so the cost of computing the
representative is $O( n log(n) )$.

So your method would not be faster unless $k >> log(n)$.  This is only
theory of course, and I haven't yet investigated this in practice.  It
might well be that the constant for the orbit computation is so much
higher that the constant for the representative computation (most of
which is multiplying permutations, and this is done in the kernel), that
your method is still practically better.

However, there is even a practical argument against your method.  Namely
assume that a user makes multiple calls to 'RepresentativeOperation',
maybe with fixed 'x' but varying 'y'.  With the straightforward orbit
computation one could compute the orbit once and then remember it, so
that subsequent calls to 'RepresentativeOperation' do not have to
recompute it.  With your method it is not clear how to do this, so that
the total time for all tree computations never exceeds $O( n k )$.

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 sl25@cus.cam.ac.uk Thu Jul 28 15:50:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Thu, 28 Jul 94 15:50 +0200
Subject:        Re: StabChain

> Leonard continues in his e-mail message of 1994/07/27
> 
>     I suggest the following default strategy for calculating
> 
>                 RepresentativeOperation(G,x,y,action);
> 
>     The idea is to build up two partial Schreier trees Tx, Ty (w.r.t.
>     G.generators), rooted at  x  and  y,  respectively.  One alternately
>     adds nodes to Tx and Ty until they have a node z, say, in common (if
>     one of the trees is completed and there is no such node then return
>     false).  Given such a  z,  one uses  Tx,Ty  in the usual way to
>     get elements  gx,gy  such that z=action(x,gx)=action(y,gy),
>     and so the required element taking  x  to  y  is gx/gy.
> 
>     If  x  and  y  are in the same  G-orbit, then this approach should be
>     much faster than computing an orbit for  x  until  y  is found, and
>     much much faster than trying to compute a StabChain if the action is
>     OnPoints.
> 
> It is not clear to me that this is indeed a win.  Let us assume that the
> group operates transitively on $n$ points and that it has only a small
> number $k$ of generators.
> 
> Then computing the entire orbit an the corresponding Schreier tree takes
> time $O( n k )$.  Your method on the other hand would usually take time
> $O( n^(1/2) k )$ (the worst case is of course also $O( n k )$.
> 
> However, I think that in most cases the total time will anyhow be
> dominated by the time it takes to multiply together the representative.
> Namely, under favourable conditions the pathlength from $x$ to $y$ in
> this tree will be $O( log(n) )$, so the cost of computing the
> representative is $O( n log(n) )$.
> 

This is only so if the action is on points. Suppose that we consider
a permutation group of small degree acting on a large orbit of sets
or tuples, or a matrix group of small degree acting on vectors or
subspaces. Then the time for a multiplication is much less than n.


> 
> However, there is even a practical argument against your method.  Namely
> assume that a user makes multiple calls to 'RepresentativeOperation',
> maybe with fixed 'x' but varying 'y'.  With the straightforward orbit
> computation one could compute the orbit once and then remember it, so
> that subsequent calls to 'RepresentativeOperation' do not have to
> recompute it.  With your method it is not clear how to do this, so that
> the total time for all tree computations never exceeds $O( n k )$.
> 

I suggest using Leonard's method for all actions except 'OnPoints'. 
For OnPoints the long-term advantage of computing and remembering a
Schreier tree for an entire orbit makes it worthwhile doing so.

	Steve



From leonard@qmw.ac.uk Thu Jul 28 15:14:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Thu, 28 Jul 94 15:14 BST
Subject:        Re: the StabChain function

Many thanks for the quick reply, Martin.

Will the following work if I want a provably correct result
(when mylimit is a proven upper bound on the size of G)?

      H:=ShallowCopy(G);
      StabChain(H,rec(random:=800; # or whatever
                      limit:=mylimit);
      if Size(H) = mylimit then 
          G := H;
      else
          StabChain(G); 
      fi;

Does StabChain ever change an existing component of the group record; 
that is, should I make a Copy instead of a ShallowCopy in the first
line?
                  
Regards,   Leonard.



From Martin.Schoenert@Math.RWTH-Aachen.DE Thu Jul 28 16:11:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Thu, 28 Jul 94 16:11 +0100 (MET)
Subject:        Re: Re: the StabChain function

Leonard Soicher writes in his e-mail message of 1994/07/28

    Many thanks for the quick reply, Martin.

My pleasure.

He continues

    Will the following work if I want a provably correct result
    (when mylimit is a proven upper bound on the size of G)?

          H:=ShallowCopy(G);
          StabChain(H,rec(random:=800; # or whatever
                          limit:=mylimit);
          if Size(H) = mylimit then 
              G := H;
          else
              StabChain(G); 
          fi;

Assuming that either 'G' has no stabilizer chain at the beginning
or a provable correct one.  If 'G' has an incorrect stabilizer chain
at the beginning all the calls to 'StabChain' wont change it.  So in
this case the result will also be incorrect.  Otherwise this is fine.

He continues

    Does StabChain ever change an existing component of the group record; 
    that is, should I make a Copy instead of a ShallowCopy in the first
    line?

'StabChain' only touches 'G.stabChain', 'G.orbit', 'G.stabilizer', and
'G.transversal'.  If 'G' has no stabilizer chain initially, then using
'ShallowCopy' is save.  If 'G' has a stabilizer chain, the best is to use
'ShallowCopy' and then to 'Unbind' the above four entries.  There is even
a function for this, namely 'ShallowCopyNoSC', but this function is not
likely to survive for long.

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 Frank.Celler@Math.RWTH-Aachen.DE Thu Jul 28 19:12:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 28 Jul 94 19:12 WET
Subject:        various installation problems

Dear Forum,

the following list  describes  possible solutions to various  problems
which might occur while installing  GAP 3.4 Patchlevel 0.  Please send
any further questions to "Gap-Trouble@Math.RWTH-Aachen.DE".

Problem 1: ibm pc, ms-dos, share libraries
------------------------------------------

  'RequirePackage' reports "Error, share library is not installed" but
  I have installed the corresponding share library in "gap3r4p0/pkg".

Solution

  'ReadPkg' has  a problem with  the directory separators '\\' used in
  MS-DOS.  In  order to  fix this problem  change  the start up script
  "gap.bat".  Replace the last line

    ... -m %GAP_MEM% -l %GAP_DIR%\lib\ -h %GAP_DIR%\doc\ %1 ...

  by

    ... -m %GAP_MEM% -l %GAP_DIR%/lib/; -h %GAP_DIR%\doc\ %1 ...

  The C-Compiler DJGPP used to compile  GAP under MS-DOS automatically
  translates '/' to '\\' in path names.


Problem 2: dec alpha, osf1, gap
-------------------------------

  My compiled version of GAP does not run correctly on a DEC Alpha.

Solution

  The version of GASMAN, the GAP storage mananger, used for GAP 3.4 is
  not  64bit safe.  In  order to use GAP  on  a DEC Alpha  you have to
  translate a DEC Ultrix executable using mx.  A translated executable
  can be found in
  "ftp.math.rwth-aachen.de:/pub/gap/bin/bin3r4p0-dec-alpha-osf1.zoo".


Problem 3: dec alpha, osf1, xgap
--------------------------------

  I  cannot compile XGAP  on a DEC  Alpha  because make reports "Don't
  know how to make xcmds.c.  Stop." but "xcmds.c" is there.

  I cannot compile  XGAP because there is no  target for DEC Alpha  in
  the makefile.

Solution

  Use gnumake.  The following command will compile XGAP

    gnumake xgap CC=cc CFLAGS="-I/usr/include -O -DSYS_HAS_UNISTD  \
                               -DSYS_HAS_STDARG" LDFLAGS=" -L/usr/lib"

  Alternatively  you can get  XGAP from our  ftp server. An executable
  can be found in
  "ftp.math.rwth-aachen.de:/pub/gap/bin/xgap1r2-dec-alpha-osf1.zoo".


Problem 4: any unix, anu sq
---------------------------

  I  can compile the ANU Sq  but the linker  complains about a missing
  '_RunTime'.

Solution

  Unfortunately the  GAP archive contains an old  Makefile for the ANU
  Sq.  Try the  following commands  to  compile the Sq under  Berkeley
  UNIX:

    make bsd-gcc COPTS=-DSYS_BSD
    make bsd-cc COPTS=-DSYS_BSD

  To compile the Sq under System V UNIX try:

    make usg-gcc COPTS=-DSYS_USG
    make usg-cc COPTS=-DSYS_USG

best wishes
    Frank



From clacombe@jade.tufts.edu Fri Jul 29 10:40:00 1994
From:           "Carl A. LaCombe" <clacombe@jade.tufts.edu>
Date:           Fri, 29 Jul 94 10:40 -0400
Subject:        Re: GAP version 3 release 4 finally release

Hi,
	I have been wondering what the status of the stand-alone version
of GAP for the Mac is?  My department will be getting a DEC Alpha soon so
I'll be able to use GAP on that (I hope), but up to now I have been using
MacGAP, which is only updated to version 3.2. 

This is just a request for information.  I know that everyone has been
busy developing 3.4.  

-cal



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Jul 29 18:01:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 29 Jul 94 18:01 +0100 (MET)
Subject:        Re: Re: StabChain

I wrote in my e-mail message of 1994/07/28

    ...about computing a representative that takes x to y...

    However, I think that in most cases the total time will anyhow be
    dominated by the time it takes to multiply together the representative.
    Namely, under favourable conditions the pathlength from $x$ to $y$ in
    this tree will be $O( log(n) )$, so the cost of computing the
    representative is $O( n log(n) )$.

Steve Linton answered in his e-mail message of 1994/07/28

    This is only so if the action is on points. Suppose that we consider
    a permutation group of small degree acting on a large orbit of sets
    or tuples, or a matrix group of small degree acting on vectors or
    subspaces. Then the time for a multiplication is much less than n.

For the operation on tuples you use a stabilizer chain.  That is you
first find a representative r_1 that moves x[1] to y[1].  In the
stabilizer of x[1] you then look for a representative r_2 that
moves x[2] to y[2]^(r_1^-1).  Then the product r_2 r_1 takes x[1] to
y[1] and x[2] to y[2].  Iterate and serve.

Ignoring the time to compute a stabilizer chain this has cost $O( n l )$,
where l is the number of points in the tuples.  The running time for
Leonard's method depends on the length of the orbit that G makes on the
tuples, but in the worst case the length could be $O( n ^ l )$ and the
average running time would be $O( n ^ (l/2) )$.

For the operation on sets you use backtrack.  It is not so easy to
estimate the running time for this backtrack.  But Leonard's method
has again a pretty bad worst case estimate.

Of course the general comment is true.  My analysis was only valid under
the assumption that the operation is one of a permutation group on
points.  If the length of the orbit is not bound by  n  or the time
to compute one image is not constant, Leonard's method will probably
be superior.  However, as the above shows, for some other operations
one can do even better, if one is willing to compute a stabilizer chain.

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 Jul 29 20:35:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 29 Jul 94 20:35 +0100 (MET)
Subject:        Re: Re: GAP version 3 release 4 finally release

Carl A. LaCombe writes in his e-mail message of 1994/07/29

            I have been wondering what the status of the stand-alone version
    of GAP for the Mac is?  My department will be getting a DEC Alpha soon so
    I'll be able to use GAP on that (I hope), but up to now I have been using
    MacGAP, which is only updated to version 3.2.

We finally have a working stand-alone version of the 3.3 kernel.  Over
the next few days we will make the appropriate changes to 3.4.  Since
very little has changed between 3.3 and 3.4 in the kernel, this should
not pose any difficulties.  So hopefully a standalone version of 3.4 will
be available in a week.  I will keep everybody informed.

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 Jul 29 20:53:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 29 Jul 94 20:53 +0100 (MET)
Subject:        Re: various installation problems

Frank Celler writes in his e-mail message of 1994/07/29

    Problem 3: dec alpha, osf1, xgap
    --------------------------------

      I  cannot compile XGAP  on a DEC  Alpha  because make reports "Don't
      know how to make xcmds.c.  Stop." but "xcmds.c" is there.

      I cannot compile  XGAP because there is no  target for DEC Alpha  in
      the makefile.

    Solution

      Use gnumake.  The following command will compile XGAP

        gnumake xgap CC=cc CFLAGS="-I/usr/include -O -DSYS_HAS_UNISTD  \
                                   -DSYS_HAS_STDARG" LDFLAGS=" -L/usr/lib"

      Alternatively  you can get  XGAP from our  ftp server. An executable
      can be found in
      "ftp.math.rwth-aachen.de:/pub/gap/bin/xgap1r2-dec-alpha-osf1.zoo".

The first problem is that 'unzoo' unpacks all the files with the strange
date '1969/12/31'.  'make' thinks that this is so old, the files could
not possible exist.  'touch'-ing all the files in the source directory
should solve that problem.  Then you can use 'make' instead of 'gnumake'.
You still have to explicitly specify 'CC', 'CFLAGS', and 'LDFLAGS' tough.

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 Volkmar.Felsch@Math.RWTH-Aachen.DE Mon Aug 01 14:08:00 1994
From:           "Volkmar Felsch" <Volkmar.Felsch@Math.RWTH-Aachen.DE>
Date:           Mon, 01 Aug 94 14:08 +0200
Subject:        Re: Words for secondary generators

Tim Hsu writes:

> I've been trying to set up a calculation using AugmentedCosetTableRrs.
> Now, when you have the statement
> 
>     aug := AugmentedCosetTableRrs(G,ct,2,"_q");
> 
> (ct is the coset table for a subgroup S in G),
> aug.primaryGeneratorWords contains descriptions of the primary
> generators of S in terms of words in the generators of G.  According
> to the GAP manual, aug.tree, (in some form) contains a description of
> the secondary generators of S in terms of the primary relators, so in
> theory, you should be able to obtain the secondary generators of S in
> terms of words in G.  Could someone tell me how to get this from the
> tree?


Whenever you call the command

    aug := AugmentedCosetTableRrs( G, ct, 2, string );

it will return a record with a component "aug.tree" which is a list
of length 5. (Note that the structure represented by that list is not
a tree in mathematical sense; the name has historical reasons.) The
entries of this list are

    tree[1] = tree1 (a list of length treelength),
    tree[2] = tree2 (a list of length treelength),
    tree[3] = treelength = total number of all generators,
    tree[4] = numgens = number of primary generators,
    tree[5] = type = 2.

The two lists "tree1" and "tree2" are in parallel to the list "gen",
say, of all generators which is ordered such that gen[1] to gen[numgens]
are the primary generators whereas gen[numgens+1] to gen[treelength]
are the secondary generators.

Each of the secondary generators has originally been defined as a
product of two preceding generators (with respect to that list) or
their inverses. The purpose of the tree is to save these definitions.
For numgens < i <= treelength, we have

    gen[i] = factor(tree1[i]) * factor(tree2[i])

where

    factor(j) = gen[j]      for j > 0,
    factor(j) = gen[-j]^-1  for j < 0.

You may use the tree to recursively express each secondary generator
as a word in the preceding ones and finally in the primary generators,
but I would like to warn you of the fact that the length of these words
tends to become very huge so that they soon may get unhandable.


> My next question is, do RewriteSubgroupRelators,
> PresentationAugmentedCosetTable, TzGo, or FpGroupPresentation change
> the ordering of the generators in any way, other than eliminating
> generators?  Thanks very much.


I think that none of these commands will reorder the list of subgroup
generators by swapping any pair of generators. This answer is to the
best of my recollection, but as it is long ago that I wrote the programs
I would not like to swear on it. If you want to be absolutely sure,
please check the code which for such purposes is given in full source.

Moreover, I would not like to guarantee this for all future. We may at
some time have reasons to change this. This is, in fact, the reason
why no guarantee of this kind has been made in the manual.

What frequently happens in the present program, is that the subgroup
generators are internally renumbered after elimination processes in order
to get rid of the gaps in the numbering. The names of the generators
are not changed by this process.

Example:

    gap> F := FreeGroup( "a", "b" );;
    gap> a := F.1;; b := F.2;;
    gap> G := F / [ a^2, b^4, (a*b)^7, Comm(a,b)^5, (a*b*a*b^2*a*b^-1)^3 ];;
    gap> H := Subgroup ( G, [ G.1^G.2, G.2^(G.1*G.2^-1*G.1) ] );;
    gap> T := PresentationSubgroupRrs( G, H );
    << presentation with 5 gens and 12 rels of total length 64 >>
    gap> TzPrintGenerators( T );
    #I  1.  _x1   11 occurrences   involution
    #I  2.  _x2   12 occurrences   involution
    #I  3.  _x3   16 occurrences   involution
    #I  4.  _x4   11 occurrences
    #I  5.  _x5   14 occurrences   involution
    gap> TzGo( T );
    #I  there are 3 generators and 8 relators of total length 94
    gap> TzPrintGenerators( T );
    #I  1.  _x2   26 occurrences   involution
    #I  2.  _x4   43 occurrences
    #I  3.  _x5   25 occurrences   involution


If you have questions about still more technical details, please feel
free to ask, but perhaps we should then discuss this privately, not
in the forum.

Volkmar Felsch (Aachen)



From leonard@qmw.ac.uk Wed Aug 03 13:03:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Wed, 03 Aug 94 13:03 BST
Subject:        Re: Re: the StabChain function

Martin Schoenert writes:

>
>'StabChain' only touches 'G.stabChain', 'G.orbit', 'G.stabilizer', and
>'G.transversal'.  
>

What about 'G.stabChainOptions'?

Regards,   Leonard.



From Martin.Schoenert@Math.RWTH-Aachen.DE Thu Aug 04 12:57:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Thu, 04 Aug 94 12:57 +0100 (MET)
Subject:        Re: Re: Re: the StabChain function

'StabChain' looks at 'G.stabChainOptions', but doesn't modify this record.
But since it is one of the records, which are explicitly made public, and
may be changed by the user, it is probably best to unbind that too.

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 sl25@cus.cam.ac.uk Thu Aug 04 13:02:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Thu, 04 Aug 94 13:02 +0200
Subject:        From sci.math.symbolic

--------------------

As requested I am reposting this in the interest of (a) broader
distribution and (b) making sure that the computational pure
mathematicians get heard.

    Steve




[I am posting this in the interest of broader distribution. Please send 
any responses to math-sw-survey@gnu.ai.mit.edu, NOT to me.] 

----------------------------------------------------------------------------
      [ Please repost this wherever you think is appropriate! ]

Project GNU of the Free Software Foundation is conducting a survey to
determine the kinds of mathematical software commonly utilized by scientists
and mathematicians.  Your answers will help us to determine the programming
tasks we present to our volunteers.  This will ultimately result in a more
complete set of math programs and subroutines available as free software. 

Please answer the following questions with regard to scientific,
mathematical, and/or statistical software:

   1.  What packages are commonly used?

   2.  What programs and subroutines are desired, but not available?

   3.  What freeware currently exists?

   4.  Where else can we ask these questions?

Please give as much detail as you can, including package name, author,
language, and where it can be found.

Send responses to math-sw-survey@gnu.ai.mit.edu 

Thank you!
----------------------------------------------------------------------------



From leonard@qmw.ac.uk Thu Aug 04 16:08:00 1994
From:           "Leonard Soicher" <leonard@qmw.ac.uk>
Date:           Thu, 04 Aug 94 16:08 BST
Subject:        Re: Re: Re: the StabChain function

>
>'StabChain' looks at 'G.stabChainOptions', but doesn't modify this record.

This was not so according to my experiments, but perhaps I was
doing something illegal. 

>But since it is one of the records, which are explicitly made public, and
>may be changed by the user, it is probably best to unbind that too.
>

I think I will just make a proper copy of the group.  I don't really
like tinkering with record fields of GAP objects anyway.

Is it possible in future patches/releases of GAP that if
StabChain(G,rec(limit:=mylimit))  is called then the function tries a
random method for a while, and then if mylimit is not achieved,
switches to a deterministic method ?

Best regards,   Leonard.



From akos@math.ohio-state.edu Thu Aug 04 11:24:00 1994
From:           "Akos Seress" <akos@math.ohio-state.edu>
Date:           Thu, 04 Aug 94 11:24 -0400
Subject:        Re: Re: Re: the StabChain function

`StabChain' may modify the record element grp.stabChainOptions:
namely, grp.stabChainOptions.random and grp.stabChainOptions.knownBase .

-- Akos



From r.a.fenn@sussex.ac.uk Fri Aug 05 12:03:00 1994
From:           "Roger A Fenn" <r.a.fenn@sussex.ac.uk>
Date:           Fri, 05 Aug 94 12:03 +0200
Subject:        Re: From sci.math.symbolic

> 
> --------------------
> 
> As requested I am reposting this in the interest of (a) broader
> distribution and (b) making sure that the computational pure
> mathematicians get heard.
> 
>     Steve
> 
> 
> 
> 
> [I am posting this in the interest of broader distribution. Please send 
> any responses to math-sw-survey@gnu.ai.mit.edu, NOT to me.] 
> 
> ----------------------------------------------------------------------------
>       [ Please repost this wherever you think is appropriate! ]
> 
> Project GNU of the Free Software Foundation is conducting a survey to
> determine the kinds of mathematical software commonly utilized by scientists
> and mathematicians.  Your answers will help us to determine the programming
> tasks we present to our volunteers.  This will ultimately result in a more
> complete set of math programs and subroutines available as free software. 
> 
> Please answer the following questions with regard to scientific,
> mathematical, and/or statistical software:
> 
>    1.  What packages are commonly used?

I use plain TeX all the time, microemacs as an editor, linnux,
postsript, xfig, (does e-mail count?), maple sometimes and I plan to use GAP
when I can get round to it.

> 
>    2.  What programs and subroutines are desired, but not available?
> 

A better interface of microemacs with linnux, at least I dont know where
to get one. A user friendly interface with musicTeX!!!???

>    3.  What freeware currently exists?

Bernhard Rauscher has written a beautiful package to do commuting
diagrams in TeX.

> 
>    4.  Where else can we ask these questions?

Dunno. Dunno who youve asked already.

> 
> Please give as much detail as you can, including package name, author,
> language, and where it can be found.
> 
> Send responses to math-sw-survey@gnu.ai.mit.edu 
> 
> Thank you!
> ----------------------------------------------------------------------------
> 
> 
> 
> 
> 
> 
> 
> 



From Joachim.Neubueser@Math.RWTH-Aachen.DE Fri Aug 05 12:47:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Fri, 05 Aug 94 12:47 +0200
Subject:        Re: From sci.math.symbolic

Dear GAP forum members,

Roger Fenn has just sent a  reply to the  request of the GNU group for
information about the use of  mathematical software to the  GAP-forum.
That is not the place where  such replies should  go. Please send them
to the address

math-sw-survey@gnu.ai.mit.edu

as   explained in the  request  (I have forwarded  Roger Fenn's answer
there). Generally however I want to encourage to support that survey.

Joachim Neubueser



From r.a.fenn@sussex.ac.uk Fri Aug 05 15:55:00 1994
From:           "Roger A Fenn" <r.a.fenn@sussex.ac.uk>
Date:           Fri, 05 Aug 94 15:55 +0200
Subject:        Re: From sci.math.symbolic

> 
> Dear GAP forum members,
> 
> Roger Fenn has just sent a  reply to the  request of the GNU group for
> information about the use of  mathematical software to the  GAP-forum.
> That is not the place where  such replies should  go. Please send them
> to the address
> 
> math-sw-survey@gnu.ai.mit.edu
> 
> as   explained in the  request  (I have forwarded  Roger Fenn's answer
> there). Generally however I want to encourage to support that survey.
> 
> Joachim Neubueser
> 

Sorry about that but I assumed it was just something we replied to. User
psychology?
Roger Fenn



From mas023@bangor.ac.uk Mon Aug 08 12:39:00 1994
From:           "Chris Wensley" <mas023@bangor.ac.uk>
Date:           Mon, 08 Aug 94 12:39 +0000 (GMT)
Subject:        Group recognition

I would welcome information on methods which have been found efficient
for recognising groups of small order.

I am assuming that some construction has produced a finitely presented 
group G of order at most 100 (say).  The question to be answered is:
                       "which group" is it?

It appears that the GAP group libraries do not include a library of
groups of small order.  If there were such a library, then a selection
function of the type
                  OneLibraryGroup(isIsomorphic,G)
would do.  Is this possible for the 2-Groups library?

A permutation representation of minimal degree would be helpful,
but this appears to require computation of the subgroup lattice,
which may be time-consuming.

A list of the normal subgroups is available speedily, so an
                   IsDirectSummand(G,N)
function would be helpful.

Chris Wensley (UWB, Bangor)



From eamonn.obrien@maths.anu.edu.au Mon Aug 08 22:20:00 1994
From:           "Eamonn O'Brien" <eamonn.obrien@maths.anu.edu.au>
Date:           Mon, 08 Aug 94 22:20 +1000
Subject:        Re:  Group recognition

Chris Wensley asks about recognition of small groups.
The function "GroupId" present in GAP 3.4 essentially
returns the identifier of a group of small order
wrt some catalogue. In particular, for a 2-group
or 3-group of relevant order, it returns its
identifier in the 2- or 3-group library supplied
with GAP. 

Eamonn O'Brien



From Joachim.Neubueser@Math.RWTH-Aachen.DE Mon Aug 08 16:40:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Mon, 08 Aug 94 16:40 +0200
Subject:        Re: Group recognition

Chris Wensley wrote: 
> I would welcome information on methods which have been found efficient
> for recognising groups of small order.
> 
> I am assuming that some construction has produced a finitely presented 
> group G of order at most 100 (say).  The question to be answered is:
>                        "which group" is it?
> 
> It appears that the GAP group libraries do not include a library of
> groups of small order.  

They do, see below!

Note first that  if you really have obtained  your group as a finitely
presented group, you cannot do many computations  with it (cf. section
22.3), you first  have  to get  a faithful  permutation representation
(e.g.  by TC - cf.  section 22.5),  or a faithful representation as an
AG group (e.g.  by pQ  in case of a  p-group, cf. 24.36 or Chapter 56,
or some SQ in case of a soluble group  of non-p-power order, cf. 55.4)
before you can work with it.

This  assumed, Eamonn O'Brien  has  already answered your  question in
particular  for the libraries of  p-groups (cf. sections 36.7, 36.8 of
the manual).

There is  also a library containing all  soluble groups of order up to
100 (cf. section 36.6 of the manual).  In  Gap 3.4 there is a function
identifying the isomorphism type of a  given soluble group of order up
to  100 by referring  to that  library.  These small groups are simply
identified  by  easily computed  invariants, such  as  the numbers  of
elements of a given order etc.

>If there were such a library, then a selection function of the type
>                   OneLibraryGroup(isIsomorphic,G)
> would do.  Is this possible for the 2-Groups library?

The name of the function is 

GroupId

See 7.62 in the manual, p. 271.

> A permutation representation of minimal degree would be helpful,
> but this appears to require computation of the subgroup lattice,
> which may be time-consuming.

Since except for the alternating  group all the  groups of order  less
than  100 are soluble  it is easier  to use the methods that determine
the  maximal  subgroups  of soluble groups.     For these you have  to
transform the group into an AG group (cf. 24.26) and thereafter into a
'special AG group' (cf.  25.2)  for which  the method for  finding all
maximal subgroups works. The name of the function is

'MaximalSubgroups'

It is in 3.4, but not yet in the manual.

> A list of the normal subgroups is available speedily, so an
>                    IsDirectSummand(G,N)
> function would be helpful.

Again for soluble groups  it is easier to use  the methods for finding
all complements: cf.  24.90, function  'Complementclasses', from which
you can easily see if there is a normal complement.
 
Hope that answers your questions.    Joachim Neubueser



From lmccarth%klingon@cs.umass.edu Mon Aug 08 16:44:00 1994
From:           "Lewis McCarthy" <lmccarth%klingon@cs.umass.edu>
Date:           Mon, 08 Aug 94 16:44 -0400
Subject:        Polynomial Factoring / Resultants

I'm new to GAP (v3r4) and I have a couple of initial questions which I
haven't been able to answer with the manual thus far:

(1) Is there any built-in way to compute the resultant of two polynomials ?
    Judging from the manual, there doesn't appear to be, but I just want to
    make sure I haven't missed something. Otherwise I'll be coding my own.

(2) What algorithms are used to factor polynomials over number fields in GAP ?

Thanks for your help
-Lewis McCarthy



From wright@bright.uoregon.edu Tue Aug 09 10:56:00 1994
From:           "Charles.Wright" <wright@bright.uoregon.edu>
Date:           Tue, 09 Aug 94 10:56 -0500 (EST)
Subject:        Direct factors and Complementclasses

Chris Wensley asked about an "IsDirectSummand" function, and Joachim
Neubueser called attention to the Complementclasses function as a way to
deal with the question. 

If I understand correctly, Wensley would like to test whether a given 
normal subgroup H is a direct factor of G, and if it is, to find at least 
one direct complement. For small groups, checking the complements to H to
see to see if any (or several) are normal is perhaps feasible. For somewhat 
larger groups, say of order prime^small, one may have a large number of 
nonnormal complements to contend with. In such a case it may be consider-
ably faster to use Complementclasses ( Centralizer (G,H) , Centre (H) ),
which produces a list of all direct complements to H in G by looking in
the smaller group Centralizer (G,H). To get just one complement, replace
Complementclasses by Complement.

If only the existence of a direct complement is required, it seems that 
one has to weigh the cost of computing the Centralizer and Center against 
the likelihood of hitting a normal complement fairly quickly in a list of 
all classes of complements to H.

Checking whether a given normal subgroup is a direct factor is straight-
forward. The question of determining whether G itself is a direct product
appears to be considerably more difficult.
-- 

   _--_|\           C.R.B. Wright
  /      \          Charles.Wright@maths.anu.edu.au
  \_.--._/          wright@math.uoregon.edu
        v



From Alexander.Hulpke@Math.RWTH-Aachen.DE Tue Aug 09 11:35:00 1994
From:           "Alexander Hulpke" <Alexander.Hulpke@Math.RWTH-Aachen.DE>
Date:           Tue, 09 Aug 94 11:35 +0200
Subject:        Re: Polynomial Factoring / Resultants

Dear Forum,

Lewis McCarthy asked:

> I'm new to GAP (v3r4) and I have a couple of initial questions which I
> haven't been able to answer with the manual thus far:

Unfortunately the manual is (yet) very short-spoken about these  subjects,
particularly, since the part about algebraic extensions of fields is missing
(see my mail in the forum two weeks ago).

> (1) Is there any built-in way to compute the resultant of two polynomials ?
>     Judging from the manual, there doesn't appear to be, but I just want to
>     make sure I haven't missed something. Otherwise I'll be coding my own.

There is a command 'Resultant' that computes the resultant of two
polynomials in the same polynomial ring by eliminating the indeterminate of
this ring. I.e.:

Resultant(f,g) is res_x(f(x),g(x)).

For computing resultants of multivariate polynomials, one can use iteraded
polynomial ring extensions, however (at the moment) the indeterminate to
eliminate must be the "topmost" indeterminate. Also computations in multiple
polynomial rings tend to be quite slow.

> (2) What algorithms are used to factor polynomials over number fields in GAP ?

Since you asked this question, I suppose, you are familiar with the
algorithms. Therefore I will keep this description rather short. Feel free
to contaxct me personally, if you have further questions, that might be too
special for the general audience.

Let f be the minimal polynomial for the number field Q(alpha) and g\in
Q(alpha)[x] the polynomial to factor.
If  deg f<=4 and degf*deg g<=20, then Trager's method will be used
(factoring the norm).
otherwise a Hensel approach is used. For tehse, the methods of Weinberger
and Lenstra (the '82 article which is in practice preferable to the method
suggested in the '83 article though theoretical complexity bounds might tell
something else) are used:
If a prime can be found (so far, 6 proimes are tested), modulo which f
remains irreducible, then Weinberger's method is used. 
If not, and the coefficients coefficient bound is less then 10^400, then
Lenstras Approach is used. However, if coefficients become even larger, then
the LLL will choke on the coefficients (note that Lenstra requires a
significant higher bound than ~Weinberger); so Weinbergers methos is used
then again (i.e. simultaneous Henmsel lifting for all factors of f and final
recombination by Chinese Remainder methods). 
I have not yet found much references in the literature about how to decide,
which methods to use (or how many primes to check). As computations become
extremely hard if f will split for al primes it is possibly worth event to
try to compute the galois group of f partially to see, whether there is a
chance to find a prime, modulo which f will remain irreducible.
Th heuristics are based on observations I made with polynomial
factorizations needed for identification of galois groups. Those
factorizations seem to be quite nasty in general, thus I think the algorithm
used should not perform too worse, however I have not yet made sufficient
observations to give even a hint, whether these heuristics are well chosen.
If you have specific problems on which GAPs algorithmm fails, I can send you
some further internal information on how to change the algorithm selection.

This text has been written over a rather slow telnet line, so please excuse
any typos.

> Thanks for your help

You're welcome.

Alexander Hulpke

-- Lehrstuhl D fuer Mathematik, RWTH, Templergraben 64, 52056 Aachen, Germany,
eMail: Alexander.Hulpke@math.rwth-aachen.de



From t9xu@math.unb.ca Mon Aug 08 12:50:00 1994
From:           "Dennis Drapeau, Summer Research Stdnt." <t9xu@math.unb.ca>
Date:           Mon, 08 Aug 94 12:50 ADT
Subject:        [no subject]

I would like to know how to save(to disk) the groups that GAP creates so that I do not have to wait for GAP to redo any lengthy computations everytime I start up the program.

thank you for your help
Dennis Drapeau



From sl25@cus.cam.ac.uk Wed Aug 10 11:07:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Wed, 10 Aug 94 11:07 +0200
Subject:        Re: [no subject]

Dennis Drapeau asks:

> I would like to know how to save(to disk) the groups that GAP creates so that I 
> do not have to wait for GAP to redo any lengthy computations everytime I start u
> p the program.

The simplest thing you can do is use the PrintTo() and AppendTo() functions to
print the group to a file. For example:

gap> g := Group((1,2)(3,4),(1,3)(2,4));
Group( (1,2)(3,4), (1,3)(2,4) )
gap> PrintTo("filename","g := ",g,";\n");
gap> Unbind(g);
gap> g;
Error, Variable: 'g' must have a value
gap> Read("filename");
gap> g;
Group( (1,2)(3,4), (1,3)(2,4) )
gap>  quit;
11.820u 2.690s 1:24.83 17.1% 0+3865k 85+4io 83pf+0w
{keith:584} cat filename
g := Group( (1,2)(3,4), (1,3)(2,4) );
{keith:585} 


This will work for permutation groups or matrix groups, for example, but not so
well for finitely-presented groups. You also lose some of the extra information
that GAP can store in the group record, which can take time to recover. 

	Steve



From rowe@twain.ee.cornell.edu Wed Aug 10 09:03:00 1994
From:           "David Rowe" <rowe@twain.ee.cornell.edu>
Date:           Wed, 10 Aug 94 09:03 -0400 (EDT)
Subject:        Re:  [no subject]

>I would like to know how to save(to disk) the groups that GAP creates so that I
>do not have to wait for GAP to redo any lengthy computations everytime I start 
>up the program.

What I've found that works is to take a look at the PrintRec function and the
PrintTo function and write a PrintRecTo function by replacing the Print
function with the PrintTo function.  You will have to adjust the file so
when it is read in the record will be set equal to some variable, and the
.operations section should be set equal to the proper set of operations. i.e.
GraphOps.  This can really use up disk space if you have large groups however.

Hope this helps,

Dave Rowe
rowe@ee.cornell.edu



From wright@bright.uoregon.edu Thu Aug 11 09:28:00 1994
From:           "Charles.Wright" <wright@bright.uoregon.edu>
Date:           Thu, 11 Aug 94 09:28 -0500 (EST)
Subject:        Direct Factors -- Addendum

I lied slightly in my recent note about direct factors. To determine
whether a subgroup H of G is a direct factor, one should, of course, 
first check that <H,Centralizer(G,H)> = G before looking for comple-
mentary direct factors with Complement(Centralizer(G,H),Centre(H)).
-- 

   _--_|\           C.R.B. Wright
  /      \          Charles.Wright@maths.anu.edu.au
  \_.--._/          wright@math.uoregon.edu
        v



From arques@melq.uab.es Fri Aug 12 10:29:00 1994
From:           "Josep M. Arques" <arques@melq.uab.es>
Date:           Fri, 12 Aug 94 10:29 +0100
Subject:        Galois Field

I am new to GAP and I am interested in using it to compute in Galois's Fields with a large number of elements. I have found that GAP has te limit of 2^16 elements and I would like to know if there is a way to expand this capability.
Also, I would like to know if it is possible to call functions in GAP from other languages (for instance, C).
Thank you very much



From Frank.Celler@Math.RWTH-Aachen.DE Fri Aug 12 10:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Fri, 12 Aug 94 10:58 -0700 (PDT)
Subject:        Re: Galois Field

Dear Josep M. Arques,

     Also, I would like to know if it is possible to call functions in
     GAP from other languages (for instance, C).

do you want to call a GAP function from a C program or a C function
from a GAP program?  There is no *direct* support for either.  The
communication between stand-alone programs and GAP uses either files
or pipes.  The ANU PQ is an example of a stand-alone program which
does both: GAP is used to construct a presentation, this presentation
is then writen to a file and used as input for a ANU PQ run. During
this run the ANU PQ calls GAP (in order to compute orbits) using
pipes.  The output of the ANU PQ is writen to file and read back into
GAP.

best wishes
  Frank



From Thomas.Breuer@Math.RWTH-Aachen.DE Fri Aug 12 11:33:00 1994
From:           "Thomas Breuer" <Thomas.Breuer@Math.RWTH-Aachen.DE>
Date:           Fri, 12 Aug 94 11:33 WET
Subject:        Re: Galois Field

Dear Mrs. and Mr. Forum,

in his message of today Josep M. Arques writes

>  I am new to GAP and I am interested in using it to compute in Galois's
>  Fields with a large number of elements.
>  I have found that GAP has te limit of 2^16 elements and I would like
>  to know if there is a way to expand this capability.

The limit of 2^16 results from the internal representation of finite field
elements in GAP, so there is no trick to construct bigger finite fields.

Of course it is possible to choose an irreducible polynomial f of degree n
over the field GF(q), say, and then use the polynomials over GF(q) modulo
f as elements of the field GF( q^n ).

But this is not really a realization of big finite fields in GAP, since
there are up to now no data structures such as ideals and cosets that
would allow to regard an object g + (f) as element of GF(q)[X] / (f)
and thus as a field element.  Consequently for this construction one cannot
use GAP functions for fields (such as for the computation of a basis, a
primitive root, or the Galois group) or their elements (such as for the
computation of trace or norm).

In other words, up to now there is no support by data structures and
functions in GAP for handling finite fields of size bigger than 2^16, or
for handling their elements.  In the (not too near) future, however, the
limit of 2^16 will be extended.

Kind regards
Thomas Breuer



From Joachim.Neubueser@Math.RWTH-Aachen.DE Mon Aug 15 09:05:00 1994
From:           "Joachim Neubueser" <Joachim.Neubueser@Math.RWTH-Aachen.DE>
Date:           Mon, 15 Aug 94 09:05 +0200
Subject:        new algebraic number theory preprint server

Dear Forum members,

I am forwarding an announcement that may be interesting to some of you.

Joachim Neubueser 

----------------------------------------------------------------------
 
> Date: Fri, 12 Aug 1994 12:30:26 -0500
> From: Nigel Boston <boston@symcom.math.uiuc.edu>
> Subject:  new algebraic number theory preprint server
> Status: RO
> 
> 
> We hereby announce a new archive for the the temporary storage of electronic
> preprints in algebraic number theory.  The archive is located at the
> University of Illinois at Urbana-Champaign.  The preferred form for the
> papers is in TeX dvi format.  This allows the papers to be viewed
> immediately.
> 
> The procedure for submission of new preprints to the archives is simple.  The
> author prepares a short ascii file containing the title, author's name and
> email address, and an abstract of the paper.  This file and the file (or
> files) constituting the paper itself are then uploaded to our server using
> anonymous ftp.
> 
> -----------------------------------------------------------------------------
> 
> The best way to view the preprints and the instructions for authors is with
> a world wide web client.  A file explaining such things is available by
> anonymous ftp from math.uiuc.edu in
> pub/papers/Algebraic-Number-Theory/aux/www-faq.  It will
> tell you to obtain one if one doesn't exist on your system.  The one we
> prefer is called Mosaic.
> 
> Using your world wide web client you may open the URL named
> "http://www.math.uiuc.edu/Algebraic-Number-Theory".
> The associated dvi files are present, and can be viewed immediately
> on your screen.
> 
> The preprint files are also accessible via anonymous ftp, on the machine
> math.uiuc.edu.  The files associated with paper number 11, say, will be found
> in the directory pub/papers/Algebraic-Number-Theory/0011.  The instructions
> for authors are in the file pub/papers/Algebraic-Number-Theory/aux/instructions.
> -----------------------------------------------------------------------------
> 
> There is a mailing list whose members receive announcements via email of
> additions to the archives.  To join, simply send an email message to
> majordomo@ux1.cso.uiuc.edu which contains the following line in its body.
> 
>      subscribe algebraic-number-theory
> 
> -----------------------------------------------------------------------------
> 
> Nigel Boston <boston@math.uiuc.edu>
> Dan Grayson <dan@math.uiuc.edu>



From a.mathas@ic.ac.uk Mon Aug 15 15:58:00 1994
From:           "Andrew Mathas" <a.mathas@ic.ac.uk>
Date:           Mon, 15 Aug 94 15:58 +0100
Subject:        Re: operations query

Martin Schoenert writes:
#The general description is in the section "Dispatchers".  The sections
#for the dispatchers contain paragraphs like the following
#
#    'Orbit' calls \\
#    '<G>.operations.Orbit( <G>, <d>, <operation> )' \\
#    and returns the value.  Note that the third argument  is not optional for
#    functions called this way.
#
#But this is not done consistently in the manual, so if you find a section
#without such a paragraph, it doesn't mean that the function is not a
#dispatcher.
#
#In section "Function Calls" you will find
#
#    An exception again  occurs if the  function has only one  formal argument
#    with the name 'arg'.  In this case the values of all the actual arguments
#    are  stored in a  list  and this list   is assigned to  the  new variable
#    corresponding to the formal argument 'arg'.
#

Thanks for these references and your hepl about dispatchers in general.
Perhaps the index in the GAP manual should be updated so as to point to
these things?

On another note, a long while ago I wrote a Sublist routine to give all in
the sublists in a list and afterwards I discovered that there is a
SubList function in the GAP libraries. Mine is significantly faster on
large lists; if you want me to send you a copy let me know (the difference is
that the GAP version uses recursion whereas mine uses boolean arithmetic).

Regards,
	Andrew



From Martin.Schoenert@Math.RWTH-Aachen.DE Tue Aug 16 11:32:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Tue, 16 Aug 94 11:32 -0700 (PDT)
Subject:        Re: Re: operations query

Andrew Mathas writes in his e-mail message of 1994/08/15

    On another note, a long while ago I wrote a Sublist routine to give all
    in the sublists in a list and afterwards I discovered that there is a
    SubList function in the GAP libraries. Mine is significantly faster on
    large lists; if you want me to send you a copy let me know (the
    difference is that the GAP version uses recursion whereas mine uses
    boolean arithmetic).

I am quite interested in your function.  Why don't you put it on our
'ftp' server into the directory 'pub/incoming'?

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 kaskel@math.berkeley.edu Wed Aug 17 00:18:00 1994
From:           "Bruce Kaskel" <kaskel@math.berkeley.edu>
Date:           Wed, 17 Aug 94 00:18 -0700
Subject:        some group theoretic questions

Dear GAP Forum,
	Here are some (finite) group theoretic questions and I hope they
are not beyond the bounds of this forum. Certainly, I would expect that GAP
could help (or has already helped) provide some of the answers to these
questions. Also, I believe this forum to be the best location to find
those who might know the answers.
	Please direct e-mail responses to Ruvain Gittelman at:
gittelma@math.berkeley.edu
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1) What is the largest integer n such that ALL groups of order less than n
   are known? Where is this information to be found?
                                                        n
2) What is the largest n such that all groups of order 2  are known?
   Same for odd primes.

3) What is known about the automorphism group towers of finite groups which
   may have nontrivial center? Are groups whose tower terminates in {e} known?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



From sl25@cus.cam.ac.uk Wed Aug 17 12:34:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Wed, 17 Aug 94 12:34 +0200
Subject:        Normalizer

Can I suggest a minor improvement to Normalizer, especially for permutation
groups. I recently did

Normalizer(g,h) 

where h was, in fact a subgroup of g, although actually represented as a 
parent group in its own right. This ended up in GroupOps.Normalizer and showed
no sign of returning (g was S10, h was D10 in regular representation).

on the other hand doing

h := AsSubgroup(g,h);
Normalizer(g,h);

produced the required result reasonably quickly.

Perhaps this situation could be checked for somewhere and the quicker algorithm
used in that case. Even better, h & g could be embedded in the group they both
generate.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Wed Aug 17 18:15:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Wed, 17 Aug 94 18:15 +0200
Subject:        semigroups

Hello Gap users.

as a part of a degree, one of the students here has
written a collection of semigroup functions for Gap.
I will include the readme below, anyone can mail me
for a copy, or I will upload it somewhere if there is 
some interest.

Of course, we would be interested in any failings
in the code :-)

Regs


Tim Boykett


-----------------------------------------------------------------------------





******************************************************************************

***   SEMIGROUP FUNCTIONS FOR GAP *** 
          V 1.25 25.07.1994    
***    (c) Widi Marcel Oliver     ***

*******************************************************************************

>Semigroup( l1, l2 );

   *     defines a semigroup;
        SYNTAX 1
        arguments : l1 ... set of abstract generators
                    l2 ... set of defining relations
        SYNTAX 2 
        arguments : l1 ... the semigroup table
                    l2 ... the elements of the semigroup

>IsSemigroup( g );

        checks if g is defined as a semigroup

>DefSgCommutative( g ); *NEW*

        define a semigroup presentation as commutative

>DefAsNeutral( g, x ); *NEW*

        define the abstract generator x to be the neutral element of g

>SgTable( g {,"v"} {,order} ); *IMPROVED*

        computes the table of the semigroup g using some improved Knuth-Bendix algorithm
        "v" (optional) ... display progress of computation
        order (optional) ... length-lexicographic order : 1
                             lexicographic order        : 2
                             power-lexicographic order  : 3

>MinGens( g {,"v"} {,order} ); *NEW*

        try to minimize the generators in the semigroup g
        optional parameters : see SgTable

>Size( g );

        computes the number of elements of g

>Elements( g ); *FIXED*

        computes the elements of g

>SgP( g, x, y );

        computes the product of x and y in the semigroup g

>IsSgMonoid( g );

        checks if the semigroup g is a monoid

>IsSgGroup( g ); *NEW*

        checks if the semigroup g is a group

>SgNeutral( g );

        computes neutral element if g is a monoid; returns false otherwise

>IsSgCommutative( g ); *IMPROVED*

        checks if the semigroup g is commutative

>SgIdempotents( g );

        computes the idempotent elements of g

>IsGroupInvertible( g, x );

        checks, if the element x of g is (group-)invertible

>SgGroupKernel( g );

        computes the group kernel of a semigroup

>SgCentralizer( g, s );

        computes centralizer of the subset s of the semigroup g

>SgCenter( g );

        computes the center of the semigroup g

>IsSgIdempotent( g );

        checks if the semigroup g is idempotent

>SgRegulars( g );

        computes the regular elements of g

>IsSgRegular( g );

        checks if the semigroup g is regular

>SgCompletelyRegulars( g );

        computes the completely regular elements of g

>IsSgCompletelyRegular( g );

        checks if the semigroup g is completely regular

>IsSgInverse( g );

        checks if the semigroup g is inverse

>IsCliffordSg( g );

        checks if the semigroup g is a Clifford semigroup

>SubSemigroup( g, s );

        computes the subsemigroup of g generated by the subset s of g

>IsSubSemigroup( g, s ); *NEW*

        checks if s is a subsemigroup of g

>SubSemigroups( g ); *NEW*

        computes all subsemigroups of g

>SgOrder( g, a );

        computes the order of the element a in the semigroup g

>SgDistance( g1, g2 ); *MODIFIED*

        computes the distance between semigroups g1 and g2 where
        there must be standard-epimorphism between g1 and g2

>SgD( g1, g2 );

        computes the distance between semigroups g1 and g2 where
        g1 and g2 only must have same set of generators

>SgGCD( g1, g2 );

        computes the greatest common divisor of semigroups g1,g2

>SgLeftIdeal( g, s ); *NEW*

        computes left ideal generated by s in semigroup g

>SgRightIdeal( g, s ); *NEW*

        computes right ideal generated by s in semigroup g

>SgIdeal( g, s ); *NEW*

        computes ideal generated by s in semigroup g

>IsSgLeftIdeal( g, s ); *NEW*

        checks if s is a left ideal in g

>SgRightIdeal( g, s ); *NEW*

        checks if s is a right ideal in g

>IsSgIdeal( g, s ); *NEW*

        checks if s is an ideal in g

>SgEpi( g, h ); *NEW*

        computes all epimorphisms from g in h

>SgMono( g, h ); *NEW*

        computes all monomorphisms from g in h

>SgIso( g, h ); *NEW*

        computes all isomorphisms from g in h

>SgHomo( g, h ); *NEW*

        computes all homomorphisms from g in h

>SgEndo( g ); *NEW*

        computes all endomorphism on g

>SgAuto( g ); *NEW*

        computes all automorphisms on g

********************************************************************************watch this board for news !

NEW since V 1.16 :

* The function SgTable has been modified to compute the operation table for commutative
  semigroups using Groebner Bases.
* The function SgTable can now be called with three different orders.
* A minor bug in the SgTable function has been removed.
* The function IsSgCommutative has been completely rewritten.
* The function DefSgCommutative has been added.
* The function DefAsNeutral has been added.
* The function IsSgGroup has been added.
* The function MinGens has been added.
* The function SgDistance has been modified.
* The functions IsSubsemigroup and SubSemigroups have been added.
* The functions SgEpi, SgMono, SgIso, SgEndo, SgAuto and SgHomo have been added.
* The functions SgRightIdeal, SgLeftIdeal and SgIdeal have been added.
* The functions IsSgRightIdeal, IsSgLeftIdeal and IsSgIdeal have been added.
* The function Elements has been fixed.

********************************************************************************



From Martin.Schoenert@Math.RWTH-Aachen.DE Thu Aug 18 14:21:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 14:21 -0700 (PDT)
Subject:        Re: semigroups

Tim Boykett writes in his e-mail message of 1994/08/17

    as a part of a degree, one of the students here has
    written a collection of semigroup functions for Gap.
    I will include the readme below, anyone can mail me
    for a copy, or I will upload it somewhere if there is 
    some interest.

I suggest that you upload the code together with the readme file to
'ftp://ftp.math.rwth-aachen.de/pub/incoming/'.

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 fisk@polar.bowdoin.edu Thu Aug 18 10:13:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Thu, 18 Aug 94 10:13 -0400
Subject:        info files for gap

Dear Gap Forum,
	The documentation is getting so large that it it is hard to
comprehend.  The online help is useful, but does not enable browsing. 
I therefore wrote a conversion program from the tex files to EMACS
info format.  It's the biggest info file I've ever seen (57 files)!

Directions:

	0) Create a directory to hold the info files.
	1) Save the shar portion of this message in a file INFO-GAP
	   in this directory
	2) Type "unshar INFO-GAP"  (or if you do not have unshar,
	   change INFO-GAP to executable, and type "INFO-GAP".
	3) Read the file README, and make a few changes in "info.pl".
	4) Type "info.pl", and wait 30 minutes (or so).
	5) Fix up the index, and you're done!

I hope that you find this useful.  It is easy to change this to
include new documentation.  It's almost, but not quite, automatic.

-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA


#!/bin/sh
# This is a shell archive (produced by shar 3.52.3)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 08/18/1994 13:25 UTC by fisk@bruin.bowdoin.edu
# Source directory /people/faculty/math/fisk/tmp/GAP-texi
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#   2093 -rw------- README
#     75 -rw-r--r-- GAP-INDEX.texi
#    104 -rw-r--r-- GAP-emacs.el
#   4366 -rw-r--r-- GAP.texi-orig
#   5885 -rwxr--r-- info.pl
#
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
  shar_touch=touch
else
  shar_touch=:
  echo 'WARNING: not restoring timestamps'
fi
rm -f 1231235999 $$.touch
#
# ============= README ==============
if test -f 'README' && test X"$1" != X"-c"; then
  echo 'x - skipping README (File already exists)'
else
  echo 'x - extracting README (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'README' &&
Preliminary changes:
X
X	I was amazed how well the documentation followed its rules.  Creating 
X	the info file was not hard (although I had to learn perl to do it).
X	I only found one syntactic mistake in the info files that needed 
X	changing:  in install.tex, there are many references to |c:\|; these
X	should be changed to |c:|.  I think that there might also be one 
X	occurrence of |grp\| there (change it to |grp|, but my notes are 
X	not clear about that.
X
X
How to create the info files.
X
X	1) make a new directory to hold the info files
X
X	2) copy info.pl, GAP-emacs.el, and GAP-texi.orig to this directory.
X
X	3) edit info.pl - there are two directories that must be specified.
X		Also, check if the pathname to perl (first line) is correct.
X
X	4) run info.pl - this takes a while (10 minutes to 30 minutes for me)
X		it produces lots of messages!
X
X	5) If all goes well, at the very end you should get the message
X
X
Removing temp files and emacs backups
Making info file `GAP.info' from `GAP.texi'.
/people/faculty/math/fisk/tmp/GAP-texi/algebra.texi:1982: 
X       This `example' doesn't have a matching `@end example'.
X
X
X		(I don't understand this error.)
X
X	6) The result of the computation is:
X
X		GAP.info
X		GAP.info-1 ... GAP.info-57
X		algebra.texi algebra-menu.texi ... (two for each chapter)
X	
X		All the files except the files GAP.info* can be removed 
X		if you are satisfied with the outcome.
X
X	6) For some reason, the index file is not correct.  For me, 
X	   the index is located in GAP.info-57.  Find the two lines
X
X
Command Index
*************
X
X	   All the menu items have several leading spaces.  So, instead of
X
X     * Menu:
X     
X     * AbelianGroup:                    The Basic Groups Library.
X     * AbelianInvariantsNormalClosureFpGroup: Group Functions for Finitely Presented Groups.
X  (etc)
X
X	you should remove the leading spaces to create
X
X
* Menu:
X     
* AbelianGroup:                    The Basic Groups Library.
* AbelianInvariantsNormalClosureFpGroup: Group Functions for Finitely Presented Groups.
X  (etc)
X
X
X	7) With these changes, you should have an info file for GAP!
X
SHAR_EOF
  $shar_touch -am 0818092294 'README' &&
  chmod 0600 'README' ||
  echo 'restore of README failed'
  shar_count="`wc -c < 'README'`"
  test 2093 -eq "$shar_count" ||
    echo "README: original size 2093, current size $shar_count"
fi
# ============= GAP-INDEX.texi ==============
if test -f 'GAP-INDEX.texi' && test X"$1" != X"-c"; then
  echo 'x - skipping GAP-INDEX.texi (File already exists)'
else
  echo 'x - extracting GAP-INDEX.texi (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'GAP-INDEX.texi' &&
@node   Command Index, , weyl, Top
@chapter Command Index
X
@printindex cm
X
SHAR_EOF
  $shar_touch -am 0818090894 'GAP-INDEX.texi' &&
  chmod 0644 'GAP-INDEX.texi' ||
  echo 'restore of GAP-INDEX.texi failed'
  shar_count="`wc -c < 'GAP-INDEX.texi'`"
  test 75 -eq "$shar_count" ||
    echo "GAP-INDEX.texi: original size 75, current size $shar_count"
fi
# ============= GAP-emacs.el ==============
if test -f 'GAP-emacs.el' && test X"$1" != X"-c"; then
  echo 'x - skipping GAP-emacs.el (File already exists)'
else
  echo 'x - extracting GAP-emacs.el (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'GAP-emacs.el' &&
(load-library "texnfo-upd")
(texinfo-multiple-files-update "GAP.texi" t t)
(save-buffers-kill-emacs t) 
SHAR_EOF
  $shar_touch -am 0729104094 'GAP-emacs.el' &&
  chmod 0644 'GAP-emacs.el' ||
  echo 'restore of GAP-emacs.el failed'
  shar_count="`wc -c < 'GAP-emacs.el'`"
  test 104 -eq "$shar_count" ||
    echo "GAP-emacs.el: original size 104, current size $shar_count"
fi
# ============= GAP.texi-orig ==============
if test -f 'GAP.texi-orig' && test X"$1" != X"-c"; then
  echo 'x - skipping GAP.texi-orig (File already exists)'
else
  echo 'x - extracting GAP.texi-orig (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'GAP.texi-orig' &&
\input texinfo    @c -*- texinfo -*-
@c %**start of header
@setfilename GAP.info
@settitle GAP @value{version}
@c make a command index:
@defcodeindex cm
@c %**end of header
X
@set version 1.5
@set update-date 2 Feb 1994
@set update-month Feb 1994
X
@clear smallbook
X
@c Play with some whitespace settings:
@tex
\global\chapheadingskip = 15pt plus 4pt minus 2pt
\global\secheadingskip = 12pt plus 3pt minus 2pt
\global\subsecheadingskip = 9pt plus 2pt minus 2pt
@end tex
X
@c Use smaller whitespace between paragraphs in the 8.5x11 format:
@ifclear smallbook
@tex
\global\parskip 6pt plus 1pt
@end tex
@end ifclear
X
@finalout
X
@ifinfo
X 
@end ifinfo
X
@setchapternewpage odd
@titlepage
@title GAP
X
X
@c The following two commands start the copyright page.
@c Put it inside the titlepage to turn off headings:
@page
@vskip 0pt plus 1filll
X
@end titlepage
X
@node   Top, aboutgap, (dir), (dir)
@top GAP
X
@menu
* aboutgap::About GAP 
* language::The Programming Language 
* environm::Environment 
* domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* aboutgap::About GAP 
* language::The Programming Language 
* environm::Environment 
* domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that my copy is local, so that bringing up a new section is
virtually instant, I like the split version, but for remote use fewer larger
files might make more sense.

	Steve



From tim@bruckner.stoch.uni-linz.ac.at Fri Aug 19 18:03:00 1994
From:           "Tim Boykett" <tim@bruckner.stoch.uni-linz.ac.at>
Date:           Fri, 19 Aug 94 18:03 +0200
Subject:        Re: semigroups

Hi,

i have uploaded the semigroup.g file to the samson 
ftp site, but i could not upload the semigroup.doc
file that explains it all. Unfortunately it
is also not tex'ed (some students ARE slack :-).

Could someone from the GaP group tell me how to upload
the documentation?

tim



From Martin.Schoenert@Math.RWTH-Aachen.DE Sat Aug 20 02:07:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Sat, 20 Aug 94 02:07 +0100 (MET)
Subject:        Re: Re: On-line manual

I am going to violate one of my principles, namely ``never underestimate
your users'', but I still think that a few explanations are in order to
help those who have never heard of HTML or 'texi2html' before.

A lot of people are currently interested in documents on Networks.  Such
documents should be easily available to everyone, it should be easy to
reference one document from within another, and should be possibly
contain pictures, movies, and sound.

The most popular system is the  domain::Domains 
* ring::Rings 
* field::Fields 
* group::Groups 
* operatio::Operations of Groups 
* vecspace::Vector Spaces 
* integer::Integers 
* numtheor::Number Theory 
* rational::Rationals 
* cyclotom::Cyclotomics 
* gaussian::Gaussians 
* numfield::Subfields of Cyclotomic Fields 
* unknown::Unknowns 
* finfield::Finite Fields 
* polynom::Polynomials 
* permutat::Permutations 
* permgrp::Permutation Groups 
* word::Words in Abstract Generators 
* fpgrp::Finitely Presented Groups 
* agwords::Words in Finite Polycyclic Groups 
* aggroup::Finite Polycyclic Groups 
* saggroup::Special Ag Groups 
* list::Lists 
* set::Sets 
* blister::Boolean Lists 
* string::Strings and Characters 
* range::Ranges 
* vector::Vectors 
* rowspace::Row Spaces 
* matrix::Matrices 
* matring::Matrix Rings 
* matgrp::Matrix Groups 
* grplib::Group Libraries 
* algebra::Algebras 
* algfp::Finitely Presented Algebras 
* algmat::Matrix Algebras 
* module::Modules 
* mapping::Mappings 
* homomorp::Homomorphisms 
* boolean::Booleans 
* record::Records 
* combinat::Combinatorics 
* tom::Tables of Marks 
* chartabl::Character Tables 
* gentable::Generic Character Tables 
* characte::Characters 
* paramaps::Maps and Parametrized Maps 
* gettable::Character Table Libraries 
* classfun::Class Functions 
* monomial::Monomiality Questions 
* install::Getting and Installing GAP 
* share::Share Libraries 
* anupq::ANU Pq 
* grape::Grape 
* mtx::The MeatAxe 
* sisyphos::Sisyphos 
* smash::Smash, Matrix Groups and $G$-Modules 
* ve::Vector Enumeration 
* weyl::Weyl Groups and Hecke Algebras 
* Comamnd Index::Index of Commands
@end menu
X
XXXXXXinclude-hereXXXXX
X
@page
X
@include GAP-INDEX.texi 
X 
@contents
@bye
X
X
X
SHAR_EOF
  $shar_touch -am 0817154294 'GAP.texi-orig' &&
  chmod 0644 'GAP.texi-orig' ||
  echo 'restore of GAP.texi-orig failed'
  shar_count="`wc -c < 'GAP.texi-orig'`"
  test 4366 -eq "$shar_count" ||
    echo "GAP.texi-orig: original size 4366, current size $shar_count"
fi
# ============= info.pl ==============
if test -f 'info.pl' && test X"$1" != X"-c"; then
  echo 'x - skipping info.pl (File already exists)'
else
  echo 'x - extracting info.pl (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'info.pl' &&
#!/usr/local/bin/perl
X
#	      An overview of the files
X
# Original Files
X
#     GAP-emacs.el          Used to update all the nodes in the texinfo file
#     GAP.texi-orig         Skeleton used to create main texinfo file
#     GAP-INDEX.texi        Read in to input the index 
X
# Created Files
X
#     GAPinclude.texi       List of texinfo files to be included; it is 
#                           inserted into GAP.texi-orig to make GAP.texi
#     GAP.texi              main texinfo file
#     ?.texi                one file for each chapter
#     GAPmainmenu.texi      If you want, you could replace (by hand!) the 
#                           menu in GAP.texi by this one - 
#                           it has the section names 
X
#
# Set the following to the GAP home directory
#
X
$GAPdir = "/people/faculty/math/fisk/usr/local/src/gap3r4p0";
X
#
# Where the info files should be (and the file GAP.info is)
#
X
$GAPinfodir = "/people/faculty/math/fisk/tmp/GAP-texi";
X
###############################################################
#
#                 Nothing more to change 
#
###############################################################
X
#
# test to see that the files and directories are there
#
X
chdir($GAPinfodir) || die("please make the info directory\n");
$tmpfile = $GAPinfodir . "/TEMP";
X
if (!(-e "GAP.texi-orig"))       {die("file GAP.texi-orig not found")};
if (!(-e "GAP-emacs.el"))        {die("file GAP-emacs.el not found")};
if (!(-w $GAPdir))               {die("directory for GAP  not writable")};
X
X
# 
# files included in top info file
#
X
open(GAPinclude,       ">GAPinclude.texi");
open(GAPmainmenu,      ">GAPmainmenu.texi");
open(GAPtexinfo,       ">GAP.texi");
open(GAPtexinfoXX,     "GAP.texi-orig");
X
#
# the list of all chapters, in order from manual.tex
#
X
@GAPlist = ("aboutgap","language","environm", "domain", "ring", "field",
"group","operatio","vecspace","integer","numtheor","rational","cyclotom",
"gaussian","numfield","unknown","finfield","polynom","permutat","permgrp",
"word","fpgrp","agwords","aggroup","saggroup","list","set","blister","string",
"range","vector","rowspace","matrix","matring","matgrp","grplib","algebra",
"algfp","algmat","module","mapping","homomorp","boolean","record","combinat",
"tom","chartabl","gentable","characte","paramaps","gettable","classfun",
"monomial","install","share","anupq","grape","mtx","sisyphos","smash","ve",
"weyl");
X
#@GAPlist = ("aboutgap","language");
#@GAPlist = ("install");
X
#
# convert each chapter
#
X
foreach $GAPchapter (@GAPlist) {
X
X
X    $current = $GAPdir     . "/doc/" . $GAPchapter . ".tex";
X    $texinfo = $GAPinfodir . "/"     . $GAPchapter . ".texi";
X    $texmenu = $GAPinfodir . "/"     . $GAPchapter . "-menu.texi";
X
X    $parity_of_bar = 0;		# reset at beginning of each chapter
X
X    print "Processing $current\n";
X    print GAPinclude "@include $texinfo\n";
X
X    open(GAPfile,$current) 	        || die "can't open $current";
X    open(GAPtexi, ">" . $texinfo)	|| die("can't open $texinfo\n");
X    open(GAPmenu, ">" . $texmenu)	|| die("can't open $texmenu\n");
X
X
X    
X  Main:
X    while(<GAPfile>) {
X	chop($_);
X	$name = $_;
#
#  skip comments
#
X	if(substr($_,0,1) eq "%") { 
X	    next Main;
X	}
X
X	s/@/@@/g;		               # fix @'s 
X	s/\\\\{}/@*/g;                         # break lines
X	s/\\\\/@*/g;                           
X	s/\\vspace{[\d\w]*}//g;                # no vspace
X	s/\\index{(\w*)}/\n@cmindex \1 \n/g;   # fix index
X	s/\\index{(\w*!\w*)}/\n@cmindex \1 \n/g;
X	s/{/ @{/g;                             # protect { and }
X        s/}/ @}/g;			
X
#
# worry about literals
#
X	s/\|\\\|/BARSLASHBAR/g;
X	s/\\\|/BBAARR/g;		# temporarily change literal bars
X	$number_of_bars=0;	        # count bars (page 155, perl book)
X	$pos = 0;
X	while (( $pos = index($_,"|",$pos)) >= 0) {
X	    $pos++;
X	    $number_of_bars++;
X	}
#
# skip if an even number of bars 
#
X	if( ($number_of_bars % 2) == 1) {
X	    $parity_of_bar = 1 - $parity_of_bar;
X	    if($parity_of_bar == 1)
X		{s/\|/\n@example\n/;}
X	    else
X              {s/\|/\n@end example\n/;}
X	};
X	s/BBAARR/\\\|/g;		# restore literal bars
X	s/BARSLASHBAR/\|\\\|/g;
#
#   Write 
#
X     $writeout = 1;
X     if(/\\Chapter|\\Section/) {
X	 $writeout = 0;
X	 $name =~ s/\\Chapter{//g;
X	 $name =~ s/\\Section{//g;
X	 $name =~ s/}//g;		
X	 $name =~ s/}//g;		
X         $name =~ s/%//g;
X         $name =~ s/\\index.*//g;				 
X     };
X	if(/\\Chapter/) {
X	    print GAPmenu "@node $GAPchapter,Top,Top,Top\n";
X	    print GAPmenu "@chapter $name\n";
X	    print GAPmenu "@menu \n";
X	    print GAPmainmenu "* $GAPchapter::$name \n";
X	};			
X	if(/\\Section/){
X	    print GAPtexi "@node $name\n";
X	    print GAPtexi "@section $name\n";
X	    print GAPmenu "*  $name:: \n";
X	};
X     if($writeout == 1) {	# write out
X	 print GAPtexi "$_\n";
X	};
X    }
X
#
#  Close files
#
X    print GAPmenu "@end menu \n";
X    close(GAPfile);
X    close(GAPtexi);
X    close(GAPmenu);
X	
#
#  copy the menu to the beginning of the file, and then remove it
#
X    system("mv $texinfo $tmpfile");
X    system("cat $texmenu $tmpfile > $texinfo");
#    unlink($texmenu);
}
X
X
X
X
X
#
# copy the include files to the main texinfo file
#
X
close(GAPinclude);
open(GAPinclude,       "GAPinclude.texi");
X
while(<GAPtexinfoXX>) {
X    if(index($_,"XXXXXinclude-hereXXXXX") == -1){
X       print GAPtexinfo;
} else {
X    while(<GAPinclude>) {
X       print GAPtexinfo;
X   }
}}
X
close(GAPtexinfo);
X    
X
#
#  update the new texinfo file 
#
X
X 	print "   updating nodes - this takes a long time \n";
X 	system("emacs -batch -q   -l GAP-emacs.el ");
X
X
#
# all done - remove temp file and backups created by emacs
#
X
print "\nRemoving temp files and emacs backups\n";
close(GAPmainmenu);
unlink($tmpfile);
X
foreach $GAPchapter (@GAPlist) {
X    $texinfo_back = $GAPinfodir . "/" . $GAPchapter . ".texi~";
X    unlink($texinfo_back);
}
X
X
#
# run makeinfo and create the info files
#
X
X
system("makeinfo GAP.texi");
X
X
X
X
SHAR_EOF
  $shar_touch -am 0817145794 'info.pl' &&
  chmod 0744 'info.pl' ||
  echo 'restore of info.pl failed'
  shar_count="`wc -c < 'info.pl'`"
  test 5885 -eq "$shar_count" ||
    echo "info.pl: original size 5885, current size $shar_count"
fi
exit 0



From Frank.Celler@Math.RWTH-Aachen.DE Thu Aug 18 17:58:00 1994
From:           "Frank Celler" <Frank.Celler@Math.RWTH-Aachen.DE>
Date:           Thu, 18 Aug 94 17:58 -0700 (PDT)
Subject:        Re: info files for gap

Dear Steve Fisk,
  
     I hope that you find this useful.  It is easy to change this to

many thanks for your nice converter,  I have copied a zoo archive of
your program to "ftp.math.rwth-aachen.de:/pub/incoming/fisk.zoo".

best wishes
  Frank



From sl25@cus.cam.ac.uk Fri Aug 19 11:21:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 11:21 +0200
Subject:        On-line manual

Using Steve Fisk's converter, and the CERN texi2html converter, I have produced 
an on-line hypertext GAP (3.4) manual, available for inspection at

http://www-theory.cs.st-and.ac.uk/~sal/GAP

I would appreciate comments. I know that the command index is missing. This
seems to be a deficiency of the CERN converter. 

I will zoo up the HTML and upload it to samson  shortly in case people want to
establish local copies, alternatively the two stage conversion is fairly
painless.

	Steve Linton



From Martin.Schoenert@Math.RWTH-Aachen.DE Fri Aug 19 11:50:00 1994
From:           "Martin Schoenert" <Martin.Schoenert@Math.RWTH-Aachen.DE>
Date:           Fri, 19 Aug 94 11:50 -0700 (PDT)
Subject:        Re: On-line manual

I am currently working on a direct translation of the LaTeX subset the
GAP manual is using to HTML.  Should produce nicer results than the
GAP-LaTeX -> TeXinfo -> HTML translation.  For example it uses proper
fonts.

It would also like to hear comments about Steve's HTML document.  For
example, is it better to have one document per section or is it better
to have one document per chapter and each section has its own label?

Note that Steve Fisk's converter has problems with some features and
inconsistencies in the GAP manual.  For example it keeps the index
entries.  Also his handling of '\' is not quite correct, e.g., '\' has
no special meaning in the example environment (|example|).
Also it would be nice if the crossreferences (see "somewhere") where
mapped to references in the TeXinfo 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 fisk@polar.bowdoin.edu Fri Aug 19 08:15:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:15 -0400
Subject:        Re: On-line manual

Steve
	It's nice!  I noticed that not only is the command index
missing, but the top level menu in the first page is missing.  This is
also useful, since it gives the names of all the chapters.  Indeed, I
wonder if it is a good idea to include all the chapter headings in the
main menu - it makes it very big (60K I think).  Perhaps it would be
better if there were a "GAP home page" with the banner and the chapter
titles.


-- 
Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From fisk@polar.bowdoin.edu Fri Aug 19 08:30:00 1994
From:           "Steve Fisk" <fisk@polar.bowdoin.edu>
Date:           Fri, 19 Aug 94 08:30 -0400
Subject:        Re: On-line manual

>>>> "Martin" == Martin Schoenert <martin.schoenert@math.rwth-aachen.de> writes:

 Martin> I am currently working on a direct translation of the LaTeX
 Martin> subset the GAP manual is using to HTML.  Should produce nicer
 Martin> results than the GAP-LaTeX -> TeXinfo -> HTML translation.
 Martin> For example it uses proper fonts.

 Martin> It would also like to hear comments about Steve's HTML
 Martin> document.  For example, is it better to have one document per
 Martin> section or is it better to have one document per chapter and
 Martin> each section has its own label?

My view

Home Page - telling about GAP
     All Chapter titles, plus pointer to listing of all nodes and index
	Chapter 1 (Aboutgap)
		first section
		...
	Chapter 2 
		first section
		...
	...
	Index   


Is this what your question meant?



 Martin> Note that Steve Fisk's converter has problems with some
 Martin> features and inconsistencies in the GAP manual.  For example
 Martin> it keeps the index entries.  Also his handling of '\' is not
 Martin> quite correct, e.g., '\' has no special meaning in the
 Martin> example environment (|example|).  Also it would be nice if
 Martin> the crossreferences (see "somewhere") where mapped to
 Martin> references in the TeXinfo manual.

I'm not surprised that it doesn't get all these features correct.  I
was very impressed with the organization of the manual that allowed
almost 1000 pages to become a "nearly correct" info document.  I
attempted a minimal conversion - I know there are problems with
references, fonts, index entries, |'s (and I spend more time with |
than with everything else combined).  I think that for someone who
knows perl, these are not too hard to do.

However, the direct creation of the HTML document - by the creator -
is clearly the best way to proceed.  I only hope that my effort proves
useful in the short run.  Anyway, I enjoyed learning perl.  

Once again, thanks for GAP!


Steve Fisk                              Department of Mathematics
207-725-3574                            Bowdoin College
fisk@bowdoin.edu                        Brunswick, Me. 04011 USA



From sl25@cus.cam.ac.uk Fri Aug 19 15:19:00 1994
From:           "Steve Linton" <sl25@cus.cam.ac.uk>
Date:           Fri, 19 Aug 94 15:19 +0200
Subject:        Re: On-line manual

Steve Fisk wrote:

>  Martin> It would also like to hear comments about Steve's HTML
>  Martin> document.  For example, is it better to have one document per
>  Martin> section or is it better to have one document per chapter and
>  Martin> each section has its own label?
> 
> My view
> 
> Home Page - telling about GAP
>      All Chapter titles, plus pointer to listing of all nodes and index
> 	Chapter 1 (Aboutgap)
> 		first section
> 		...
> 	Chapter 2 
> 		first section
> 		...
> 	...
> 	Index   
> 
> 
> Is this what your question meant?
> 
> 

I think he is referring to the way that the HTML manual is split up into 1317
separate files, one for each section. HTML (and texi2html) would also allow
fewer longer files with internal references to the sections as part of the
files. Given that 