[GAP Forum] Extra-special group acting on an elementary abelian group

Frank Lübeck frank.luebeck at math.rwth-aachen.de
Sat Feb 25 12:40:12 GMT 2012


On Fri, Feb 24, 2012 at 04:39:04PM -0600, Goodson, Joshua E wrote:
> Dear Forum,
> 
> I wanted to thank everyone for there wonderful suggestions.  I am afraid I forgot to mention
> that when I count the orbits I also wish to count the orbits of any particular size.  For example, 
> I would want to count the number of regular orbits.  My apologies for not mentioning that before.  
> Will these methods allow me to count orbits of any size.
> 
> Thank you and again I apologize for my lack of specificity. 
> 
> ~Joshua Goodson

Dear Joshua Goodson, dear Forum,

Finding the multiplicities of the orbit lengths seems much more difficult.

But your particular example is not so big, the vector space GF(7)^9 has 
only about 40 million vectors. Below I append some lines to the code from
my last mail that computes what you want in a few minutes while GAPs memory
consumption stays small. Use GAP's help system to understand what the code
does. 

Note that the code from my last mail to find the total number of orbits 
using the character table also works for considerably larger groups and 
vector spaces (which is not true for the new code below).

With best regards,
   Frank Lübeck

# we already had this part to find the total  number of orbits:
g := ExtraspecialGroup(3^5,'+');
r := IrreducibleRepresentations(g,GF(7));;
List(r, h-> DimensionOfMatrixGroup(Image(h)));
g1 := Image(r[1]);
one := One(g1);
numorbs := 1/Size(g1) * Sum(ConjugacyClasses(g1), c-> Size(c) *
                                 7^(9-RankMat(Representative(c)-one)));

# now we find the orbits with explicit enumeration, but with some bookkeeping
# such that we never have more than about |g| vectors in memory
vsp := GF(7)^9;
enum := Enumerator(vsp);
found := BlistList([1..Size(vsp)], []);;
sizes := 0*[1..Size(g1)];;
for i in [1..Size(vsp)] do
  if not found[i] then
    orb := Orbit(g1, enum[i]);
    for v in orb do
      found[NumberFFVector(v,7)+1] := true;
    od;
    sizes[Length(orb)] := sizes[Length(orb)] + 1;
  fi;
  # show progress and stop when numorb orbits were found
  if i mod 100000 = 0 then
    if Sum(sizes) = numorbs then break; fi;
    Print(i/100000, " (",Sum(sizes),") \c");
  fi;
od;
# result, numbers of orbits of size 1, 3, 9, 27, 81, 243
sizes{List([0..5],i->3^i)};

##  PS: The result is
##  '+' case: [ 1, 0, 0, 80, 400, 165922 ]
##  '-' case: [ 1, 0, 0,  8, 154, 166012 ]

-- 
///  Dr. Frank Lübeck, Lehrstuhl D für Mathematik, Templergraben 64,  ///
\\\                    52062 Aachen, Germany                          \\\
///  E-mail: Frank.Luebeck at Math.RWTH-Aachen.De                        ///
\\\  WWW:    http://www.math.rwth-aachen.de/~Frank.Luebeck/           \\\




More information about the Forum mailing list