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
|
#############################################
InstallMethod(MooreComplex,
"Moore complex of simplicial group",
[IsHapSimplicialGroup],
function(N)
local
ListG,ListB,
ListGroups,Boundaries,BoundariesList,
n,i,j,
G,H,
phi;
Boundaries:=[];
ListGroups:=[];
if not IsHapSimplicialGroup(N) then
Print("This function must be applied to a simplicial group.\n");
return fail;
fi;
ListG:=N!.groupsList;
ListB:=N!.boundariesList;
n:=EvaluateProperty(N,"length");
H:=ListG(0);
Add(ListGroups,H);
for i in [1..n] do
G:=ListG(i);
for j in [1..i] do
G:=Intersection(G,Kernel(ListB(i,j)));
od;
Add(ListGroups,G);
phi:=GroupHomomorphismByImages(G,H,GeneratorsOfGroup(G),List(GeneratorsOfGroup(G),g->Image(ListB(i,0),g)));
Add(Boundaries,phi);
H:=G;
od;
Boundaries:=List(Boundaries,h->GOuterGroup(h));
#################
BoundariesList:=function(i)
return Boundaries[i];
end;
######################
return Objectify(HapGComplex,
rec(
boundary:=BoundariesList,
properties:=[["length",n]]
));
end);
###################################
###################################
###################################
###################################
InstallMethod(Homology,
"Homology of a G Complex",
[IsHapGComplex,IsInt],
function(C,n) local phi1,phi2;
if n>0 then
##############
phi1:=C!.boundary(n);
phi2:=C!.boundary(n+1);
return
AbelianInvariants(
Kernel( phi1!.Mapping )
/
Image( phi2!.Mapping )
);
##############
fi;
if n=0 then
##############
phi2:=C!.boundary(n+1);
return
AbelianInvariants(
Range( phi2!.Mapping )
/
Image( phi2!.Mapping )
);
##############
fi;
end);
############################
|