diff --git a/examples/Chapter9.ipynb b/examples/Chapter9.ipynb new file mode 100644 index 0000000..7052a91 --- /dev/null +++ b/examples/Chapter9.ipynb @@ -0,0 +1,855 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Eilenberg-Zilber module\n", + "\n", + "The functions of this module are related to the chain complex of the product of two simplicial sets. They implement the Eilenberg-Mac Lane homomorphism (function ``eml``) and the Alexander-Whitney homomorphism (function ``aw``).\n", + "\n", + "``eml`` *ssx ssy* *[Function]*\n", + "> build the Eilenberg-Mac Lane homomorphism $\\cal EML$, also called the *shuffle homomorphism*. (**Marvin Greenberg**, *Lectures on Algebraic Topology*, W.A. Benjamin Inc, 1967.) The arguments *ssx* and *ssy* represent some simplicial sets $X$ and $Y$. The homomorphism \n", + "$${\\cal EML}:{\\cal C}_*(X) \\otimes {\\cal C}_*(Y) \\longrightarrow {\\cal C}_*(X \\times Y)$$\n", + "is defined by:\n", + "$${\\cal EML}(\\alpha \\otimes \\beta)= \n", + " \\sum{{\\varepsilon(\\varpi)}(\\eta_{j_q}\\ldots \\eta_{j_1}\\alpha,\\, \\eta_{i_p}\\ldots \\eta_{i_1}\\beta)},$$\n", + "where $X\\times Y$ is the simplicial cartesian product of the two simplicial sets $X$ and $Y$, $\\alpha$ (resp. $\\beta$) is a geometric simplex of $X$ (resp. $Y$), $\\eta_k$ is the $k^{th}$ degeneracy operator, the sum is over all permutations $\\varpi= (i_1 \\ldots i_p j_1 \\ldots j_q)$ of $(0 \\ldots p+q-1)$ such that $$ i_1 < i_2 < \\cdots < i_p,\\quad j_1 < j_2 < \\cdots < j_q, \\quad p+q=n$$\n", + "and $\\varepsilon(\\varpi)$ is the signature of the corresponding permutation. The sum at the right hand part determines a decomposition of the geometric product $\\alpha \\times \\beta$ into a combination of generators of the simplicial cartesian product (see the simplicial sets chapter). The combination takes in account the orientation of every simplex. These generators are non-degenerate simplices of the cartesian product but their projections are in general degenerate simplices of $X$ and $Y$ (see the examples).\n", + " \n", + "``aw`` *ssx ssy* *[Function]*\n", + "> build the Alexander-Whitney chain homomorphism. The arguments *ssx* and *ssy* represent some simplicial sets $X$ and $Y$. The homomorphism \n", + "$${\\cal AW}:{\\cal C}_*(X \\times Y) \\longrightarrow {\\cal C}_*(X) \\otimes {\\cal C}_*(Y)$$\n", + "is defined by the following rule: let $\\sigma$ be an $n$-simplex and let us define\n", + "two operators, $\\lambda_p$ and $\\rho_q$:\n", + "$$\\lambda_p: {\\cal C}_n(X) \\longrightarrow {\\cal C}_{n-p}(X),\\quad (n \\geq p),$$\n", + "$$\\rho_q: {\\cal C}_n(Y) \\longrightarrow {\\cal C}_{n-q}(X),\\quad (n \\geq q),$$\n", + "respectively by\n", + "$$\\lambda_p(\\sigma)=\\partial_{p+1}\\ldots \\partial_n \\sigma$$\n", + "and\n", + "$$\\rho_q(\\sigma)=\\partial_0\\ldots\\partial_{n-q} \\sigma.$$\n", + "Now, for the generator $(\\alpha,\\beta)$ of degree $n$ in ${\\cal C}_*(X \\times Y)$, the Alexander-Whitney homomorphism is defined by:\n", + "$${\\cal AW}(\\alpha, \\beta)=\\sum_{p=0}^n{\\lambda_p(\\alpha) \\otimes \\rho_{n-p}(\\beta)}.$$\n", + "This sum can be interpreted as a decomposition, up to a homotopy, of the simplex $\\alpha \\times \\beta$\n", + "($\\alpha$ **and** $\\beta$ can be degenerate even if $\\alpha \\times \\beta$ is not) in terms of (tensor) products of non-degenerate simplices.\n", + "\n", + "``phi`` *ssx ssy* *[Function]*\n", + "> build the homotopy chain morphism \n", + "$$\\Phi: {\\cal C}_*(X \\times Y) \\longrightarrow {\\cal C}_*(X \\times Y)$$\n", + "satisfying the formula\n", + "$$d \\circ \\Phi + \\Phi \\circ d = Id - {\\cal EML} \\circ {\\cal AW}.$$\n", + "\n", + "``ez`` *ssx ssy* *[Function]*\n", + "> build the Eilenberg--Zilber reduction as shown by the following diagram, where $X={\\mathit ssx}$ \n", + "and $Y={\\mathit ssy}$.\n", + "$$\n", + "\\begin{align}\n", + "{{\\cal C}_*(X \\times Y)}\\quad & \\quad \\stackrel{\\Phi}{\\longrightarrow} & {}^s{{\\cal C}_*(X \\times Y)} \\cr\n", + " {\\scriptstyle {\\cal AW}} \\downarrow \\uparrow {\\scriptstyle {\\cal EML}} & & \\cr\n", + " {{\\cal C}_*(X) \\otimes {\\cal C}_*(Y)} & &\\cr\n", + "\\end{align}\n", + "$$\n", + "\n", + "## Examples" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cl-jupyter-user:png-from-file \"eml1.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As simplicial sets $X$ and $Y$, let us use two copies of $\\Delta^\\mathbb{N}$, that we may build by the lisp statement ``(soft-delta-infinity)`` (Though we repeat this statement in the following line, there will be only a simplicial set created). We have chosen the *soft* version, to inspect the results more easily." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def eml-mrp (eml (soft-delta-infinity)(soft-delta-infinity)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us apply the Eilenberg-Mac Lane homomorphism to the tensor product $(0\\, 1)\\otimes (2\\, 3)$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? eml-mrp 2 (tnpr 1 (d(dlop-ext-int '(0 1)))\n", + " 1 (d(dlop-ext-int '(2 3)))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The decomposition is illustrated by the previous geometric diagram, where for instance a degenerate simplex like $\\eta_1(0\\, 1)$ is noted $(0\\, 1\\, 1)$.\n", + "\n", + "For the tensor product $(0\\,1\\,2)\\otimes (3\\,4)$, an intuitive description is still possible, as shown in the following diagram, but not in higher dimensions.\n", + "\n", + "As the input of simplices is sometimes cumbersome, we have defined a macro called ``code`` to facilitate the input of the simplices." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(defmacro code (arg) `(d (dlop-ext-int ,arg)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? eml-mrp 3 (tnpr 2 (code '(0 1 2)) 1 (code '(3 4)) ))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? eml-mrp 6 (tnpr 2 (code '(0 3 5)) 4 (code '(0 1 2 4 5)) ))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cl-jupyter-user:png-from-file \"eml2.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Alexander-Whitney homomorphism works in the reverse sense:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def aw-mrp (aw (soft-delta-infinity)(soft-delta-infinity)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The 2-simplices of the cartesian product $(0\\, 1\\, 2) \\times (3\\, 4)$ are (here, the degeneracy operators are in clear):\n", + "\n", + "```\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " --> \n", + " \n", + "```\n", + "\n", + "The last but one line of this list describes the triangle shown in dashed lines in the prism in the previous picture, joining the points $(0,3), (1,3), (2,4)$. Let us apply the homomorphism $\\cal AW$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? aw-mrp 2 (crpr 0 (code '(0 1 2)) 1 (code '(3 4)) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that we obtain a kind of decomposition, up to a homotopy, of this triangle in terms of the two tensor products $(0\\, 1\\, 2) \\otimes (4)$ (the \"upper\" triangle of the prism) and $(0\\,1) \\otimes (3\\, 4)$ (the \"front\" rectangle of the prism).\n", + "\n", + "The composition ${\\cal AW} \\circ {\\cal EML}$ is the identity in the tensor product of the two chain complexes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def g (tnpr 2 (code '(0 1 2)) 3 (code '(2 3 4 5)) ))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? eml-mrp 5 g)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? aw-mrp *)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(setf *tnpr-with-degrees* t)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But the composition ${\\cal EML} \\circ {\\cal AW}$ is by no means the identity. This composition\n", + "is related to the identity via the homotopy morphism $\\Phi$. Let us consider the two following simple simplicial sets {\\tt delta-0-1} and {\\tt delta-2-3}, where the second is the simplicial set, model of the segment $[2,\\,3]$. To build ``delta-2-3``, we have just changed the basis function, the base point and the comment in the system function ``soft-delta``." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def delta-0-1 (soft-delta 1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def delta-2-3 (build-smst \n", + " :cmpr #'soft-delta-cmpr\n", + " :basis #'(lambda(dmn) \n", + " (case dmn\n", + " (0 (list (d 4)(d 8)))\n", + " (1 (list(d 12))))) \n", + " :bspn (d 4)\n", + " :face #'soft-delta-face\n", + " :intr-dgnl #'soft-delta-dgnl :dgnl-strt :gnrt\n", + " :intr-bndr #'soft-delta-bndr :bndr-strt :gnrt\n", + " :orgn '(my-soft-delta-2-3)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(show-structure delta-0-1 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(show-structure delta-2-3 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us build the cartesian product of these two simplicial sets and let us list, in particular the 0-simplices and the 1-simplices of this new simplicial set:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def carre (crts-prdc delta-0-1 delta-2-3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(show-structure carre 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us take the first 1-simplex which corresponds to the diagonal of the square (realisation of the cartesian product) and let us build the three homomorphisms $\\cal AW$, $\\cal EML$ and $\\Phi$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def diagonal (crpr 0 (code '(0 1)) 0 (code '(2 3))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def aw-mrp (aw delta-0-1 delta-2-3)) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def eml-mrp (eml delta-0-1 delta-2-3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def phi-hmy (phi delta-0-1 delta-2-3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that \n", + "$$ {\\cal AW}((0\\, 1), (2\\, 3)) = (0\\, 1)\\otimes (3) + (0) \\otimes (2\\, 3),$$\n", + "$$ {\\cal EML}((0\\, 1)\\otimes (3) + (0) \\otimes (2\\, 3))= ((0\\, 1), \\eta_0 (3)) \n", + " + (\\eta_0 (0), (2\\, 3))$$\n", + "and that $\\Phi$ applied to the diagonal returns the 2-simplex compatible with the homotopy. \n", + "$$\\Phi((0\\, 1), (2\\, 3))= (\\eta_1(2\\, 3),\\eta_0(0\\, 1)).$$\n", + "This is illustrated by the following diagram (the 2-simplex is the shaded triangle)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cl-jupyter-user:png-from-file \"eml3.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? aw-mrp 1 diagonal)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? eml-mrp *)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(? phi-hmy 1 diagonal)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us inspect now the reduction generated by the function ``ez`` and verify on reasonably general combinations that the involved morphisms are coherent." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def ez-rdc (ez (soft-delta-infinity)(soft-delta-infinity)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(inspect *)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the comment slots we see that the morphism *f*, *g* and *h* are respectively *aw*, *eml* and *phi*:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(orgn ez-rdc)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(orgn (f ez-rdc))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(orgn (g ez-rdc))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(orgn (h ez-rdc))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(setf *bc* (cmbn 3 1 (tnpr 0 (code '(0)) 3 (code '(1 2 3 4)))\n", + " 10 (tnpr 1 (code '(5 6)) 2 (code '(7 8 9)))\n", + " 100 (tnpr 2 (code '(10 11 12)) 1 (code '(13 14)))\n", + " 1000 (tnpr 3 (code '(15 16 17 18)) 0 (code '(19)))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(setf *tc* \n", + " (cmbn 3 1 (crpr 0 (code '(0 1 2 3)) 0 (code '(5 6 7 8)))\n", + " 10 (crpr 0 (code '(0 1 2 3)) (dgop-ext-int '(2 0)) (code '(5 6)))\n", + " 100 (crpr (dgop-ext-int '(2 1)) (code '(0 1)) 0 (code '(5 6 7 8)))\n", + " 1000 (crpr (dgop-ext-int '(2 1)) (code '(0 1)) 1 (code '(5 6 7)))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(pre-check-rdct ez-rdc)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(check-rdct-no-wait)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Application to Homology\n", + "\n", + "Let us illustrate the Eilenberg-Zilber theorem by the following example. Let us consider the manifold $P^2\\mathbb{R}\\times S^3$. The theorem says that\n", + "$$H_n({\\cal C}_*(P^2\\mathbb{R}\\times S^3)) \\cong H_n({\\cal C}_*(P^2\\mathbb{R}) \\otimes {\\cal C}_*(S^3)).$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cat-init)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def p2 (moore 2 1)) ;; Moore(2,1) generates the projectif plane." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def s3 (sphere 3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simplicial set ``p2-X-s3`` is obtained from the cartesian product of the two simplicial sets ``p2`` and ``s3``." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def p2-X-s3 (crts-prdc p2 s3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, the chain complex ``p2-T-s3`` is obtained from the tensor product of the two chain complexes associated to both simplicial sets ``p2`` and ``s3`` (don't forget that the class ``SIMPLICIAL SET`` is a subclass of the class ``CHAIN COMPLEX``)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def p2-T-s3 (tnsr-prdc p2 s3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Applying successively the function ``chcm-homology`` (which computes directly the homology groups without using a homotopy equivalence) on these chain complexes, shows that the homology groups are effectively isomorphic, but the method of the tensor product is much faster than the method of the simple cartesian product, the number of generators being much more smaller." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(time (dotimes (i 6) (chcm-homology p2-X-s3 i)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(time (dotimes (i 6) (chcm-homology p2-T-s3 i)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following example shows clearly the discrepancy between the length of the basis of two objects built respectively by cartesian product and tensor product and having the same homology groups." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cat-init)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def s2 (sphere 2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def s3 (sphere 3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def s2Xs2Xs3 (crts-prdc (crts-prdc s2 s2) s3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(orgn s2Xs2Xs3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(def s2Ts2Ts3 (tnsr-prdc (tnsr-prdc s2 s2) s3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(dotimes (i 7) (print (length (basis s2Xs2Xs3 i))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(dotimes (i 7) (print (length (basis s2Ts2Ts3 i))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Searching homology process for cartesian products\n", + "\n", + "When the ``search-efhm`` method recognizes a cartesian product, by means of the comment list (slot ``orgn``) of the object, it builds a homotopy equivalence where the right bottom chain complex is created by the function ``ez``. The process may be recursif as shown by the very definition of the method:\n", + "\n", + "```lisp\n", + "(defun LEFT-CRTS-PRDC-EFHM (smst1 smst2)\n", + " (declare (type simplicial-set smst1 smst2))\n", + " (the homotopy-equivalence\n", + " (build-hmeq\n", + " :lrdct (trivial-rdct (crts-prdc smst1 smst2))\n", + " :rrdct (ez smst1 smst2))))\n", + "\n", + "(defmethod SEARCH-EFHM (smst (orgn (eql 'crts-prdc)))\n", + " (declare (type simplicial-set smst))\n", + " (the homotopy-equivalence\n", + " (cmps\n", + " (left-crts-prdc-efhm (second (orgn smst)) \n", + " (third (orgn smst)))\n", + " (tnsr-prdc (efhm (second (orgn smst)))\n", + " (efhm (third (orgn smst)))))))\n", + "```\n", + "\n", + "### Lisp files concerned in this chapter\n", + "\n", + "``eilenberg-zilber.lisp``, ``searching-homology.lisp``." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "SBCL Lisp", + "language": "lisp", + "name": "lisp" + }, + "language_info": { + "codemirror_mode": "text/x-common-lisp", + "mimetype": "text/x-common-lisp", + "name": "common-lisp", + "pygments_lexer": "common-lisp", + "version": "X3J13" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/eml1.png b/examples/eml1.png new file mode 100644 index 0000000..cc68843 Binary files /dev/null and b/examples/eml1.png differ diff --git a/examples/eml2.png b/examples/eml2.png new file mode 100644 index 0000000..75951e8 Binary files /dev/null and b/examples/eml2.png differ diff --git a/examples/eml3.png b/examples/eml3.png new file mode 100644 index 0000000..c1ed718 Binary files /dev/null and b/examples/eml3.png differ