File: resGeneric.gi

package info (click to toggle)
gap-hap 1.74%2Bds-1
  • links: PTS
  • area: main
  • in suites: sid
  • size: 58,664 kB
  • sloc: xml: 16,678; sh: 197; javascript: 155; makefile: 121; ansic: 47; perl: 24
file content (141 lines) | stat: -rw-r--r-- 3,486 bytes parent folder | download | duplicates (2)
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);
#####################################################################
#####################################################################