SSL chap1_mj.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/hap/tutorial/chap1_mj.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>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<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_mj.html">Top</a> <a href="chap1_mj.html">1</a> <a href="chap2_mj.html">2</a> <a href="chap3_mj.html">3</a> <a href="chap4_mj.html">4</a> <a href="chap5_mj.html">5</a> <a href="chap6_mj.html">6</a> <a href="chap7_mj.html">7</a> <a href="chap8_mj.html">8</a> <a href="chap9_mj.html">9</a> <a href="chap10_mj.html">10</a> <a href="chap11_mj.html">11</a> <a href="chap12_mj.html">12</a> <a href="chap13_mj.html">13</a> <a href="chap14_mj.html">14</a> <a href="chap15_mj.html">15</a> <a href="chap16_mj.html">16</a> <a href="chapBib_mj.html">Bib</a> <a href="chapInd_mj.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap0_mj.html">[Previous Chapter]</a> <a href="chap2_mj.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap1.html">[MathJax off]</a></p>
<p><a id="X7E5EA9587D4BCFB4" name="X7E5EA9587D4BCFB4"></a></p>
<div class="ChapSects"><a href="chap1_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_mj.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_\ast=C_\ast(K)\)</span> from which the integral homology groups <span class="SimpleMath">\(H_1(K,\mathbb Z)=\mathbb Z_2\oplus \mathbb Z\)</span>, <span class="SimpleMath">\(H_2(K,\mathbb Z)=0\)</span> are computed. The chain complex <span class="SimpleMath">\(D_\ast=C_\ast \otimes_{\mathbb Z} \mathbb 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,\mathbb Z_2)=\mathbb Z_2\oplus \mathbb Z_2\)</span>, <span class="SimpleMath">\(H_2(K,\mathbb Z)=\mathbb Z_2\)</span>. Finally, a presentation <span class="SimpleMath">\(\pi_1(K) = \langle x,y : yxy^{-1}x\rangle\)</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">\(\Delta{\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">\(\Delta{\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=\Delta{\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_\ast(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_\ast(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_mj.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\searrow Y_1 \searrow Y_2 \searrow \ldots \searrow 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\colon C_\ast Y \rightarrow C_\ast X\)</span> and its chain homotopy inverse <span class="SimpleMath">\(g\colon C_\ast X \rightarrow C_\ast Y\)</span>. The function <code class="code">ChainComplex(Y)</code> returns the cellular chain complex <span class="SimpleMath">\(C_\ast(X)\)</span>, wheras the function <code class="code">ChainComplexOfRegularCWComplex(Y)</code> returns the chain complex <span class="SimpleMath">\(C_\ast(Y)\)</span>.</p>
<p>For the above Quillen complex <span class="SimpleMath">\(Y=\Delta{\cal A}_2(S_7)\)</span> the following commands produce the chain homotopy equivalence <span class="SimpleMath">\(f\colon C_\ast Y \rightarrow C_\ast X\)</span> and <span class="SimpleMath">\(g\colon C_\ast X \rightarrow C_\ast Y\)</span>. The number of generators of <span class="SimpleMath">\(C_\ast 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_mj.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\setminus 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,\mathbb Z)=\mathbb Z\)</span>, <span class="SimpleMath">\(H_1(Y,\mathbb Z)=\mathbb Z_2\)</span>, <span class="SimpleMath">\(H_2(Y,\mathbb 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=\langle x,y,z\ :\ xyx^{-1}y^{-1}=1, yzy^{-1}z^{-1}=1, zxz^{-1}x^{-1}=1\rangle\)</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\times S^1\times 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,\mathbb Z)=\mathbb Z\)</span>, <span class="SimpleMath">\(H_1(A,\mathbb Z)=\mathbb Z\)</span>, <span class="SimpleMath">\(H_2(A,\mathbb 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\times A\times A\times A\times 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\simeq 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_\ast = {\rm Hom}_{\mathbb Z}(C_\ast(X),\mathbb Z)\)</span> from which the cohomology groups <br /> <span class="SimpleMath">\(H^0(Y,\mathbb Z)=\mathbb Z\)</span>, <br /> <span class="SimpleMath">\(H^1(Y,\mathbb Z)=\mathbb Z^5\)</span>, <br /> <span class="SimpleMath">\(H^2(Y,\mathbb Z)=\mathbb Z^{10}\)</span>, <br /> <span class="SimpleMath">\(H^3(Y,\mathbb Z)=\mathbb Z^{10}\)</span>, <br /> <span class="SimpleMath">\(H^4(Y,\mathbb Z)=\mathbb Z^5\)</span>, <br /> <span class="SimpleMath">\(H^5(Y,\mathbb Z)=\mathbb Z\)</span>, <br /> <span class="SimpleMath">\(H^6(Y,\mathbb 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\in H^1(Y,\mathbb Z) =\mathbb Z^5\)</span> and establish that their cup product <span class="SimpleMath">\( g_1^1 \cup g_5^1 = - g_7^2 \in H^2(Y,\mathbb Z) =\mathbb Z^{10}\)</span> is equal to minus the seventh generator of <span class="SimpleMath">\(H^2(Y,\mathbb Z)\)</span>. We also verify that <span class="SimpleMath">\(g_5^1\cup g_1^1 = - g_1^1 \cup 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">\(\Delta \colon Y \rightarrow Y\times Y\)</span> in dimensions <span class="SimpleMath">\(\le 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=(\mathbb S^1 \times \mathbb S^1) \# (\mathbb S^1 \times \mathbb S^1)\)</span> and <span class="SimpleMath">\(L=(\mathbb S^1 \times \mathbb S^1) \vee \mathbb S^1 \vee \mathbb S^1\)</span> and establish that they have the same cohomology groups. It is then shown that the cup products <span class="SimpleMath">\(\cup_K\colon H^2(K,\mathbb Z)\times H^2(K,\mathbb Z) \rightarrow H^4(K,\mathbb Z)\)</span> and <span class="SimpleMath">\(\cup_L\colon H^2(L,\mathbb Z)\times H^2(L,\mathbb Z) \rightarrow H^4(L,\mathbb 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_mj.html#biBspreerkhuenel">[SK11]</a>. The commands then show that <span class="SimpleMath">\(H^2(V,\mathbb Z)=H^2(W,\mathbb Z)=\mathbb Z^{44}\)</span> and <span class="SimpleMath">\(H^4(V,\mathbb Z)=H^4(W,\mathbb Z)=\mathbb Z\)</span>. The final commands compute the matrix <span class="SimpleMath">\(AV=(x\cup y)\)</span> as <span class="SimpleMath">\(x,y\)</span> range over a generating set for <span class="SimpleMath">\(H^2(V,\mathbb 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,\mathbb Z)\times H^2(W,\mathbb Z) \rightarrow H^4(W,\mathbb Z)\)</span> for the <span class="SimpleMath">\(4\)</span>-dimensional orientable manifold <span class="SimpleMath">\(W=M\times 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,\mathbb Z)\times H^2(W,\mathbb Z) \rightarrow H^4(W,\mathbb 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 \hookrightarrow Y\times Y\)</span> with <span class="SimpleMath">\(\{(y,y)\ :\ y\in Y\}\subset \overline Y\)</span> and with projection <span class="SimpleMath">\(p\colon \overline Y \twoheadrightarrow 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\colon \overline Y \twoheadrightarrow 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 \cup g_2^2 \ne 0\)</span> where <span class="SimpleMath">\(Y=T\times 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,\mathbb 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\times 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\colon H^2(Y,\mathbb Z)/Torsion \times H^2(Y,\mathbb Z)/Torsion \longrightarrow \mathbb 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\times S^2\)</span> of two <span class="SimpleMath">\(2\)</span>-spheres, the connected sum <span class="SimpleMath">\(M=\mathbb CP^2 \# \overline{\mathbb CP^2}\)</span> of the complex projective plane <span class="SimpleMath">\(\mathbb CP^2\)</span> and its oppositely oriented version <span class="SimpleMath">\(\overline{\mathbb CP^2}\)</span>, and the connected sum <span class="SimpleMath">\(N=\mathbb CP^2 \# \mathbb 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_mj.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^\ast(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=\mathbb Z_p\)</span> the field of <span class="SimpleMath">\(p\)</span> elements. For more general regular CW-complexes or <span class="SimpleMath">\(R=\mathbb 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^\ast(W,\mathbb Z_2)\)</span> of the above wedge sum <span class="SimpleMath">\(W=M\vee 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_mj.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,\mathbb Z)=\mathbb Z^{2g}\)</span>, <span class="SimpleMath">\(H^2(M,\mathbb Z)=\mathbb 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,\mathbb Z)\)</span> we obtain the following simpler matrix representing multiplication in <span class="SimpleMath">\(H^\ast(M,\mathbb 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">\(\beta_2\colon H^\ast(X,\mathbb Z_2) \rightarrow H^{\ast +1}(X,\mathbb Z_2)\)</span> on an additive basis for < | |