[GAP Forum] Extra-special group acting on an elementary abelian group
Burkhard Höfling
burkhard at hoefling.name
Wed Feb 22 07:52:33 GMT 2012
On 2012-02-22, at 02:30 , Goodson, Joshua E wrote:
> Hello,
>
> I am trying to count the orbits of an extra-special group of order 3^5 acting on an elementary abelian group of order 7^9. I start with the automorphism group of the elementary abelian group and then try to find the isomorphic image of the extra-special group, but because of the size of the automorphism group the computer cannot finish. I also try to find the group myself by first finding the Sylow subgroup of the automorphism group, but again the computer has a problem finishing. I believe in each case it mentions running out of memory. So I was wondering if there is another way I can perform the desired action GAP or would a better computer be able to find the subgroup of the automorphism group that I want?
It's quite straightforward to construct these groups as subgroups of GL(9, 7). Please find below some private code of mine which carries out this construction. The construction is based upon the chapter about representations of extraspecial groups in Doerk and Hawkes, Finite Soluble Groups, de Gruyter, 1992. Note that there are two groups of exponent 3 and 9, respectively, in your case.
gap> G := ExtraspecialMatrixGroup (3,2, 3, 7);
<matrix group of size 243 with 4 generators>
gap> G := ExtraspecialMatrixGroup (3,2, 3^2, 7);
<matrix group of size 243 with 4 generators>
Cheers
Burkhard.
ExtraspecialMatrixGroup := function (r, k, e, q)
# returns an extraspecial group E of order r^{2k + 1} as
# matrix group over GF(q)
# if r = 2 and e = '-', then E is the central product of k-1 copies
# of D_8 and one Q8; if e = '+', then E is the central product
# of k copies of D_8.
# if r is an odd prime then the group of exponent e will be constructed,
# where e = r or e = r^2
local F, d8, q8, i, a, b, p, sq, ex, g1, g2, T, z, MyGL, TensorProductOfMatrixGroups;
MyGL := GL;
TensorProductOfMatrixGroups := function (G, H, q)
local gens, F, z, d, dG, dH, g, h, n, i, inds, T;
gens := [];
if q mod Size (FieldOfMatrixGroup (G)) <> 0 or
q mod Size (FieldOfMatrixGroup (H)) <> 0 then
Error ("G and H must be over subfields of F");
fi;
dG := DegreeOfMatrixGroup (G);
dH := DegreeOfMatrixGroup (H);
d := dG*dH;
F := GF(q);
for g in GeneratorsOfGroup (G) do
z := NullMat (d, d, F);
for i in [1,dG+1..(dH-1)*dG+1] do
z{[i..i+dG-1]}{[i..i+dG-1]} := g;
od;
Add (gens, z);
od;
for h in GeneratorsOfGroup (H) do
z := NullMat (d, d, F);
for i in [1..dG] do
inds := [i,dG+i..(dH-1)*dG+i];
z{inds}{inds} := h;
od;
Add (gens, z);
od;
T := Subgroup (MyGL(d, q), gens);
Assert (1, (Size (G)*Size (H)) mod Size (T) = 0);
Assert (1, IsSolvableGroup (T) or
(not IsSolvableGroup (G) or not IsSolvableGroup (H)));
return T;
end;
if not IsPosInt (r) or not IsPosInt (k) or not IsInt (q) then
Error ("r, k, q must be positive integersr");
fi;
if not IsPrimeInt (r) or not IsPrimePowerInt (q) or (q-1) mod r <> 0 then
Error ("r must be prime and q must be a prime power such that r divides q-1");
fi;
F := GF(q);
if r = 2 then
if e = '-' then # we need q8
if (q-1) mod 4 <> 0 then
p := SmallestRootInt (q);
# find integers a, b, satisfying a^2 + b^2 = -1 (mod p)
sq := List ([1..QuoInt (p, 2)], x -> x^2 mod p);
a := 0;
repeat
a := a + 1;
b := First ([1..QuoInt (p,2)], i -> (sq[a] + sq[i] + 1) mod p = 0);
until b <> fail;
q8 := SubgroupNC (MyGL(2, q), [[[0,1],[-1,0]]*Z(q)^0, [[a,b],[b,-a]]*Z(q)^0]);
else
z := Z(q)^((q-1)/4);
q8 := SubgroupNC (MyGL(2, q), [[[1,0],[0,-1]]*z, [[0,1],[1,0]]*z]);
fi;
Assert (1, IdGroup (q8) = [8,4]);
SetSize (q8, 8);
if k = 1 then
return q8;
fi;
fi;
d8 := SubgroupNC (MyGL(2, q), [[[0,1],[1,0]]*Z(q)^0, [[0,-1],[1,0]]*Z(q)^0]);
Assert (1, IdGroup (d8) = [8,3]);
SetSize (d8, 8);
if e = '-' then
T := q8;
elif e = '+' then
T := d8;
else
Error ("e must be '+' or '-'");
fi;
for i in [2..k] do
T := TensorProductOfMatrixGroups (T, d8, q);
od;
SetSize (T, r^(2*k+1));
return T;
elif IsPrimeInt (r) then # r > 2
z := Z(q)^((q-1)/r);
g1 := NullMat (r, r, GF(q));
for i in [1..r-1] do
g1[i][i+1] := z^0;
od;
if e = r or e = '+' then
g1[r][1] := z^0;
elif e = r^2 or e = '-' then
g1[r][1] := z;
else
Error ("e must be r, r^2, '+' or '-'");
fi;
g2 := NullMat (r, r, GF(q));
for i in [1..r] do
g2[i][i] := z^(i-1);
od;
ex := SubgroupNC (MyGL(r, q), [g1, g2]);
T := ex;
for i in [2..k] do
T := TensorProductOfMatrixGroups (T, ex, q);
od;
SetSize (T, r^(2*k+1));
return T;
else
Error ("r must be a prime");
fi;
end;
More information about the Forum
mailing list