[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