[GAP Forum] Parker loop

Nagy Gabor nagyg at math.u-szeged.hu
Wed Dec 7 08:17:30 GMT 2011


Dear Marek,

Parker loops are so called code loops. Any doubly even binary code gives 
rise to such a loop. If you start with the extended binary Golay code 
then you obtain the Parker code.

However, as you noticed the construction of the loop from the code is by 
far nontrivial.

Code loops are Moufang loops, which can be equivalently given by a group 
theoretical data called "groups with triality". In my paper

G. P. Nagy. Direct construction of code loops. Discrete Mathematics 308 
(2008), 5349-5357.
(arXiv:math/0411315v2)

I gave a rather straighforward construction of the group with triality 
starting from the code. You find the GAP implementation below.

I also have a GAP program which constructs the loop itself from the 
group with triality. Unfortunately, the machines I have access to have 
too small memory to deal with (the multiplication tables) of loops of 
order 8192.

Concerning the extraspecial group of order 2^25: As I do not know the 
precise construction, I am not quite sure if this is it. However, from 
loop theoretical point of view, it is quite natural to look at a certain 
subgroup of the group G with triality:

gap> LoadPackage("guava");
true
gap> LoadPackage("loops");
true
gap>
gap> C:=ExtendedBinaryGolayCode();
a linear [24,12,8]4 extended binary Golay code over GF(2)
gap> tg:=DoublyEvenBinaryCodesToTrialityGroup(C);
rec( group := <pc group with 38 generators>, sigma := f1, rho := f2 )
gap>
gap> sigma_class:=Elements( ConjugacyClass( tg.group, tg.sigma ) );;
gap> eg:=Subgroup(tg.group,sigma_class/tg.sigma);
<pc group with 8192 generators>
gap>
gap> StringPP(Size(eg));
"2^25"
gap> Size(FrattiniSubgroup(eg));
2
gap> Size(Center(eg));
8

I hope this helps.

Bye,

Gabor

======================================
#############################################################
# Construction of groups with triality and Moufang loops

# input: Doubly even binary code
# output: group with triality (G,\sigma,\rho)
#         (as record, G as polycyclic group)
DoublyEvenBinaryCodesToTrialityGroup := function( code )
     local i, j, c,
           b, n, 1form, 2form, 3form,
           F, coll, gr;

     # 1-, 2- and 3-forms corresponding to the code
     b:=List(Elements(Basis(C)),Support);
     n:=Length(b);

     1form:=0*Z(2)*[1..n];;
     2form:=List( [1..n], i -> 0*Z(2)*[1..n] );;
     3form:=List( [1..n], i -> List( [1..n], j -> 0*Z(2)*[1..n] ) );;
     for i in [1..n] do
         1form[i] := (Size(b[i])/4)*Z(2);
     od;
     for i in Combinations( [1..n ], 2 ) do
         2form[i[1]][i[2]] := (Size(Intersection(b{i}))/2)*Z(2);
         2form[i[2]][i[1]] := (Size(Intersection(b{i}))/2)*Z(2);
     od;
     for i in Combinations( [1..n ], 3 ) do
         for j in PermutationsList( i ) do
             3form[j[1]][j[2]][j[3]] := Size(Intersection(b{i}))*Z(2);
         od;
     od;


     # free group initialization
     F := FreeGroup( IsSyllableWordsFamily, 3*n+4 );
     coll := SingleCollector( F, Concatenation(
                     [2,3], List([1..3*n+2],i->2)
                     )
                     );
     # power relations for the underlying group
     for i in [1..n] do
         SetPower( coll, i+2, F.(3*n+3)^IntFFE( 1form[i] ) );
         SetPower( coll, n+i+2, F.(3*n+4)^IntFFE( 1form[i] ) );
     od;
     # commutators of 1st kind for the underlying group
     for i in [1..n-1] do
         for j in [i+1..n] do
             SetCommutator( coll, j+2, i+2, F.(3*n+3)^IntFFE( 
2form[j][i] ) );
             SetCommutator( coll, n+j+2, n+i+2, F.(3*n+4)^IntFFE( 
2form[j][i] ) );
         od;
     od;
     # commutators of 2st kind for the underlying group
     for i in [1..n] do
         for j in [1..n] do
             c := Product( List( [1..n], k ->
                          F.(2*n+k+2)^IntFFE( 3form[j][i][k] )
                          )
                          )
                  *
                  (F.(3*n+3) * F.(3*n+4))^IntFFE( 2form[i][j] );
             SetCommutator( coll, n+j+2, i+2, c );
             SetCommutator( coll, n+i+2, j+2, c );
         od;
     od;
     # commutators of 3rd kind for the underlying group
     for i in [1..n] do
         SetCommutator( coll, 2*n+i+2, i+2, F.(3*n+3) );
         SetCommutator( coll, 2*n+i+2, n+i+2, F.(3*n+4) );
     od;
     # relations for sigma and rho
     SetConjugate( coll, 2, 1, F.2^2 );
     for i in [1..n] do
         # sigma
         SetConjugate( coll, i+2, 1, F.(n+i+2) );
         SetConjugate( coll, n+i+2, 1, F.(i+2) );
         # rho
         SetConjugate( coll, i+2, 2, F.(n+i+2) );
         SetConjugate( coll, n+i+2, 2, (F.(i+2)*F.(n+i+2))^-1 );
     od;
     # action on the center
     SetConjugate( coll, 3*n+3, 1, F.(3*n+4) );
     SetConjugate( coll, 3*n+4, 1, F.(3*n+3) );
     SetConjugate( coll, 3*n+3, 2, F.(3*n+4) );
     SetConjugate( coll, 3*n+4, 2, F.(3*n+3)*F.(3*n+4) );
     # constructing the group
     gr := GroupByRws( coll );
     # done
     return rec(
                 group := Group( GeneratorsOfGroup( gr ){[3..3*n+4]} ),
                 sigma := gr.1,
                 rho := gr.2
                 );
end;


# input: Group with triality (G,\sigma,\rho) (as record, G as polycyclic 
group)
# output: Code loop
TrialityGroupToLoop_verbose := function( tr )
     local c1, N, ccl, ct, i, s1;
     c1 := Centralizer( tr.group, tr.sigma );
     N := Index( tr.group, c1 );
     Print("# The order of the loop = ",N,"\n");
     if N <> Index( c1, Intersection(c1,c1^tr.rho) ) then
         Error( "This is no group with triality!" );
     fi;
     ccl := Elements( ConjugacyClass( tr.group, tr.sigma ) );
     ct:=[];
     i:=1;
     for s1 in ccl do
         Print("# pos: ",i,"/",N,"\n");
         Add(ct,List( ccl, s2 -> Position( ccl, s1^tr.rho * 
s2^(tr.rho^2) * s1^tr.rho ) ) );
         i:=i+1;
     od;
     return LoopByCayleyTable( NormalizedQuasigroupTable( ct ) );
end;





2011-12-02 11:52 keltezéssel, Marek Mitros írta:
> Hi All,
>
> I am reading Conway "simple construction of monster" and I wonder whether
> anybody has Parker loop defined for GAP. I would like to play around with
> it to understand more how multiplication there looks like.
> For example when I have two octads o1, o2 intersecting in four points then
> let o3 be XOR(o1,o2). Then I assume that in Parker loop o1.o2=o3, o2.o3=o1,
> etc and all these products commutes.
> When I have octads o1,o2 intersecting in two points then d1=XOR(o1,o2) is
> dodecad. In such case I do not know whether o1.o2=d1 or o1.o2=-d1 (minus).
> In such case product o1.o2 anticommute.
>
> The next question I have is how to generate extraspecial group of size 2^25
> called Q_x1 in the paper. It is generated by elements x_d and x_delta.
>
> Regards,
> Marek
> _______________________________________________
> Forum mailing list
> Forum at mail.gap-system.org
> http://mail.gap-system.org/mailman/listinfo/forum
>




More information about the Forum mailing list