1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#(C) Graham Ellis, 2005-2006
#####################################################################
#####################################################################
InstallGlobalFunction(ResolutionGenericGroup,
function(arg)
local G,N, bool, prime, L, M, GG, A, R, fn, epi, F, FhomG, AhomG, Tz,i;
#This function will try to return an efficient resolution,
#and any resolution returned will have a contracting homotopy.
G:=arg[1];
N:=arg[2];
if Length(arg)>2 then bool:=arg[3]; fi;
if Length(arg)>3 then prime :=arg[4]; fi;
####FINITE################
if Order(G)<infinity then
#Tz:=TietzeReducedResolution;
Tz:=function(R) return R; end;
if IsAbelian(G) then
return ResolutionAbelianGroup_alt(G,N); ### CHECK THIS
if IsPcpGroup(G) then return ResolutionAbelianPcpGroup(G,N);
else return ResolutionAbelianGroup(G,N); fi;
fi;
if Order(G)<64 then
return Tz(ResolutionFiniteGroup(G,N));
fi;
if IsPGroup(G) then
#return ResolutionNormalSeries(UpperCentralSeries(G),N);
return ResolutionNormalSeries(BigStepLCS(G,4),N); #OPTIMIZE!!!
#return ResolutionNormalSeries(BigStepUCS(G,8),N);
fi;
L:=LowerCentralSeries(G);
if Maximum(List(L,Order)) <1000 then
if Length(L)>1 then
return ResolutionNormalSeries(LowerCentralSeries(G),N);
else
return ResolutionFiniteGroup(G,N);
fi;
fi;
if IsNilpotent(G) then
return ResolutionNilpotentGroup(G,N);
fi;
if IsSolvable(G) then
return ResolutionSubnormalSeries(CompositionSeries(G),N);
fi;
#And is all else fails on a finite group:
return Tz(ResolutionFiniteGroup(G,N));
fi;
####FINITE DONE###########
####PCP GROUPS############
if IsPcpGroup(G) then
if IsAbelian(G) then
return ResolutionAbelianPcpGroup(G,N);
fi;
if IsNilpotent(G) then
return ResolutionNilpotentGroup(G,N);
fi;
if IsAlmostCrystallographic(G) then
return ResolutionAlmostCrystalGroup(G,N);
fi;
fi;
####PCP DONE##############
####MATRIX GROUP##########
if IsMatrixGroup(G) then
###ABELIAN#####
if IsAbelian(G) then
######
fn:=function(g)
if Order(g)=infinity then return 0;
else return Order(g);
fi;
end;
######
L:=List(GeneratorsOfGroup(G),x->x);
A:=AbelianPcpGroup(Length(L),List(L,fn));
R:=ResolutionAbelianPcpGroup(A,N);
epi:=EpimorphismFromFreeGroup(A);
F:=Source(epi);
FhomG:=GroupHomomorphismByImagesNC(F,G,
GeneratorsOfGroup(F),
GeneratorsOfGroup(G));
AhomG:=GroupHomomorphismByFunction(A,G,x->
Image(FhomG,PreImagesRepresentative(epi,x)));
R!.group:=G;
R!.elts:=List(R!.elts,x->Image(AhomG,x));
#if IsBound(G!.gname) then
#if G!.gname="sl2inf" then
#for i in [-100..100] do
#Add(R!.elts,R!.elts[3]^i);
#Add(R!.elts,-R!.elts[3]^i);
#od;
#fi;fi;
return R;
fi;
####ABELIAN DONE#########
fi;
####MATRIX DONE###########
return fail;
end);
#####################################################################
#####################################################################
#####################################################################
#####################################################################
InstallGlobalFunction(ResolutionArithmeticGroup,
function(string, N)
local C, R;
C:=ContractibleGcomplex(string);
R:=FreeGResolution(C,N);
return R;
end);
#####################################################################
#####################################################################
|