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

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

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

#From: "Donald Cartwright" <donaldc@maths.usyd.edu.au>
#To: steger@uniss.it
#Subject: Re: Elements of finite order
#Date: Tue, 15 Jan 2008 20:22:26 +1100

FreeGp:=FreeGroup("Z","B","C");
Zf:=FreeGp.1;
Bf:=FreeGp.2;
Cf:=FreeGp.3;

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

GammaBarFP:=FreeGp/RelnList;;
ZFP:=GammaBarFP.1;
BFP:=GammaBarFP.2;
CFP:=GammaBarFP.3;

#From: "Donald Cartwright" <donaldc@maths.usyd.edu.au>
#To: "steger@uniss.it" <steger@uniss.it>
#Subject: Group (7,2), new setup <--> old setup
#Date: Sat, 19 Jan 2008 03:11:13 +1100
#
# As explained in this message ``DFP'' corresponds to what was called
# ``B'' in the old setup.

UFP:=ZFP^2;
DFP:=CFP*ZFP^3*BFP*ZFP^2;
Group(UFP,DFP)=GammaBarFP;

# Important subgroups of GammaBarFP

index3FP:=Group(UFP, DFP*UFP*DFP^-1, DFP^3);
index7aFP:=Group(DFP, UFP^2*DFP^-1*UFP, UFP*DFP*UFP^2);
index7bFP:=Group(DFP, UFP^2*DFP*UFP^-1, UFP^-2*DFP*UFP);
index21aFP:=Group(DFP^3, DFP^-1*UFP^-1*DFP*UFP^-2,
  DFP*UFP^-2*DFP^-1*UFP^-1, UFP*DFP^3*UFP, UFP*DFP^-1*UFP*DFP*UFP,
  UFP^-1*DFP^3*UFP^-1);
index21bFP:=Group(DFP^3, DFP*UFP*DFP^-1*UFP^-2, UFP*DFP^3*UFP^-1,
  UFP^-1*DFP*UFP*DFP^-1*UFP^-1, DFP^-1*UFP^2*DFP*UFP^-1,
  UFP^2*DFP^-2*UFP^-1*DFP^-1);
index21cFP:=Group(DFP, UFP*DFP^-2*UFP, UFP^2*DFP*UFP^2,
  UFP^3*DFP^-1*UFP^2);

index3FCA:=FactorCosetAction(GammaBarFP,index3FP);
index7aFCA:=FactorCosetAction(GammaBarFP,index7aFP);
index7bFCA:=FactorCosetAction(GammaBarFP,index7bFP);
index21aFCA:=FactorCosetAction(GammaBarFP,index21aFP);
index21bFCA:=FactorCosetAction(GammaBarFP,index21bFP);
index21cFCA:=FactorCosetAction(GammaBarFP,index21cFP);

# Check the indexes of the subgroups

Index(GammaBarFP,index3FP) = 3;
Index(GammaBarFP,index7aFP) = 7;
Index(GammaBarFP,index7bFP) = 7;
Index(GammaBarFP,index21aFP) = 21;
Index(GammaBarFP,index21bFP) = 21;
Index(GammaBarFP,index21cFP) = 21;

# Check normality

IsNormal(GammaBarFP,index3FP);
not IsNormal(GammaBarFP,index7aFP);
not IsNormal(GammaBarFP,index7bFP);
not IsNormal(GammaBarFP,index21aFP);
IsNormal(GammaBarFP,index21bFP);
not IsNormal(GammaBarFP,index21cFP);

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

index3FG:=FPtoFGSubgp(index3FP);
index7aFG:=FPtoFGSubgp(index7aFP);
index7bFG:=FPtoFGSubgp(index7bFP);
index21aFG:=FPtoFGSubgp(index21aFP);
index21bFG:=FPtoFGSubgp(index21bFP);
index21cFG:=FPtoFGSubgp(index21cFP);

#####
#
# Generators of $(a=7,p=2,\emptyset)$
#
#####

#From: "Donald Cartwright" <donaldc@maths.usyd.edu.au>
#To: "steger@uniss.it" <steger@uniss.it>
#Subject: Three possible generators in the new set up of group (7,2)
#Date: Tue, 8 Jan 2008 23:44:00 +1100

ZDM=[[Zm,    0,  0],
     [0,Zm^2,  0],
     [0,   0,Zm^4]];


BDM:=[[1/7*(6*Zm^4-3*Zm^3-6*Zm^2-3*Zm-1),
1/7*(6*Zm^5+2*Zm^4+2*Zm^3+6*Zm^2+7*Zm+5),
1/7*(-2*Zm^5-6*Zm^4-5*Zm^3+Zm^2-2*Zm-7)],
[
1/7*(2*Zm^5+Zm^4-3*Zm^3-3*Zm^2-6*Zm-5),
1/7*(3*Zm^5-3*Zm^4+3*Zm^3+9*Zm+2),
1/7*(-2*Zm^5+4*Zm^4+4*Zm^3+5*Zm^2+3)],
[
1/14*(-6*Zm^5-2*Zm^4-9*Zm^3-6*Zm^2+7*Zm-5),
1/7*(3*Zm^5+5*Zm^3-3*Zm^2+4*Zm-2),
1/7*(-3*Zm^5-3*Zm^4+6*Zm^2-6*Zm-1)]];

CDM:=[[
1/7*(5*Zm^5+9*Zm^4+5*Zm^3+7*Zm^2+Zm+1),
1/7*(5*Zm^5+14*Zm^4+6*Zm^3+2*Zm^2+9*Zm+13),
1/7*(4*Zm^5+13*Zm^4+13*Zm^3+4*Zm^2+7*Zm+8)],
[
1/7*(-8*Zm^5-5*Zm^4+2*Zm^3-Zm^2+7*Zm-2),
1/7*(-5*Zm^5+2*Zm^4-4*Zm^2+4*Zm-4),
1/7*(-6*Zm^5-4*Zm^4-Zm^3+3*Zm^2+8*Zm+7)],
[
1/7*(-8*Zm^5+3*Zm^4-9*Zm^3+5*Zm^2-4*Zm-1),
1/7*(-2*Zm^5-3*Zm^4-10*Zm^3+5*Zm^2-7*Zm-4),
1/7*(-4*Zm^4-5*Zm^3+4*Zm^2+2*Zm-4)]];

ZDM in DM;
BDM in DM;
CDM in DM;

IsOne(iotaDM(ZDM)*ZDM);
IsOne(iotaDM(BDM)*BDM);
IsOne(iotaDM(CDM)*CDM);

IsZero(LieBracket(iotaPDM,ZPDM));
IsZero(LieBracket(iotaPDM,BPDM));
IsZero(LieBracket(iotaPDM,CPDM));

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

GammaBarDM:=Group(ZDM,BDM,CDM);;
DMHom:=GroupHomomorphismByImages(FreeGp,GammaBarDM,
  [Zf,Bf,Cf],[ZDM,BDM,CDM]);;
ForAll(RelnList,x->IsPOne(x^DMHom));

#####
#
# Construct matrices for the group generators acting on~$\D$ by
# conjugation
#
######

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

ZPDM:=DMtoPDM(ZDM);;
BPDM:=DMtoPDM(BDM);;
CPDM:=DMtoPDM(CDM);;

GammaBarPDM:=Group(ZPDM,BPDM,CPDM);;
FGtoPDM:=GroupHomomorphismByImages(FreeGp,GammaBarPDM,
  [Zf,Bf,Cf],[ZPDM,BPDM,CPDM]);;
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(DMSelfAdjBasis,SAVec->
    Coefficients(DMSelfAdjBasis,mtx*SAVec)
));

ZPSA0:=PDMtoPSA(ZPDM);;
BPSA0:=PDMtoPSA(BPDM);;
CPSA0:=PDMtoPSA(CPDM);;

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

GammaBarPSA0:=Group(ZPSA0,BPSA0,CPSA0);;

ILatPSA0:=InvariantLattice(GammaBarPSA0)^-1;
ZPSA:=ZPSA0^ILatPSA0;
BPSA:=BPSA0^ILatPSA0;
CPSA:=CPSA0^ILatPSA0;

GammaBarPSA:=Group(ZPSA,BPSA,CPSA);;
FGtoPSA:=GroupHomomorphismByImages(FreeGp,GammaBarPSA,
  [Zf,Bf,Cf],[ZPSA,BPSA,CPSA]);;
ForAll(RelnList,x->IsOne(x^FGtoPSA));

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

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

ZPSAMod2:=toMod2M(ZPSA);;
BPSAMod2:=toMod2M(BPSA);;
CPSAMod2:=toMod2M(CPSA);;

GammaBarPSAMod2:=Group(ZPSAMod2,BPSAMod2,CPSAMod2);;
FGtoPSAMod2:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod2,
  [Zf,Bf,Cf],[ZPSAMod2,BPSAMod2,CPSAMod2]);;
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";

index3PSAMod2:=Image(FGtoPSAMod2,index3FG);
index7aPSAMod2:=Image(FGtoPSAMod2,index7aFG);
index7bPSAMod2:=Image(FGtoPSAMod2,index7bFG);
index21aPSAMod2:=Image(FGtoPSAMod2,index21aFG);
index21bPSAMod2:=Image(FGtoPSAMod2,index21bFG);
index21cPSAMod2:=Image(FGtoPSAMod2,index21cFG);

Index(GammaBarPSAMod2,index3PSAMod2) = 3;
index7aPSAMod2 = GammaBarPSAMod2;
Index(GammaBarPSAMod2,index7bPSAMod2) = 7;
index21aPSAMod2 = index3PSAMod2;
Index(GammaBarPSAMod2,index21bPSAMod2) = 21;
#StructureDescription(index21bPSAMod2) =
#  "(C2 x C2 x C2) . (C2 x C2 x C2)";
index21cPSAMod2 = GammaBarPSAMod2;

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

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

ZPSAMod3:=toMod3M(ZPSA);;
BPSAMod3:=toMod3M(BPSA);;
CPSAMod3:=toMod3M(CPSA);;

GammaBarPSAMod3:=Group(ZPSAMod3,BPSAMod3,CPSAMod3);;
FGtoPSAMod3:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod3,
  [Zf,Bf,Cf],[ZPSAMod3,BPSAMod3,CPSAMod3]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod3));
	
Size(GammaBarPSAMod3) = 6048;
StructureDescription(GammaBarPSAMod3) = "PSU(3,3)";

index3PSAMod3:=Image(FGtoPSAMod3,index3FG);
index7aPSAMod3:=Image(FGtoPSAMod3,index7aFG);
index7bPSAMod3:=Image(FGtoPSAMod3,index7bFG);
index21aPSAMod3:=Image(FGtoPSAMod3,index21aFG);
index21bPSAMod3:=Image(FGtoPSAMod3,index21bFG);
index21cPSAMod3:=Image(FGtoPSAMod3,index21cFG);

index3PSAMod3 = GammaBarPSAMod3;
index7aPSAMod3 = GammaBarPSAMod3;
index7bPSAMod3 = GammaBarPSAMod3;
index21aPSAMod3 = GammaBarPSAMod3;
index21bPSAMod3 = GammaBarPSAMod3;
index21cPSAMod3 = GammaBarPSAMod3;

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

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

ZPSAMod5:=toMod5M(ZPSA);;
BPSAMod5:=toMod5M(BPSA);;
CPSAMod5:=toMod5M(CPSA);;

GammaBarPSAMod5:=Group(ZPSAMod5,BPSAMod5,CPSAMod5);;
FGtoPSAMod5:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod5,
  [Zf,Bf,Cf],[ZPSAMod5,BPSAMod5,CPSAMod5]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod5));
	
CSGammaBarPSAMod5:=CompositionSeries(GammaBarPSAMod5);
Length(CSGammaBarPSAMod5) = 3;
StructureDescription(CSGammaBarPSAMod5[2]) = "PSU(3,5)";
Size(GammaBarPSAMod5) = 378000;

GammaBarPSAMod5Hom3:=NaturalHomomorphismByNormalSubgroup
  (GammaBarPSAMod5,CSGammaBarPSAMod5[2]);;
Size(Range(GammaBarPSAMod5Hom3)) = 3;
#ForAny(ConjugacyClasses(GammaBarPSAMod5),c->
#  Order(Representative(c))=3
#        and Order(Representative(c)^GammaBarPSAMod5Hom3)=3);
#StructureDescription(GammaBarPSAMod5) = "PSU(3,5) : C3";

index3PSAMod5:=Image(FGtoPSAMod5,index3FG);
index7aPSAMod5:=Image(FGtoPSAMod5,index7aFG);
index7bPSAMod5:=Image(FGtoPSAMod5,index7bFG);
index21aPSAMod5:=Image(FGtoPSAMod5,index21aFG);
index21bPSAMod5:=Image(FGtoPSAMod5,index21bFG);
index21cPSAMod5:=Image(FGtoPSAMod5,index21cFG);

Index(GammaBarPSAMod5,index3PSAMod5) = 3;
index7aPSAMod5 = GammaBarPSAMod5;
index7bPSAMod5 = GammaBarPSAMod5;
index21aPSAMod5 = index3PSAMod5;
index21bPSAMod5 = index3PSAMod5;
index21cPSAMod5 = GammaBarPSAMod5;

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

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

ZPSAMod7:=toMod7M(ZPSA);;
BPSAMod7:=toMod7M(BPSA);;
CPSAMod7:=toMod7M(CPSA);;

GammaBarPSAMod7:=Group(ZPSAMod7,BPSAMod7,CPSAMod7);;
FGtoPSAMod7:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod7,
  [Zf,Bf,Cf],[ZPSAMod7,BPSAMod7,CPSAMod7]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod7));
	
#Size(GammaBarPSAMod7) = 5647152;
5647152 = 336*7^5;

Mod7H1:=NormElem(GammaBarPSAMod7,7);
Size(Mod7H1)=7^5;
StructureDescription(Mod7H1)="C7 x C7 x C7 x C7 x C7";
Mod7ASA1:=AbelianSubfactorAction(GammaBarPSAMod7,Mod7H1,Group(One(Mod7H1)));
Mod7Q1:=Image(Mod7ASA1[1]);
Size(Mod7Q1)*Size(Mod7H1) = Size(GammaBarPSAMod7);
IdSmallGroup(Mod7Q1) = IdSmallGroup(PGL(2,7));

#CSGammaBarPSAMod7:=CompositionSeries(GammaBarPSAMod7);

#StructureDescription(GammaBarPSAMod7/CSGammaBarPSAMod7[3])
#  = "PSL(3,2) : C2";
#StructureDescription(PGL(2,7)) = "PSL(3,2) : C2";
#Size(PGL(2,7)) = 336;
#StructureDescription(CSGammaBarPSAMod7[3]) = "C7 x C7 x C7 x C7 x C7";

#ChSGammaBarPSAMod7:=ChiefSeries(GammaBarPSAMod7);
#List(ChSGammaBarPSAMod7,h->Index(GammaBarPSAMod7,h))
#  = [ 1, 2, 336, 5647152 ];

#PSAMod7Hom:=NaturalHomomorphismByNormalSubgroup(
#  GammaBarPSAMod7,ChSGammaBarPSAMod7[3]);;
#StructureDescription(Group(
#  List(GeneratorsOfGroup(index21cPSAMod7),x->x^PSAMod7Hom)
#)) = "D16";

index3PSAMod7:=Image(FGtoPSAMod7,index3FG);
index7aPSAMod7:=Image(FGtoPSAMod7,index7aFG);
index7bPSAMod7:=Image(FGtoPSAMod7,index7bFG);
index21aPSAMod7:=Image(FGtoPSAMod7,index21aFG);
index21bPSAMod7:=Image(FGtoPSAMod7,index21bFG);
index21cPSAMod7:=Image(FGtoPSAMod7,index21cFG);

index3PSAMod7 = GammaBarPSAMod7;
index7aPSAMod7 = GammaBarPSAMod7;
index7bPSAMod7 = GammaBarPSAMod7;
index21aPSAMod7 = GammaBarPSAMod7;
index21bPSAMod7 = GammaBarPSAMod7;
Index(GammaBarPSAMod7,index21cPSAMod7) = 21;

#######
##
## Do calculations $\mod 49$
##
#######
#
#toMod49M:=mtx->fOnM(x->ZmodnZObj(x,49),mtx);
#
##GammaBarPSAMod49:=Group(List(
##[ [ [ 1, 47, 1, 0, 0, 0, 1, 48 ], [ 48, 48, 1, 0, 0, 0, 1, 0 ], 
##      [ 47, 45, 3, 0, 0, 0, 2, 48 ], [ 0, 0, 0, 1, 0, 0, 0, 0 ], 
##      [ 21, 42, 42, 3, 2, 5, 8, 46 ], [ 35, 0, 7, 47, 48, 46, 46, 1 ], 
##      [ 0, 0, 0, 0, 0, 0, 1, 0 ], [ 7, 42, 0, 1, 1, 2, 5, 46 ] ], 
##  [ [ 2, 19, 12, 46, 5, 4, 18, 39 ], [ 31, 37, 23, 43, 47, 38, 0, 41 ], 
##      [ 37, 48, 35, 40, 5, 45, 24, 29 ], [ 47, 14, 8, 4, 43, 36, 32, 46 ], 
##      [ 29, 28, 45, 46, 19, 33, 10, 36 ], [ 24, 3, 9, 40, 47, 43, 46, 4 ], 
##      [ 34, 7, 25, 0, 41, 27, 30, 40 ], [ 17, 40, 23, 0, 9, 6, 32, 25 ] ], 
##  [ [ 40, 0, 3, 0, 0, 48, 47, 1 ], [ 12, 30, 44, 9, 8, 15, 15, 45 ], 
##      [ 30, 42, 12, 0, 1, 47, 47, 48 ], [ 20, 33, 37, 11, 8, 17, 16, 46 ], 
##      [ 4, 15, 34, 39, 30, 22, 3, 7 ], [ 9, 18, 42, 25, 32, 7, 18, 45 ], 
##      [ 10, 34, 43, 9, 7, 14, 12, 47 ], [ 21, 7, 2, 1, 0, 0, 41, 8 ] ] ]
##,mtx->List(mtx,row->List(row,x->ZmodnZObj(x,49)))));
#
#ZPSAMod49:=toMod49M(ZPSA);;
#BPSAMod49:=toMod49M(BPSA);;
#CPSAMod49:=toMod49M(CPSA);;
#
#GammaBarPSAMod49:=Group(ZPSAMod49,BPSAMod49,CPSAMod49);;
#FGtoPSAMod49:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod49,
#  [Zf,Bf,Cf],[ZPSAMod49,BPSAMod49,CPSAMod49]);;
#ForAll(RelnList,x->IsOne(x^FGtoPSAMod49));
#	
#Mod49H1:=NormElem(GammaBarPSAMod49,7);
#Size(Mod49H1)=7^5;
#Mod49H1LAL:=LinearActionLayer(
#    GammaBarPSAMod49,GeneratorsOfGroup(GammaBarPSAMod49),Pcgs(Mod49H1));
#Mod49H1Q1:=Group(Mod49H1LAL);
#IdSmallGroup(Mod49H1Q1) = IdSmallGroup(PGL(2,7));
#
#MTXMod49H1:=GModuleByMats(Mod49H1LAL,GF(7));
#MTX.IsAbsolutelyIrreducible(MTXMod49H1);
#
#index3PSAMod49:=Image(FGtoPSAMod49,index3FG);
#index7aPSAMod49:=Image(FGtoPSAMod49,index7aFG);
#index7bPSAMod49:=Image(FGtoPSAMod49,index7bFG);
#index21aPSAMod49:=Image(FGtoPSAMod49,index21aFG);
#index21bPSAMod49:=Image(FGtoPSAMod49,index21bFG);
#index21cPSAMod49:=Image(FGtoPSAMod49,index21cFG);
#
#index3PSAMod49 = GammaBarPSAMod49;
#index7aPSAMod49 = GammaBarPSAMod49;
#index7bPSAMod49 = GammaBarPSAMod49;
#index21aPSAMod49 = GammaBarPSAMod49;
#index21bPSAMod49 = GammaBarPSAMod49;
#Index(GammaBarPSAMod49,index21cPSAMod49) = 21;

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

toMod11:=x->x*One(GF(11));
toMod11M:=mtx->fOnM(toMod11,mtx);

ZPSAMod11:=toMod11M(ZPSA);;
BPSAMod11:=toMod11M(BPSA);;
CPSAMod11:=toMod11M(CPSA);;

GammaBarPSAMod11:=Group(ZPSAMod11,BPSAMod11,CPSAMod11);;
FGtoPSAMod11:=GroupHomomorphismByImages(FreeGp,GammaBarPSAMod11,
  [Zf,Bf,Cf],[ZPSAMod11,BPSAMod11,CPSAMod11]);;
ForAll(RelnList,x->IsOne(x^FGtoPSAMod11));
	
#IsSimple(GammaBarPSAMod11);
#CSGammaBarPSAMod11:=CompositionSeries(GammaBarPSAMod11);
#Size(GammaBarPSAMod11) = 212427600;
#Size(PSL(3,11)) = 212427600;
#StructureDescription(GammaBarPSAMod11) = "PSL(3,11)";

index3PSAMod11:=Image(FGtoPSAMod11,index3FG);
index7aPSAMod11:=Image(FGtoPSAMod11,index7aFG);
index7bPSAMod11:=Image(FGtoPSAMod11,index7bFG);
index21aPSAMod11:=Image(FGtoPSAMod11,index21aFG);
index21bPSAMod11:=Image(FGtoPSAMod11,index21bFG);
index21cPSAMod11:=Image(FGtoPSAMod11,index21cFG);

index3PSAMod11 = GammaBarPSAMod11;
index7aPSAMod11 = GammaBarPSAMod11;
index7bPSAMod11 = GammaBarPSAMod11;
index21aPSAMod11 = GammaBarPSAMod11;
index21bPSAMod11 = GammaBarPSAMod11;
index21cPSAMod11 = GammaBarPSAMod11;

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

# (a=7,p=2,\emptyset)
AbelianInvariants(GammaBarFP) = [2,3];
AbelianInvariants(GammaBarPSAMod2) = [3];
AbelianInvariants(GammaBarPSAMod7) = [2];

# (a=7,p=2,\emptyset,D_3)
AbelianInvariants(index3FP) = [2,7];
AbelianInvariants(index3PSAMod2) = [7];
AbelianInvariants(index3PSAMod7) = [2];

# (a=7,p=2,\emptyset,X_7)
AbelianInvariants(index7aFP) = [2,3];
AbelianInvariants(index7aPSAMod2) = [3];
AbelianInvariants(index7aPSAMod7) = [2];

# (a=7,p=2,\emptyset,2_7)
AbelianInvariants(index7bFP) = [2,2,3];
AbelianInvariants(index7bPSAMod2) = [2,3];
AbelianInvariants(index7bPSAMod7) = [2];

# (a=7,p=2,\emptyset,D_3 X_7)
AbelianInvariants(index21aFP) = [2,7];
AbelianInvariants(index21aPSAMod2) = [7];
AbelianInvariants(index21aPSAMod7) = [2];

# (a=7,p=2,\emptyset,D_3 2_7)
AbelianInvariants(index21bFP) = [2,2,2,2];
AbelianInvariants(index21bPSAMod2) = [2,2,2];
AbelianInvariants(index21bPSAMod7) = [2];

# (a=7,p=2,\emptyset,7_{21})
AbelianInvariants(index21cFP) = [2,2,3,7];
AbelianInvariants(index21cPSAMod2) = [3];
AbelianInvariants(index21cPSAMod7) = [2,2,7];
