GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
DeclareGlobalFunction("TorsionSubcomplex"); DeclareGlobalFunction("DisplayAvailableCellComplexes"); DeclareGlobalFunction("VisualizeTorsionSkeleton"); DeclareGlobalFunction("ReduceTorsionSubcomplex"); DeclareGlobalFunction("GetTorsionSubcomplex"); DeclareGlobalFunction("IsPNormal"); DeclareGlobalFunction("RigidFacetsSubdivision"); DeclareGlobalFunction("EquivariantEulerCharacteristic"); DeclareGlobalFunction("CountingCellsOfACellComplex"); DeclareGlobalFunction("CountingControlledSubdividedCells"); DeclareGlobalFunction("CountingBaryCentricSubdividedCells"); DeclareGlobalFunction("CountingCellsOfBaryCentricSubdivision"); DeclareGlobalFunction("GroupHomomorphismToMatrix"); DeclareGlobalFunction("EquivariantSpectralSequencePage"); DeclareGlobalFunction("ExportHapCellcomplexToDisk"); ##################################################################### DeclareCategory("IsHapTorsionSubcomplex",IsObject); DeclareRepresentation( "IsHapTorsionSubcomplexRep", IsComponentObjectRep, ["torsion", "groupname", "reducedTorsionCells", "orginalCelldata"]); HapTorsionSubcomplexFamily:=NewFamily( "HapTorsionSubcomplexFamily", IsHapTorsionSubcomplex, IsHapTorsionSubcomplex); HapTorsionSubcomplex:=NewType(HapTorsionSubcomplexFamily, IsHapTorsionSubcomplexRep); InstallMethod( ViewObj, "for HapTorsionSubcomplex", [IsHapTorsionSubcomplex], function(R) if not R!.groupname = fail then Print("Reduced ",R!.torsion,"-torsion subcomplex of the given cell complex for the group ",R!.groupname); else Print("Reduced ",R!.torsion,"-torsion subcomplex of the given cell complex for the given group"); fi; end); InstallMethod( PrintObj, "for HapTorsionSubcomplex", [IsHapTorsionSubcomplex], function(R) local N, reducedTorsionCells,J,n,j,G,B,b, ReduceModP, p, celldata; Print("Reduced ",R!.torsion,"-torsion subcomplex of the given cell complex for the group ",R!.groupname); reducedTorsionCells:=R!.torsionCells; celldata:=R!.celldata; p:=R!.torsion; ######### ReduceModP := function( G, p) local K, h, H, Q, P; Q := G; K := ConjugacyClassesSubgroups(G); for h in K do if Size(h)=1 then H := Representative(h); if Size(H) > 1 then if Gcd(Size(H),p) = 1 then # We pass to the quotient Q in the extension # 1 -> H -> G -> Q -> 1, # because H has trivial mod p cohomology. # Our loop ends up using the normal subgroup H of maximal size, # because the list K is ordered from small to large. Q := Image( NaturalHomomorphismByNormalSubgroup( G,H )); fi; fi; fi; od; P:=Q; if IsPNormal(Q,p) then P:=Normalizer(Q,Center(SylowSubgroup(Q,p)));fi; return P; end; ######### for N in [1..Size(reducedTorsionCells)] do for J in reducedTorsionCells[N] do n := J[1]; j := J[2]; G := celldata[n+1][j]!.TheMatrixStab;; Print("\n",n,"-cell number ",j,": ",IdSmallGroup(G)," is controlled by ",IdSmallGroup(ReduceModP(G,p))," and has boundary "); B := celldata[n+1][j]!.BoundaryImage!.ListIFace; for b in B do G := celldata[n][b]!.TheMatrixStab;; Print(n-1,"-cell number ",b,": ",IdSmallGroup(G)," is controlled by ", IdSmallGroup(ReduceModP(G,p)),"\n"); od; od; Print("\n"); od; end); ##################################################################### ##################################################################### DeclareCategory("IsHapEquivariantSpectralSequencePage",IsObject); DeclareRepresentation( "IsHapEquivariantSpectralSequencePageRep", IsComponentObjectRep, ["page", "differential", "groupname", "torsion"]); HapEquivariantSpectralSequencePageFamily:=NewFamily( "HapEquivariantSpectralSequencePageFamily", IsHapEquivariantSpectralSequencePage, IsHapEquivariantSpectralSequencePage); HapEquivariantSpectralSequencePage:=NewType(HapEquivariantSpectralSequencePageFamily, IsHapEquivariantSpectralSequencePageRep); InstallMethod( ViewObj, "for HapEquivariantSpectralSequencePage", [IsHapEquivariantSpectralSequencePage], function(R) Print("Equivariant Spectral Sequence for the group ",R!.groupname); end); InstallMethod( PrintObj, "for HapEquivariantSpectralSequencePage", [IsHapEquivariantSpectralSequencePage], function(R) Print("Equivariant Spectral Sequence for the group ",R!.groupname); end); ##################################################################### DeclareGlobalFunction("KernelOfMap"); DeclareGlobalFunction("ImageOfMap"); ##################################################################### InstallGlobalFunction(KernelOfMap, function(M) if IsTrivial(Source(M)) then return Source(M); else return Kernel(M); fi; end); ##################################################################### InstallGlobalFunction(ImageOfMap, function(M) if IsTrivial(Source(M)) then return One(Target(M)); else return Image(M); fi; end); #####################################################################