Dear GAP-Forum, dear Kaustuv,
On Sat, 8 Mar 1997, Kaustuv M. Das wrote:
I am interested in getting hold of
all the Sylow_3 subgroups of Sp_6(5), but whenever I try the GAP command:gap> SylowSubgroup(G,3);
where G has been defined as :
gap> G:=SymplecticGroup(6,5);
I get an out of memory error (after the machine sits and thinks for about
thirty hours). What am I doing wrong?
I think essentially you are doing the right thing, but GAP seems to do
something which is not very efficient.
GAP's idea is to convert the group to a permutation group and it seems
that it spends a lot of time and memory in doing so.
I append to this mail a short file with some utility functions which I
gave to several people before (who had similar questions than the one
above). An example is given, how to find a Sylow-3-subgroup in Sp_6(5).
It also converts the group to a permutation group and defines functions
for converting elements from matrices to permutations and vice versa.
Maybe it would be useful to many GAP users to have a better interface
between the matrix groups and permutation groups. (Functions like
'NumVec' and 'VecNum' below can also be used to write a much faster
orbit algorithm for vectors under a matrix group, than the default
algorithm in GAP.)
I have tried allocating more memory to the program by changing the
command line in GAP.BAT and that hasn't helped. Also Windows 95
supposedly is better with memory allocation, though I am not sure whether
I believe that or not :) Any suggestions on how I can get hold of all
the Sylow_3 subgroups of Sp_6(5), without having to shift to another
machine would be most welcome.
Give GAP 12MB or more for the shown example. On my Sparc 20 the example
takes less than 3 minutes. It should be faster on your Pentium 133.
By the way: another possibility to find the Sylow-3-Subgroups would be to
look at the much smaller subgroup isomorphic to the unitary group GU_3(5)
(some people call it U_3(25)), whose order is divisible by 3^4.
With best regards,
Frank Luebeck
# an example
# read in the following file:
Read("matperm.g");
# define the group
g:=SymplecticGroup(6,5);;
# convert to permutation group
gp:=PermGroupOnVectorspace(g);;
time;
# always a good idea to tell a permutation group its order ("Size"),
# if you know it
gp.size:=Size(g);
# compute Sylow-3-subgroup
sylperm:=SylowSubgroup(gp,3);;
time;
# convert back to matrix group
syl:=Group(List(sylperm.generators,p->MatrixPerm(g,p)),
IdentityMat(6)*Z(5)^0);
Size(syl);
# the following works, too
n:=Normalizer(gp,sylperm);;
Size(n);
# => probably you don't want to write down all the conjugate
# subgroups explicitly
------------ cut here ------------------------------------
########################################################################
##
## matperm.g Frank Luebeck
##
## Mathematisches Institut and IWR, Universitaet Heidelberg
##
## This file contains some utility functions to convert between matrix
## groups over finite field and the corresponding permutations group on
## all(!) vectors of the vector space.
##
#############################################################################
##
#F NumVec( <fld>, v ) . . . . . . . . . . . . converts vector <v> over finite
#F field <fld> to a positive integer number
##
NumVec:=function(f,v)
local fel,p,n,q,i;
if IsBound(f.elements) then
fel:=f.elements;
else
fel:=Elements(f);
fi;
q:=Length(fel);
n:=Length(v);
p:=0;
for i in [1..n] do
p:=p*q+Position(fel,v[i])-1;
od;
return p+1;
end;
#############################################################################
##
#F VecNum( <fld>, <dim>, <nr> ) . . . . . inverse of 'NumVec', converts number
#F <nr> to <dim>-dimensional vector over finite field <fld>
##
VecNum:=function(f,n,p)
local fel,q,v,i;
if IsBound(f.elements) then
fel:=f.elements;
else
fel:=Elements(f);
fi;
q:=Length(fel);
v:=[];
p:=p-1;
for i in [1..n] do
v[n-i+1]:=fel[(p mod q)+1];
p:=QuoInt(p,q);
od;
return v;
end;
#############################################################################
##
#F PermGroupOnVectorspace( <matgrp> ) . . . . . . returns permutation
#F group which describes the matrix group <matgrp> over a finite field as
#F permutation group on all vectors of the vector space
##
## Before using this function think about the number of vectors in your
## vector space!
##
PermGroupOnVectorspace:=function(g)
local l, n, f, gen, v, p, i, erg;
l:=Length(g.generators);
n:=g.dimension;
f:=g.field;
g.idPos:=List(g.identity,e->NumVec(f,e));
gen:=List([1..l],i->[]);
for p in [1..Size(f)^n] do
v:=VecNum(f,n,p);
for i in [1..l] do
Add(gen[i],NumVec(f,v*g.generators[i]));
od;
od;
erg:=Group(List(gen,PermList),());
return erg;
end;
#############################################################################
##
#F PermMatrix( <matgrp>, <mat> ) . . . . . . converts matrix in <matgrp> to
#F corresponding permutation in PermGroupOnVectorspace( <matgrp> )
##
PermMatrix:=function(g,M)
local l;
l:=Size(g.field)^g.dimension;
return PermList(List([1..l],i->NumVec(g.field,
VecNum(g.field,g.dimension,i)*M)));
end;
#############################################################################
##
#F MatrixPerm( <matgrp>, <perm> ) . . . . . . . . . converts permutation in
#F PermGroupOnVectorspace( <matgrp> ) to corresponding matrix in <matgrp>
##
MatrixPerm:=function(g,p)
return List(OnTuples(g.idPos,p),i->VecNum(g.field,g.dimension,i));
end;