# With this GAP code, we verify the claims in the paper on how each hyperplane # can be written as a sum of ovoids. # The following code implements a model of E1 with point set [1..729], line set # lines, automorphism group g and distance function Distance. v:=729; g:=AllPrimitiveGroups(DegreeOperation,v,Size,Size(MathieuGroup(12))*3^6*2)[1]; orbs := Orbits(Stabilizer(g,1),[1..v]); dist0 := Set(Filtered(orbs,x->Size(x)=1)[1]); dist1 := Set(Filtered(orbs,x->Size(x)=24)[1]); dist2 := Set(Filtered(orbs,x->Size(x)=264)[1]); dist3 := Set(Filtered(orbs,x->Size(x)=440)[1]); perp := Union([1],dist1); line := Intersection(perp,OnSets(perp,RepresentativeAction(g,1,dist1[1]))); lines := Orbit(g,line,OnSets); Distance:=function(i,j) local r,k; r:=RepresentativeAction(g,i,1); k:=j^r; if k in dist0 then return 0; fi; if k in dist1 then return 1; fi; if k in dist2 then return 2; fi; if k in dist3 then return 3; fi; end; # We determine the dimension MaxDim of the universal embedding of E1 M:=NullMat(v,Size(lines),GF(2)); for i in [1..v] do for j in [1..Size(lines)] do if i in lines[j] then M[i][j]:=Z(2); fi; od; od; Y:=NullspaceMat(M); U:=Subspace(GF(2)^v,Y); MaxDim:=Dimension(U); # MaxDim turns out to be equal to 24. # We determine all singular hyperplane complements. SingCompl:=List([1..v],x->OnSets(dist3,RepresentativeAction(g,1,x))); # We determine all singular hyperplanes. Singular:=List([1..v],x->OnSets(Union(dist0,dist1,dist2),RepresentativeAction(g,1,x))); # We determine the dimension MinDim of the minimal full polarized embedding of # E1. N:=NullMat(v,v,GF(2)); for i in [1..v] do for j in [1..v] do if i in SingCompl[j] then N[i][j]:=Z(2); fi; od; od; MinDim:=Rank(N); # MinDim turns out to be equal to 24. # If compl is a hyperplane complement, then the following function allows to # determine the sizes of the various orbits of the stabilizer j of compl on the # hyperplane (stored in l1) and on the hyperplane complement (stored in l2) Char:=function(compl) local j,l1,l2,orbs; j:=Stabilizer(g,compl,OnSets); l1:=List(Orbits(j,Difference([1..v],compl)),Length); l2:=List(Orbits(j,compl),Length); Sort(l1); Sort(l2); return [l1,l2]; end; # If compl is a hyperplane complement, then the following code determines # representatives for the various orbits of the stabilizer of compl on the # whole set of points. Repr:=function(compl) local j,orbs,repr; j:=Stabilizer(g,compl,OnSets); orbs:=Orbits(j,[1..v]); repr:=Set(List(orbs,orb->orb[1])); return repr; end; # With the following code, we can determine the symmetric difference of two # sets A and B. SymDif:=function(A,B) return Union(Difference(A,B),Difference(B,A)); end; # We now determine all hyperplane complements of the near hexagon E1. The # code below is based on the fact that the symmetric difference of two hyperplane # complements is again a hyperplane complement. The fact that MaxDim=MinDim(=24) # implies that starting from the singular hyperplane complements, one can # construct all hyperplane complements by (successively) applying the symmetric # difference construction. The code below makes use of the fact that there are # 2^24-1 hyperplane complements. hypcomplements:=[dist3]; balance:=2^MinDim-v-1; chars:=List(hypcomplements,Char); last1:=1; last2:=1; last3:=2; while balance<>0 do hypcomplements2:=ShallowCopy(hypcomplements); for i in [last2..Size(hypcomplements2)] do if balance<>0 then repr:=Repr(hypcomplements2[i]); for x in repr do if balance<>0 then compl:=SymDif(hypcomplements2[i],SingCompl[x]); if compl<>[] then char:=Char(compl); New:=true; for j in [last1..Size(hypcomplements)] do if char=chars[j] and RepresentativeAction(g,compl,hypcomplements[j],OnSets)<>fail then New:=false; break; fi; od; if New then Append(hypcomplements,[compl]); Append(chars,[char]); balance:=balance-Index(g,Stabilizer(g,compl,OnSets)); fi; fi; fi; od; fi; od; last1:=last2; last2:=last3; last3:=Size(hypcomplements)+1; od; # From the list of hyperplane complements, we determine the set of all ovoids. ovoidcompl:=Filtered(hypcomplements,x->Size(x)=486)[1]; ovoid:=Difference([1..v],ovoidcompl); ovoids:=Orbit(g,ovoid,OnSets); # We determine representatives for the equivalence classes of ovoids. Representatives:=Filtered(ovoids,x->1 in x); # We give another ordering to the elements of Representatives such that the # hyperplanes at infinity corresponding to the first six form a block of the # Steiner system S^*(5,6,12). ovs:=[]; for i in [1..5] do Append(ovs,[Representatives[i]]); od; for i in [6..12] do if Size(Intersection(ovs[1],ovs[2],ovs[3],ovs[4],ovs[5],Representatives[i]))=3 then ov6:=Representatives[i]; fi; od; Append(ovs,[ov6]); Remainder:=Difference(Representatives,Set(ovs)); Append(ovs,Remainder); Representatives:=ovs; # We determine the 12 equivalence classes of ovoids. ov:=Representatives[1]; triple1:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple1,[x]); fi; od; ov:=Representatives[2]; triple2:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple2,[x]); fi; od; ov:=Representatives[3]; triple3:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple3,[x]); fi; od; ov:=Representatives[4]; triple4:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple4,[x]); fi; od; ov:=Representatives[5]; triple5:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple5,[x]); fi; od; ov:=Representatives[6]; triple6:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple6,[x]); fi; od; ov:=Representatives[7]; triple7:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple7,[x]); fi; od; ov:=Representatives[8]; triple8:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple8,[x]); fi; od; ov:=Representatives[9]; triple9:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple9,[x]); fi; od; ov:=Representatives[10]; triple10:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple10,[x]); fi; od; ov:=Representatives[11]; triple11:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple11,[x]); fi; od; ov:=Representatives[12]; triple12:=[ov]; for x in ovoids do if Intersection(x,ov)=[] then Append(triple12,[x]); fi; od; # We verify the constructions of the 25 hyperplanes of E1 as given in the paper. # If these constructions are correct, then Check1 till Check25 will be true # (otherwise false). Note that a hyperplane is uniquely determined by its size # and the size of the isomorphism class to which it belongs. # The following function implements the complement of the symmetric difference # of two sets of points. symdif:=function(A,B) return Difference([1..v],SymDif(A,B)); end; hyp1:=triple1[1]; Check1:=Size(hyp1)=243 and Index(g,(Stabilizer(g,hyp1,OnSets)))=36; hyp2:=symdif(hyp1,triple2[1]); Check2:=Size(hyp2)=405 and Index(g,(Stabilizer(g,hyp2,OnSets)))=594; hyp3:=symdif(hyp2,triple3[1]); Check3:=Size(hyp3)=351 and Index(g,(Stabilizer(g,hyp3,OnSets)))=5940; hyp4:=symdif(hyp3,triple4[1]); Check4:=Size(hyp4)=369 and Index(g,(Stabilizer(g,hyp4,OnSets)))=40095; hyp5:=symdif(hyp4,triple5[1]); Check5:=Size(hyp5)=363 and Index(g,(Stabilizer(g,hyp5,OnSets)))=192456; hyp6:=symdif(hyp5,triple6[1]); Check6:=Size(hyp6)=429 and Index(g,(Stabilizer(g,hyp6,OnSets)))=32076; Check7:=true; for i in [2,3] do hyp7:=symdif(hyp5,triple6[i]); Check7:=Check7 and Size(hyp7)=333 and Index(g,(Stabilizer(g,hyp7,OnSets)))=64152; od; hyp8:=symdif(hyp5,triple7[1]); Check8:=Size(hyp8)=365 and Index(g,(Stabilizer(g,hyp8,OnSets)))=577368; hyp9:=symdif(hyp6,triple7[1]); Check9:=Size(hyp9)=343 and Index(g,(Stabilizer(g,hyp9,OnSets)))=577368; Check10:=true; for i in [2,3] do hyp10:=symdif(hyp8,triple6[i]); Check10:=Check10 and Size(hyp10)=375 and Index(g,(Stabilizer(g,hyp10,OnSets)))=1154736; od; hyp11:=symdif(hyp9,triple8[1]); Check11:=Size(hyp11)=393 and Index(g,(Stabilizer(g,hyp11,OnSets)))=360855; Check12:=true; for i in [2,3] do hyp12:=symdif(hyp9,triple8[i]); Check12:=Check12 and Size(hyp12)=361 and Index(g,(Stabilizer(g,hyp12,OnSets)))=2886840; od; hyp13:=symdif(hyp11,triple9[1]); Check13:=Size(hyp13)=355 and Index(g,(Stabilizer(g,hyp13,OnSets)))=160380; Check14:=true; for i in [2,3] do hyp14:=symdif(hyp11,triple9[i]); Check14:=Check14 and Size(hyp14)=355 and Index(g,(Stabilizer(g,hyp14,OnSets)))=2886840; od; outcomes:=[]; for i in [2,3] do for j in [2,3] do help:=symdif(hyp9,triple8[i]); hyp15:=symdif(help,triple9[j]); Append(outcomes,[[Size(hyp15),Index(g,(Stabilizer(g,hyp15,OnSets)))]]); od; od; Sort(outcomes); Check15:= outcomes=[[355,2886840],[355,2886840],[387,1283040],[387,1283040]]; hyp16:=symdif(hyp13,triple10[1]); Check16:=Size(hyp16)=325 and Index(g,(Stabilizer(g,hyp16,OnSets)))=48114; Check17:=true; for i in [2,3] do hyp17:=symdif(hyp13,triple10[i]); Check17:=Check17 and Size(hyp17)=389 and Index(g,(Stabilizer(g,hyp17,OnSets)))=962280; od; Check18:=true; for i in [2,3] do for j in [2,3] do help:=symdif(hyp11,triple9[i]); hyp18:=symdif(help,triple10[j]); Check18:=Check18 and Size(hyp18)=357 and Index(g,(Stabilizer(g,hyp18,OnSets)))=2886840; od; od; hyp19:=symdif(hyp16,triple11[1]); Check19:=Size(hyp19)=463 and Index(g,(Stabilizer(g,hyp19,OnSets)))=8748; Check20:=true; for i in [2,3] do hyp20:=symdif(hyp16,triple11[i]); Check20:=Check20 and Size(hyp20)=335 and Index(g,(Stabilizer(g,hyp20,OnSets)))=192456; od; Check21:=true; for i in [2,3] do for j in [2,3] do help:=symdif(hyp13,triple10[i]); hyp21:=symdif(help,triple11[j]); Check21:=Check21 and Size(hyp21)=367 and Index(g,(Stabilizer(g,hyp21,OnSets)))=1924560; od; od; hyp22:=symdif(hyp19,triple12[1]); Check22:=Size(hyp22)=289 and Index(g,(Stabilizer(g,hyp22,OnSets)))=729; Check23:=true; for i in [2,3] do hyp23:=symdif(hyp19,triple12[i]); Check23:=Check23 and Size(hyp23)=353 and Index(g,(Stabilizer(g,hyp23,OnSets)))=17496; od; Check24:=true; for i in [2,3] do for j in [2,3] do help:=symdif(hyp16,triple11[i]); hyp24:=symdif(help,triple12[j]); Check24:=Check24 and Size(hyp24)=385 and Index(g,(Stabilizer(g,hyp24,OnSets)))=192456; od; od; Check25:=true; for i in [2,3] do for j in [2,3] do for k in [2,3] do help1:=symdif(hyp13,triple10[i]); help2:=symdif(help1,triple11[j]); hyp25:=symdif(help2,triple12[k]); Check25:=Check25 and Size(hyp25)=353 and Index(g,(Stabilizer(g,hyp25,OnSets)))=320760; od; od; od; # We verify whether an ovoid can be written as a sum as singular hyperplanes # (in the way as described in the paper). hyp:=[1..v]; for i in ovoid do hyp:=symdif(hyp,Singular[i]); od; Check:= hyp=ovoid;