"If you want to check that the conspicuous sets of factors are correct, you can use the function CheckMyFactors(). This takes a couple of days.";

load "Subgroups/functions.txt";
load "Subgroups/E8/ComputeFactorsE8.txt";
load "Traces/E8/Tr16E8Eigs";
Tr16E8:={EigsToTracePowers(i,16):i in Tr16E8Eigs};
delete Tr16E8Eigs;
load "Traces/E8/Tr20E8Eigs";
Tr20E8:={EigsToTracePowers(i,20):i in Tr20E8Eigs};
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)(14,15)(16,18)(17,19)(20,22)(21,23)(24,27)
(25,26)(28,30)(29,31)(32,33)(34,36)(35,37)(38,40)(39,41)(42,45)(43,44)(50,48)(47,49);

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;
m:=q-1;
F<w>:=GF(q);
//n:=(q-1) div m;
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]];

G2:=SL(3,9);
CC:=ConjugacyClasses(G2);
S1:=TrivialModule(G2,GF(9));
S31:=GModule(G2); S31d:=Dual(S31);
S32:=Socle(SymmetricPower(S31,3)); S32d:=Dual(S32);
S61:=SymmetricSquare(S31d); S61d:=Dual(S61);
S62:=SymmetricSquare(S32d); S62d:=Dual(S62);
S71:=SocleFactors(TensorProduct(S31,S31d))[2];
S72:=SocleFactors(TensorProduct(S32,S32d))[2];
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);
for i in CompositionFactors(TensorProduct(S61,S61d)) do if(Dimension(i) eq 27) then S271:=i; end if; end for;
for i in CompositionFactors(TensorProduct(S62,S62d)) do if(Dimension(i) eq 27) then S272:=i; end if; end for;
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 [51..66] do
  if EigenvaluesOfElement(ChangeRing(S31,F),CC[i,3]) eq { <w^5822, 1>, <w^6478, 1>, <w^820, 1> } then x:=CC[i,3]; break i; end if;
end for;

Ans3b:=[
    {* 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, 10, 11^^3, 28, 29, 47, 48 *},
    {* 1^^4, 2^^2, 3^^2, 11^^4, 14^^2, 15^^2, 18^^3, 19^^3, 20, 21, 28, 29 *},
    {* 1^^4, 2, 3, 8^^3, 9^^3, 11, 12^^2, 13^^2, 28, 29, 33, 42, 43 *},
    {* 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()
  P:=[13,8,7];
  Ans3Test,ModsTest,I:=ComputeConspicuousFactorsE8LowMemory(Irr,CC,Tr,P,[]);
  Ans3Testa:=[IdentifyFactors(i,Irr):i in ModsTest];
  Ans3Testb:=OrbitReps(Ans3Testa,frob);
  return Ans3b eq [SequenceToMultiset(i):i in Ans3Testb];
end function;

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

Ans4:=[i:i in Ans3b|Multiplicity(i,1) lt &+[Multiplicity(i,j):j in cohom]];

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


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

g1:=ProduceGroupElements(T20,El1);
[Eigenvalues(i):i in g1] eq Eigs3;

"Checking elements of order 40 with the right eigenvalues are all conjugate:";

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;

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]};
  EltsToMerge:=[]; C:=sub<E|EltsToMerge>;
  if(OneToCheck in {7,22,25}) then
    g2:=NGT5!(g^4);
    Cg2:=Centralizer(NGT5,g2);
    CE:=E meet Cg2;
    else CE:=E;
  end if;
  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;

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

"Checking elements of order 80 with the right eigenvalues are all conjugate:";

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;

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]};
  EltsToMerge:=[]; C:=sub<E|EltsToMerge>;
  if(OneToCheck in {17,20,21,22,26,27}) then
    g2:=NGT5!(g^8);
    Cg2:=Centralizer(NGT5,g2);
    CE:=E meet Cg2;
    else CE:=E;
  end if;
  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;

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

"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.";

//1,2,3,4,6,8,9,11,12,13,14,15,16,19,22 have such elements
//9,12,15,16,17,18,19,20,21,22,23,25,26,27 have positive pressure.

[Position(Ans3b,i):i in Ans4] eq [9,12,15,16,17,18,19,20,21,22,23,25,26,27];

//Leaves 17,18,20,21,23,25,26,27.
Ans5:=[Ans3b[i]:i in [1..#Ans3b]|NextEls3All[i] eq [] and Ans3b[i] in Ans4];

"These are the sets of factors left:";

[{*labs[i]:i in j*}:j in Ans5];

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

"Now checking the statements about elements stabilizing some subspaces for Cases 4 and 6.";

EigsToTest1:=[EigenvaluesOfElement(ChangeRing(Irr[i],F),x):i in [1..46]];
EigsToTest2:=[{R!(Log(i[1]) div 41):i in j}:j in EigsToTest1];

JJ:=4;

"Case 4:";
Els3:=ConstructPreimages(El3[Position(Ans3b,Ans5[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 MultisetToSet(j)*}:j in EigEls3];
WhatMults:=[{i:i in j|Multiplicity(j,i) eq 1}:j in EigMults3];
for j in MultisetToSet(Ans5[JJ]) do labs[j],"is stabilized by",#[i:i in WhatMults|EigsToTest2[j] subset i],"elements"; end for;

JJ:=6;

"Case 6:";
Els3:=ConstructPreimages(El3[Position(Ans3b,Ans5[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 MultisetToSet(j)*}:j in EigEls3];
WhatMults:=[{i:i in j|Multiplicity(j,i) eq 1}:j in EigMults3];
for j in MultisetToSet(Ans5[JJ]) do labs[j],"is stabilized by",#[i:i in WhatMults|EigsToTest2[j] subset i],"elements"; end for;


"Now checking the radicals mentioned in Cases 3 and 5:";
// Case 3:
A1:=S71; for i in [S32,S32d,S1,S71] do E,rho:=Ext(A1,i); A1:=MaximalExtension(A1,i,E,rho); DescribeLayers(Dual(A1),Irr,labs); end for;
for i in [S1,S31,S32,S61,S71,S72,S912,S921,S151,S182,S184] do Dimension(Ext(A1,i)) eq 0; end for;

A2:=S2121d; for i in [S32,S32d,S1,S71,S72,S1] 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,S61,S61d,S71,S72,S912,S912d,S921,S921d,S151,S151d,S182,S182d,S184,S184d] do Dimension(Ext(A2,i)) eq 0; end for;

A3:=A1; for i in [S2121,S2121d,S32,S32d,S1,S71,S72,S1] do E,rho:=Ext(A3,i); A3:=MaximalExtension(A3,i,E,rho); DescribeLayers(Dual(A3),Irr,labs); end for;
for i in [S1,S31,S32,S61,S71,S72,S912,S921,S151,S182,S184] do Dimension(Ext(A3,i)) eq 0; end for;

E,rho:=Ext(A3,S2121d); A4:=MaximalExtension(A3,S2121d,E,rho);

A4a:=RemoveFromTop(Dual(A4),Irr,Irr,[1..Position(Irr,S2121)-1]); DescribeLayers(A4a,Irr,labs);
"Notice that this has both 21_{2,1}s in it";

"Now Case 5.";

// Take the image under the Frobenius of A3. Then take the radical inside that.

A3b:=GModule(G2,FrobeniusImage(A3,1));
subA3b:=RemoveFromTop(JacobsonRadical(A3b),Irr,Irr,[Position(Irr,i):i in [S1,S31,S31d,S2112,S2112d]]);
A3c:=Dual(A3b/subA3b); DescribeLayers(A3c,Irr,labs);

for i in [S1,S31,S2112] do Dimension(Ext(i,A3c)) eq 0; end for;

"Finally, the radicals in Cases 4 and 6.";

// Case 4:

"Case 4. Check that nothing extends 9_{1,2}, and then the three radicals.";

for i in [S1,S31,S32d,S32,S32d,S71,S72,S912d,S921,S921d,S181,S181d,S184,S184d,S2112,S2112d,S2121,S2121d] do Dimension(Ext(S912,i)) eq 0; end for;

A5:=S181d; for i in [S184,S921,S181d] do E,rho:=Ext(A5,i); A5:=MaximalExtension(A5,i,E,rho); DescribeLayers(Dual(A5),Irr,labs); end for;

A6:=S184; for i in [S181d,S31,S2112,S31,S184] do E,rho:=Ext(A6,i); A6:=MaximalExtension(A6,i,E,rho); DescribeLayers(Dual(A6),Irr,labs); end for;

A7:=S2112d; for i in [S1,S31,S31d,S71,S72,S184d,S1,S2112,S2112d,S1,S31,S31d,S72] do E,rho:=Ext(A7,i); A7:=MaximalExtension(A7,i,E,rho); DescribeLayers(Dual(A7),Irr,labs); end for;

for i in [S1,S31,S31d,S32,S32d,S71,S72,S921,S921d,S181,S181d,S184,S184d,S2112,S2112d,S2121,S2121d] do Dimension(Ext(A5,i)) eq 0,Dimension(Ext(A6,i)) eq 0,Dimension(Ext(A7,i)) eq 0; end for;

//Case 6:

"Case 6. Just the two radicals here.";

A8:=S151d; for i in [S49,S4212,S71,S72,S31,S31d,S1] do E,rho:=Ext(A8,i); A8:=MaximalExtension(A8,i,E,rho); DescribeLayers(Dual(A8),Irr,labs); end for;

A9:=S4212d; for i in [S151,S71,S31,S1] do E,rho:=Ext(A9,i); A9:=MaximalExtension(A9,i,E,rho); DescribeLayers(Dual(A9),Irr,labs); end for;

for i in [S1,S31,S31d,S71,S72,S151,S151d,S2112,S2112d,S4212,S4212d,S49] do Dimension(Ext(A8,i)) eq 0,Dimension(Ext(A9,i)) eq 0; end for;
