<h3>8 <span class="Heading">(Co-)Homology of simplicial complexes</span></h3>
<p>By default, <strong class="pkg">simpcomp</strong> uses an algorithm based on discrete Morse theory (see Chapter <a href="chap12_mj.html#X7E9FD84F822A58D6"><span class="RefLink">12</span></a>, <code class="func">SCHomology</code> (<a href="chap7_mj.html#X78D66254858CE901"><span class="RefLink">7.3-9</span></a>)) for its homology computations. However, some additional (co-)homology related functionality cannot be realised using this algorithm. For this, <strong class="pkg">simpcomp</strong> contains an additional (co-)homology algorithm (cf. <code class="func">SCHomologyInternal</code> (<a href="chap8_mj.html#X858989CE797A8366"><span class="RefLink">8.1-5</span></a>)), which will be presented in this chapter.</p>
<p>Furthermore, whenever possible <strong class="pkg">simpcomp</strong> makes use of the <strongclass="pkg">GAP</strong> package ''homology'' <a href="chapBib_mj.html#biBDumas04Homology">[DHSW11]</a>, for an alternative method to calculate homology groups (cf. <code class="func">SCHomologyClassic</code> (<a href="chap6_mj.html#X864978877E7D4DA0"><span class="RefLink">6.9-31</span></a>)) which sometimes is much faster than the built-in discrete Morse theory algorithm.</p>
<p>Apart from calculating boundaries of simplices, boundary matrices or the simplicial homology of a given complex, <strong class="pkg">simpcomp</strong> is also able to compute a basis of the homology groups.</p>
<p>Calculates the matrix of the boundary operator <span class="SimpleMath">\(\partial_{\textit{k+1}}\)</span> of a simplicial complex <var class="Arg">complex</var>. Note that each column contains the boundaries of a <var class="Arg">k</var><span class="SimpleMath">\(+1\)</span>-simplex as a list of oriented <var class="Arg">k</var>-simplices and that the matrix is stored as a list of row vectors (as usual in GAP).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCBoundarySimplex</code>( <var class="Arg">simplex</var>, <var class="Arg">orientation</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a list upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Calculates the boundary of a given <var class="Arg">simplex</var>. If the flag <var class="Arg">orientation</var> is set to <code class="keyw">true</code>, the function returns the boundary as a list of oriented simplices of the form [ ORIENTATION, SIMPLEX ], where ORIENTATION is either +1 or -1 and a value of +1 means that SIMPLEX is positively oriented and a value of -1 that SIMPLEX is negatively oriented. If <var class="Arg">orientation</var> is set to <code class="keyw">false</code>, an unoriented list of simplices is returned.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCHomologyBasis</code>( <var class="Arg">complex</var>, <var class="Arg">k</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ integer, list of linear combinations of simplices ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Calculates a set of basis elements for the <var class="Arg">k</var>-dimensional homology group (with integer coefficients) of a simplicial complex <var class="Arg">complex</var>. The entries of the returned list are of the form [ MODULUS, [ BASEELM1, BASEELM2, ...] ], where the value MODULUS is 1 for the basis elements of the free part of the <var class="Arg">k</var>-th homology group and <span class="SimpleMath">\(q\geq 2\)</span> for the basis elements of the <span class="SimpleMath">\(q\)</span>-torsion part. In contrast to the function <code class="func">SCHomologyBasisAsSimplices</code> (<a href="chap8_mj.html#X7C569D9A7868C697"><span class="RefLink">8.1-4</span></a>) the basis elements are stored as lists of coefficient-index pairs referring to the simplices of the complex, i.e. a basis element of the form <span class="SimpleMath">\([ [ \lambda_1, i], [\lambda_2, j], \dots ] \dots\)</span> encodes the linear combination of simplices of the form <span class="SimpleMath">\(\lambda_1*\Delta_1+\lambda_2*\Delta_2\)</span> with <span class="SimpleMath">\(\Delta_1\)</span>=<code class="code">SCSkel(complex,k)[i]</code>, <span class="SimpleMath">\(\Delta_2\)</span>=<code class="code">SCSkel(complex,k)[j]</code> and so on.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCHomologyBasisAsSimplices</code>( <var class="Arg">complex</var>, <var class="Arg">k</var> )</td><tdclass="tdright">( method )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ integer, list of linear combinations of simplices ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Calculates a set of basis elements for the <var class="Arg">k</var>-dimensional homology group (with integer coefficients) of a simplicial complex <var class="Arg">complex</var>. The entries of the returned list are of the form [ MODULUS, [ BASEELM1, BASEELM2, ...] ], where the value MODULUS is 1 for the basis elements of the free part of the <var class="Arg">k</var>-th homology group and <span class="SimpleMath">\(q\geq 2\)</span> for the basis elements of the <span class="SimpleMath">\(q\)</span>-torsion part. In contrast to the function <code class="func">SCHomologyBasis</code> (<a href="chap8_mj.html#X7F9B47A97F5FA005"><span class="RefLink">8.1-3</span></a>) the basis elements are stored as lists of coefficient-simplex pairs, i.e. a basis element of the form <span class="SimpleMath">\([ [ \lambda_1, \Delta_1], [\lambda_2, \Delta_2], \dots ]\)</span> encodes the linear combination of simplices of the form <span class="SimpleMath">\(\lambda_1*\Delta_1+\lambda_2*\Delta_2 + \dots\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCHomologyInternal</code>( <var class="Arg">complex</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ integer, list ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>This function computes the reduced simplicial homology with integer coefficients of a given simplicial complex <var class="Arg">complex</var> with integer coefficients. It uses the algorithm described in <a href="chapBib_mj.html#biBDesbrun08DiscDiffFormCompModel">[DKT08]</a>.</p>
<p>The output is a list of homology groups of the form <span class="SimpleMath">\([H_0,....,H_d]\)</span>, where <span class="SimpleMath">\(d\)</span> is the dimension of <var class="Arg">complex</var>. The format of the homology groups <span class="SimpleMath">\(H_i\)</span> is given in terms of their maximal cyclic subgroups, i.e. a homology group <span class="SimpleMath">\(H_i\cong \mathbb{Z}^f + \mathbb{Z} / t_1 \mathbb{Z} \times \dots \times \mathbb{Z} / t_n \mathbb{Z}\)</span> is returned in form of a list <span class="SimpleMath">\([ f, [t_1,...,t_n] ]\)</span>, where <span class="SimpleMath">\(f\)</span> is the (integer) free part of <span class="SimpleMath">\(H_i\)</span> and <span class="SimpleMath">\(t_i\)</span> denotes the torsion parts of <span class="SimpleMath">\(H_i\)</span> ordered in weakly incresing size. See also <code class="func">SCHomology</code> (<a href="chap7_mj.html#X78D66254858CE901"><span class="RefLink">7.3-9</span></a>) and <code class="func">SCHomologyClassic</code> (<a href="chap6_mj.html#X864978877E7D4DA0"><span class="RefLink">6.9-31</span></a>).</p>
<p><strong class="pkg">simpcomp</strong> can also compute the cohomology groups of simplicial complexes, bases of these cohomology groups, the cup product of two cocycles and the intersection form of (orientable) 4-manifolds.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCCohomology</code>( <var class="Arg">complex</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ integer, list ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>This function computes the simplicial cohomology groups of a given simplicial complex <var class="Arg">complex</var> with integer coefficients. It uses the algorithm described in <a href="chapBib_mj.html#biBDesbrun08DiscDiffFormCompModel">[DKT08]</a>.</p>
<p>The output is a list of cohomology groups of the form <span class="SimpleMath">\([H^0,....,H^d]\)</span>, where <span class="SimpleMath">\(d\)</span> is the dimension of <var class="Arg">complex</var>. The format of the cohomology groups <span class="SimpleMath">\(H^i\)</span> is given in terms of their maximal cyclic subgroups, i.e. a cohomology group <span class="SimpleMath">\(H^i\cong \mathbb{Z}^f + \mathbb{Z} / t_1 \mathbb{Z} \times \dots \times \mathbb{Z} / t_n \mathbb{Z}\)</span> is returned in form of a list <span class="SimpleMath">\([ f, [t_1,...,t_n] ]\)</span>, where <span class="SimpleMath">\(f\)</span> is the (integer) free part of <span class="SimpleMath">\(H^i\)</span> and <span class="SimpleMath">\(t_i\)</span> denotes the torsion parts of <span class="SimpleMath">\(H^i\)</span> ordered in weakly increasing size.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCCohomologyBasis</code>( <var class="Arg">complex</var>, <var class="Arg">k</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ integer, list of linear combinations of simplices ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Calculates a set of basis elements for the <var class="Arg">k</var>-dimensional cohomology group (with integer coefficients) of a simplicial complex <var class="Arg">complex</var>. The entries of the returned list are of the form [ MODULUS, [ BASEELM1, BASEELM2, ...] ], where the value MODULUS is 1 for the basis elements of the free part of the <var class="Arg">k</var>-th homology group and <span class="SimpleMath">\(q\geq 2\)</span> for the basis elements of the <span class="SimpleMath">\(q\)</span>-torsion part. In contrast to the function <code class="func">SCCohomologyBasisAsSimplices</code> (<a href="chap8_mj.html#X7A5047E57E150716"><span class="RefLink">8.2-4</span></a>) the basis elements are stored as lists of coefficient-index pairs referring to the linear forms dual to the simplices in the <span class="SimpleMath">\(k\)</span>-th cochain complex of <var class="Arg">complex</var>, i.e. a basis element of the form <span class="SimpleMath">\([ [ \lambda_1, i], [\lambda_2, j], \dots ] \dots\)</span> encodes the linear combination of simplices (or their dual linear forms in the corresponding cochain complex) of the form <span class="SimpleMath">\(\lambda_1*\Delta_1+\lambda_2*\Delta_2\)</span> with <span class="SimpleMath">\(\Delta_1\)</span>=<code class="code">SCSkel(complex,k)[i]</code>, <span class="SimpleMath">\(\Delta_2\)</span>=<code class="code">SCSkel(complex,k)[j]</code> and so on.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCCohomologyBasisAsSimplices</code>( <var class="Arg">complex</var>, <var class="Arg">k</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a list of pars of the form <code class="code">[ integer, linear combination of simplices ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Calculates a set of basis elements for the <var class="Arg">k</var>-dimensional cohomology group (with integer coefficients) of a simplicial complex <var class="Arg">complex</var>. The entries of the returned list are of the form [ MODULUS, [ BASEELM1, BASEELM2, ...] ], where the value MODULUS is 1 for the basis elements of the free part of the <var class="Arg">k</var>-th homology group and <span class="SimpleMath">\(q\geq 2\)</span> for the basis elements of the <span class="SimpleMath">\(q\)</span>-torsion part. In contrast to the function <code class="func">SCCohomologyBasis</code> (<a href="chap8_mj.html#X85910A6B824D63A4"><span class="RefLink">8.2-3</span></a>) the basis elements are stored as lists of coefficient-simplex pairs referring to the linear forms dual to the simplices in the <span class="SimpleMath">\(k\)</span>-th cochain complex of <var class="Arg">complex</var>, i.e. a basis element of the form <span class="SimpleMath">\([ [ \lambda_1, \Delta_i], [\lambda_2, \Delta_j], \dots ] \dots\)</span> encodes the linear combination of simplices (or their dual linear forms in the corresponding cochain complex) of the form <span class="SimpleMath">\(\lambda_1*\Delta_1+\lambda_2*\Delta_2 + \dots\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCCupProduct</code>( <var class="Arg">complex</var>, <var class="Arg">cocycle1</var>, <var class="Arg">cocycle2</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a list of pairs of the form <code class="code">[ ORIENTATION, SIMPLEX ]</code> upon success, <code class="keyw">fail</code> otherwise.</p>
<p>The cup product is a method of adjoining two cocycles of degree <span class="SimpleMath">\(p\)</span> and <span class="SimpleMath">\(q\)</span> to form a composite cocycle of degree <span class="SimpleMath">\(p + q\)</span>. It endows the cohomology groups of a simplicial complex with the structure of a ring.</p>
<p>The construction of the cup product starts with a product of cochains: if <var class="Arg">cocycle1</var> is a p-cochain and <var class="Arg">cocylce2</var> is a q-cochain of a simplicial complex <var class="Arg">complex</var> (given as list of oriented p- (q-)simplices), then</p>
<p>where <span class="SimpleMath">\(\sigma\)</span> is a <span class="SimpleMath">\(p + q\)</span>-simplex and <span class="SimpleMath">\(\iota_S\)</span>, <span class="SimpleMath">\(S \subset \{0,1,...,p+q \}\)</span> is the canonical embedding of the simplex spanned by <span class="SimpleMath">\(S\)</span> into the <span class="SimpleMath">\((p + q)\)</span>-standard simplex.</p>
<p><span class="SimpleMath">\(\sigma \circ \iota_{0,1, ..., p}\)</span> is called the <span class="SimpleMath">\(p\)</span>-th front face and <span class="SimpleMath">\(\sigma \circ \iota_{p, p+1, ..., p + q}\)</span> is the <span class="SimpleMath">\(q\)</span>-th back face of <span class="SimpleMath">\(\sigma\)</span>, respectively.</p>
<p>Note that this function only computes the cup product in the case that <var class="Arg">complex</var> is an orientable weak pseudomanifold of dimension <span class="SimpleMath">\(2k\)</span> and <span class="SimpleMath">\(p = q = k\)</span>. Furthermore, <var class="Arg">complex</var> must be given in standard labeling, with sorted facet list and <var class="Arg">cocylce1</var> and <var class="Arg">cocylce2</var> must be given in simplex notation and labeled accordingly. Note that the latter condition is usually fulfilled in case the cocycles were computed using <code class="func">SCCohomologyBasisAsSimplices</code> (<a href="chap8_mj.html#X7A5047E57E150716"><span class="RefLink">8.2-4</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCIntersectionForm</code>( <var class="Arg">complex</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a square matrix of integer values upon success, <code class="keyw">fail</code> otherwise.</p>
<p>For <span class="SimpleMath">\(2k\)</span>-dimensional orientable manifolds <span class="SimpleMath">\(M\)</span> the cup product (see <code class="func">SCCupProduct</code> (<a href="chap8_mj.html#X7A9137847BF96DF3"><span class="RefLink">8.2-5</span></a>)) defines a bilinear form</p>
<p>H<span class="SimpleMath">\(^k ( M ) \times \)</span>H<span class="SimpleMath">\(^k ( M ) \to \)</span>H<span class="SimpleMath">\(^{2k} (M), (a,b) \mapsto a \cup b \)</span></p>
<p>called the intersection form of <span class="SimpleMath">\(M\)</span>. This function returns the intersection form of an orientable combinatorial <span class="SimpleMath">\(2k\)</span>-manifold <var class="Arg">complex</var> in form of a matrix <code class="code">mat</code> with respect to the basis of H<span class="SimpleMath">\(^k ( \)</span><var class="Arg">complex</var>M<span class="SimpleMath">\()\)</span> computed by <code class="func">SCCohomologyBasisAsSimplices</code> (<a href="chap8_mj.html#X7A5047E57E150716"><span class="RefLink">8.2-4</span></a>). The matrix entry <code class="code">mat[i][j]</code> equals the intersection number of the <code class="code">i</code>-thbase element with the <code class="code">j</code>-thbase element of H<span class="SimpleMath">\(^k ( \)</span><var class="Arg">complex</var>M<span class="SimpleMath">\()\)</span>.</p>
<p>Computes the parity of the intersection form of a combinatorial manifold <var class="Arg">complex</var> (see <code class="func">SCIntersectionForm</code> (<a href="chap8_mj.html#X835E7016826D14A8"><span class="RefLink">8.2-6</span></a>)). If the intersection for is even (i. e. all diagonal entries are even numbers) <code class="code">0</code> is returned, otherwise <code class="code">1</code> is returned.</p>
<p>Returns the dimensionality of the intersection form of a combinatorial manifold <var class="Arg">complex</var>, i. e. the length of a minimal generating set of H<span class="SimpleMath">\(^k (M)\)</span> (where <span class="SimpleMath">\(2k\)</span> is the dimension of <var class="Arg">complex</var>). See <code class="func">SCIntersectionForm</code> (<a href="chap8_mj.html#X835E7016826D14A8"><span class="RefLink">8.2-6</span></a>) for further details.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SCIntersectionFormSignature</code>( <var class="Arg">complex</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a triple of integers upon success, <code class="keyw">fail</code> otherwise.</p>
<p>Computes the dimensionality (see <code class="func">SCIntersectionFormDimensionality</code> (<a href="chap8_mj.html#X7B5F948B84F5E316"><span class="RefLink">8.2-8</span></a>)) and the signature of the intersection form of a combinatorial manifold <var class="Arg">complex</var> as a <span class="SimpleMath">\(3\)</span>-tuple that contains the dimensionality in the first entry and the number of positive / negative eigenvalues in the second and third entry. See <code class="func">SCIntersectionForm</code> (<a href="chap8_mj.html#X835E7016826D14A8"><span class="RefLink">8.2-6</span></a>) for further details.</p>
<p>Internally calls the <strong class="pkg">GAP</strong>-functions <code class="code">Matrix_CharacteristicPolynomialSameField</code> and <code class="code">CoefficientsOfLaurentPolynomial</code> to compute the number of positive / negative eigenvalues of the intersection form.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.