[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