#####
#
# This is GAP code
# 
# The file is ~steger/donald/SU21/a15p2/a15p2-5-proj.gap
#
# See file ~steger/donald/SU21/a15p2/D.txt for the definition of the
# division algebra $\D$ and for all the notation.
#
#####

Read("/home/steger/donald/SU21/a15p2/a15p2-proj.gap");
Read("/home/steger/donald/SU21/NormElem.gap");

#####
#
# Free group
#
######

FreeGp:=FreeGroup("A","B");
Af:=FreeGp.1;
Bf:=FreeGp.2;

RelnList:=[
(Bf^-1*Af)^3,
Bf*Af^3*Bf^-1*Af*Bf^2*Af^2*Bf^-1*Af^-1*Bf^2*Af*Bf^-2*Af*Bf^-1*Af^-2*Bf^3,
Bf*Af^2*Bf*Af^-1*Bf^3*Af^2*Bf^-1*Af^-1*Bf^2*Af*Bf^-1*Af^-1*Bf*Af^-3*Bf^3,
Bf^2*Af*Bf^-1*Af*Bf^2*Af^2*Bf*Af*Bf^-2*Af*Bf^-3*Af*Bf^-1*Af^-2*Bf*Af^2*Bf*Af^-1,
Af^2*Bf*Af*Bf^-1*Af^-1*Bf*Af^-2*Bf^-1*Af^-2*Bf*Af^-3*Bf^3*Af^2*Bf*Af*Bf^-2*Af,
Bf^2*Af^-1*Bf^-3*Af^3*Bf^-1*Af*Bf*Af^-1*Bf^-1*Af^-3*Bf^3*Af^2*Bf*Af*Bf*Af^-1,
Bf^2*Af^-2*Bf^-3*Af^3*Bf^-1*Af*Bf*Af^-1*Bf*Af^2*Bf*Af*Bf*Af^-1*Bf^2*Af^-1*Bf^-2*Af^2*Bf*Af^-1,
Bf^-1*Af^-1*Bf*Af^-3*Bf*Af^-2*Bf^-3*Af*Bf^-1*Af^-2*Bf^-2*Af^2*Bf*Af^-1*Bf^3*Af^-1*Bf^3*Af^-1*Bf^2*Af^-1*Bf^-1,
Bf^3*Af*Bf*Af^-1*Bf*Af*Bf*Af^-1*Bf^2*Af^-2*Bf^-3*Af^3*Bf^-1*Af^-1*Bf^3*Af^2*Bf*Af*Bf*Af^-1*Bf^2*Af*Bf*Af^-1,
Bf^2*Af^-1*Bf^-1*Af^-3*Bf^-1*Af^3*Bf^-1*Af*Bf*Af^-1*Bf^-1*Af^-3*Bf^-1*Af^2*Bf*Af^-1*Bf^2*Af^-1*Bf^-1*Af^-3*Bf^-1*Af^2*Bf*Af^-1
];

GammaBarFP:=FreeGp/RelnList;;
AFP:=GammaBarFP.1;
BFP:=GammaBarFP.2;

index3aFP:=Group(AFP, BFP*AFP*BFP^-1, BFP^3);
index3bFP:=Group(AFP, BFP^2, BFP*AFP^2*BFP^-1);

index3aFCA:=FactorCosetAction(GammaBarFP,index3aFP);
index3bFCA:=FactorCosetAction(GammaBarFP,index3bFP);

index3aFCA:=FactorCosetAction(GammaBarFP,index3aFP);
index3bFCA:=FactorCosetAction(GammaBarFP,index3bFP);

# Check the indexes of the subgroups

Index(GammaBarFP,index3aFP) = 3;
Index(GammaBarFP,index3bFP) = 3;

# Check normality

IsNormal(GammaBarFP,index3aFP);
not IsNormal(GammaBarFP,index3bFP);

# Free group versions of these subgroups
FPtoFGSubgp:=g->Group(List(GeneratorsOfGroup(g),UnderlyingElement));

index3aFG:=FPtoFGSubgp(index3aFP);
index3bFG:=FPtoFGSubgp(index3bFP);

#####
#
# Generators of $(a=15,p=2,\{5\})$
#
#####

#From: "Donald Cartwright" <donaldc@maths.usyd.edu.au>
#To: steger@uniss.it
#Subject: Re: (a=15,p=2), Tim's presentation
#Date: Tue, 29 Jan 2008 15:33:55 +1100

ADM:=One(mm)*[
[-1/15*Sqrt(-15)*Zm^2+1/30*(3*Sqrt(-15)-5)*Zm+1/30*(-Sqrt(-15)-5),
1/15*(Sqrt(-15)-4)*Zm^2+1/30*(-Sqrt(-15)+17)*Zm+1/30*(-5*Sqrt(-15)+11),
1/15*(Sqrt(-15)+5)*Zm^2+1/30*(-3*Sqrt(-15)-5)*Zm+1/15*(-2*Sqrt(-15)-10)],
[1/15*(-3*Sqrt(-15)-5)*Zm^2+1/15*(2*Sqrt(-15)+10)*Zm+1/15*(6*Sqrt(-15)+10),
1/15*Sqrt(-15)*Zm^2+1/30*(-3*Sqrt(-15)-5)*Zm+1/30*(-9*Sqrt(-15)-5),
1/15*(-Sqrt(-15)+5)*Zm^2+1/15*(2*Sqrt(-15)-5)*Zm+1/30*(3*Sqrt(-15)-25)],
[-2/15*Zm^2+1/15*(-3*Sqrt(-15)-7)*Zm+1/15*(-Sqrt(-15)-1),
1/15*(Sqrt(-15)-5)*Zm^2+1/15*(Sqrt(-15)-5)*Zm+1/15*(-2*Sqrt(-15)+10),
1/3*Zm+1/6*(-Sqrt(-15)-1)]];;

BDM:=One(mm)*[
[1/6*(-Sqrt(-15)-1),
1/30*(3*Sqrt(-15)-5)*Zm^2-1/15*Sqrt(-15)*Zm+1/15*(-3*Sqrt(-15)+10),
1/60*(Sqrt(-15)+5)*Zm^2+1/60*(Sqrt(-15)-15)*Zm+1/30*(-Sqrt(-15)-5)],
[1/30*(Sqrt(-15)+5)*Zm^2-2/15*Sqrt(-15)*Zm+1/15*(-Sqrt(-15)-5),
1/6*(-Sqrt(-15)-1),
1/3*Zm^2-1/3],
[1/15*(-3*Sqrt(-15)-5)*Zm^2+2/15*Sqrt(-15)*Zm+1/15*(6*Sqrt(-15)+20),
1/15*(-Sqrt(-15)-5)*Zm^2+1/10*(Sqrt(-15)+5)*Zm+1/15*(2*Sqrt(-15)+10),
1/6*(-Sqrt(-15)-1)]];

ADMVec:=DMtoDMVec(ADM);;
BDMVec:=DMtoDMVec(BDM);;

ADMVec in DMVec;
BDMVec in DMVec;

IsOne(iotaDM(ADM)*ADM);
IsOne(iotaDM(BDM)*BDM);

# Check that the relations hold (projectively) for all our matrix
# generators

GammaBarDM:=Group(ADM,BDM);;
DMHom:=GroupHomomorphismByImages(FreeGp,GammaBarDM,
  [Af,Bf],[ADM,BDM]);;
ForAll(RelnList,x->IsPOne(x^DMHom));
	
#####
#
# Construct matrices for the group generators acting on~$\D$ by
# conjugation
#
######

DMtoPDM:=mtx->TransposedMat(
  List(basisDM,
    bmtx->Coefficients(basisDMVec,DMtoDMVec(mtx*bmtx*mtx^-1))
));

APDM:=DMtoPDM(ADM);;
BPDM:=DMtoPDM(BDM);;

IsZero(LieBracket(iotaPDM,APDM));
IsZero(LieBracket(iotaPDM,BPDM));

GammaBarPDM:=Group(APDM,BPDM);;
FGtoPDM:=GroupHomomorphismByImages(FreeGp,GammaBarPDM,
  [Af,Bf],[APDM,BPDM]);;
ForAll(RelnList,x->IsOne(x^FGtoPDM));

######
#
# Find the matrices for the group generators acting by conjugation on
# the self-adjoint, traceless part of~$\D$.
#
#####

PDMtoPSA:=mtx->TransposedMat(
  List(DMVecSelfAdjBasis,SAVec->
    Coefficients(DMVecSelfAdjBasis,mtx*SAVec)
));

APSA0:=PDMtoPSA(APDM);;
BPSA0:=PDMtoPSA(BPDM);;

#####
#
# Adjust the basis of the self-adjoint part of~$\D$ so that
# the group generators correspond to integral matrices.
#
#####

GammaBarPSA0:=Group(APSA0,BPSA0);;

ILatPSA0:=InvariantLattice(GammaBarPSA0)^-1;
APSA:=APSA0^ILatPSA0;
BPSA:=BPSA0^ILatPSA0;

GammaBarPSA:=Group(APSA,BPSA);;
FGtoPSA:=GroupHomomorphismByImages(FreeGp,GammaBarPSA,
  [Af,Bf],[APSA,BPSA]);;
ForAll(RelnList,x->IsOne(x^FGtoPSA));

#APSA:=
#[ [  -22,    5,    1,   14,  -16,   36,   10,  -12 ],
#  [  -29,    8,   -8,   23,  -27,   48,   13,  -17 ],
#  [   -7,    5,    2,    4,   -8,    3,    3,   -4 ],
#  [  -11,    5,    4,    6,   -9,    9,    5,   -5 ],
#  [   -5,    1,    1,    3,   -2,    6,    2,   -2 ],
#  [  -11,    3,   -4,    9,  -11,   20,    5,   -7 ],
#  [  -10,   -4,    2,    5,    3,   27,    4,   -4 ],
#  [  -20,    5,  -11,   18,  -21,   39,    9,  -13 ] ];
#BPSA:=
#[ [   -4,  -11,    0,    1,   10,   36,    3,    0 ],
#  [  -20,   -4,   -1,   12,   -6,   60,    9,  -11 ],
#  [    5,   -5,    1,   -4,    9,   -1,   -2,    4 ],
#  [   -5,  -10,   -1,    2,    9,   36,    3,   -1 ],
#  [   -5,   -5,   -1,    3,    1,   24,    3,   -2 ],
#  [   -5,    0,    0,    3,   -2,   13,    2,   -3 ],
#  [  -10,  -10,   -2,    6,    0,   48,    7,   -4 ],
#  [  -20,    5,   -1,   13,  -15,   39,    8,  -13 ] ];

######
#
# Do calculations $\mod 2$
#
######

toMod2:=x->x*One(GF(2));
toMod2M:=mtx->fOnM(toMod2,mtx);

APSAMod2:=toMod2M(APSA);;
BPSAMod2:=toMod2M(BPSA);;

GammaBarPSAMod2:=Group(APSAMod2,BPSAMod2);;
FGtoPSAMod2:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod2,
  [Af,Bf],[APSAMod2,BPSAMod2]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod2));
	
Size(GammaBarPSAMod2) = 21*2^6;
#StructureDescription(GammaBarPSAMod2)
#  = "(((C2 x C2 x C2) . (C2 x C2 x C2)) : C7) : C3";

index3aPSAMod2:=Image(FGtoPSAMod2,index3aFG);
index3bPSAMod2:=Image(FGtoPSAMod2,index3bFG);

Index(GammaBarPSAMod2,index3aPSAMod2) = 3;
index3bPSAMod2 = GammaBarPSAMod2;

######
#
# Do calculations $\mod 3$
#
######

toMod3:=x->x*One(GF(3));
toMod3M:=mtx->fOnM(toMod3,mtx);

APSAMod3:=toMod3M(APSA);;
BPSAMod3:=toMod3M(BPSA);;

GammaBarPSAMod3:=Group(APSAMod3,BPSAMod3);;
FGtoPSAMod3:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod3,
  [Af,Bf],[APSAMod3,BPSAMod3]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod3));
	
ChSGammaBarPSAMod3:=ChiefSeries(GammaBarPSAMod3);
Length(ChSGammaBarPSAMod3) = 7;
Mod3H1:=Centralizer(GammaBarPSAMod3,ChSGammaBarPSAMod3[6]);
StructureDescription(Mod3H1) = "C3 x C3 x C3 x C3 x C3";
Mod3H1LAL:=LinearActionLayer(
  GammaBarPSAMod3,GeneratorsOfGroup(GammaBarPSAMod3),Pcgs(Mod3H1));
Mod3Q1:=Group(Mod3H1LAL);
Size(Mod3Q1)*Size(Mod3H1) = Size(GammaBarPSAMod3);
IdSmallGroup(Mod3Q1) = IdSmallGroup(PGL(2,3));
IdSmallGroup(Mod3Q1) = IdSmallGroup(SymmetricGroup(4));

index3aPSAMod3:=Image(FGtoPSAMod3,index3aFG);
index3bPSAMod3:=Image(FGtoPSAMod3,index3bFG);

Index(GammaBarPSAMod3,index3aPSAMod3) = 3;
Index(GammaBarPSAMod3,index3bPSAMod3) = 3;

FGtoMod3Q1:=GroupHomomorphismByImages(FreeGp,Mod3Q1,
  [Af,Bf],Mod3H1LAL);;
ForAll(RelnList,x->IsOne(x^FGtoMod3Q1));

index3aMod3Q1:=Image(FGtoMod3Q1,index3aFG);
index3bMod3Q1:=Image(FGtoMod3Q1,index3bFG);

index3aMod3Q1 = Mod3Q1;
Index(Mod3Q1,index3bMod3Q1) = 3;

######
#
# Do calculations $\mod 3^N$
#
######

Read("/home/steger/donald/SU21/layers.gap");

N:=4;

GammaBarMod3N:=Group(List([APSA,BPSA],x->x*One(Integers mod 3^N)));
FGtoGammaBarMod3N:=GroupHomomorphismByImages(FreeGp,GammaBarMod3N,
  GeneratorsOfGroup(FreeGp),GeneratorsOfGroup(GammaBarMod3N));;
ForAll(RelnList,r->IsOne(r^FGtoGammaBarMod3N));

GammaBarPSA:=Group([APSA,BPSA]);
trip2:=FindLieAlg(GammaBarPSA,3,N);;
CheckTrip2(trip2,3);

V:=trip2[1];

AOnLieAlgT:=xOnLieAlgT(APSA,V,3);
BOnLieAlgT:=xOnLieAlgT(BPSA,V,3);

AOnLieAlg:=TransposedMat(AOnLieAlgT);;
BOnLieAlg:=TransposedMat(BOnLieAlgT);;
GammaBarOLA:=Group(AOnLieAlg,BOnLieAlg);
FGtoOLA:=GroupHomomorphismByImages(FreeGp,GammaBarOLA,
  [Af,Bf],[AOnLieAlg,BOnLieAlg]);;
ForAll(RelnList,x->IsOne(x^FGtoOLA));

VMTX:=GModuleByMats([AOnLieAlgT,BOnLieAlgT],GF(3));

VMTXSubmods:=MTX.BasesSubmodules(VMTX);
SortParallel(List(VMTXSubmods,Size),VMTXSubmods);
List(VMTXSubmods,Size)=[0,1,2,3,4,5,7,8];
VSubmods:=List(VMTXSubmods,
  m->VectorSpace(GF(3),
    List(m,r->LinearCombination(Basis(V),r)),Zero(V)));;

W5:=VSubmods[6];
Dimension(W5) = 5;
ForAll(Basis(W5),x->ForAll(Basis(W5),y->IsZero(x*y)));

List(VSubmods{[2,5,7,8]},Dimension)=[1,4,7,8];
Dimension(VSubmods[2]) = 1;
Dimension(VSubmods[5]/VSubmods[2]) = 3;
Dimension(VSubmods[7]/VSubmods[5]) = 3;
Dimension(VSubmods[8]/VSubmods[7]) = 1;
AVBasis:=Reversed(AdaptedBasis(List(VSubmods{[2,5,7,8]},Basis),GF(3)));;
VectorSpace(GF(3),AVBasis{[8..8]}) = VSubmods[2];
VectorSpace(GF(3),AVBasis{[5..8]}) = VSubmods[5];
VectorSpace(GF(3),AVBasis{[2..8]}) = VSubmods[7];
VectorSpace(GF(3),AVBasis{[1..8]}) = VSubmods[8];

List(VSubmods{[2,5,6]},Dimension)=[1,4,5];
Dimension(VSubmods[2]) = 1;
Dimension(VSubmods[5]/VSubmods[2]) = 3;
Dimension(VSubmods[6]/VSubmods[5]) = 1;
AW5Basis:=Reversed(AdaptedBasis(List(VSubmods{[2,5,6]},Basis),GF(3)));;
VectorSpace(GF(3),AW5Basis{[5..5]}) = VSubmods[2];
VectorSpace(GF(3),AW5Basis{[2..5]}) = VSubmods[5];
VectorSpace(GF(3),AW5Basis{[1..5]}) = VSubmods[6];

trip2BaseChange(trip2,AVBasis,3);
CheckTrip2(trip2,3);
  
trip1:=WFindElts(GammaBarPSA,W5,3,N);;
CheckTrip1(trip1,W5,3);
trip1BaseChange(trip1,AW5Basis,3);
CheckTrip1(trip1,W5,3);

#List(VSubmods,m1->List(VSubmods,m2->VectorSpace(GF(3),
#  Concatenation(List(Basis(m1),x->List(Basis(m2),y->x*y))),
#  Zero(V))));


G24:=Group(List(MTX.InducedActionSubmodule(VMTX,
  MTX.SubGModule(VMTX,
    VMTXSubmods[4])).generators,
      m->TransposedMat(m)));
Size(G24) = 24;
FGtoG24Hom:=GroupHomomorphismByImages(FreeGp,G24,
  GeneratorsOfGroup(FreeGp),GeneratorsOfGroup(G24));
ForAll(RelnList,x->IsOne(x^FGtoG24Hom));

S4toG24:=IsomorphismGroups(SymmetricGroup(4),G24);
G24pcGens:=List([(1,2),(1,2,3),(1,2)(3,4),(2,3)(1,4)],x->x^S4toG24);
G24pc:=PcgsByPcSequence(FamilyObj(One(G24)),G24pcGens);
G24pcOrds:=RelativeOrders(G24pc);

G24pcGenFacts:=List(G24pcGens,x->Factorization(G24,x));
G24FG:=Source(G24!.factFreeMap);
G24RepHom:=GroupHomomorphismByImages(G24FG,GammaBarMod3N,
  GeneratorsOfGroup(G24FG),GeneratorsOfGroup(GammaBarMod3N));;

G24pcGenReps:=List(G24pcGenFacts,x->x^G24RepHom);;
G24ExpList:=Cartesian(List(G24pcOrds,n->[0..n-1]));
G24Reps:=List(G24ExpList,exp->Product([1..Size(exp)],j->
  G24pcGenReps[j]^exp[j]));;
G24Mod3Reps:=List(G24Reps,x->fOnM(Int,x)*One(GF(3)));;
G24quat:=[G24pcGenReps,G24pcOrds,G24Mod3Reps,G24ExpList];;

PCMod3N:=G0MakePC(G24quat,trip1,trip2,W5,3,N);
FGtoPCMod3N:=GroupHomomorphismByImages(FreeGp,PCMod3N,
  GeneratorsOfGroup(FreeGp),
  List([APSA,BPSA],x->mtxToPC(x,PCMod3N,G24quat,trip1,trip2,W5,3,N)));;
ForAll(RelnList,x->IsOne(x^FGtoPCMod3N));
PCMod3NtoGammaBarMod3N:=GroupHomomorphismByImages(
  PCMod3N,GammaBarMod3N,
  GeneratorsOfGroup(PCMod3N),
  Concatenation(G24quat[1],trip1[3],Concatenation(trip2[3])));;
ForAll(GeneratorsOfGroup(FreeGp),x->
  x^FGtoGammaBarMod3N = (x^FGtoPCMod3N)^PCMod3NtoGammaBarMod3N);

index3aPCMod3N:=Image(FGtoPCMod3N,index3aFG);
index3bPCMod3N:=Image(FGtoPCMod3N,index3bFG);

pcMissingSpots(CommutatorSubgroup(PCMod3N,PCMod3N));

pcMissingSpots(index3aPCMod3N);
pcMissingSpots(CommutatorSubgroup(index3aPCMod3N,index3aPCMod3N));

pcMissingSpots(index3bPCMod3N);
pcMissingSpots(CommutatorSubgroup(index3bPCMod3N,index3bPCMod3N));

######
#
# Do calculations $\mod 5$
#
######

toMod5:=x->x*One(GF(5));
toMod5M:=mtx->fOnM(toMod5,mtx);

APSAMod5:=toMod5M(APSA);;
BPSAMod5:=toMod5M(BPSA);;

GammaBarPSAMod5:=Group(APSAMod5,BPSAMod5);;
FGtoPSAMod5:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod5,
  [Af,Bf],[APSAMod5,BPSAMod5]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod5));

ChSGammaBarPSAMod5:=ChiefSeries(GammaBarPSAMod5);
Length(ChSGammaBarPSAMod5) = 6;
Mod5H1:=ChSGammaBarPSAMod5[4];
StructureDescription(Mod5H1) = "C5 x C5 x C5";
Mod5H1LAL:=LinearActionLayer(
  GammaBarPSAMod5,GeneratorsOfGroup(GammaBarPSAMod5),Pcgs(Mod5H1));
Mod5Q1:=Group(Mod5H1LAL);
Size(Mod5Q1)*Size(Mod5H1) = Size(GammaBarPSAMod5);

MTXMod5H1:=GModuleByMats(Mod5H1LAL,GF(5));
List(MTX.BasesSubmodules(MTXMod5H1),Size) = [0,2,3];

ChSMod5Q1:=ChiefSeries(Mod5Q1);
Length(ChSMod5Q1) = 4;
Mod5H2:=ChSMod5Q1[3];
StructureDescription(Mod5H2) = "C5 x C5";
Mod5H2LAL:=LinearActionLayer(
  Mod5Q1,Mod5H1LAL,Pcgs(Mod5H2));
Mod5Q2:=Group(Mod5H2LAL);
Size(Mod5Q2)*Size(Mod5H2) = Size(Mod5Q1);

IdSmallGroup(Mod5Q2) = IdSmallGroup(SL(2,5));

MTXMod5H2:=GModuleByMats(Mod5H2LAL,GF(5));
MTX.IsAbsolutelyIrreducible(MTXMod5H2);

index3aPSAMod5:=Image(FGtoPSAMod5,index3aFG);
index3bPSAMod5:=Image(FGtoPSAMod5,index3bFG);

index3aPSAMod5 = GammaBarPSAMod5;
index3bPSAMod5 = GammaBarPSAMod5;

######
#
# Do calculations $\mod 7$
#
######

toMod7:=x->x*One(GF(7));
toMod7M:=mtx->fOnM(toMod7,mtx);

APSAMod7:=toMod7M(APSA);;
BPSAMod7:=toMod7M(BPSA);;

GammaBarPSAMod7:=Group(APSAMod7,BPSAMod7);;
FGtoPSAMod7:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod7,
  [Af,Bf],[APSAMod7,BPSAMod7]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod7));
	
#IsomorphismGroups(PGU(3,7),GammaBarPSAMod7);
#Size(GammaBarPSAMod7) = 5663616;

index3aPSAMod7:=Image(FGtoPSAMod7,index3aFG);
index3bPSAMod7:=Image(FGtoPSAMod7,index3bFG);

index3aPSAMod7 = GammaBarPSAMod7;
index3bPSAMod7 = GammaBarPSAMod7;

######
#
# Do calculations $\mod 11$
#
######

# NEVER CHECKED!

##### toMod11:=x->x*One(GF(11));
##### toMod11M:=mtx->fOnM(toMod11,mtx);
##### 
##### APSAMod11:=toMod11M(APSA);;
##### BPSAMod11:=toMod11M(BPSA);;
##### 
##### GammaBarPSAMod11:=Group(APSAMod11,BPSAMod11);;
##### FGtoPSAMod11:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod11,
#####   [Af,Bf],[APSAMod11,BPSAMod11]);;
##### ForAll(RelnList,x->IsOne(x^FGtoPSAMod11));
##### 	
##### #Size(GammaBarPSAMod11) = 212747040;
##### #Size(PGU(3,11)) = 212747040;
##### 
##### index3aPSAMod11:=Image(FGtoPSAMod11,index3aFG);
##### index3bPSAMod11:=Image(FGtoPSAMod11,index3bFG);
##### index3cPSAMod11:=Image(FGtoPSAMod11,index3cFG);
##### index3xPSAMod11:=Image(FGtoPSAMod11,index3xFG);
##### 
##### Index(GammaBarPSAMod11,index3aPSAMod11) = 3;
##### index3bPSAMod11 = GammaBarPSAMod11;
##### index3cPSAMod11 = GammaBarPSAMod11;
##### index3xPSAMod11 = GammaBarPSAMod11;

#####
#
# Consider abelianizations
#
#####

# (a=15,p=2,\{5\})
AbelianInvariants(GammaBarFP) = [2,3];
AbelianInvariants(GammaBarPSAMod2) = [3];
AbelianInvariants(GammaBarPSAMod3) = [2,3];
AbelianInvariants(PCMod3N)         = [2,3]; #Refines result mod~3
AbelianInvariants(GammaBarPSAMod5) = [];

# (a=15,p=2,\{5\},D_3)
AbelianInvariants(index3aFP) = [2,7];
AbelianInvariants(index3aPSAMod2) = [7];
AbelianInvariants(index3aPSAMod3) = [2];
AbelianInvariants(index3aPCMod3N) = [2]; #Refines result mod~3
AbelianInvariants(index3aPSAMod5) = [];

# (a=15,p=2,\{5\},3_3)
AbelianInvariants(index3bFP) = [2,2,9];
AbelianInvariants(index3bPSAMod2) = [3];
AbelianInvariants(index3bPSAMod3) = [2,2,3];
AbelianInvariants(index3bPCMod3N) = [2,2,9]; #Refines result mod~3
AbelianInvariants(index3bPSAMod5) = [];
