CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418386
###############################################
###############################################
InstallGlobalFunction(HomToGModule_hom,
function(F,A)
local R,C,grps,maps, properties, HomF, lnth, n, B,S, gensS, 
      pid, imS, hom, fn, act, gouts;

R:=Source(F);
C:=HomToGModule(R,A);
lnth:=EvaluateProperty(R,"length");

################################
grps:=[];gouts:=[];
for n in [0..lnth-1] do
B:=C!.boundary(n);
if n=0 then S:=Source(B); 
gouts[1]:=S;
grps[1]:=[S!.ActedGroup,S!.OuterAction]; fi;
S:=Target(B); 
gouts[n+2]:=S;
grps[n+2]:=[S!.ActedGroup,S!.OuterAction];
od;
################################

pid:=Position(R!.elts,One(R!.group));
################################
fn:=function(S,act,x,n)   ##This is a sloppy piece of code!
local w,y,i,fwrd, u;
w:=One(S);
for i in [1..R!.dimension(n)] do
fwrd:=F!.mapping([[i,pid]],n);
for y in fwrd do
u:=act(R!.elts[y[2]],x);
u:=Image(Projection(S,AbsInt(y[1])),u^SignInt(y[1]));
u:=Image(Embedding(S,i),u);
w:=u*w;
od;
od;
return w;
end;
################################

################################
maps:=[];
for n in [1..Length(grps)-1] do
S:=grps[n][1]; act:=grps[n][2];
gensS:=GeneratorsOfGroup(S);
imS:=List(gensS,x->fn(S,act,x,n-1));
hom:=GroupHomomorphismByImages(S,S,gensS,imS);
hom:=GOuterGroupHomomorphism(gouts[n],gouts[n],hom);
maps[n]:=hom;
od;
################################

properties:=[["length",lnth],["type","GcomplexMap"]];

HomF:=rec(source:=C,target:=C,map:=maps,properties:=properties);

return Objectify(HapGComplexMap,HomF);
end);
###############################################
###############################################

###############################################
###############################################
InstallOtherMethod(HomToGModule ,
        "for GOuterGroup endomorphisms",
        [IsHapEquivariantChainMap, IsGOuterGroup],
    function(F,A)
    return HomToGModule_hom(F,A);
end);
###############################################
###############################################

###############################################
###############################################
InstallOtherMethod(Source ,
        "for GComplex map",
        [IsHapGComplexMap],
    function(F)
    return F!.source;
end);
###############################################
###############################################

###############################################
###############################################
InstallOtherMethod(Target ,
        "for GComplex map",
        [IsHapGComplexMap],
    function(F)
    return F!.target;
end);
###############################################
###############################################



###############################################
###############################################
InstallGlobalFunction(CohomologyModule_Gmap,
function(F,n)
local C,D,HC,HD,Hom,hom,NatC, NatD, natc, natd, ind, c, d, imc, gensc,x;

C:=Source(F);
D:=Target(F);
HC:=CohomologyModule(C,n);
HD:=CohomologyModule(D,n);
Hom:=F!.map[n+1];
hom:=Hom!.Mapping;
NatC:=HC!.nat;
NatD:=HD!.nat;
natc:=NatC!.Mapping;
natd:=NatD!.Mapping;

c:=Target(natc);
d:=Target(natd);
gensc:=GeneratorsOfGroup(c);
imc:=[];

for x in gensc do
Add(imc,Image(natd,Image(hom,PreImagesRepresentative(natc,x)))  );
od;

ind:=GroupHomomorphismByImages(c,d,gensc,imc);

return GOuterGroupHomomorphism(HC,HD,ind);
end);
###############################################
###############################################

###############################################
###############################################
InstallOtherMethod(CohomologyModule ,
        "for GComplex maps",
        [IsHapGComplexMap, IsInt],
    function(F,n)
    return CohomologyModule_Gmap(F,n);
end);
###############################################
###############################################


###############################################
###############################################
InstallGlobalFunction(CommonEndomorphisms,
function(G, L)
local aut, L1, G1, GisoG1, G1isoG, i;

#Inputs a group G and a list of endomorphisms a_i:Hi-->Hi
#where  H1, H2, ... are all isomorphic to G.
#Returns the corresponding list of endomorphisms a_i:G-->G

L1:=[];
for i in [1..Length(L)] do
G1:=Source(L[i]);
GisoG1:=IsomorphismGroups(G,G1);
G1isoG:=InverseGeneralMapping(GisoG1);
Add(L1,GisoG1*L[i]*G1isoG);
od;

return L1;

end);
###############################################
###############################################

###############################################
###############################################
InstallGlobalFunction(CohomologyModule_AsAutModule,
function(C,aut,n)
local R,A, gens, gens1, H, CH, AUT, hom; 

if not IsBound(C!.resolution) then
Print("No resolution is associated to the cocomplex.\n");
return fail;
fi;

CH:=CohomologyModule(C,n);
H:=CH!.ActedGroup;;

R:=C!.resolution;
A:=C!.module;
gens1:=SmallGeneratingSet(aut);;
gens:=List(gens1,h-> EquivariantChainMap(R,R,h));;
gens:=List(gens,F->HomToGModule(F,A));;
gens:=List(gens,a->CohomologyModule(a,n));;
gens:=List(gens,x->x!.Mapping);;
gens:=CommonEndomorphisms(H,gens);;
AUT:=Group(gens);;

hom:=GroupHomomorphismByImages(aut,AUT,gens1, List(gens,x->x^-1));

CH!.ActingGroup:=aut;

#############################
CH!.OuterAction:=function(g,a);
return Image(Image(hom,g),a);
end;
#############################

return CH; 
end);
###############################################
###############################################

###############################################
###############################################
InstallOtherMethod(CohomologyModule ,
        "for GComplex maps",
        [IsHapGCocomplex, IsGroup, IsInt],
    function(C,aut,n)
    return CohomologyModule_AsAutModule(C, aut,n);
end);
###############################################
###############################################