# We implement the group $G_2(4):2$
G:=AllPrimitiveGroups(DegreeOperation,416)[4];
# We determine the conjugacy class that consists of the 4095 central involutions
# (Type 2A using Atlas notation).
2A:=Set(Filtered(ConjugacyClasses(G),x->Size(x)=4095)[1]);
# We construct a subgroup J of G and verify that it is isomorphic to J2:2. If this
# is the case, then Status1 will be true. By the ATLAS (list of maximal subgroups),
# it suffices to verify that J has index 416 in G.
J:=Stabilizer(G,1);
Status1 := Index(G,J)=416;
# We construct a subgroup H of J and verify that it is isomorphic to G2(2). If this
# is the case, then Status2 will be true. By the ATLAS (list of maximal subgroups),
# it suffices to verify that H has index 100 in J.
H:=Stabilizer(J,2);
Status2 := Index(J,H)=100;
# We determine the central involutions of the groups J and H, and verify that these
# coincide with the central involutions of G that are contained in these groups. If
# this is the case, then Status3 will be true.
2AJ:=Set(Filtered(ConjugacyClasses(J),x->Size(x)=315)[1]);
2AH:=Set(Filtered(ConjugacyClasses(H),x->Size(x)=63)[1]);
Status3:= (2AJ = Intersection(J,2A)) and (2AH = Intersection(H,2A));
# Consider now the transitive action of G on 2A by conjugation. We determine
# the suborbits of this action. It turns out that there are eight suborbits
# with respective sizes 1, 2, 40, 320, 640, 1024 and 2048. If this is the case
# then Status4 will be true.
centr:=Centralizer(G,2A[1]);
suborbs:=OrbitsDomain(centr,2A);
Sub0:=Filtered(suborbs,x->Size(x)=1)[1];
Sub1A:=Filtered(suborbs,x->Size(x)=2)[1];
Sub1B:=Filtered(suborbs,x->Size(x)=20)[1];
Sub2A:=Filtered(suborbs,x->Size(x)=40)[1];
Sub2B:=Filtered(suborbs,x->Size(x)=320)[1];
Sub3A:=Filtered(suborbs,x->Size(x)=640)[1];
Sub3B:=Filtered(suborbs,x->Size(x)=1024)[1];
Sub4:=Filtered(suborbs,x->Size(x)=2048)[1];
Status4:= Size(suborbs)=8 and Sub0<>[] and Sub1A<>[] and Sub1B<>[] and Sub2A<>[]
and Sub2B<>[] and Sub3A<>[] and Sub3B<>[] and Sub4<>[];
# We verify that the only central involutions that commute with 2A[1] are
# those involutions contained in Sub0, Sub1A, Sub1B and Sub2A. If this is
# indeed the case, then Status5 will be true.
Status5:= Comm(2A[1],Sub0[1])=() and Comm(2A[1],Sub1A[1])=() and
Comm(2A[1],Sub1B[1])=() and Comm(2A[1],Sub2A[1])=() and
Comm(2A[1],Sub2B[1])<>() and Comm(2A[1],Sub3A[1])<>() and
Comm(2A[1],Sub3B[1])<>() and Comm(2A[1],Sub4[1])<>();
# We verify that if x is an involution belonging to Sub1A, Sub1B or Sub2A,
# then 2A[1] * x is also a central involution belonging to the same suborbit.
# If this is the case, then Status6 will be true.
Status6 := (2A[1]*Sub1A[1] in Sub1A) and (2A[1]*Sub1B[1] in Sub1B) and
(2A[1]*Sub2A[1] in Sub2A);
# Suppose x <> 2A[1] is a central involution commuting with 2A[1], and denote by
# N the normalizer (in G) of the group generated by 2A[1] and x. Then we show that
# (1) N has index 1365 in G if x belongs to Sub1A,
# (2) N has index 13650 in G if x belongs to Sub1B,
# (3) N has index 27300 in G if x belongs to Sub2A.
# If these claims are true then Status7 will be true.
Status7 := Index(G,Normalizer(G,Group([2A[1],Sub1A[1]])))=1365 and
Index(G,Normalizer(G,Group([2A[1],Sub1B[1]])))=13650 and
Index(G,Normalizer(G,Group([2A[1],Sub2A[1]])))=27300;
# Now, let (P,L) denote the point line geometry as defined in Main Result 1.
# We determine the lines of this geometry. The group G has two orbits on
# the set of lines, namely lines1 and lines2. Every central involution is
# contained in a unique line of lines1. So, lines1 is a spread of the geometry.
line1:=Set([2A[1],Sub1A[1],2A[1]*Sub1A[1]]);
lines1:=Orbit(G,line1,OnSets);
line2:=Set([2A[1],Sub1B[1],2A[1]*Sub1B[1]]);
lines2:=Orbit(G,line2,OnSets);
lines:=Union(lines1,lines2);
# With the following code we can determine the suborbit in which a central
# involution lies.
PointType:=function(x)
if x in Sub0 then return "0"; fi;
if x in Sub1A then return "1A"; fi;
if x in Sub1B then return "1B"; fi;
if x in Sub2A then return "2A"; fi;
if x in Sub2B then return "2B"; fi;
if x in Sub3A then return "3A"; fi;
if x in Sub3B then return "3B"; fi;
if x in Sub4 then return "4"; fi;
end;
# With the following code we can determine the suborbits to which the central
# involutions of a line L belong. This information will be stored in an array
# (the line type of L).
LineType:=function(L)
local help;
help:=List(L,PointType); Sort(help);
return help;
end;
# We determine all line types.
Linetypes:=Set(List(lines,LineType));
# If x is a central involution, then the following code gives the line types
# of all lines containing x.
ThroughPoint:=function(x)
local A,B;
A:=Filtered(lines,l->x in l);
B:=List(A,LineType); Sort(B);
return B;
end;
# The information provided by the suborbit diagram can easily be verified by means
# of the function ThroughPoint and the contents of Linetypes.
# We verify that the involution 2A[1] is contained in J. If this is the case, then
# Status8 will be true.
Status8:= (2A[1] in J);
# We now verify Remark (2) at the end of Section 3. If this is true, then Status9
# will be true. Note that in J, there are 10 central involutions distinct from
# 2A[1] that commute with 2A[1].
Status9:=Size(Intersection(J,Sub1B))=10 and Size(Intersection(J,Sub1A))=0
and Size(Intersection(J,Sub2A))=0;