File: integralGens.gi

package info (click to toggle)
gap-hap 1.73%2Bds-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 58,508 kB
  • sloc: xml: 16,467; sh: 197; javascript: 155; makefile: 121; ansic: 47; perl: 24
file content (69 lines) | stat: -rw-r--r-- 1,537 bytes parent folder | download | duplicates (3)
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
#(C) Graham Ellis, 2005-2006

#####################################################################
InstallGlobalFunction(IntegralRingGenerators,
function(R,n)
local
		Gens, Cups, cupProd, CB, CohomologyBasis, TR, 
		BasisP, BasisQ, SmithRecord,
		i, p, q, u, v, ln;

TR:=HomToIntegers(R);
if Length(Cohomology(TR,n))=0 then return []; fi;

#####################################################################
CohomologyBasis:=function(Torsion)
local i, v, Basis;
Basis:=[];
for i in [1..Length(Torsion)] do
v:=List([1..Length(Torsion)], j->0);
v[i]:=Torsion[i];
Append(Basis, [v]);
od;
return Basis;
end;
#####################################################################

Cups:=CohomologyBasis(Cohomology(TR,n));

CB:=[];
for p in [1..n] do
CB[p]:=CR_CocyclesAndCoboundaries(R,p,true);
od;

for p in [1..(n-1)] do
q:=n-p;
ln:=Length(Cohomology(TR,p));
BasisP:=CohomologyBasis(List([1..ln],i->1));
ln:=Length(Cohomology(TR,q));
BasisQ:=CohomologyBasis(List([1..ln],i->1));

for u in BasisP do
for v in BasisQ do
Append(Cups,
[ IntegralCupProduct(R,u,v,p,q,CB[p],CB[q],CB[n]) ]);

od;
od;

od;

SmithRecord:=SmithNormalFormIntegerMatTransforms(Cups);

Gens:=[];
for i in [1..Length(Cohomology(TR,n))] do
v:= SmithRecord.normal[i];
if v[i]>1 or v[i]=0 then 
v[i]:=1;
u:=TransposedMat(SmithRecord.coltrans)*v;
Append(Gens,[u]); fi;

od;

return Gens;
end);
#####################################################################

IntegralCohomologyGenerators:=IntegralRingGenerators;
MakeReadOnlyGlobal("IntegralCohomologyGenerators");