Contact Us!
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. Commercial Alternative to JupyterHub.

| Download

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

Views: 513636


#########################################################
#########################################################
CohomologicalData:=function(arg)
local G,N,file, alpha, alpha1, A, gens, gensletters, gensletters1, gensdegrees,
d, tmp, tmpdir, x, relabel, relabeltwo, pres, rels, r, s,i, k, w; 

G:=arg[1];
N:=arg[2];
if Length(arg)=2 then
tmpdir := DirectoryTemporary();;
file:=Filename( tmpdir , "cdata.txt" );
else
file:=arg[3];
fi;

AppendTo(file,"Group order: ", IdGroup(G)[1],"\n");
AppendTo(file,"Group number: ",IdGroup(G)[2],"\n");
AppendTo(file,"Group description: ",StructureDescription(G),"\n\n");

alpha:=
['1','a','b','c','d','e','f','g','h','p','q','r','s','t','u','v','w','x'];
alpha1:=List(alpha,i->[i]);

A:=ModPCohomologyRing(G,N);
gens:=ModPRingGenerators(A);
N:=Maximum(List(gens,A!.degree));
if N=2^Log(N,2) then N:=N-1; fi;
N:=2^Log(N,2); 


A:=Mod2SteenrodAlgebra(G,N);
gens:=ModPRingGenerators(A);
gensletters:=alpha{[1..Length(gens)]};
gensletters1:=alpha1{[1..Length(gens)]};

AppendTo(file,"Cohomology generators\n");
gensdegrees:=List(gens,A!.degree);
for d in SSortedList(gensdegrees) do
if d>0 then
AppendTo(file, "Degree ",d,": ");
tmp:=Filtered([1..Length(gens)],i->A!.degree(gens[i])=d);
tmp:=gensletters1{tmp};
for x in tmp do
if Position(tmp,x)<Length(tmp) then
AppendTo(file,x,", ");
else
AppendTo(file,x,"\n");
fi;
od;
fi;
od;
AppendTo(file,"\n");


##################################
##################################
relabel:=function(ss) 
local i, s, us;
s:=String(ss);
s:=List(s,i->i);
s:=Filtered(s,i->not i='x');
Add(s,' ');
us:=Filtered([1..Length(s)],i->s[i]='_');
for i in us do
s[i+1]:=gensletters[1+EvalString([s[i+1]])];
if not s[i+2] in ['^','+','*'] then s[i+2]:=' '; fi;
od;
s:=Filtered(s,i->not i='_');
s:=Filtered(s,i->not i=' ');
if Length(s)=0 then return 0; fi;
return s;
end;
##################################
##################################

##################################
##################################
relabeltwo:=function(ss)
local i, s, us, t, ii, l;
s:=String(ss);
s:=List(s,i->i);
s:=Filtered(s,i->not i='v');
us:=Filtered([1..Length(s)],i->s[i]='.');
Add(s,' ');
for i in us do
ii:=i+1;
l:=[];
while not s[ii] in ['^','+','*', ' '] do
Add(l,s[ii]);
s[ii]:=' ';
ii:=ii+1;
od;
t:=Basis(A)[EvalString(l)];
s[i+1]:=gensletters[Position(gens,t)];
#if not s[i+2] in ['^','+','*'] then s[i+2]:=' '; fi;
od;
s:=Filtered(s,i->not i='.');
s:=Filtered(s,i->not i=' ');
if Length(s)=0 then return 0; fi;
return s;
end;
##################################
##################################


AppendTo(file,"Cohomology relations\n");
pres:=Mod2CohomologyRingPresentation(A);
rels:=pres!.relations;
for r in [1..Length(rels)] do
s:=relabel(rels[r]);
AppendTo(file,r,": ",s,"\n");
od;
AppendTo(file,"\n");

AppendTo(file,"Steenrod squares\n");
for i in [2..Length(gens)] do
for k in [1..A!.degree(gens[i])-1] do
if k=2^Log(k,2)then
AppendTo(file,"Sq^",k,"(",[gensletters[i]],")=");
w:=Sq(A,k,gens[i]);
if IsZero(w) then AppendTo(file,0,"\n");  
else
w:=PrintAlgebraWordAsPolynomial(A,w,1);
w:=relabeltwo(w);
AppendTo(file,w,"\n");
fi;
fi;
od;
od;

Exec(Concatenation("display ",file));  
if Length(arg)=2 then RemoveFile(file); fi;
end;
#########################################################
#########################################################