"If you want to check that the conspicuous sets of factors are correct, you can use the function CheckMyFactors(). This takes about 6-7 hours.";

load "Subgroups/functions.txt";

load "Subgroups/E8/ComputeFactorsE8.txt";
load "Traces/E8/Tr16E8Eigs";
Tr16E8:={EigsToTracePowers(i,16):i in Tr16E8Eigs};
load "Traces/E8/Tr20E8Eigs";
Tr20E8:={EigsToTracePowers(i,20):i in Tr20E8Eigs};
delete Tr16E8Eigs;
delete Tr20E8Eigs;
Tr cat:=<Tr16E8,{},{},{},Tr20E8>;


function OrbitReps(X,frob)

Orbs:=[];
SpanOfOrbs:=[];
for i in X do
  if(not(Sort(i) in SpanOfOrbs)) then
    Append(~Orbs,i);
    SpanOfOrbs cat:=[Sort(i^(frob^j)):j in [1..Order(frob)-1]];
  end if;
end for;
return Orbs;
end function;

frob:=Sym(50)!(2,4,3,5)(6,8,7,9)(10,11)(12,15,13,14)(16,18,17,19)(20,27,21,26)(22,25,23,24)(28,30,29,31)(32,33)(34,36,35,37)(38,45,39,44)(40,43,41,42)(47,49,48,50);

function FindOrb(Orbs,i)
for Orb in Orbs do if(i in Orb) then return Orb; end if; end for;
return {};
end function;

q:=3^8;
F<w>:=GF(q);
G:=GroupOfLieType("E8",q);
V:=VectorSpace(GF(q),8);
rho1:=StandardRepresentation(G);
Over1:=GL(248,q);
g1:=elt<G|V![w,1,1,1,1,1,1,1]>;
g2:=elt<G|V![1,w,1,1,1,1,1,1]>;
g3:=elt<G|V![1,1,w,1,1,1,1,1]>;
g4:=elt<G|V![1,1,1,w,1,1,1,1]>;
g5:=elt<G|V![1,1,1,1,w,1,1,1]>;
g6:=elt<G|V![1,1,1,1,1,w,1,1]>;
g7:=elt<G|V![1,1,1,1,1,1,w,1]>;
g8:=elt<G|V![1,1,1,1,1,1,1,w]>;
W:=Reflections(G);
Mats1:=[rho1(i):i in [g1,g2,g3,g4,g5,g6,g7,g8]];
MatsE:=[rho1(i):i in W];
NGT:=sub<Over1|Mats1 cat MatsE>;
T:=sub<NGT|Mats1>;
E:=sub<NGT|MatsE>;

T160:=sub<T|[T.i^41:i in [1..8]]>;
T80:=sub<T|[T.i^82:i in [1..8]]>;
T40:=sub<T|[T.i^164:i in [1..8]]>;
T20:=sub<T|[T.i^328:i in [1..8]]>;
T5:=sub<T|[T.i^1312:i in [1..8]]>;
NGT5:=sub<NGT|T5,E>;

R:=ResidueClassRing(160);
X:=[[R!(Log((T160.j)[i,i]) div 41):i in [1..248]]:j in [1..8]];

//Element x of order 80 in G2 has eigenvalues { <w^5822, 1>, <w^82, 1>, <w^656, 1> }

/*
El1:=[];
for i in [#El1+1..#Eigs3] do repeat x1:=Random(T20); until Eigenvalues(x1) eq Eigs3[i]; Append(~El1,ExpressElementInGenerators(T20,x1)); El1; end for;


for i in [#El1+1..#Eigs3] do Append(~El1,[]); end for;
while(Minimum([#i:i in El1]) eq 0) do
  Eigs3Rest:=[Eigs3[i]:i in [1..#Eigs3]|El1[i] eq []]; repeat x1:=Random(T20); until Eigenvalues(x1) in Eigs3Rest;
  El1[Position(Eigs3,Eigenvalues(x1))]:=ExpressElementInGenerators(T20,x1);
  El1;
end while;
*/


G2:=SU(3,9);
CC:=ConjugacyClasses(G2);
S1:=TrivialModule(G2,GF(81));
S31:=GModule(G2); S31d:=Dual(S31);
S32:=GModule(G2,FrobeniusImage(S31,1)); S32d:=Dual(S32);
S61:=SymmetricSquare(S31d); S61d:=Dual(S61);
S62:=GModule(G2,FrobeniusImage(S61,1)); S62d:=Dual(S62);
S71:=SocleFactors(TensorProduct(S31,S31d))[2];
S72:=GModule(G2,FrobeniusImage(S71,1));
S912:=TensorProduct(S31,S32); S912d:=Dual(S912);
S921:=TensorProduct(S31,S32d); S921d:=Dual(S921);
S151:=ExteriorSquare(S61d); S151d:=Dual(S151);
S152:=ExteriorSquare(S62d); S152d:=Dual(S152);
S181:=TensorProduct(S31,S62); S181d:=Dual(S181);
S182:=TensorProduct(S32,S61); S182d:=Dual(S182);
S183:=TensorProduct(S31,S62d); S183d:=Dual(S183);
S184:=TensorProduct(S32d,S61); S184d:=Dual(S184);
S2112:=TensorProduct(S31,S72); S2112d:=Dual(S2112);
S2121:=TensorProduct(S32,S71); S2121d:=Dual(S2121);
S271:=SymmetricSquare(S71); S271:=S271/Fix(S271);
S272:=SymmetricSquare(S72); S272:=S272/Fix(S272);
S4212:=TensorProduct(S61,S72); S4212d:=Dual(S4212);
S4221:=TensorProduct(S62,S71); S4221d:=Dual(S4221);
S451:=TensorProduct(S31,S152); S451d:=Dual(S451);
S452:=TensorProduct(S32,S151); S452d:=Dual(S452);
S453:=TensorProduct(S31,S152d); S453d:=Dual(S453);
S454:=TensorProduct(S32d,S151); S454d:=Dual(S454);
S49:=TensorProduct(S71,S72);
S8112:=TensorProduct(S31,S272); S8112d:=Dual(S8112);
S8121:=TensorProduct(S32,S271); S8121d:=Dual(S8121);

Irr:=[S1,S31,S31d,S32,S32d,S61,S61d,S62,S62d,S71,S72,S912,S912d,S921,S921d,S151,S151d,S152,S152d,S181,S181d,S182,S182d,S183,S183d,S184,S184d,S2112,S2112d,S2121,S2121d,S271,S272,S4212,S4212d,S4221,S4221d,
S451,S451d,S452,S452d,S453,S453d,S454,S454d,S49,S8112,S8112d,S8121,S8121d];

labs:=["1","3_1","3_1^*","3_2","3_2^*","6_1","6_1^*","6_2","6_2^*","7_1","7_2","9_{1,2}","9_{1,2}^*",
"\\bar 9_{1,2}","\\bar 9_{1,2}^*","15_1","15_1^*","15_2","15_2^*",
"18_{1,2}","18_{1,2}^*","18_{2,1}","18_{2,1}^*","\\bar{18}_{1,2}","\\bar{18}_{1,2}^*",
"\\bar{18}_{2,1}^*","\\bar{18}_{2,1}","21_{1,2}","21_{1,2}^*","21_{2,1}","21_{2,1}^*","27_1","27_2",
"42_{1,2}","42_{1,2}^*","42_{2,1}","42_{2,1}^*","45_{1,2}","45_{1,2}^*","45_{2,1}","45_{2,1}^*",
"\\bar{45}_{1,2}","\\bar{45}_{1,2}^*","\\bar{45}_{2,1}","\\bar{45}_{2,1}^*","49",
"81_{1,2}","81_{1,2}^*","81_{2,1}","81_{2,1}^*"];


for i in [77..92] do if(EigenvaluesOfElement(ChangeRing(S31,F),CC[i,3]) eq { <w^5822, 1>, <w^82, 1>, <w^656, 1> }) then x:=CC[i,3]; end if; end for;

IrrSD:=[]; for i in Irr do if(IsSelfDual(i)) then Append(~IrrSD,i); else IrrSD:=AppendWithoutDuplicates(IrrSD,[DirectSum(i,Dual(i))]); end if; end for;
IrrSD:=OrderByDimension(IrrSD);

Ans4:=[
    {* 1^^79, 2^^27, 3^^27, 10 *},
    {* 1^^53, 2, 3, 11^^27 *},
    {* 1^^30, 2^^21, 3^^21, 6^^3, 7^^3, 10^^8 *},
    {* 1^^23, 2^^8, 3^^8, 6^^7, 7^^7, 10^^9, 16, 17 *},
    {* 1^^23, 10^^8, 11, 12^^7, 13^^7, 22, 23 *},
    {* 1^^23, 10^^8, 11, 14^^7, 15^^7, 26, 27 *},
    {* 1^^18, 2^^9, 3^^9, 4^^9, 5^^9, 10, 11, 12^^3, 13^^3, 14^^3, 15^^3 *},
    {* 1^^12, 2^^2, 3^^2, 8^^6, 9^^6, 11^^5, 18^^3, 19^^3, 33 *},
    {* 1^^11, 2^^5, 3^^5, 11^^18, 33^^3 *},
    {* 1^^11, 2^^3, 3^^3, 4^^2, 5^^2, 6^^3, 7^^3, 10^^2, 11, 12^^3, 13^^3, 14^^3, 15^^3, 30, 31 *},
    {* 1^^11, 2^^2, 3^^2, 11^^3, 28, 29, 33^^6 *},
    {* 1^^10, 2^^7, 3^^7, 10, 11^^9, 28^^3, 29^^3 *},
    {* 1^^10, 2^^6, 3^^6, 4, 5, 6^^3, 7^^3, 10^^10, 16^^3, 17^^3 *},
    {* 1^^10, 2, 3, 6^^3, 7^^3, 10, 11^^2, 28^^3, 29^^3, 46 *},
    {* 1^^8, 6, 7, 10^^3, 28^^3, 29^^3, 33^^3 *},
    {* 1^^5, 2^^2, 3^^2, 4^^2, 5^^2, 6, 7, 10^^6, 14, 15, 16^^4, 17^^4, 32 *},
    {* 1^^5, 2^^2, 3^^2, 10, 11^^5, 20^^2, 21^^2, 33, 38, 39 *},
    {* 1^^5, 2^^2, 3^^2, 10, 11^^5, 24^^2, 25^^2, 33, 42, 43 *},
    {* 1^^5, 2, 3, 4, 5, 10^^6, 11^^6, 46^^3 *},
    {* 1^^4, 2^^2, 3^^2, 4^^2, 5^^2, 6, 7, 10^^3, 11, 12, 13, 14, 15, 16, 17, 22, 23, 26, 27, 30, 31 *},
    {* 1^^4, 2^^2, 3^^2, 4^^2, 5^^2, 10^^2, 11^^2, 12, 13, 14, 15, 20, 21, 26, 27, 28, 29, 30, 31 *},
    {* 1^^4, 2^^2, 3^^2, 4^^2, 5^^2, 10^^2, 11^^2, 12, 13, 14, 15, 22, 23, 24, 25, 28, 29, 30, 31 *},
    {* 1^^4, 2^^2, 3^^2, 10, 11^^3, 28, 29, 47, 48 *},
    {* 1^^4, 2^^2, 3^^2, 11^^4, 12^^2, 13^^2, 18^^3, 19^^3, 24, 25, 28, 29 *},
    {* 1^^4, 2, 3, 8^^3, 9^^3, 11, 14^^2, 15^^2, 28, 29, 33, 38, 39 *},
    {* 1^^3, 2^^2, 3^^2, 10^^2, 11^^2, 16, 17, 28, 29, 34, 35, 46 *},
    {* 1^^3, 2, 3, 10, 11^^3, 20, 21, 22, 23, 38, 39, 46 *},
    {* 1^^3, 2, 3, 10, 11^^3, 24, 25, 26, 27, 42, 43, 46 *}
];

function CheckMyFactors()
  AnsA:=RestrictedPartitions(248,{Dimension(i):i in IrrSD});
  Br:=[BrauerCharacter(i):i in IrrSD];
  Br2:=[i[2]:i in Br];
  dims:=[i[1]:i in Br];
  AnsB:=[i:i in AnsA|&+[Br2[Position(dims,j)]:j in i] in [24,-8]];
  P:=[20,16,10,8];
  Ans3,Mods,IrrS:=ComputeConspicuousFactorsE8LowMemory(Irr,CC,Tr,P,AnsB); // Took about 6-7 hours on my computer.
  Ans3a:=[IdentifyFactors(i,Irr):i in Mods];
  return Ans4 eq [SequenceToMultiset(i):i in OrbitReps(Ans3a,frob)];
end function;

Mods:=[DirectSum([Irr[i]:i in j]):j in Ans4];
Eigs1:=[EigenvaluesOfElement(ChangeRing(i,F),x):i in Mods];
Eigs2:=[EigenvaluesOfElement(ChangeRing(i,F),x^2):i in Mods];
Eigs3:=[EigenvaluesOfElement(ChangeRing(i,F),x^4):i in Mods];


El1:=[
    [ 13, 9, 19, 11, 9, 0, 0, 0 ],
    [ 1, 10, 8, 1, 10, 0, 0, 0 ],
    [ 2, 1, 18, 18, 13, 0, 0, 0 ],
    [ 10, 0, 18, 19, 3, 18, 11, 13 ],
    [ 0, 11, 15, 1, 7, 17, 14, 10 ],
    [ 1, 7, 12, 3, 10, 7, 3, 2 ],
    [ 1, 3, 4, 8, 13, 3, 12, 19 ],
    [ 4, 15, 7, 2, 13, 11, 12, 8 ],
    [ 10, 10, 1, 10, 10, 9, 11, 8 ],
    [ 6, 13, 3, 16, 0, 7, 5, 6 ],
    [ 18, 0, 2, 18, 1, 10, 1, 10 ],
    [ 1, 0, 10, 1, 18, 10, 11, 8 ],
    [ 2, 17, 13, 19, 9, 0, 10, 1 ],
    [ 10, 11, 12, 1, 17, 0, 0, 9 ],
    [ 12, 10, 10, 11, 9, 19, 19, 0 ],
    [ 7, 11, 13, 10, 9, 9, 17, 12 ],
    [ 11, 11, 11, 19, 9, 16, 5, 18 ],
    [ 7, 11, 13, 10, 9, 9, 17, 12 ],
    [ 17, 14, 10, 10, 10, 9, 8, 2 ],
    [ 2, 0, 7, 16, 14, 13, 13, 3 ],
    [ 17, 7, 1, 9, 6, 3, 17, 19 ],
    [ 7, 12, 9, 12, 7, 15, 7, 6 ],
    [ 19, 1, 9, 9, 1, 9, 3, 0 ],
    [ 5, 4, 2, 18, 9, 1, 7, 2 ],
    [ 0, 6, 4, 2, 11, 19, 12, 19 ],
    [ 9, 11, 12, 7, 4, 8, 19, 18 ],
    [ 17, 5, 12, 16, 10, 7, 18, 10 ],
    [ 8, 6, 18, 3, 6, 15, 5, 6 ]
];

El2:=[
    [ 132, 36, 156, 124, 36, 0, 0, 0 ],
    [ 84, 40, 32, 4, 40, 0, 0, 0 ],
    [ 88, 4, 72, 152, 132, 0, 0, 0 ],
    [ 120, 0, 72, 156, 92, 72, 124, 132 ],
    [ 0, 44, 60, 84, 108, 68, 56, 120 ],
    [ 84, 28, 48, 92, 40, 28, 92, 88 ],
    [ 4, 12, 96, 112, 132, 12, 128, 156 ],
    [ 96, 140, 28, 88, 52, 44, 128, 32 ],
    [ 40, 120, 84, 120, 40, 116, 44, 32 ],
    [ 24, 132, 12, 64, 0, 28, 20, 104 ],
    [ 152, 0, 8, 72, 4, 120, 84, 40 ],
    [ 4, 0, 120, 4, 72, 40, 44, 32 ],
    [ 88, 68, 132, 156, 36, 0, 120, 4 ],
    [ 40, 124, 48, 4, 148, 0, 0, 36 ],
    [ 128, 120, 120, 44, 116, 76, 76, 0 ],
    [ 28, 124, 132, 120, 36, 36, 68, 128 ],
    [ 44, 44, 124, 76, 116, 144, 20, 72 ],
    [ 108, 44, 52, 40, 116, 36, 148, 48 ],
    [ 68, 56, 120, 120, 40, 116, 112, 8 ],
    [ 88, 80, 108, 64, 136, 132, 52, 92 ],
    [ 148, 28, 84, 116, 24, 12, 68, 76 ],
    [ 28, 128, 36, 48, 28, 60, 28, 24 ],
    [ 156, 4, 36, 36, 4, 36, 12, 0 ],
    [ 100, 96, 8, 72, 36, 84, 108, 8 ],
    [ 80, 104, 16, 88, 44, 76, 48, 76 ],
    [ 116, 124, 48, 28, 16, 32, 76, 72 ],
    [ 148, 100, 48, 144, 40, 28, 152, 40 ],
    [ 112, 104, 72, 12, 104, 140, 20, 24 ]
];

El3:=[
    [ 146, 18, 158, 142, 18, 0, 0, 0 ],
    [ 42, 100, 16, 2, 100, 0, 0, 0 ],
    [ 124, 2, 36, 156, 146, 0, 0, 0 ],
    [ 140, 0, 36, 158, 126, 36, 142, 146 ],
    [ 0, 22, 110, 42, 134, 34, 108, 140 ],
    [ 122, 94, 24, 46, 20, 94, 46, 124 ],
    [ 2, 6, 128, 136, 66, 6, 144, 158 ],
    [ 48, 150, 94, 124, 106, 102, 64, 96 ],
    [ 100, 60, 42, 60, 100, 58, 102, 16 ],
    [ 12, 146, 6, 32, 0, 94, 10, 52 ],
    [ 76, 0, 84, 116, 2, 60, 42, 100 ],
    [ 82, 0, 60, 2, 116, 100, 102, 16 ],
    [ 124, 34, 146, 158, 18, 0, 140, 2 ],
    [ 20, 142, 24, 2, 74, 0, 0, 18 ],
    [ 144, 140, 60, 102, 58, 118, 118, 0 ],
    [ 14, 142, 146, 140, 18, 18, 34, 144 ],
    [ 102, 102, 62, 38, 58, 72, 10, 36 ],
    [ 54, 102, 106, 100, 58, 18, 74, 24 ],
    [ 34, 28, 60, 140, 20, 58, 56, 84 ],
    [ 124, 120, 54, 32, 148, 146, 106, 46 ],
    [ 154, 94, 42, 58, 12, 6, 34, 38 ],
    [ 14, 64, 18, 104, 14, 30, 14, 92 ],
    [ 158, 82, 18, 18, 82, 18, 86, 0 ],
    [ 130, 48, 4, 36, 18, 42, 54, 4 ],
    [ 120, 52, 88, 124, 102, 118, 24, 118 ],
    [ 138, 142, 104, 94, 8, 16, 118, 116 ],
    [ 74, 130, 104, 72, 20, 14, 76, 20 ],
    [ 136, 52, 36, 86, 52, 150, 90, 12 ]
];

h1:=ProduceGroupElements(T20,El1);
h2:=ProduceGroupElements(T160,El2);
h3:=ProduceGroupElements(T160,El3);

[Eigenvalues(i):i in h1] eq Eigs3;
[Eigenvalues(i):i in h2] eq Eigs2;
[Eigenvalues(i):i in h3] eq Eigs1;
[i^2:i in h3] eq h2;
[i^2:i in h2] eq h1;


NextEls1All:=[];
for OneToCheck in [1..#El1] do
  Els1:=ConstructPreimages([8*i:i in El1[OneToCheck]],160,2);
  e22:={*i[1]^^i[2]:i in Eigs2[OneToCheck]*};
  e2:={*R!(Log(i) div 41):i in e22*};
  NextEls1:=[];
  for ii in [1..#Els1] do
    if e2 eq {*&+[Els1[ii,i]*X[i,j]:i in [1..8]]:j in [1..248]*} then Append(~NextEls1,Els1[ii]); end if;
  end for;
  Append(~NextEls1All,NextEls1);
end for;

El2 eq [i[1]:i in NextEls1All];

for OneToCheck in [1..#El1] do
  NextEls1:=NextEls1All[OneToCheck];
  if #NextEls1 le 1 then "Case",OneToCheck,"Nothing to check here"; continue OneToCheck; end if;
  gg1:=ProduceGroupElements(T160,NextEls1);
  g:=gg1[1]^2;
  Orbs:={{i}:i in [1..#NextEls1]};
  if(OneToCheck in {10,16,18,20,22,23,24,25}) then
    g2:=NGT5!(g^4);
    Cg2:=Centralizer(NGT5,g2);
    CE:=E meet Cg2;
    else CE:=E;
  end if;
  EltsToMerge:=[]; C:=sub<E|EltsToMerge>;
  for e in CE do if(e*g eq g*e and not(e in C)) then
    Append(~EltsToMerge,e); C:=sub<E|EltsToMerge>;
    for i in [1..#NextEls1] do
      j:=Position(gg1,gg1[i]^e);
      Orb1:=FindOrb(Orbs,i);
      if(not(j in Orb1)) then
        Orb2:=FindOrb(Orbs,j);
        Exclude(~Orbs,Orb1);
        Exclude(~Orbs,Orb2);
        Include(~Orbs,Orb1 join Orb2);//printf "Merged %o and %o.\n",Orb1,Orb2;
        delete Orb1; delete Orb2;
        if(#Orbs eq 1) then "Case",OneToCheck,"All merged";
          break e;
        end if;
      end if;
    end for;
  end if; end for;
end for;

NextEls2All:=[];
for OneToCheck in [1..#El2] do
  Els2:=ConstructPreimages(El2[OneToCheck],160,2);
  e11:={*i[1]^^i[2]:i in Eigs1[OneToCheck]*};
  e1:={*R!(Log(i) div 41):i in e11*};
  NextEls2:=[];
  for ii in [1..#Els2] do
    if e1 eq {*&+[Els2[ii,i]*X[i,j]:i in [1..8]]:j in [1..248]*} then Append(~NextEls2,Els2[ii]); end if;
  end for;
  Append(~NextEls2All,NextEls2);
end for;

El3 eq [i[1]:i in NextEls2All];

for OneToCheck in [1..#El2] do
  NextEls2:=NextEls2All[OneToCheck];
  if #NextEls2 le 1 then "Case",OneToCheck,"Nothing to check here"; continue OneToCheck; end if;
  gg2:=ProduceGroupElements(T160,NextEls2);
  g:=gg2[1]^2;
  Orbs:={{i}:i in [1..#NextEls2]};
  if(OneToCheck in {6,27}) then
    g2:=NGT5!(g^8);
    Cg2:=Centralizer(NGT5,g2);
    CE:=E meet Cg2;
    else CE:=E;
  end if;
  EltsToMerge:=[]; C:=sub<E|EltsToMerge>;
  for e in CE do if(e*g eq g*e and not(e in C)) then
    Append(~EltsToMerge,e); C:=sub<E|EltsToMerge>;
    for i in [1..#NextEls2] do
      j:=Position(gg2,gg2[i]^e);
      Orb1:=FindOrb(Orbs,i);
      if(not(j in Orb1)) then
        Orb2:=FindOrb(Orbs,j);
        Exclude(~Orbs,Orb1);
        Exclude(~Orbs,Orb2);
        Include(~Orbs,Orb1 join Orb2);// printf "Merged %o and %o.\n",Orb1,Orb2;
        delete Orb1; delete Orb2; if(#Orbs eq 1) then "Case",OneToCheck,"All merged"; break e; end if;
      end if;
    end for;
  end if; end for;
end for;

"Now decide which cases have elements of order 160 stabilizing the same subspaces of L(E8) as x.";
NextEls3All:=[];
for OneToCheck in [1..#Eigs1] do
  Els3:=ConstructPreimages(El3[OneToCheck],160,2);
  NextEls3:=[];
  for ii in [1..#Els3] do
    if #Eigs1[OneToCheck] eq #{&+[Els3[ii,i]*X[i,j]:i in [1..8]]:j in [1..248]} then Append(~NextEls3,Els3[ii]); end if;
  end for;
  Append(~NextEls3All,NextEls3);
end for;
[i:i in [1..#NextEls3All]|NextEls3All[i] ne []],"have such elements.";

Ans5:=[Ans4[i]:i in [1..#Ans4]|NextEls3All[i] eq []];

cohom:=[i:i in [1..#Irr]|Dimension(Ext(Irr[1],Irr[i])) ne 0];

"Note that Case 5 in the text is Case 7 here, and Cases 6 and 7 in the text are Cases 5 and 6 here. The order was swapped in the text so that two cases could fit on a line.";

"Conspicuous sets of factors are";
for i in Ans5 do {*labs[j]:j in i*}; end for;

"Pressures are";
[-Multiplicity(i,1)+&+[Multiplicity(i,j):j in cohom]:i in Ans5];


"Now checking elements that stabilize same eigenspaces as various composition factors:";
EigsToTest1:=[EigenvaluesOfElement(ChangeRing(Irr[i],F),x):i in [1..50]];
EigsToTest2:=[{R!(Log(i[1]) div 41):i in j}:j in EigsToTest1];

Ans5a:=Swap(Ans5,5,7);

for JJ in [5,8,9,10,11,13] do
  "Case",JJ,"from the text:";
  Els3:=ConstructPreimages(El3[Position(Ans4,Ans5a[JJ])],160,2);
  EigEls3:=[{&+[ii[i]*X[i,j]:i in [1..8]]:j in [1..248]}:ii in Els3];
  EigMults3:=[{*i*2:i in j*}:j in EigEls3];
  WhatMults:=[{i:i in j|Multiplicity(j,i) eq 1}:j in EigMults3];
  for j in MultisetToSet(Ans5a[JJ]) do labs[j],"is stabilized by",#[i:i in WhatMults|EigsToTest2[j] subset i],"elements"; end for;
  if(JJ eq 5) then "3_1,3_1^*,3_2,3_2^* are simultaneously stabilized by",#[i:i in WhatMults|&join[EigsToTest2[j]:j in [2,3,4,5,10,11]] subset i],"elements"; end if;
end for;

"Now checking the radicals mentioned";
"Case 5:";
A1:=S49; for i in [S71,S72,S1,S31,S31d,S32,S32d] do E,rho:=Ext(A1,i); A1:=MaximalExtension(A1,i,E,rho); DescribeLayers(Dual(A1),Irr,labs); end for;
// Invariant under field aut, so only need to check S1, S31 and S71
for i in [S1,S31,S71] do Dimension(Ext(A1,i)) eq 0; end for;


"Case 8:";
for i in {Irr[j]:j in MultisetToSet(Ans5[8])} do if(not(IsIsomorphic(i,S912))) then Dimension(Ext(i,S61)) eq 0; end if; end for;
for i in {Irr[j]:j in MultisetToSet(Ans5[8])} do if(not(IsIsomorphic(i,S61))) then Dimension(Ext(i,S912)) eq 0; end if; end for;


"Case 9:";
A2:=S181d; for i in [S32d,S2121d,S32d] do E,rho:=Ext(A2,i); A2:=MaximalExtension(A2,i,E,rho); DescribeLayers(Dual(A2),Irr,labs); end for;
for i in [S1,S31,S31d,S32,S32d,S71,S72,S184,S184d,S2112,S2112d,S2121,S2121d] do Dimension(Ext(A2,i)) eq 0; end for;

A3:=GModule(G2,FrobeniusImage(A2,1)); DescribeLayers(Dual(A3),Irr,labs);

A4:=S2112d; for i in [S1,S31,S31d,S71,S72,S184d,S1] do E,rho:=Ext(A4,i); A4:=MaximalExtension(A4,i,E,rho); DescribeLayers(Dual(A4),Irr,labs); end for;
for i in [S1,S31,S31d,S32,S32d,S71,S72,S181,S181d,S184,S184d,S2121,S2121d] do Dimension(Ext(A4,i)) eq 0; end for;

A5:=GModule(G2,FrobeniusImage(A4,1)); DescribeLayers(Dual(A5),Irr,labs);

"Case 10:";

for i in [S1,S31,S31d,S32,S32d,S71,S72,S2112,S2112d,S2121,S2121d] do
  Dimension(Ext(S912,i)) eq 0,Dimension(Ext(S921,i)) eq 0,Dimension(Ext(S182,i)) eq 0,Dimension(Ext(S183,i)) eq 0;
end for;

"Case 13:";
A6:=S4212d; for i in [S151,S71,S31,S1] do E,rho:=Ext(A6,i); A6:=MaximalExtension(A6,i,E,rho); DescribeLayers(Dual(A6),Irr,labs); end for;
for i in [S1,S31,S31d,S71,S72,S151,S151d,S2112,S2112d,S49] do Dimension(Ext(A6,i)) eq 0; end for;
