1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
|
<?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 2: Cubical complexes & permutahedral 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="chap2" 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="chap1_mj.html">[Previous Chapter]</a> <a href="chap3_mj.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap2.html">[MathJax off]</a></p>
<p><a id="X7F8376F37AF80AAC" name="X7F8376F37AF80AAC"></a></p>
<div class="ChapSects"><a href="chap2_mj.html#X7F8376F37AF80AAC">2 <span class="Heading">Cubical complexes & permutahedral complexes</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2_mj.html#X7D67D5F3820637AD">2.1 <span class="Heading">Cubical complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2_mj.html#X85D8195379F2A8CA">2.2 <span class="Heading">Permutahedral complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2_mj.html#X78D3037283B506E0">2.3 <span class="Heading">Constructing pure cubical and permutahedral complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2_mj.html#X8462CF66850CC3A8">2.4 <span class="Heading">Computations in dynamical systems</span></a>
</span>
</div>
</div>
<h3>2 <span class="Heading">Cubical complexes & permutahedral complexes</span></h3>
<p><a id="X7D67D5F3820637AD" name="X7D67D5F3820637AD"></a></p>
<h4>2.1 <span class="Heading">Cubical complexes</span></h4>
<p>A <em>finite simplicial complex</em> can be defined to be a CW-subcomplex of the canonical regular CW-structure on a simplex <span class="SimpleMath">\(\Delta^n\)</span> of some dimension <span class="SimpleMath">\(n\)</span>. Analogously, a <em>finite cubical complex</em> is a CW-subcomplex of the regular CW-structure on a cube <span class="SimpleMath">\([0,1]^n\)</span> of some dimension <span class="SimpleMath">\(n\)</span>. Equivalently, but more conveniently, we can replace the unit interval <span class="SimpleMath">\([0,1]\)</span> by an interval <span class="SimpleMath">\([0,k]\)</span> with CW-structure involving <span class="SimpleMath">\(2k+1\)</span> cells, namely one <span class="SimpleMath">\(0\)</span>-cell for each integer <span class="SimpleMath">\(0\le j\le k\)</span> and one <span class="SimpleMath">\(1\)</span>-cell for each open interval <span class="SimpleMath">\((j,j+1)\)</span> for <span class="SimpleMath">\(0\le j\le k-1\)</span>. A <em>finite cuical complex</em> <span class="SimpleMath">\(M\)</span> is a CW-subcompex <span class="SimpleMath">\(M\subset [0,k_1]\times [0,k_2]\times \cdots [0,k_n]\)</span> of a direct product of intervals, the direct product having the usual direct product CW-structure. The equivalence of these two definitions follows from the Gray code embedding of a mesh into a hypercube. We say that the cubical complex has <em>ambient dimension</em> <span class="SimpleMath">\(n\)</span>. A cubical complex <span class="SimpleMath">\(M\)</span> of ambient dimension <span class="SimpleMath">\(n\)</span> is said to be <em>pure</em> if each cell lies in the boundary of an <span class="SimpleMath">\(n\)</span>-cell. In other words, <span class="SimpleMath">\(M\)</span> is pure if it is a union of unit <span class="SimpleMath">\(n\)</span>-cubes in <span class="SimpleMath">\(\mathbb R^n\)</span>, each unit cube having vertices with integer coordinates.</p>
<p><strong class="button">HAP</strong> has a datatype for finite cubical complexes, and a slightly different datatype for pure cubical complexes.</p>
<p>The following example constructs the granny knot (the sum of a trefoil knot with its reflection) as a <span class="SimpleMath">\(3\)</span>-dimensional pure cubical complex, and then displays it.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=PureCubicalKnot(3,1);</span>
prime knot 1 with 3 crossings
<span class="GAPprompt">gap></span> <span class="GAPinput">L:=ReflectedCubicalKnot(K);</span>
Reflected( prime knot 1 with 3 crossings )
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=KnotSum(K,L);</span>
prime knot 1 with 3 crossings + Reflected( prime knot 1 with 3 crossings )
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(M);</span>
</pre></div>
<p><img src="images/granny.jpg" align="center" width="350" alt="granny knot"/></p>
<p>Next we construct the complement <span class="SimpleMath">\(Y=D^3\setminus \mathring{M}\)</span> of the interior of the pure cubical complex <span class="SimpleMath">\(M\)</span>. Here <span class="SimpleMath">\(D^3\)</span> is a rectangular region with <span class="SimpleMath">\(M \subset \mathring{D^3}\)</span>. This pure cubical complex <span class="SimpleMath">\(Y\)</span> is a union of <span class="SimpleMath">\(5891\)</span> unit <span class="SimpleMath">\(3\)</span>-cubes. We contract <span class="SimpleMath">\(Y\)</span> to get a homotopy equivalent pure cubical complex <span class="SimpleMath">\(YY\)</span> consisting of the union of just <span class="SimpleMath">\(775\)</span> unit <span class="SimpleMath">\(3\)</span>-cubes. Then we convert <span class="SimpleMath">\(YY\)</span> to a regular CW-complex <span class="SimpleMath">\(W\)</span> involving <span class="SimpleMath">\(11939\)</span> cells. We contract <span class="SimpleMath">\(W\)</span> to obtain a homotopy equivalent regular CW-complex <span class="SimpleMath">\(WW\)</span> involving <span class="SimpleMath">\(5993\)</span> cells. Finally we compute the fundamental group of the complement of the granny knot, and use the presentation of this group to establish that the Alexander polynomial <span class="SimpleMath">\(P(x)\)</span> of the granny is</p>
<p><span class="SimpleMath">\(P(x) = x^4-2x^3+3x^2-2x+1 \ .\)</span></p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=PureComplexComplement(M);</span>
Pure cubical complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(Y);</span>
5891
<span class="GAPprompt">gap></span> <span class="GAPinput">YY:=ZigZagContractedComplex(Y);</span>
Pure cubical complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(YY);</span>
775
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=RegularCWComplex(YY);</span>
Regular CW-complex of dimension 3
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(W);</span>
11939
<span class="GAPprompt">gap></span> <span class="GAPinput">WW:=ContractedComplex(W);</span>
Regular CW-complex of dimension 2
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(WW);</span>
5993
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=FundamentalGroup(WW);</span>
<fp group of size infinity on the generators [ f1, f2, f3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">AlexanderPolynomial(G);</span>
x_1^4-2*x_1^3+3*x_1^2-2*x_1+1
</pre></div>
<p><a id="X85D8195379F2A8CA" name="X85D8195379F2A8CA"></a></p>
<h4>2.2 <span class="Heading">Permutahedral complexes</span></h4>
<p>A finite pure cubical complex is a union of finitely many cubes in a tessellation of <span class="SimpleMath">\(\mathbb R^n\)</span> by unit cubes. One can also tessellate <span class="SimpleMath">\(\mathbb R^n\)</span> by permutahedra, and we define a finite <span class="SimpleMath">\(n\)</span>-dimensional pure <em>permutahedral complex</em> to be a union of finitely many permutahdra from such a tessellation. There are two features of pure permutahedral complexes that are particularly useful in some situations:</p>
<ul>
<li><p>Pure permutahedral complexes are topological manifolds with boundary.</p>
</li>
<li><p>The method used for finding a smaller pure cubical complex <span class="SimpleMath">\(M'\)</span> homotopy equivalent to a given pure cubical complex <span class="SimpleMath">\(M\)</span> retains the homeomorphism type, and not just the homotopy type, of the space <span class="SimpleMath">\(M\)</span>.</p>
</li>
</ul>
<p><strong class="button">Example 1</strong></p>
<p>To illustrate these features the following example begins by reading in a protein backbone from the online <span class="URL"><a href="https://www.rcsb.org/">Protein Database</a></span>, and storing it as a pure cubical complex <span class="SimpleMath">\(K\)</span>. The ends of the protein have been joined, and the homology <span class="SimpleMath">\(H_i(K,\mathbb Z)=\mathbb Z\)</span>, <span class="SimpleMath">\(i=0,1\)</span> is seen to be that of a circle. We can thus regard the protein as a knot <span class="SimpleMath">\(K\subset \mathbb R^3\)</span>. The protein is visualized as a pure permutahedral complex.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">file:=HapFile("data1V2X.pdb");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ReadPDBfileAsPurePermutahedralComplex("file");</span>
Pure permutahedral complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(K,0);</span>
[ 0 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Homology(K,1);</span>
[ 0 ]
Display(K);
</pre></div>
<p><img src="images/1V2X.jpg" align="center" width="350" alt="knotted protein"/></p>
<p>An alternative method for seeing that the pure permutahedral complex <span class="SimpleMath">\(K\)</span> has the homotopy type of a circle is to note that it is covered by open permutahedra (small open neighbourhoods of the closed <span class="SimpleMath">\(3\)</span>-dimensional permutahedral titles) and to form the nerve <span class="SimpleMath">\(N=Nerve({\mathcal U})\)</span> of this open covering <span class="SimpleMath">\(\mathcal U\)</span>. The nerve <span class="SimpleMath">\(N\)</span> has the same homotopy type as <span class="SimpleMath">\(K\)</span>. The following commands establish that <span class="SimpleMath">\(N\)</span> is a <span class="SimpleMath">\(1\)</span>-dimensional simplicial complex and display <span class="SimpleMath">\(N\)</span> as a circular graph.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">N:=Nerve(K);</span>
Simplicial complex of dimension 1.
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(GraphOfSimplicialComplex(N));</span>
</pre></div>
<p><img src="images/graphprotein.gif" align="center" width="200" alt="knotted protein"/></p>
<p>The boundary of the pure permutahedral complex <span class="SimpleMath">\(K\)</span> is a <span class="SimpleMath">\(2\)</span>-dimensional CW-complex <span class="SimpleMath">\(B\)</span> homeomorphic to a torus. We next use the advantageous features of pure permutahedral complexes to compute the homomorphism</p>
<p><span class="SimpleMath">\(\phi\colon \pi_1(B) \rightarrow \pi_1(\mathbb R^3\setminus \mathring{K}), a \mapsto yx^{-3}y^2x^{-2}yxy^{-1}, b\mapsto yx^{-1}y^{-1}x^2y^{-1}\)</span></p>
<p>where<br /> <span class="SimpleMath">\(\pi_1(B)=< a,b\, :\, aba^{-1}b^{-1}=1>\)</span>,<br /> <span class="SimpleMath">\(\pi_1(\mathbb R^3\setminus \mathring{K}) \cong < x,y\, :\, y^2x^{-2}yxy^{-1}=1, yx^{-2}y^{-1}x(xy^{-1})^2=1>\)</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=PureComplexComplement(K);</span>
Pure permutahedral complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(Y);</span>
418922
<span class="GAPprompt">gap></span> <span class="GAPinput">YY:=ZigZagContractedComplex(Y);</span>
Pure permutahedral complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(YY);</span>
3438
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=RegularCWComplex(YY);</span>
Regular CW-complex of dimension 3
<span class="GAPprompt">gap></span> <span class="GAPinput">f:=BoundaryMap(W);</span>
Map of regular CW-complexes
<span class="GAPprompt">gap></span> <span class="GAPinput">CriticalCells(Source(f));</span>
[ [ 2, 1 ], [ 2, 261 ], [ 1, 1043 ], [ 1, 1626 ], [ 0, 2892 ], [ 0, 24715 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">F:=FundamentalGroup(f,2892);</span>
[ f1, f2 ] -> [ f2*f1^-3*f2^2*f1^-2*f2*f1*f2^-1, f2*f1^-1*f2^-1*f1^2*f2^-1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=Target(F);</span>
<fp group on the generators [ f1, f2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelatorsOfFpGroup(G);</span>
[ f2^2*f1^-2*f2*f1*f2^-1, f2*f1^-2*f2^-1*f1*(f1*f2^-1)^2 ]
</pre></div>
<p><strong class="button">Example 2</strong></p>
<p>The next example of commands begins by readng two synthetic knots from a CSV file (containing the coordinates of the two sequences of vertices) and producing a pure permutahedral complex model of the two knots. The linking number of two knots is given by the low-dimension cup product of the complement of the knots. This linking number is computed to be <span class="SimpleMath">\(6\)</span>.</p>
<p><img src="images/twoknots.png" align="center" width="600" alt="two knots"/></p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">file1:=HapFile("data175_1.csv");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">file2:=HapFile("data175_2.csv");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ReadCSVfileAsPureCubicalKnot( [file1, file2]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=PurePermutahedralComplex(K!.binaryArray);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ThickenedPureComplex(K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K:=ContractedComplex(K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">#K is a permutahedral complex model of the two input knots</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(K);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Y:=PureComplexComplement(K);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=ZigZagContractedComplex(Y,2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=RegularCWComplex(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W:=ContractedComplex(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=FundamentalGroup(W);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup:=CupProduct(G);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cup([1,0],[0,1]);</span>
[ -6, 0 ]
</pre></div>
<p><a id="X78D3037283B506E0" name="X78D3037283B506E0"></a></p>
<h4>2.3 <span class="Heading">Constructing pure cubical and permutahedral complexes</span></h4>
<p>An <span class="SimpleMath">\(n\)</span>-dimensional pure cubical or permutahedral complex can be created from an <span class="SimpleMath">\(n\)</span>-dimensional array of 0s and 1s. The following example creates and displays two <span class="SimpleMath">\(3\)</span>-dimensional complexes.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">A:=[[[0,0,0],[0,0,0],[0,0,0]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [[1,1,1],[1,0,1],[1,1,1]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [[0,0,0],[0,0,0],[0,0,0]]];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=PureCubicalComplex(A);</span>
Pure cubical complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">P:=PurePermutahedralComplex(A);</span>
Pure permutahedral complex of dimension 3.
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(M);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(P);</span>
</pre></div>
<p><img src="images/cubicalring.gif" align="center" width="150" alt="cubical ring"/> <img src="images/permutahedralring.gif" align="center" width="400" alt="permutahedral ring"/></p>
<p><a id="X8462CF66850CC3A8" name="X8462CF66850CC3A8"></a></p>
<h4>2.4 <span class="Heading">Computations in dynamical systems</span></h4>
<p>Pure cubical complexes can be useful for rigourous interval arithmetic calculations in numerical analysis. They can also be useful for trying to estimate approximations of certain numerical quantities. To illustrate the latter we consider the <em>Henon map</em></p>
<p><span class="SimpleMath">\(f\colon \mathbb R^2 \rightarrow \mathbb R^2, \left( \begin{array}{cc} x\\ y \end{array}\right) \mapsto \left( \begin{array}{cc} y+1-ax^2\\ bx \\ \end{array}\right) .\)</span><br /></p>
<p>Starting with <span class="SimpleMath">\((x_0,y_0)=(0,0)\)</span> and iterating <span class="SimpleMath">\((x_{n+1},y_{n+1}) = f(x_n,y_n)\)</span> with the parameter values <span class="SimpleMath">\(a=1.4\)</span>, <span class="SimpleMath">\(b=0.3\)</span> one obtains a sequence of points which is known to be dense in the so called <em>strange attractor</em> <span class="SimpleMath">\({\cal A}\)</span> of the Henon map. The first <span class="SimpleMath">\(10\)</span> million points in this sequence are plotted in the following example, with arithmetic performed to 100 decimal places of accuracy. The sequence is stored as a <span class="SimpleMath">\(2\)</span>-dimensional pure cubical complex where each <span class="SimpleMath">\(2\)</span>-cell is square of side equal to <span class="SimpleMath">\(\epsilon =1/500\)</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=HenonOrbit([0,0],14/10,3/10,10^7,500,100);</span>
Pure cubical complex of dimension 2.
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(M);</span>
10287
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(M);</span>
</pre></div>
<p><img src="images/henon.png" align="center" width="700" alt="Henon attractor"/></p>
<p>Repeating the computation but with squares of side <span class="SimpleMath">\(\epsilon =1/1000\)</span></p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M:=HenonOrbit([0,0],14/10,3/10,10^7,1000,100);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(M);</span>
24949
</pre></div>
<p>we obtain the heuristic estimate</p>
<p><span class="SimpleMath">\(\delta \simeq \frac{ \log{ 24949}- \log{ 10287}} {\log{2}} = 1.277 \)</span></p>
<p>for the box-counting dimension of the attractor <span class="SimpleMath">\(\cal A\)</span>.</p>
<div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap1_mj.html">[Previous Chapter]</a> <a href="chap3_mj.html">[Next Chapter]</a> </div>
<div class="chlinkbot"><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>
<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>
|