{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this overview we try to show, without entering in detailed explanations, various possibilities of ``Kenzo`` in algebraic topology.\n", "\n", "The material is arranged in a sequence of cells. Cells marked with ``In [*]`` represent (editable) input expressions, which in a traditional REPL (Read-Evaluate-Print Loop) would be typed by the user in a Lisp session. Only the ``In [*]`` mark is visible if the Lisp statement is not yet run; if run, another ``Out [*]`` mark is displayed with the corresponding object returned by the execution. Finally, there might be additional, non-editable, diagnostic output printed before the output component, most often a side-effect of the input form evaluation.\n", "\n", "Other cells are the ``text`` cells, giving various explanations about the Lisp statements and their evaluations. Not editable by the user.\n", "\n", "## Getting off the Ground\n", "\n", "Load the ``Kenzo`` software by evaluating the following expression. When loaded successfully, the value of this form is a single string atom list ``\"kenzo\"``." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(ql:quickload \"kenzo\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The main functionality of the ``Kenzo`` software is defined in a Lisp package called ``cat``. Initialize the software by calling the ``cat-init`` function of the ``cat`` package. Upon successful initialization this form evaluates to ``NIL``." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(in-package \"CAT\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(cat-init)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can print the ``Kenzo`` version by calling the ``kenzo-version`` function:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(kenzo-version)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ``Kenzo`` in Action\n", "\n", "Let us begin by the space $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}, 3)$ described as a simplicial set having only three non-degenerate simplices, namely in dimension $0$, $3$ and $4$. In the representation created by the software, the 0-simplex (base point), the 3-simplex and the 4-simplex are respectively labelled ``*``, ``M3`` and ``N4``. The faces 0 and 2 of the 4-simplex ``N4`` are identified with (pasted to) the 3-simplex ``M3``, the others being contracted on the base point. To create the simplicial set one types simply:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def m23 (moore 2 3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The system answers that a ``Kenzo`` object has been created, with number 1 and type ``SIMPLICIAL SET``. This object may be referenced by the symbol ``m23``." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "m23" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We may compute the homology groups of this space, using the underlying chain complex induced by the simplicial set description. Here we compute the $H_i$ from 0 to 4 included. When in the answer the component part is void, it means that the corresponding homology group is null." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology m23 0 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The homology of ``m23`` is $(Z,0,0,Z/2,0,\\ldots)$; the reduced homology is only $Z/2$ in dimension 3, defining the Moore space up to homotopy.\n", "\n", "As ``m23`` is a simplicial set, it is possible to create the cartesian product $\\texttt{m23}\\times\\texttt{m23}$ by the function ``crts-prdc`` (= CaRTeSian PRoDuCt). This is a new simplicial set." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def m23xm23 (crts-prdc m23 m23))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Being a simplicial set, $\\texttt{m23xm23}$ is also a chain complex object and we may for instance ask for the basis in dimension 6." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(basis m23xm23 6)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(length *)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As shown by the last command, the number of elements of the basis is quite large (230). The user will note that the basis elements are in this particular case formed by cartesian products of *degenerated simplices*. In the list, an element like ```` means $\\eta_1\\eta_0\\mathrm{N4}\\times\\eta_5\\eta_3\\eta_2\\mathrm{M3}$.\n", "\n", "We may construct also the tensor product $\\mathrm{m23}\\otimes\\mathrm{m23}$ from the underlying chain complex of the simplicial set ``m23``. The tensor product of two simplicial sets do not make sense, and Kenzo understands to work on the underlying chain complex ``m23``. This tensor product is a new chain complex and we see that the basis in dimension 6 has only one element:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def t2m23 (tnsr-prdc m23 m23))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(basis t2m23 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Eilenberg-Zilber theorem is used to compute the homology groups of the cartesian product space: as chain complexes, ``m23xm23`` and ``t2m23`` have the same homology groups, but the computations using the tensor product are considerably faster. The user can check Künneth's theorem." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology m23xm23 0 8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us consider now the space $\\mathrm{K}(\\mathbb{Z}, 1)$. This is an Abelian simplicial group created in ``Kenzo`` by the function ``k-z``. In this simplicial group, a simplex in dimension $n$ is mathematically represented by a sequence of integers, known as a *bar* object: $$ [a_1 \\mid a_2 \\mid \\ldots \\mid a_n].$$\n", "In ``Kenzo``, a non-degenerate simplex of $\\mathrm{K}(\\mathbb{Z}, 1)$ in dimension $n$ will be simply a list of $n$ non-null integers, for instance: ``(2 3 4 5)``. In dimension 0, the only simplex is ``NIL`` (the base point)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def kz1 (k-z 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But this object is also a *coalgebra* and an *algebra*, and we may \n", "see the effect of the respective induced *coproduct* and *product*: " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(cprd kz1 4 '(2 3 4 5))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(aprd kz1 6 (tnpr 2 '(1 2) 4 '(3 4 5 6)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The printed results are the printed representation of *combinations*, i.e., integer linear combinations of generators resulting from the application of the morphisms. The degree of the combination is indicated by the information: ``CMBN n``. \n", "\n", "In the same way, we may create the Abelian simplicial groups $\\mathrm{K}(\\mathbb{Z}/2\\mathbb{Z}, n)$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def k-z2-2 (k-z2 2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology k-z2-2 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us play now with the sphere $S^3$ and its loop spaces. $S^3$ and $\\Omega^2 S^3$ are created by \n", "respective calls to the functions ``sphere`` and ``loop-space``. Then we compute the $H_4$ and $H_5$ of $\\Omega^2 S^3$:" ] }, { "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 o2s3 (loop-space s3 2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology o2s3 4 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us take now the first loop space $\\Omega^1 S^3$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def os3 (loop-space s3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following instruction, we locate in the symbol ``L1`` the canonical generator of $\\pi_2 (\\Omega^1S^3)$, that is the 2-simplex coming from the original sphere. In fact, the object created by the command $\\texttt{(loop3 0 's3 1)}$ is the \"word\" $S3^1$ belonging to the Kan simplicial version $G(S^3)$ (a simplicial group) of the loop space $\\Omega S^3$." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def L1 (loop3 0 's3 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us consider also the 2-degeneracy of the base point of the loop space. In the printed result, the user will recognize the degeneracy $\\eta_1\\eta_0$ of the null loop, base point of $\\Omega^1 S^3$: " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def null-simp (absm 3 +null-loop+))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We may build now a new space by pasting a disk $D3$ as indicated by the following call. It means that we \"paste\" to the space ``os3`` a 3-simplex named ``D3``, the attaching map being described by the list of its faces in dimension 2. The faces 0 and 2 of D3 are pasted to L1, the faces 1 and 3 are collapsed on the base point; in this way the attaching map $(S^2 \\rightarrow \\Omega S^3)$ has degree 2." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def dos3 (disk-pasting os3 3 '\n", " (list L1 null-simp L1 null-simp)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us compute a few homology groups of the new space ``dos3``:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology dos3 2 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But more interesting, let us build the loop space of the object ``dos3`` and let us compute the homology in dimension 5:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def odos3 (loop-space dos3))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology odos3 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us continue with the Kan theory. First, we check that $S^3$ is not of type Kan and that $\\Omega S^3$ is indeed of type Kan and a non-Abelian simplicial group." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(typep s3 'kan)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(typep os3 'kan)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(typep os3 'simplicial-group)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(typep os3 'ab-simplicial-group)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us create the word $L2=(S3)^2$, i.e an object belonging to $\\Omega S^3$ and let us apply the product of the underlying algebra upon $L2 \\otimes L2$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def L2 (loop3 0 's3 2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def square (aprd os3 4 (tnpr 2 L2 2 L2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the result is a linear combination of words composed from degeneracies of ``L2``. The following instruction selects the generator part of the \n", "second element of the previous combination." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def L4 (gnrt (second (cmbn-list square))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us use the lisp function ``mapcar`` (one among the various iteration functions of Lisp) to create the list of the faces 1, 2, 3 and 4 of the object ``L4``, this list is a \"Kan horn\"." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def horn (mapcar #'(lambda (i) (face os3 i 4 l4)) '(1 2 3 4)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function ``kfll`` tries to find a filling of this \"Kan horn\", and we see that the face 2 of the resulting simplex (which is very different from ``L4``) is the same as the face 2 of ``L4``." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def kan-simplex (kfll os3 0 4 horn))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(face os3 2 4 kan-simplex)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(second horn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let ${\\cal G}$ be a simplicial group 0-reduced. $\\Omega S^3$ is such a group. The program ``Kenzo`` allows the construction of the universal bundle $\\mathcal{WG}$ and in particular of its base space $\\overline{\\mathcal{W}} \\mathcal{G}$, i.e. the classifying space of ${\\cal G}$. In our case, as $\\Omega S^3$ in non-Abelian, the result is not a simplicial group but only a simplicial set. We verify that the $H_4$, which in principle should be isomorphic to $H_4 S^3 = 0$, is really null." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def cls-os3 (classifying-space os3))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(typep cls-os3 'simplicial-group)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology cls-os3 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us end this short overview with an example of computation of homotopy groups. The method used in ``Kenzo`` is the Whitehead tower. An extended version of the Kenzo program due to Ana Romero is more general, but in this present version only the case where the first non-null homology group (in non-null dimension) is $\\mathbb{Z}$ or $\\mathbb{Z}/{2\\mathbb{Z}}$ can be processed; however if this homology group is a direct sum of several copies of $\\mathbb{Z}$ or $\\mathbb{Z}/{2 \\mathbb{Z}}$, then the corresponding stage of the Whitehead tower may also be constructed step by step.\n", "\n", "We take again $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}, 3)$ whose $H_3$ is $\\mathbb{Z}/2\\mathbb{Z}$. First the fundamental cohomology class is constructed:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def ch3 (chml-clss m23 3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the function ``z2-whitehead`` is called to build a fibration over the simplicial set ``m23`` canonically associated to the cohomology class ``ch3``." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def f3 (z2-whitehead m23 ch3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the total space of the fibration is built:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def x4 (fibration-total f3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The $H_4$ of this total space is the $\\pi_4$ of $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z})$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology x4 3 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We may now iterate the process, to compute the $\\pi_5$ of $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z})$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def ch4 (chml-clss x4 4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def f4 (z2-whitehead x4 ch4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(def x5 (fibration-total f4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "(homology x5 4 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So $\\pi_5(\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}))$ is $\\mathbb{Z}/4\\mathbb{Z}$." ] } ], "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 }