Quelle chap1.html
Sprache: HTML
|
|
| products/sources/formale Sprachen/GAP/pkg/hap/tutorial/chap1.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (HAP commands) - Chapter 1: Simplicial complexes & CW complexes</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap1" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chap12.html">12</a> <a href="chap13.html">13</a> <a href="chap14.html">14</a> <a href="chap15.html">15</a> <a href="chap16.html">16</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap0.html">[Previous Chapter]</a> <a href="chap2.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap1_mj.html">[MathJax on]</a></p>
<p><a id="X7E5EA9587D4BCFB4" name="X7E5EA9587D4BCFB4"></a></p>
<div class="ChapSects"><a href="chap1.html#X7E5EA9587D4BCFB4">1 <span class="Heading">Simplicial complexes & CW complexes</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X85691C6980034524">1.1 <span class="Heading">The Klein bottle as a simplicial complex</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7B8F88487B1B766C">1.2 <span class="Heading">Other simplicial surfaces</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X80A72C347D99A58E">1.3 <span class="Heading">The Quillen complex</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7C4A2B8B79950232">1.4 <span class="Heading">The Quillen complex as a reduced CW-complex</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X782AAB84799E3C44">1.5 <span class="Heading">Simple homotopy equivalences</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X80474C7885AC1578">1.6 <span class="Heading">Cellular simplifications preserving homeomorphism type</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7A15484C7E680AC9">1.7 <span class="Heading">Constructing a CW-structure on a knot complement</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X829793717FB6DDCE">1.8 <span class="Heading">Constructing a regular CW-complex by attaching cells</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7B7354E68025FC92">1.9 <span class="Heading">Constructing a regular CW-complex from its face lattice</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X823FA6A9828FF473">1.10 <span class="Heading">Cup products</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7F9B01CF7EE1D2FC">1.11 <span class="Heading">Intersection forms of <span class="SimpleMath">4</span>-manifolds</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X80B6849C835B7F19">1.12 <span class="Heading">Cohomology Rings</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X83035DEC7C9659C6">1.13 <span class="Heading">Bockstein homomorphism</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X87135D067B6CDEEC">1.14 <span class="Heading">Diagonal maps on associahedra and other polytopes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X8771FF2885105154">1.15 <span class="Heading">CW maps and induced homomorphisms</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X853D6B247D0E18DB">1.16 <span class="Heading">Constructing a simplicial complex from a regular CW-complex</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7900FD197F175551">1.17 <span class="Heading">Some limitations to representing spaces as regular CW complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X85A579217DCB6CC8">1.18 <span class="Heading">Equivariant CW complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X86881717878ADCD6">1.19 <span class="Heading">Orbifolds and classifying spaces</span></a>
</span>
</div>
</div>
<h3>1 <span class="Heading">Simplicial complexes & CW complexes</span></h3>
<p><a id="X85691C6980034524" name="X85691C6980034524"></a></p>
<h4>1.1 <span class="Heading">The Klein bottle as a simplicial complex</span></h4>
<p><img src="images/klein.jpg" align="center" width="250" alt="Klein bottle"/> <img src="images/kleingrid.jpg" align="center" width="250"/ alt="simplicial Klein bottle"/></p>
<p>The following example constructs the Klein bottle as a simplicial complex <span class="SimpleMath">K</span> on <span class="SimpleMath">9</span> vertices, and then constructs the cellular chain complex <span class="SimpleMath">C_∗=C_∗(K)</span> from which the integral homology groups <span class="SimpleMath">H_1(K, Z)= Z_2⊕ Z</span>, <span class="SimpleMath">H_2(K, Z)=0</span> are computed. The chain complex <span class="SimpleMath">D_∗=C_∗ ⊗_ Z Z_2</span> is also constructed and used to compute the mod-<span class="SimpleMath">2</span> homology vector spaces <span class="SimpleMath">H_1(K, Z_2)= Z_2⊕ Z_2</span>, <span class="SimpleMath">H_2(K, Z)= Z_2</span>. Finally, a presentation <span class="SimpleMath">π_1(K) = ⟨ x,y : yxy^-1x⟩</span> is computed for the fundamental group of <span class="SimpleMath">K</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">2simplices:=</span>
<span class="GAPprompt">></span> <span class="GAPinput">[[1,2,5], [2,5,8], [2,3,8], [3,8,9], [1,3,9], [1,4,9],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [4,5,8], [4,6,8], [6,8,9], [6,7,9], [4,7,9], [4,5,7],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [1,4,6], [1,2,6], [2,6,7], [2,3,7], [3,5,7], [1,3,5]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=SimplicialComplex(2simplices);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">C:=ChainComplex(K);</span>
Chain complex of length 2 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(C,1);</span>
[ 2, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(C,2);</span>
[ ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D:=TensorWithIntegersModP(C,2);</span>
Chain complex of length 2 in characteristic 2 .
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(D,1);</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(D,2);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=FundamentalGroup(K);</span>
<fp group of size infinity on the generators [ f1, f2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelatorsOfFpGroup(G);</span>
[ f2*f1*f2^-1*f1 ]
</pre></div>
<p><a id="X7B8F88487B1B766C" name="X7B8F88487B1B766C"></a></p>
<h4>1.2 <span class="Heading">Other simplicial surfaces</span></h4>
<p>The following example constructs the real projective plane <span class="SimpleMath">P</span>, the Klein bottle <span class="SimpleMath">K</span> and the torus <span class="SimpleMath">T</span> as simplicial complexes, using the surface genus <span class="SimpleMath">g</span> as input in the oriented case and <span class="SimpleMath">-g</span> as input in the unoriented cases. It then confirms that the connected sums <span class="SimpleMath">M=K#P</span> and <span class="SimpleMath">N=T#P</span> have the same integral homology.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">P:=ClosedSurface(-1);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ClosedSurface(-2);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">T:=ClosedSurface(1);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=ConnectedSum(K,P);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">N:=ConnectedSum(T,P);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(M,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(N,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(M,1);</span>
[ 2, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(N,1);</span>
[ 2, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(M,2);</span>
[ ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(N,2);</span>
[ ]
</pre></div>
<p><a id="X80A72C347D99A58E" name="X80A72C347D99A58E"></a></p>
<h4>1.3 <span class="Heading">The Quillen complex</span></h4>
<p>Given a group <span class="SimpleMath">G</span> one can consider the partially ordered set <span class="SimpleMath">cal A_p(G)</span> of all non-trivial elementary abelian <span class="SimpleMath">p</span>-subgroups of <span class="SimpleMath">G</span>, the partial order being set inclusion. The order complex <span class="SimpleMath">∆cal A_p(G)</span> is a simplicial complex which is called the <em>Quillen complex </em>.</p>
<p>The following example constructs the Quillen complex <span class="SimpleMath">∆cal A_2(S_7)</span> for the symmetric group of degree <span class="SimpleMath">7</span> and <span class="SimpleMath">p=2</span>. This simplicial complex involves <span class="SimpleMath">11291</span> simplices, of which <span class="SimpleMath">4410</span> are <span class="SimpleMath">2</span>-simplices..</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=QuillenComplex(SymmetricGroup(7),2);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(K);</span>
11291
<span class="GAPprompt">gap></span> <span class="GAPinput">K!.nrSimplices(2);</span>
4410
</pre></div>
<p><a id="X7C4A2B8B79950232" name="X7C4A2B8B79950232"></a></p>
<h4>1.4 <span class="Heading">The Quillen complex as a reduced CW-complex</span></h4>
<p>Any simplicial complex <span class="SimpleMath">K</span> can be regarded as a regular CW complex. Different datatypes are used in <strong class="button">HAP</strong> for these two notions. The following continuation of the above Quillen complex example constructs a regular CW complex <span class="SimpleMath">Y</span> isomorphic to (i.e. with the same face lattice as) <span class="SimpleMath">K=∆cal A_2(S_7)</span>. An advantage to working in the category of CW complexes is that it may be possible to find a CW complex <span class="SimpleMath">X</span> homotopy equivalent to <span class="SimpleMath">Y</span> but with fewer cells than <span class="SimpleMath">Y</span>. The cellular chain complex <span class="SimpleMath">C_∗(X)</span> of such a CW complex <span class="SimpleMath">X</span> is computed by the following commands. From the number of free generators of <span class="SimpleMath">C_∗(X)</span>, which correspond to the cells of <span class="SimpleMath">X</span>, we see that there is a single <span class="SimpleMath">0</span>-cell and <span class="SimpleMath">160</span> <span class="SimpleMath">2</span>-cells. Thus the Quillen complex $$\Delta{\cal A}_2(S_7) \simeq \bigvee_{1\le i\le 160} S^2$$ has the homotopy type of a wedge of <span class="SimpleMath">160</span> <span class="SimpleMath">2</span>-spheres. This homotopy equivalence is given in <a href="chapBib.html#biBksontini">[Kso00, (15.1)]</a> where it was obtained by purely theoretical methods.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=RegularCWComplex(K);</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">C:=ChainComplex(Y);</span>
Chain complex of length 2 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">C!.dimension(0);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">C!.dimension(1);</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">C!.dimension(2);</span>
160
</pre></div>
<p><a id="X782AAB84799E3C44" name="X782AAB84799E3C44"></a></p>
<h4>1.5 <span class="Heading">Simple homotopy equivalences</span></h4>
<p>For any regular CW complex <span class="SimpleMath">Y</span> one can look for a sequence of simple homotopy collapses <span class="SimpleMath">Y↘ Y_1 ↘ Y_2 ↘ ... ↘ Y_N=X</span> with <span class="SimpleMath">X</span> a smaller, and typically non-regular, CW complex. Such a sequence of collapses can be recorded using what is now known as a <em>discrete vector field</em> on <span class="SimpleMath">Y</span>. The sequence can, for example, be used to produce a chain homotopy equivalence <span class="SimpleMath">f: C_∗ Y → C_∗ X</span> and its chain homotopy inverse <span class="SimpleMath">g: C_∗ X → C_∗ Y</span>. The function <code class="code">ChainComplex(Y)</code> returns the cellular chain complex <span class="SimpleMath">C_∗(X)</span>, wheras the function <code class="code">ChainComplexOfRegularCWComplex(Y)</code> returns the chain complex <span class="SimpleMath">C_∗(Y)</span>.</p>
<p>For the above Quillen complex <span class="SimpleMath">Y=∆cal A_2(S_7)</span> the following commands produce the chain homotopy equivalence <span class="SimpleMath">f: C_∗ Y → C_∗ X</span> and <span class="SimpleMath">g: C_∗ X → C_∗ Y</span>. The number of generators of <span class="SimpleMath">C_∗ Y</span> equals the number of cells of <span class="SimpleMath">Y</span> in each degree, and this number is listed for each degree.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=QuillenComplex(SymmetricGroup(7),2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=RegularCWComplex(K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">CY:=ChainComplexOfRegularCWComplex(Y);</span>
Chain complex of length 2 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">CX:=ChainComplex(Y);</span>
Chain complex of length 2 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">equiv:=ChainComplexEquivalenceOfRegularCWComplex(Y);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f:=equiv[1];</span>
Chain Map between complexes of length 2 .
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=equiv[2];</span>
Chain Map between complexes of length 2 .
<span class="GAPprompt">gap></span> <span class="GAPinput">CY!.dimension(0);</span>
1316
<span class="GAPprompt">gap></span> <span class="GAPinput">CY!.dimension(1);</span>
5565
<span class="GAPprompt">gap></span> <span class="GAPinput">CY!.dimension(2);</span>
4410
</pre></div>
<p><a id="X80474C7885AC1578" name="X80474C7885AC1578"></a></p>
<h4>1.6 <span class="Heading">Cellular simplifications preserving homeomorphism type</span></h4>
<p>For some purposes one might need to simplify the cell structure on a regular CW-complex <span class="SimpleMath">Y</span> so as to obtained a homeomorphic CW-complex <span class="SimpleMath">W</span> with fewer cells.</p>
<p>The following commands load a <span class="SimpleMath">4</span>-dimensional simplicial complex <span class="SimpleMath">Y</span> representing the K3 complex surface. Its simplicial structure is taken from <a href="chapBib.html#biBspreerkhuenel">[SK11]</a> and involves <span class="SimpleMath">1704</span> cells of various dimensions. The commands then convert the cell structure into that of a homeomorphic regular CW-complex <span class="SimpleMath">W</span> involving <span class="SimpleMath">774</span> cells.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=RegularCWComplex(SimplicialK3Surface());</span>
Regular CW-complex of dimension 4
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(Y);</span>
1704
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=SimplifiedComplex(Y);</span>
Regular CW-complex of dimension 4
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(W);</span>
774
</pre></div>
<p><a id="X7A15484C7E680AC9" name="X7A15484C7E680AC9"></a></p>
<h4>1.7 <span class="Heading">Constructing a CW-structure on a knot complement</span></h4>
<p>The following commands construct the complement <span class="SimpleMath">M=S^3∖ K</span> of the trefoil knot <span class="SimpleMath">K</span>. This complement is returned as a <span class="SimpleMath">3</span>-manifold <span class="SimpleMath">M</span> with regular CW-structure involving four <span class="SimpleMath">3</span>-cells.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">arc:=ArcPresentation(PureCubicalKnot(3,1));</span>
[ [ 2, 5 ], [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 1, 4 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">S:=SphericalKnotComplement(arc);</span>
Regular CW-complex of dimension 3
<span class="GAPprompt">gap></span> <span class="GAPinput">S!.nrCells(3);</span>
4
</pre></div>
<p>The following additional commands then show that <span class="SimpleMath">M</span> is homotopy equivalent to a reduced CW-complex <span class="SimpleMath">Y</span> of dimension <span class="SimpleMath">2</span> involving one <span class="SimpleMath">0</span>-cell, two <span class="SimpleMath">1</span>-cells and one <span class="SimpleMath">2</span>-cell. The fundamental group of <span class="SimpleMath">Y</span> is computed and used to calculate the Alexander polynomial of the trefoil knot.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=ContractedComplex(S);</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">CriticalCells(Y);</span>
[ [ 2, 1 ], [ 1, 9 ], [ 1, 11 ], [ 0, 22 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=FundamentalGroup(Y);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AlexanderPolynomial(G);</span>
x_1^2-x_1+1
</pre></div>
<p><a id="X829793717FB6DDCE" name="X829793717FB6DDCE"></a></p>
<h4>1.8 <span class="Heading">Constructing a regular CW-complex by attaching cells</span></h4>
<p><img src="images/cwspace2.jpg" align="center" width="250" alt="CW space"/></p>
<p>The following example creates the projective plane <span class="SimpleMath">Y</span> as a regular CW-complex, and tests that it has the correct integral homology <span class="SimpleMath">H_0(Y, Z)= Z</span>, <span class="SimpleMath">H_1(Y, Z)= Z_2</span>, <span class="SimpleMath">H_2(Y, Z)=0</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">attch:=RegularCWComplex_AttachCellDestructive;; #Function for attaching cells</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=RegularCWDiscreteSpace(3); #Discrete CW-complex consisting of points {1,2,3}</span>
Regular CW-complex of dimension 0
<span class="GAPprompt">gap></span> <span class="GAPinput">e1:=attch(Y,1,[1,2]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e2:=attch(Y,1,[1,2]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e3:=attch(Y,1,[1,3]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e4:=attch(Y,1,[1,3]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e5:=attch(Y,1,[2,3]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e6:=attch(Y,1,[2,3]);; #Attach 1-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f1:=attch(Y,2,[e1,e3,e5]);; #Attach 2-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f2:=attch(Y,2,[e2,e4,e5]);; #Attach 2-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f3:=attch(Y,2,[e2,e3,e6]);; #Attach 2-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f4:=attch(Y,2,[e1,e4,e6]);; #Attach 2-cell</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(Y,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(Y,1);</span>
[ 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(Y,2);</span>
[ ]`
</pre></div>
<p>The following example creates a 2-complex <span class="SimpleMath">K</span> corresponding to the group presentation</p>
<p><span class="SimpleMath">G=⟨ x,y,z : xyx^-1y^-1=1, yzy^-1z^-1=1, zxz^-1x^-1=1⟩</span>.</p>
<p>The complex is shown to have the correct fundamental group and homology (since it is the 2-skeleton of the 3-torus <span class="SimpleMath">S^1× S^1× S^1</span>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S1:=RegularCWSphere(1);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=WedgeSum(S1,S1,S1);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F:=FundamentalGroupWithPathReps(W);; x:=F.1;;y:=F.2;;z:=F.3;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=RegularCWComplexWithAttachedRelatorCells(W,F,Comm(x,y),Comm(y,z),Comm(x,z));</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=FundamentalGroup(K);</span>
<fp group on the generators [ f1, f2, f3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelatorsOfFpGroup(G);</span>
[ f2^-1*f1*f2*f1^-1, f1^-1*f3*f1*f3^-1, f2^-1*f3*f2*f3^-1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(K,1);</span>
[ 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(K,2);</span>
[ 0, 0, 0 ]
</pre></div>
<p><a id="X7B7354E68025FC92" name="X7B7354E68025FC92"></a></p>
<h4>1.9 <span class="Heading">Constructing a regular CW-complex from its face lattice</span></h4>
<p><img src="images/cwspace.jpg" align="center" width="250" alt="CW space"/></p>
<p>The following example creats a <span class="SimpleMath">2</span>-dimensional annulus <span class="SimpleMath">A</span> as a regular CW-complex, and testing that it has the correct integral homology <span class="SimpleMath">H_0(A, Z)= Z</span>, <span class="SimpleMath">H_1(A, Z)= Z</span>, <span class="SimpleMath">H_2(A, Z)=0</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">FL:=[];; #The face lattice</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">FL[1]:=[[1,0],[1,0],[1,0],[1,0]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">FL[2]:=[[2,1,2],[2,3,4],[2,1,4],[2,2,3],[2,1,4],[2,2,3]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">FL[3]:=[[4,1,2,3,4],[4,1,2,5,6]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">FL[4]:=[];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=RegularCWComplex(FL);</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(A,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(A,1);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(A,2);</span>
[ ]
</pre></div>
<p>Next we construct the direct product <span class="SimpleMath">Y=A× A× A× A× A</span> of five copies of the annulus. This is a <span class="SimpleMath">10</span>-dimensional CW complex involving <span class="SimpleMath">248832</span> cells. It will be homotopy equivalent <span class="SimpleMath">Y≃ X</span> to a CW complex <span class="SimpleMath">X</span> involving fewer cells. The CW complex <span class="SimpleMath">X</span> may be non-regular. We compute the cochain complex <span class="SimpleMath">D_∗ = Hom_ Z(C_∗(X), Z)</span> from which the cohomology groups <br /> <span class="SimpleMath">H^0(Y, Z)= Z</span>, <br /> <span class="SimpleMath">H^1(Y, Z)= Z^5</span>, <br /> <span class="SimpleMath">H^2(Y, Z)= Z^10</span>, <br /> <span class="SimpleMath">H^3(Y, Z)= Z^10</span>, <br /> <span class="SimpleMath">H^4(Y, Z)= Z^5</span>, <br /> <span class="SimpleMath">H^5(Y, Z)= Z</span>, <br /> <span class="SimpleMath">H^6(Y, Z)=0</span><br /> are obtained.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=DirectProduct(A,A,A,A,A);</span>
Regular CW-complex of dimension 10
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(Y);</span>
248832
<span class="GAPprompt">gap></span> <span class="GAPinput">C:=ChainComplex(Y);</span>
Chain complex of length 10 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">D:=HomToIntegers(C);</span>
Cochain complex of length 10 in characteristic 0 .
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,1);</span>
[ 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,2);</span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,3);</span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,4);</span>
[ 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,5);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(D,6);</span>
[ ]
</pre></div>
<p><a id="X823FA6A9828FF473" name="X823FA6A9828FF473"></a></p>
<h4>1.10 <span class="Heading">Cup products</span></h4>
<p><strong class="button">Strategy 1: Use geometric group theory in low dimensions.</strong></p>
<p>Continuing with the previous example, we consider the first and fifth generators <span class="SimpleMath">g_1^1, g_5^1∈ H^1(Y, Z) = Z^5</span> and establish that their cup product <span class="SimpleMath">g_1^1 ∪ g_5^1 = - g_7^2 ∈ H^2(Y, Z) = Z^10</span> is equal to minus the seventh generator of <span class="SimpleMath">H^2(Y, Z)</span>. We also verify that <span class="SimpleMath">g_5^1∪ g_1^1 = - g_1^1 ∪ g_5^1</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup11:=CupProduct(FundamentalGroup(Y));</span>
function( a, b ) ... end
<span class="GAPprompt">gap></span> <span class="GAPinput">cup11([1,0,0,0,0],[0,0,0,0,1]);</span>
[ 0, 0, 0, 0, 0, 0, -1, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cup11([0,0,0,0,1],[1,0,0,0,0]);</span>
[ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ]
</pre></div>
<p>This computation of low-dimensional cup products is achieved using group-theoretic methods to approximate the diagonal map <span class="SimpleMath">∆ : Y → Y× Y</span> in dimensions <span class="SimpleMath">≤ 2</span>. In order to construct cup products in higher degrees <strong class="button">HAP</strong> invokes three further strategies.</p>
<p><strong class="button">Strategy 2: implement the Alexander-Whitney map for simplicial complexes.</strong></p>
<p>For simplicial complexes the cup product is implemented using the standard formula for the Alexander-Whitney chain map, together with homotopy equivalences to improve efficiency.</p>
<p>As a first example, the following commands construct simplicial complexes <span class="SimpleMath">K=( S^1 × S^1) # ( S^1 × S^1)</span> and <span class="SimpleMath">L=( S^1 × S^1) ∨ S^1 ∨ S^1</span> and establish that they have the same cohomology groups. It is then shown that the cup products <span class="SimpleMath">∪_K: H^2(K, Z)× H^2(K, Z) → H^4(K, Z)</span> and <span class="SimpleMath">∪_L: H^2(L, Z)× H^2(L, Z) → H^4(L, Z)</span> are antisymmetric bilinear forms of different ranks; hence <span class="SimpleMath">K</span> and <span class="SimpleMath">L</span> have different homotopy types.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ClosedSurface(2);</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">L:=WedgeSum(WedgeSum(ClosedSurface(1),Sphere(1)),Sphere(1));</span>
Simplicial complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(K,0);Cohomology(L,0);</span>
[ 0 ]
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(K,1);Cohomology(L,1);</span>
[ 0, 0, 0, 0 ]
[ 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(K,2);Cohomology(L,2);</span>
[ 0 ]
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">gens:=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cupK:=CupProduct(K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cupL:=CupProduct(L);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=NullMat(4,4);;B:=NullMat(4,4);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [1..4] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">for j in [1..4] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">A[i][j]:=cupK(1,1,gens[i],gens[j])[1];</span>
<span class="GAPprompt">></span> <span class="GAPinput">B[i][j]:=cupL(1,1,gens[i],gens[j])[1];</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(A);</span>
[ [ 0, 0, 0, 1 ],
[ 0, 0, 1, 0 ],
[ 0, -1, 0, 0 ],
[ -1, 0, 0, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(B);</span>
[ [ 0, 1, 0, 0 ],
[ -1, 0, 0, 0 ],
[ 0, 0, 0, 0 ],
[ 0, 0, 0, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank(A);</span>
4
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank(B);</span>
2
</pre></div>
<p>As a second example of the computation of cups products, the following commands construct the connected sums <span class="SimpleMath">V=M# M</span> and <span class="SimpleMath">W=M# overline M</span> where <span class="SimpleMath">M</span> is the <span class="SimpleMath">K3</span> complex surface which is stored as a pure simplicial complex of dimension 4 and where <span class="SimpleMath">overline M</span> denotes the opposite orientation on <span class="SimpleMath">M</span>. The simplicial structure on the <span class="SimpleMath">K3</span> surface is taken from <a href="chapBib.html#biBspreerkhuenel">[SK11]</a>. The commands then show that <span class="SimpleMath">H^2(V, Z)=H^2(W, Z)= Z^44</span> and <span class="SimpleMath">H^4(V, Z)=H^4(W, Z)= Z</span>. The final commands compute the matrix <span class="SimpleMath">AV=(x∪ y)</span> as <span class="SimpleMath">x,y</span> range over a generating set for <span class="SimpleMath">H^2(V, Z)</span> and the corresponding matrix <span class="SimpleMath">AW</span> for <span class="SimpleMath">W</span>. These two matrices are seen to have a different number of positive eigenvalues from which we can conclude that <span class="SimpleMath">V</span> is not homotopy equivalent to <span class="SimpleMath">W</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=SimplicialK3Surface();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V:=ConnectedSum(M,M,+1);</span>
Simplicial complex of dimension 4.
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=ConnectedSum(M,M,-1);</span>
Simplicial complex of dimension 4.
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(V,2);</span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(W,2);</span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(V,4);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Cohomology(W,4);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cupV:=CupProduct(V);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cupW:=CupProduct(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AV:=NullMat(44,44);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AW:=NullMat(44,44);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gens:=IdentityMat(44);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [1..44] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">for j in [1..44] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">AV[i][j]:=cupV(2,2,gens[i],gens[j])[1]; </span>
<span class="GAPprompt">></span> <span class="GAPinput">AW[i][j]:=cupW(2,2,gens[i],gens[j])[1];</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;od; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SignatureOfSymmetricMatrix(AV);</span>
rec( determinant := 1, negative_eigenvalues := 22, positive_eigenvalues := 22,
zero_eigenvalues := 0 )
<span class="GAPprompt">gap></span> <span class="GAPinput">SignatureOfSymmetricMatrix(AW);</span>
rec( determinant := 1, negative_eigenvalues := 6, positive_eigenvalues := 38,
zero_eigenvalues := 0 )
</pre></div>
<p>A cubical cubical version of the Alexander-Whitney formula, due to J.-P. Serre, could be used for computing the cohomology ring of a regular CW-complex whose cells all have a cubical combinatorial face lattice. This has not been implemented in HAP. However, the following more general approach has been implemented.</p>
<p><strong class="button">Strategy 3: Implement a cellular approximation to the diagonal map on an arbitrary finite regular CW-complex.</strong></p>
<p>The following example calculates the cup product <span class="SimpleMath">H^2(W, Z)× H^2(W, Z) → H^4(W, Z)</span> for the <span class="SimpleMath">4</span>-dimensional orientable manifold <span class="SimpleMath">W=M× M</span> where <span class="SimpleMath">M</span> is the closed surface of genus <span class="SimpleMath">2</span>. The manifold <span class="SimpleMath">W</span> is stored as a regular CW-complex.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=RegularCWComplex(ClosedSurface(2));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=DirectProduct(M,M);</span>
Regular CW-complex of dimension 4
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(W);</span>
5776
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=SimplifiedComplex(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(W); </span>
1024
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(W,2); </span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(W,4);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cup:=CupProduct(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SecondCohomologtGens:=IdentityMat(18);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=NullMat(18,18);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [1..18] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">for j in [1..18] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">A[i][j]:=cup(2,2,SecondCohomologtGens[i],SecondCohomologtGens[j])[1];</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(A);</span>
[ [ 0, -1, 0, 0, 0, 0, 3, -2, 0, 0, 0, 1, -1, 0, 0, 1, 0, 0 ],
[ -1, -10, 1, 2, -2, 1, 6, -1, 0, -3, 4, -1, -1, -1, 4, -2, -2, 0 ],
[ 0, 1, -2, 1, 0, -1, 0, 0, 1, 0, -1, 1, 0, 0, 1, -1, 0, 0 ],
[ 0, 2, 1, -2, 1, 0, 0, -1, 0, 1, 0, 0, 0, 0, -1, 2, 0, 0 ],
[ 0, -2, 0, 1, 0, 0, 1, -1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0 ],
[ 0, 1, -1, 0, 0, 0, 0, 1, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0 ],
[ 3, 6, 0, 0, 1, 0, -4, 0, -1, 2, 4, -5, 2, -1, 1, 0, 3, 0 ],
[ -2, -1, 0, -1, -1, 1, 0, 4, -2, 0, 0, 3, -1, 1, -1, 0, -2, 0 ],
[ 0, 0, 1, 0, 0, -1, -1, -2, 4, -3, -10, 1, 0, 0, -3, 3, 0, 0 ],
[ 0, -3, 0, 1, 0, 1, 2, 0, -3, 2, 3, 0, 0, 0, 1, -3, 0, 0 ],
[ 0, 4, -1, 0, -1, 0, 4, 0, -10, 3, 18, 1, 0, 0, 0, 4, 0, 1 ],
[ 1, -1, 1, 0, 0, 0, -5, 3, 1, 0, 1, 0, 0, 0, -2, -1, -1, 0 ],
[ -1, -1, 0, 0, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ],
[ 0, -1, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0 ],
[ 0, 4, 1, -1, 0, 1, 1, -1, -3, 1, 0, -2, 1, 0, 0, 2, 2, 0 ],
[ 1, -2, -1, 2, -1, -1, 0, 0, 3, -3, 4, -1, 0, -1, 2, 0, 0, 0 ],
[ 0, -2, 0, 0, 0, 0, 3, -2, 0, 0, 0, -1, 0, -1, 2, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SignatureOfSymmetricMatrix(A);</span>
rec( determinant := -1, negative_eigenvalues := 9, positive_eigenvalues := 9,
zero_eigenvalues := 0 )
</pre></div>
<p>The matrix <span class="SimpleMath">A</span> representing the cup product <span class="SimpleMath">H^2(W, Z)× H^2(W, Z) → H^4(W, Z)</span> is shown to have <span class="SimpleMath">9</span> positive eigenvalues, <span class="SimpleMath">9</span> negative eigenvalues, and no zero eigenvalue.</p>
<p><strong class="button">Strategy 4: Guess and verify a cellular approximation to the diagonal map.</strong></p>
<p>Many naturally occuring cell structures are neither simplicial nor cubical. For a general regular CW-complex we can attempt to construct a cellular inclusion <span class="SimpleMath">overline Y ↪ Y× Y</span> with <span class="SimpleMath">{(y,y) : y∈ Y}⊂ overline Y</span> and with projection <span class="SimpleMath">p: overline Y ↠ Y</span> that induces isomorphisms on integral homology. The function <code class="code">DiagonalApproximation(Y)</code> constructs a candidate inclusion, but the projection <span class="SimpleMath">p: overline Y ↠ Y</span> needs to be tested for homology equivalence. If the candidate inclusion passes this test then the function <code class="code">CupProductOfRegularCWComplex_alt(Y)</code>, involving the candidate space, can be used for cup products. (I think the test is passed for all regular CW-complexes that are subcomplexes of some Euclidean space with all cells convex polytopes -- but a proof needs to be written down!)</p>
<p>The following example calculates <span class="SimpleMath">g_1^2 ∪ g_2^2 ne 0</span> where <span class="SimpleMath">Y=T× T</span> is the direct product of two copies of a simplicial torus <span class="SimpleMath">T</span>, and where <span class="SimpleMath">g_k^n</span> denotes the <span class="SimpleMath">k</span>-th generator in some basis of <span class="SimpleMath">H^n(Y, Z)</span>. The direct product <span class="SimpleMath">Y</span> is a CW-complex which is not a simplicial complex.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=RegularCWComplex(ClosedSurface(1));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=DirectProduct(K,K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup:=CupProductOfRegularCWComplex_alt(Y);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup(2,2,[1,0,0,0,0,0],[0,1,0,0,0,0]);</span>
[ 5 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D:=DiagonalApproximation(Y);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">p:=D!.projection;</span>
Map of regular CW-complexes
<span class="GAPprompt">gap></span> <span class="GAPinput">P:=ChainMap(p);</span>
Chain Map between complexes of length 4 .
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphismOfAbelianFpGroups(Homology(P,0));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphismOfAbelianFpGroups(Homology(P,2));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphismOfAbelianFpGroups(Homology(P,3));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphismOfAbelianFpGroups(Homology(P,4));</span>
true
</pre></div>
<p>Of course, either of Strategies 2 or 3 could also be used for this example. To use the Alexander-Whitney formula of Strategy 2 we would need to give the direct product <span class="SimpleMath">Y=T× T</span> a simplicial structure. This could be obtained using the function <code class="code">DirectProduct(T,T)</code>. The details are as follows. (The result is consistent with the preceding computation since the choice of a basis for cohomology groups is far from unique.)</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ClosedSurface(1);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">KK:=DirectProduct(K,K);</span>
Simplicial complex of dimension 4.
<span class="GAPprompt">gap></span> <span class="GAPinput">cup:=CupProduct(KK);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup(2,2,[1,0,0,0,0,0],[0,1,0,0,0,0]);</span>
[ 0 ]
</pre></div>
<p><a id="X7F9B01CF7EE1D2FC" name="X7F9B01CF7EE1D2FC"></a></p>
<h4>1.11 <span class="Heading">Intersection forms of <span class="SimpleMath">4</span>-manifolds</span></h4>
<p>The cup product gives rise to the intersection form of a connected, closed, orientable <span class="SimpleMath">4</span>-manifold <span class="SimpleMath">Y</span> is a symmetric bilinear form</p>
<p><span class="SimpleMath">qY: H^2(Y, Z)/Torsion × H^2(Y, Z)/Torsion ⟶ Z</span></p>
<p>which we represent as a symmetric matrix.</p>
<p>The following example constructs the direct product <span class="SimpleMath">L=S^2× S^2</span> of two <span class="SimpleMath">2</span>-spheres, the connected sum <span class="SimpleMath">M= CP^2 # overline CP^2</span> of the complex projective plane <span class="SimpleMath">CP^2</span> and its oppositely oriented version <span class="SimpleMath">overline CP^2</span>, and the connected sum <span class="SimpleMath">N= CP^2 # CP^2</span>. The manifolds <span class="SimpleMath">L</span>, <span class="SimpleMath">M</span> and <span class="SimpleMath">N</span> are each shown to have a CW-structure involving one <span class="SimpleMath">0</span>-cell, two <span class="SimpleMath">1</span>-cells and one <span class="SimpleMath">2</span>-cell. They are thus simply connected and have identical cohomology.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S:=Sphere(2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S:=RegularCWComplex(S);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">L:=DirectProduct(S,S);</span>
Regular CW-complex of dimension 4
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=ConnectedSum(ComplexProjectiveSpace(2),ComplexProjectiveSpace(2),-1);</span>
Simplicial complex of dimension 4.
<span class="GAPprompt">gap></span> <span class="GAPinput">N:=ConnectedSum(ComplexProjectiveSpace(2),ComplexProjectiveSpace(2),+1);</span>
Simplicial complex of dimension 4.
<span class="GAPprompt">gap></span> <span class="GAPinput">CriticalCells(L);</span>
[ [ 4, 1 ], [ 2, 13 ], [ 2, 56 ], [ 0, 16 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">CriticalCells(RegularCWComplex(M));</span>
[ [ 4, 1 ], [ 2, 109 ], [ 2, 119 ], [ 0, 8 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">CriticalCells(RegularCWComplex(N));</span>
[ [ 4, 1 ], [ 2, 119 ], [ 2, 149 ], [ 0, 12 ] ]
</pre></div>
<p>John Milnor showed (as a corollary to a theorem of J. H. C. Whitehead) that the homotopy type of a simply connected 4-manifold is determined by its quadratic form. More precisely, a form is said to be of <em>type I (properly primitive)</em> if some diagonal entry of its matrix is odd. If every diagonal entry is even, then the form is of <em>type II (improperly primitive)</em>. The <em>index</em> of a form is defined as the number of positive diagonal entries minus the number of negative ones, after the matrix has been diagonalized over the real numbers.</p>
<p><strong class="button">Theorem.</strong> (Milnor <a href="chapBib.html#biBmilnor">[Mil58]</a>) The oriented homotopy type of a simply connected, closed, orientable 4-manifold is determined by its second Betti number and the index and type of its intersetion form; except possibly in the case of a manifold with definite quadratic form of rank r > 9.</p>
<p>The following commands compute matrices representing the intersection forms <span class="SimpleMath">qL</span>, <span class="SimpleMath">qM</span>, <span class="SimpleMath">qN</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">qL:=IntersectionForm(L);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">qM:=IntersectionForm(M);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">qN:=IntersectionForm(N);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(qL);</span>
[ [ -2, 1 ],
[ 1, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(qM);</span>
[ [ 1, 0 ],
[ 0, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(qN);</span>
[ [ 1, 0 ],
[ 0, -1 ] ]
</pre></div>
<p>Since <span class="SimpleMath">qL</span> is of type II, whereas <span class="SimpleMath">qM</span> and <span class="SimpleMath">qN</span> are of type I we see that the oriented homotopy type of <span class="SimpleMath">L</span> is distinct to that of <span class="SimpleMath">M</span> and that of <span class="SimpleMath">N</span>. Since <span class="SimpleMath">qM</span> has index <span class="SimpleMath">2</span> and <span class="SimpleMath">qN</span> has index <span class="SimpleMath">0</span> we see that that <span class="SimpleMath">M</span> and <span class="SimpleMath">N</span> also have distinct oriented homotopy types.</p>
<p><a id="X80B6849C835B7F19" name="X80B6849C835B7F19"></a></p>
<h4>1.12 <span class="Heading">Cohomology Rings</span></h4>
<p>The cup product gives the cohomology <span class="SimpleMath">H^∗(X,R)</span> of a space <span class="SimpleMath">X</span> with coefficients in a ring <span class="SimpleMath">R</span> the structure of a graded commutitive ring. The function <code class="code">CohomologyRing(Y,p)</code> returns the cohomology as an algebra for <span class="SimpleMath">Y</span> a simplicial complex and <span class="SimpleMath">R= Z_p</span> the field of <span class="SimpleMath">p</span> elements. For more general regular CW-complexes or <span class="SimpleMath">R= Z</span> the cohomology ring structure can be determined using the function <code class="code">CupProduct(Y)</code>.</p>
<p>The folowing commands compute the mod <span class="SimpleMath">2</span> cohomology ring <span class="SimpleMath">H^∗(W, Z_2)</span> of the above wedge sum <span class="SimpleMath">W=M∨ N</span> of a <span class="SimpleMath">2</span>-dimensional orientable simplicial surface of genus 2 and the <span class="SimpleMath">K3</span> complex simplicial surface (of real dimension 4).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=ClosedSurface(2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">N:=SimplicialK3Surface();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=WedgeSum(M,N);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=CohomologyRing(W,2);</span>
<algebra of dimension 29 over GF(2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:=Basis(A)[25];</span>
v.25
<span class="GAPprompt">gap></span> <span class="GAPinput">y:=Basis(A)[27];</span>
v.27
<span class="GAPprompt">gap></span> <span class="GAPinput">x*y;</span>
v.29
</pre></div>
<p>The functions <code class="code">CupProduct</code> and <code class="code">IntersectionForm</code> can be used to determine integral cohomology rings. For example, the integral cohomology ring of an arbitrary closed surface was calculated in <a href="chapBib.html#biBgoncalves">[GM15, Theorem 3.5]</a>. For any given surface <span class="SimpleMath">M</span> this result can be recalculated using the intersection form. For instance, for an orientable surface of genus <span class="SimpleMath">g</span> it is well-known that <span class="SimpleMath">H^1(M, Z)= Z^2g</span>, <span class="SimpleMath">H^2(M, Z)= Z</span>. The ring structure multiplication is thus given by the matrix of the intersection form. For say <span class="SimpleMath">g=3</span> the ring multiplication is given, with respect to some cohomology basis, in the following.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=ClosedSurface(3);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(IntersectionForm(M));</span>
[ [ 0, 0, 1, -1, -1, 0 ],
[ 0, 0, 0, 1, 1, 0 ],
[ -1, 0, 0, 1, 1, -1 ],
[ 1, -1, -1, 0, 0, 1 ],
[ 1, -1, -1, 0, 0, 0 ],
[ 0, 0, 1, -1, 0, 0 ] ]
</pre></div>
<p>By changing the basis <span class="SimpleMath">B</span> for <span class="SimpleMath">H^1(M, Z)</span> we obtain the following simpler matrix representing multiplication in <span class="SimpleMath">H^∗(M, Z)</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">B:=[ [ 0, 1, -1, -1, 1, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 0, 1, 1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 0, 1, -1, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 1, 1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 1, 1, 0, 1 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(IntersectionForm(M,B));</span>
[ [ 0, 1, 0, 0, 0, 0 ],
[ -1, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 1, 0 ],
[ 0, 0, 0, 0, 0, 1 ],
[ 0, 0, -1, 0, 0, 0 ],
[ 0, 0, 0, -1, 0, 0 ] ]
</pre></div>
<p><a id="X83035DEC7C9659C6" name="X83035DEC7C9659C6"></a></p>
<h4>1.13 <span class="Heading">Bockstein homomorphism</span></h4>
<p>The following example evaluates the Bockstein homomorphism <span class="SimpleMath">β_2: H^∗(X, Z_2) → H^∗ +1(X, Z_2)</span> on an additive basis for <span class="SimpleMath">X=Σ^100( RP^2 × RP^2)</span> the <span class="SimpleMath">100</span>-fold suspension of the direct product of two projective planes.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">P:=SimplifiedComplex(RegularCWComplex(ClosedSurface(-1)));</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">PP:=DirectProduct(P,P);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SPP:=Suspension(PP,100); </span>
Regular CW-complex of dimension 104
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=CohomologyRing(SPP,2); </span>
<algebra of dimension 9 over GF(2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">List(Basis(A),x->Bockstein(A,x));</span>
[ 0*v.1, v.4, v.6, 0*v.1, v.7+v.8, 0*v.1, v.9, v.9, 0*v.1 ]
</pre></div>
<p>If only the Bockstein homomorphism is required, and not the cohomology ring structure, then the Bockstein could also be computedirectly from a chain complex. The following computes the Bockstein <span class="SimpleMath">β_2: H^2(Y, Z_2) → H^3(Y, Z_2)</span> for the direct product <span class="SimpleMath">Y=K × K × K × K</span> of four copies of the Klein bottle represented as a regular CW-complex with <span class="SimpleMath">331776</span> cells. The order of the kernel and image of <span class="SimpleMath">β_2</span> are computed.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ClosedSurface(-2);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=SimplifiedComplex(RegularCWComplex(K));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">KKKK:=DirectProduct(K,K,K,K); </span>
Regular CW-complex of dimension 8
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(KKKK);</span>
331776
<span class="GAPprompt">gap></span> <span class="GAPinput">C:=ChainComplex(KKKK);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bk:=Bockstein(C,2,2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Order(Kernel(bk));</span>
1024
<span class="GAPprompt">gap></span> <span class="GAPinput">Order(Image(bk)); </span>
262144
</pre></div>
<p><a id="X87135D067B6CDEEC" name="X87135D067B6CDEEC"></a></p>
<h4>1.14 <span class="Heading">Diagonal maps on associahedra and other polytopes</span></h4>
<p>By a <em>diagonal approximation</em> on a regular CW-complex <span class="SimpleMath">X</span> we mean any cellular map <span class="SimpleMath">∆: X→ X× X</span> that is homotopic to the diagonal map <span class="SimpleMath">X→ X× X, x↦ (x,x)</span> and equal to the diagonal map when restricted to the <span class="SimpleMath">0</span>-skeleton. Theoretical formulae for diagonal maps on a polytope <span class="SimpleMath">X</span> can have interesting combinatorial aspects. To illustrate this let us consider, for <span class="SimpleMath">n=3</span>, the <span class="SimpleMath">n</span>-dimensional polytope <span class="SimpleMath">cal K^n+2</span> known as the associahedron. The following commands display the <span class="SimpleMath">1</span>-skeleton of <span class="SimpleMath">cal K^5</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:=3;;Y:=RegularCWAssociahedron(n+2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(GraphOfRegularCWComplex(Y));</span>
</pre></div>
<p><img src="images/assoc.png" align="center" width="250" alt="Associahedron"/></p>
<p>The induced chain map <span class="SimpleMath">C_∗(cal K^n+2) → C_∗(cal K^n+2× cal K^n+2)</span> sends the unique free generator <span class="SimpleMath">e^n_1</span> of <span class="SimpleMath">C_n(cal K^n+2)</span> to a sum <span class="SimpleMath">∆(e^n_1)</span> of a number of distinct free generators of <span class="SimpleMath">C_n(cal K^n+2× cal K^n+2)</span>. Let <span class="SimpleMath">|∆(e^n_1)|</span> denote the number of free generators. For <span class="SimpleMath">n=3</span> the following commands show that <span class="SimpleMath">|∆(e^3_1)|=22</span> with each free generator occurring with coefficient <span class="SimpleMath">± 1</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:=3;;Y:=RegularCWAssociahedron(n+2);; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">D:=DiagonalChainMap(Y);;Filtered(D!.mapping([1],n),x->x<>0);</span>
[ 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1 ]
</pre></div>
<p>Repeating this example for <span class="SimpleMath">0≤ n≤ 6</span> yields the sequence <span class="SimpleMath">|∆(e^n_1)|: 1, 2, 6, 22, 91, 408, 1938, ⋯</span>. The <span class="URL"><a href="https://oeis.org/A000139">On-line Encyclopedia of Integer Sequences</a></span> explains that this is the beginning of the sequence given by the number of canopy intervals in the Tamari lattices.</p>
<p>Repeating the same experiment for the permutahedron, using the command <code class="code">RegularCWPermutahedron(n)</code>, yields the sequence <span class="SimpleMath">|∆(e^n_1)|: 1, 2, 8, 50, 432, 4802,⋯</span>. The <span class="URL"><a href="https://oeis.org/A007334">On-line Encyclopedia of Integer Sequences</a></span> explains that this is the beginning of the sequence given by the number of spanning trees in the graph <span class="SimpleMath">K_n/e</span>, which results from contracting an edge <span class="SimpleMath">e</span> in the complete graph <span class="SimpleMath">K_n</span> on <span class="SimpleMath">n</span> vertices.</p>
<p>Repeating the experiment for the cube, using the command <code class="code">RegularCWCube(n)</code>, yields the sequence <span class="SimpleMath">|∆(e^n_1)|: 1, 2, 4, 8, 16, 32,⋯</span>.</p>
<p>Repeating the experiment for the simplex, using the command <code class="code">RegularCWSimplex(n)</code>, yields the sequence <span class="SimpleMath">|∆(e^n_1)|: 1, 2, 3, 4, 5, 6,⋯</span>.</p>
<p><a id="X8771FF2885105154" name="X8771FF2885105154"></a></p>
<h4>1.15 <span class="Heading">CW maps and induced homomorphisms</span></h4>
<p>A <em>strictly cellular</em> map <span class="SimpleMath">f: X→ Y</span> of regular CW-complexes is a cellular map for which the image of any cell is a cell (of possibly lower dimension). Inclusions of CW-subcomplexes, and projections from a direct product to a factor, are examples of such maps. Strictly cellular maps can be represented in <strong class="button">HAP</strong>, and their induced homomorphisms on (co)homology and on fundamental groups can be computed.</p>
<p>The following example begins by visualizing the trefoil knot <span class="SimpleMath">κ ∈ R^3</span>. It then constructs a regular CW structure on the complement <span class="SimpleMath">Y= D^3∖ Nbhd(κ)</span> of a small tubular open neighbourhood of the knot lying inside a large closed ball <span class="SimpleMath">D^3</span>. The boundary of this tubular neighbourhood is a <span class="SimpleMath">2</span>-dimensional CW-complex <span class="SimpleMath">B</span> homeomorphic to a torus <span class="SimpleMath">S^1× S^1</span> with fundamental group <span class="SimpleMath">π_1(B)=<a,b : aba^-1b^-1=1></span>. The inclusion map <span class="SimpleMath">f: B↪ Y</span> is constructed. Then a presentation <span class="SimpleMath">π_1(Y)= <x,y | xy^-1x^-1yx^-1y^-1></span> and the induced homomorphism $$\pi_1(B)\rightarrow \pi_1(Y), a\mapsto y^{-1}xy^2xy^{-1}, b\mapsto y $$ are computed. This induced homomorphism is an example of a <em>peripheral system</em> and is known to contain sufficient information to characterize the knot up to ambient isotopy.</p>
<p>Finally, it is verified that the induced homology homomorphism <span class="SimpleMath">H_2(B, Z) → H_2(Y, Z)</span> is an isomomorphism.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=PureCubicalKnot(3,1);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ViewPureCubicalKnot(K);;</span>
</pre></div>
<p><img src="images/trefoil.png" align="center" width="150" alt="trefoil knot"/></p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=PureCubicalKnot(3,1);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f:=KnotComplementWithBoundary(ArcPresentation(K));</ | |