From 8042a349761613b08634ac265372e6818a4446c8 Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Fri, 14 Aug 2015 21:21:04 -0500 Subject: [PATCH] Updated to the latest cl-jupyter format. --- examples/Chapter1.ipynb | 4822 +++++++++++++++++----------------- examples/Overview.ipynb | 5405 ++++++++++++++++++++------------------- 2 files changed, 5250 insertions(+), 4977 deletions(-) diff --git a/examples/Chapter1.ipynb b/examples/Chapter1.ipynb index 1ae2196..5241dfe 100644 --- a/examples/Chapter1.ipynb +++ b/examples/Chapter1.ipynb @@ -1,2330 +1,2502 @@ { - "metadata": { - "language": "common-lisp", - "name": "", - "signature": "sha256:a288eb4e5bf779eb31582ec27583f8a0bf625b1b445095a088bafde8e2be5d58" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Chapter 1" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(ql:quickload \"kenzo\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 1, - "text": [ - "(\"kenzo\")" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cat-init)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "---done---" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 2, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.2.2 Ordering the generators" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:f-cmpr 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "F-CMPR\n", - "Args: (n1 n2)\n", - "Returns :LESS, :EQUAL, or :GREATER, according to the result of the canonical\n", - "comparison of the integers N1 and N2.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:f-cmpr 123 789)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - ":LESS" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:s-cmpr 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 5, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "S-CMPR\n", - "Args: (symbol1 symbol2)\n", - "Returns :LESS, :EQUAL, or :GREATER, according to the result of the Lisp string\n", - "comparison function of the strings (SYMBOL-NAME SYMBOL1) and\n", - "(SYMBOL-NAME SYMBOL2).\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:s-cmpr 'circulation 'circular)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 6, - "text": [ - ":GREATER" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:l-cmpr 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 7, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "L-CMPR\n", - "Args: (list1 list2)\n", - "Returns :LESS, :EQUAL, or :GREATER, according to the lexicographical ordering\n", - "of the generator lists LIST1 and LIST2.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:l-cmpr '(1 a b) '(1 a))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 8, - "text": [ - ":GREATER" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.2.3 Functions handling combinations" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:cmbn 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 9, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "CMBN\n", - "Args: (degr &rest rest)\n", - "Returns a combination of degree DEGR from a sum of terms provided as a sequence\n", - "CF1 GNRT1 CF2 GNRT2 ... CFn GNRTn of coefficient / generator pairs in REST.\n", - "REST can be of arbitrary even length and can be empty, in which case the\n", - "combination is an instance of the null combination of degree DEGR.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def comb1 (cat:cmbn 1 1 'u 2 'v 3 'w 4 'z))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 10, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * U>\n", - "<2 * V>\n", - "<3 * W>\n", - "<4 * Z>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:cmbn-non-zero-p 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 11, - "text": [ - "\"-----------------------------------------------------------------[macro-doc]\n", - "CMBN-NON-ZERO-P\n", - "Args: (cmbn)\n", - "Tests if the combination CMBN is a non-null combination of any degree.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cmbn-non-zero-p comb1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 12, - "text": [ - "T" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cmbn-list comb1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 13, - "text": [ - "((1 . U) (2 . V) (3 . W) (4 . Z))" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def term3 (third (cat:cmbn-list comb1)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 14, - "text": [ - "(3 . W)" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cffc term3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 15, - "text": [ - "3" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:gnrt term3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 16, - "text": [ - "W" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:cmbn-opps 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 17, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "CMBN-OPPS\n", - "Args: (cmbn)\n", - "Returns the combination opposite combination of CMBN.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def mcomb1 (cat:cmbn-opps comb1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 18, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<-1 * U>\n", - "<-2 * V>\n", - "<-3 * W>\n", - "<-4 * Z>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:n-cmbn 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 19, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "N-CMBN\n", - "Args: (n cmbn)\n", - "Returns N times the combination CMBN. N must be non-zero.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def comb2 (cat:n-cmbn 10 comb1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 20, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<10 * U>\n", - "<20 * V>\n", - "<30 * W>\n", - "<40 * Z>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:2cmbn-add 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 21, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "2CMBN-ADD\n", - "Args: (cmpr cmbn1 cmbn2)\n", - "Returns the combination, which is the sum of CMBN1 and CMBN2. The first\n", - "argument, CMPR, must be a function or macro, which is used to compare the\n", - "generators of the combination arguments and to order the terms of the result\n", - "combination.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def cmb12 (cat:2cmbn-add #'cat:s-cmpr comb1 comb2))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 22, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<11 * U>\n", - "<22 * V>\n", - "<33 * W>\n", - "<44 * Z>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:2cmbn-sbtr 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 23, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "2CMBN-SBTR\n", - "Args: (cmpr cmbn1 cmbn2)\n", - "Returns the combination, which is the difference of CMBN1 and CMBN2. The first\n", - "argument, CMPR, must be a function or macro, which is used to compare the\n", - "generators of the combination arguments and to order the terms of the result\n", - "combination.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:ncmbn-add 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 24, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "NCMBN-ADD\n", - "Args: (cmpr cmbn &rest rest)\n", - "Returns the sum of an arbitrary number of combinations. The first argument,\n", - "CMPR, must be a function or macro, which is used to compare the generators of\n", - "the input combinations and to order the terms of the result combination.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:ncmbn-add #'cat:s-cmpr\n", - " comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 25, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<55 * U>\n", - "<110 * V>\n", - "<165 * W>\n", - "<220 * Z>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.3.1 The function build-chcm" - ] - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "A first example of a chain complex" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-cmpr #'cat:s-cmpr)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 26, - "text": [ - "#" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-basis #'(lambda (dmn)\n", - " (case dmn\n", - " (0 '(s0 s1 s2 s3 s4 s5))\n", - " (1 '(s01 s02 s12 s23 s34 s35 s45))\n", - " (2 '(s345))\n", - " (otherwise nil))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 27, - "text": [ - "#" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-bspn 's0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 28, - "text": [ - "S0" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-pure-dffr\n", - " #'(lambda (dmn gnr)\n", - " (unless (<= 0 dmn 2)\n", - " (error \"Incorrect dimension for diabolo-dp.\"))\n", - " (case dmn\n", - " (0 (cat:cmbn -1)) ; Note the null combination of degree -1\n", - " (1 (case gnr\n", - " (s01 (cat:cmbn 0 -1 's0 1 's1))\n", - " (s02 (cat:cmbn 0 -1 's0 1 's2))\n", - " (s12 (cat:cmbn 0 -1 's1 1 's2))\n", - " (s23 (cat:cmbn 0 -1 's2 1 's3))\n", - " (s34 (cat:cmbn 0 -1 's3 1 's4))\n", - " (s35 (cat:cmbn 0 -1 's3 1 's5))\n", - " (s45 (cat:cmbn 0 -1 's4 1 's5))))\n", - " (2 (case gnr\n", - " (s345 (cat:cmbn 1 1 's34 -1 's35 1 's45))))\n", - " (otherwise (error \"Bad generator for complex diabolo\")))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 29, - "text": [ - "#" - ] - } - ], - "prompt_number": 29 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-strt :GNRT)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 30, - "text": [ - ":GNRT" - ] - } - ], - "prompt_number": 30 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo-orgn '(diabolo-for-example))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 31, - "text": [ - "(DIABOLO-FOR-EXAMPLE)" - ] - } - ], - "prompt_number": 31 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:build-chcm 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 32, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "BUILD-CHCM\n", - "Args: (&key cmpr basis bsgn intr-dffr strt orgn)\n", - "Returns an instance of the class CHAIN-COMPLEX. The keyword arguments are as\n", - "follows:\n", - "\n", - ":CMPR CMPR, the comparison function for generators\n", - "\n", - ":BASIS BASIS, the function defining the basis of the freee Z-modules C_p or the\n", - " the keyword :LOCALLY-EFFECTIVE\n", - "\n", - ":BSGN BSGN, a generator, the base point of the underlying set\n", - "\n", - ":INTR-DFFR INTR-DFFR, a Lisp function defining the differential homomorphism\n", - " for each p (d_p: C_p -> C_{p-1}\n", - "\n", - ":STRT STRT, one of the keywords :GNRT or :CMBN, defining the mapping strategy\n", - " of the differential homomorphism, either by generator or by\n", - " combination. The default is :GNRT\n", - "\n", - ":ORGN ORGN, a list containing a relevant and carefully chosen comment about\n", - " the origin of the chain complex. This comment should be unique\n", - " for a Kenzo session (between calls of CAT-INIT), as it is used\n", - " for caching purposes.\n", - "\n", - "Use this function instead of creating instances via the standard constructor\n", - "MAKE-INSTANCE.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 32 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def diabolo (cat:build-chcm :cmpr diabolo-cmpr :basis diabolo-basis\n", - " :bsgn diabolo-bspn :intr-dffr diabolo-pure-dffr\n", - " :strt diabolo-strt :orgn diabolo-orgn))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 33, - "text": [ - "[K1 Chain-Complex]" - ] - } - ], - "prompt_number": 33 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:chcm 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 34, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "CHCM\n", - "Args: (idnm)\n", - "Return from the list *CHCM-LIST* the chain complex instance with Kenzo\n", - "identifier IDNUM or NIL, if it doesn't exist.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:chcm 1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 35, - "text": [ - "[K1 Chain-Complex]" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:orgn diabolo)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 36, - "text": [ - "(DIABOLO-FOR-EXAMPLE)" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:idnm diabolo)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 37, - "text": [ - "1" - ] - } - ], - "prompt_number": 37 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:basis diabolo 0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 38, - "text": [ - "(S0 S1 S2 S3 S4 S5)" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:basis diabolo 1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 39, - "text": [ - "(S01 S02 S12 S23 S34 S35 S45)" - ] - } - ], - "prompt_number": 39 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:basis diabolo 2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 40, - "text": [ - "(S345)" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:basis diabolo 10)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 41, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 41 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:dffr diabolo 2 's345)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 42, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * S34>\n", - "<-1 * S35>\n", - "<1 * S45>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:dffr diabolo (cat:dffr diabolo 2 's345))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 43, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 0}\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "An important trivial case: the unit chain complex, $\\mathbb{Z}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def ZCC\n", - " (the cat:chain-complex\n", - " (cat:build-chcm\n", - " :cmpr #'(lambda (gnrt1 gnrt2)\n", - " (declare (ignore gnrt1 gnrt2))\n", - " (the cat:cmpr :equal))\n", - " :basis #'(lambda (n)\n", - " (the list\n", - " (if (zerop n) '(:Z-gnrt) cat:+empty-list+)))\n", - " :bsgn :Z-gnrt\n", - " :intr-dffr #'(lambda (cmbn)\n", - " (the cat:cmbn (cat:zero-cmbn (1- (cat:cmbn-degr cmbn)))))\n", - " :strt :cmbn\n", - " :orgn '(zcc-constant))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 44, - "text": [ - "[K3 Chain-Complex]" - ] - } - ], - "prompt_number": 44 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:z-chcm 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 45, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "Z-CHCM\n", - "Args: ()\n", - "Build the unit chain complex.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 45 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "The chain complex $\\texttt{circle}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(defun CIRCLE ()\n", - " (the cat:chain-complex\n", - " (cat:build-chcm\n", - " :cmpr #'(lambda (gnrt1 gnrt2)\n", - " (declare (ignore gnrt1 gnrt2))\n", - " (the cat:cmpr :equal))\n", - " :basis #'(lambda (dmns)\n", - " (the list\n", - " (case dmns (0 '(*)) (1 '(s1))\n", - " (otherwise cat:+empty-list+))))\n", - " :bsgn '*\n", - " :intr-dffr #'cat:zero-intr-dffr\n", - " :strt :cmbn\n", - " :orgn '(circle))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 46, - "text": [ - "CIRCLE" - ] - } - ], - "prompt_number": 46 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "1.4 Morphisms" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:morphism 'type)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 47, - "text": [ - "\"-----------------------------------------------------------------[class-doc]\n", - "MORPHISM\n", - "Slots: (sorc trgt degr intr strt ???-clnm ?-clnm rslts idnm orgn)\n", - "Intances of this class represent morphisms between chain complexes, and the\n", - "differential homomorphism of a chain complex is treated as a morphism of\n", - "degree -1. The class has 10 slots:\n", - "\n", - "1. SORC, an object of class CHAIN-COMPLEX, the source chain complex of this\n", - " morphism.\n", - "\n", - "2. TRGT, an object of class CHAIN-COMPLEX, the target chain complex of this\n", - " morphism.\n", - "\n", - "3. DEGR, an integer, the degree of the morphism.\n", - "\n", - "4. INTR, a Lisp function implementing the morphism, taking account of the\n", - " strategy STRT.\n", - "\n", - "5. STRT, a symbol, one of :GNRT or :CMBN.\n", - "\n", - "6. ???-CLNM, an integer updated by the system for internal statistics.\n", - "\n", - "7. ?-CLNM, another integer maintained by the system for internal pusposes.\n", - "\n", - "8. RSLTS, an array of length +MAXIMAL-DIMENSION+ reserved by the system for\n", - " caching intermediate results.\n", - "\n", - "9. IDNM, an integer, a system-generated identifier for this object.\n", - "\n", - "10. ORGN, a list containg a comment indicating the origin of the object. The\n", - " should be unique (per session), since it is used in the implementation for\n", - " caching purposes.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 47 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.4.1 The function $\\texttt{build-mprh}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(documentation 'cat:build-mrph 'function)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 48, - "text": [ - "\"--------------------------------------------------------------[function-doc]\n", - "BUILD-MRPH\n", - "Args: (&key sorc trgt degr intr strt orgn)\n", - "Returns an instance of the class MORPHISM. The keyword arguments are as\n", - "follows:\n", - "\n", - ":SORC SORC, the source object, a CHAIN-COMPLEX type object\n", - "\n", - ":TRGT TRGT, the target object, a CHAIN-COMPLEX type object\n", - "\n", - ":DEGR DEGR, the degree of the morphism, an integer\n", - "\n", - ":INTR INTR, the Lisp function defining the effective mapping\n", - "\n", - ":STRT STRT, one of the keywords :GNRT or :CMBN, defining the mapping strategy\n", - " of the differential homomorphism, either by generator or by\n", - " combination. The default is :GNRT\n", - "\n", - ":ORGN ORGN, a list containing a relevant and carefully chosen comment about\n", - " the origin of the chain complex. This comment should be unique\n", - " for a Kenzo session (between calls of CAT-INIT), as it is used\n", - " for caching purposes.\n", - "\n", - "Use this function instead of creating instances via the standard constructor\n", - "MAKE-INSTANCE.\n", - "------------------------------------------------------------------------------\"" - ] - } - ], - "prompt_number": 48 - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "The differential homomorphism in a chain complex instance" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cat-init)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "---done---" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 49, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 49 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def ZCC (cat:z-chcm))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 50, - "text": [ - "[K1 Chain-Complex]" - ] - } - ], - "prompt_number": 50 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def zero-morphism (cat:build-mrph :sorc ZCC\n", - " :trgt ZCC\n", - " :degr -1\n", - " :intr #'(lambda (comb)\n", - " (cat:cmbn (1- (cat:degr comb))))\n", - " :strt :cmbn\n", - " :orgn '(zero morphism on ZCC)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 51, - "text": [ - "[K3 Cohomology-Class on K1 of degree 1]" - ] - } - ], - "prompt_number": 51 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def id-morphism (cat:build-mrph :sorc ZCC\n", - " :trgt ZCC\n", - " :degr 0\n", - " :intr #'identity\n", - " :strt :cmbn\n", - " :orgn '(identity morphism on ZCC)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 52, - "text": [ - "[K4 Cohomology-Class on K1 of degree 0]" - ] - } - ], - "prompt_number": 52 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.4.3 Functions defining morphisms" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def ccn-boundary #'(lambda (dgr gnr)\n", - " (if (evenp (+ dgr gnr))\n", - " (cat:cmbn (1- dgr) 1 (- gnr 10))\n", - " (cat:cmbn (1- dgr)))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 53, - "text": [ - "#" - ] - } - ], - "prompt_number": 53 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def ccn (cat:build-chcm :cmpr #'cat:f-cmpr\n", - " :basis #'(lambda (n) (cat: K5]" - ] - } - ], - "prompt_number": 55 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def lower-shift (cat:build-mrph\n", - " :sorc ccn :trgt ccn :strt :gnrt :degr -1\n", - " :intr #'(lambda (d gn) (cat:cmbn (1- d) 1 (- gn 10)))\n", - " :orgn '(ccn shift -10)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 56, - "text": [ - "[K8 Morphism (degree -1): K5 -> K5]" - ] - } - ], - "prompt_number": 56 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? ccn 2 22)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 57, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 12>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 57 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? ccn (cat:? ccn 2 22))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 58, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 0}\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 58 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def combn (cat:cmbn 5 1 50 5 55 9 59))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 59, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 5}\n", - "<1 * 50>\n", - "<5 * 55>\n", - "<9 * 59>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 59 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? ccn combn)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 60, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<5 * 45>\n", - "<9 * 49>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 60 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? ccn (cat:? ccn combn))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 61, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 61 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? upper-shift 0 6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 62, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 16>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 62 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? lower-shift 5 51)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 63, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<1 * 41>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 63 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? lower-shift (cat:? lower-shift 5 51))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "<1 * 31>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def comb1 (cat:cmbn 1 1 10 2 11 3 12 4 13))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<2 * 11>\n", - "<3 * 12>\n", - "<4 * 13>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def identity? (cat:cmps upper-shift lower-shift))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K9 Morphism (degree 0): K5 -> K5]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:degr identity?)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "0" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? identity? comb1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<2 * 11>\n", - "<3 * 12>\n", - "<4 * 13>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:2cmbn-sbtr (cat:cmpr ccn) comb1 (cat:? identity? comb1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def upper-shift2 (cat:cmps upper-shift upper-shift))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K10 Morphism (degree 2): K5 -> K5]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:degr upper-shift2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "2" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? upper-shift2 comb1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "<1 * 30>\n", - "<2 * 31>\n", - "<3 * 32>\n", - "<4 * 33>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def twice-up-shift (cat:add upper-shift upper-shift))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K11 Morphism (degree 1): K5 -> K5]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:degr twice-up-shift)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "1" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? twice-up-shift comb1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 2}\n", - "<2 * 20>\n", - "<4 * 21>\n", - "<6 * 22>\n", - "<8 * 23>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def up-d (cat:cmps upper-shift (cat:dffr1 ccn)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K12 Morphism (degree 0): K5 -> K5]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def d-up (cat:cmps (cat:dffr1 ccn) upper-shift))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K13 Morphism (degree 0): K5 -> K5]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? up-d 1 11)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 11>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? d-up 1 11)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def comb3 (cat:cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<2 * 11>\n", - "<3 * 12>\n", - "<4 * 13>\n", - "<5 * 14>\n", - "<6 * 15>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? up-d comb3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<2 * 11>\n", - "<4 * 13>\n", - "<6 * 15>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:? d-up comb3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<3 * 12>\n", - "<5 * 14>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "1.4.4 Accessing $\\texttt{Kenzo}$ objects" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:k 1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K1 Chain-Complex]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd 1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K1 Chain-Complex]\n", - " Origin: (Z-CHCM)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:k 3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "[K3 Cohomology-Class on K1 of degree 1]" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd 3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K3 Cohomology-Class on K1 of degree 1]\n", - " Origin: (ZERO MORPHISM ON ZCC)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd 8)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K8 Morphism (degree -1): K5 -> K5]\n", - " Origin: (CCN SHIFT -10)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd 5)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K5 Chain-Complex]\n", - " Origin: (CCN)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd 9)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K9 Morphism (degree 0): K5 -> K5]\n", - " Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kd2 9)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Object: [K9 Morphism (degree 0): K5 -> K5]\n", - " Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n", - "\n", - "\n", - "Object: [K8 Morphism (degree -1): K5 -> K5]\n", - " Origin: (CCN SHIFT -10)\n", - "\n", - "\n", - "Object: [K7 Morphism (degree 1): K5 -> K5]\n", - " Origin: (CCN SHIFT 10)\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "(9 8 7)" - ] - } - ], - "prompt_number": 64 + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 1" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(\"kenzo\")" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" } ], - "metadata": {} + "source": [ + "(ql:quickload \"kenzo\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "---done---" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cat-init)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2.2 Ordering the generators" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "F-CMPR\n", + "Args: (n1 n2)\n", + "Returns :LESS, :EQUAL, or :GREATER, according to the result of the canonical\n", + "comparison of the integers N1 and N2.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:f-cmpr 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":LESS" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:f-cmpr 123 789)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "S-CMPR\n", + "Args: (symbol1 symbol2)\n", + "Returns :LESS, :EQUAL, or :GREATER, according to the result of the Lisp string\n", + "comparison function of the strings (SYMBOL-NAME SYMBOL1) and\n", + "(SYMBOL-NAME SYMBOL2).\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:s-cmpr 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":GREATER" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:s-cmpr 'circulation 'circular)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "L-CMPR\n", + "Args: (list1 list2)\n", + "Returns :LESS, :EQUAL, or :GREATER, according to the lexicographical ordering\n", + "of the generator lists LIST1 and LIST2.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:l-cmpr 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":GREATER" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:l-cmpr '(1 a b) '(1 a))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2.3 Functions handling combinations" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "CMBN\n", + "Args: (degr &rest rest)\n", + "Returns a combination of degree DEGR from a sum of terms provided as a sequence\n", + "CF1 GNRT1 CF2 GNRT2 ... CFn GNRTn of coefficient / generator pairs in REST.\n", + "REST can be of arbitrary even length and can be empty, in which case the\n", + "combination is an instance of the null combination of degree DEGR.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:cmbn 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * U>\n", + "<2 * V>\n", + "<3 * W>\n", + "<4 * Z>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def comb1 (cat:cmbn 1 1 'u 2 'v 3 'w 4 'z))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"-----------------------------------------------------------------[macro-doc]\n", + "CMBN-NON-ZERO-P\n", + "Args: (cmbn)\n", + "Tests if the combination CMBN is a non-null combination of any degree.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:cmbn-non-zero-p 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "T" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cmbn-non-zero-p comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "((1 . U) (2 . V) (3 . W) (4 . Z))" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cmbn-list comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3 . W)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def term3 (third (cat:cmbn-list comb1)))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cffc term3)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "W" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:gnrt term3)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "CMBN-OPPS\n", + "Args: (cmbn)\n", + "Returns the combination opposite combination of CMBN.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:cmbn-opps 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<-1 * U>\n", + "<-2 * V>\n", + "<-3 * W>\n", + "<-4 * Z>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def mcomb1 (cat:cmbn-opps comb1))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "N-CMBN\n", + "Args: (n cmbn)\n", + "Returns N times the combination CMBN. N must be non-zero.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:n-cmbn 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<10 * U>\n", + "<20 * V>\n", + "<30 * W>\n", + "<40 * Z>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def comb2 (cat:n-cmbn 10 comb1))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "2CMBN-ADD\n", + "Args: (cmpr cmbn1 cmbn2)\n", + "Returns the combination, which is the sum of CMBN1 and CMBN2. The first\n", + "argument, CMPR, must be a function or macro, which is used to compare the\n", + "generators of the combination arguments and to order the terms of the result\n", + "combination.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:2cmbn-add 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<11 * U>\n", + "<22 * V>\n", + "<33 * W>\n", + "<44 * Z>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def cmb12 (cat:2cmbn-add #'cat:s-cmpr comb1 comb2))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "2CMBN-SBTR\n", + "Args: (cmpr cmbn1 cmbn2)\n", + "Returns the combination, which is the difference of CMBN1 and CMBN2. The first\n", + "argument, CMPR, must be a function or macro, which is used to compare the\n", + "generators of the combination arguments and to order the terms of the result\n", + "combination.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:2cmbn-sbtr 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "NCMBN-ADD\n", + "Args: (cmpr cmbn &rest rest)\n", + "Returns the sum of an arbitrary number of combinations. The first argument,\n", + "CMPR, must be a function or macro, which is used to compare the generators of\n", + "the input combinations and to order the terms of the result combination.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:ncmbn-add 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<55 * U>\n", + "<110 * V>\n", + "<165 * W>\n", + "<220 * Z>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:ncmbn-add #'cat:s-cmpr\n", + " comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3.1 The function build-chcm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A first example of a chain complex" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-cmpr #'cat:s-cmpr)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-basis #'(lambda (dmn)\n", + " (case dmn\n", + " (0 '(s0 s1 s2 s3 s4 s5))\n", + " (1 '(s01 s02 s12 s23 s34 s35 s45))\n", + " (2 '(s345))\n", + " (otherwise nil))))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "S0" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-bspn 's0)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-pure-dffr\n", + " #'(lambda (dmn gnr)\n", + " (unless (<= 0 dmn 2)\n", + " (error \"Incorrect dimension for diabolo-dp.\"))\n", + " (case dmn\n", + " (0 (cat:cmbn -1)) ; Note the null combination of degree -1\n", + " (1 (case gnr\n", + " (s01 (cat:cmbn 0 -1 's0 1 's1))\n", + " (s02 (cat:cmbn 0 -1 's0 1 's2))\n", + " (s12 (cat:cmbn 0 -1 's1 1 's2))\n", + " (s23 (cat:cmbn 0 -1 's2 1 's3))\n", + " (s34 (cat:cmbn 0 -1 's3 1 's4))\n", + " (s35 (cat:cmbn 0 -1 's3 1 's5))\n", + " (s45 (cat:cmbn 0 -1 's4 1 's5))))\n", + " (2 (case gnr\n", + " (s345 (cat:cmbn 1 1 's34 -1 's35 1 's45))))\n", + " (otherwise (error \"Bad generator for complex diabolo\")))))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":GNRT" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-strt :GNRT)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(DIABOLO-FOR-EXAMPLE)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo-orgn '(diabolo-for-example))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "BUILD-CHCM\n", + "Args: (&key cmpr basis bsgn intr-dffr strt orgn)\n", + "Returns an instance of the class CHAIN-COMPLEX. The keyword arguments are as\n", + "follows:\n", + "\n", + ":CMPR CMPR, the comparison function for generators\n", + "\n", + ":BASIS BASIS, the function defining the basis of the freee Z-modules C_p or the\n", + " the keyword :LOCALLY-EFFECTIVE\n", + "\n", + ":BSGN BSGN, a generator, the base point of the underlying set\n", + "\n", + ":INTR-DFFR INTR-DFFR, a Lisp function defining the differential homomorphism\n", + " for each p (d_p: C_p -> C_{p-1}\n", + "\n", + ":STRT STRT, one of the keywords :GNRT or :CMBN, defining the mapping strategy\n", + " of the differential homomorphism, either by generator or by\n", + " combination. The default is :GNRT\n", + "\n", + ":ORGN ORGN, a list containing a relevant and carefully chosen comment about\n", + " the origin of the chain complex. This comment should be unique\n", + " for a Kenzo session (between calls of CAT-INIT), as it is used\n", + " for caching purposes.\n", + "\n", + "Use this function instead of creating instances via the standard constructor\n", + "MAKE-INSTANCE.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:build-chcm 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Chain-Complex]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def diabolo (cat:build-chcm :cmpr diabolo-cmpr :basis diabolo-basis\n", + " :bsgn diabolo-bspn :intr-dffr diabolo-pure-dffr\n", + " :strt diabolo-strt :orgn diabolo-orgn))" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "CHCM\n", + "Args: (idnm)\n", + "Return from the list *CHCM-LIST* the chain complex instance with Kenzo\n", + "identifier IDNUM or NIL, if it doesn't exist.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:chcm 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Chain-Complex]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:chcm 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(DIABOLO-FOR-EXAMPLE)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:orgn diabolo)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:idnm diabolo)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(S0 S1 S2 S3 S4 S5)" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:basis diabolo 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(S01 S02 S12 S23 S34 S35 S45)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:basis diabolo 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(S345)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:basis diabolo 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:basis diabolo 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * S34>\n", + "<-1 * S35>\n", + "<1 * S45>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:dffr diabolo 2 's345)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 0}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:dffr diabolo (cat:dffr diabolo 2 's345))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### An important trivial case: the unit chain complex, $\\mathbb{Z}$" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Chain-Complex]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ZCC\n", + " (the cat:chain-complex\n", + " (cat:build-chcm\n", + " :cmpr #'(lambda (gnrt1 gnrt2)\n", + " (declare (ignore gnrt1 gnrt2))\n", + " (the cat:cmpr :equal))\n", + " :basis #'(lambda (n)\n", + " (the list\n", + " (if (zerop n) '(:Z-gnrt) cat:+empty-list+)))\n", + " :bsgn :Z-gnrt\n", + " :intr-dffr #'(lambda (cmbn)\n", + " (the cat:cmbn (cat:zero-cmbn (1- (cat:cmbn-degr cmbn)))))\n", + " :strt :cmbn\n", + " :orgn '(zcc-constant))))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "Z-CHCM\n", + "Args: ()\n", + "Build the unit chain complex.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:z-chcm 'function)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The chain complex $\\texttt{circle}$" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "CIRCLE" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(defun CIRCLE ()\n", + " (the cat:chain-complex\n", + " (cat:build-chcm\n", + " :cmpr #'(lambda (gnrt1 gnrt2)\n", + " (declare (ignore gnrt1 gnrt2))\n", + " (the cat:cmpr :equal))\n", + " :basis #'(lambda (dmns)\n", + " (the list\n", + " (case dmns (0 '(*)) (1 '(s1))\n", + " (otherwise cat:+empty-list+))))\n", + " :bsgn '*\n", + " :intr-dffr #'cat:zero-intr-dffr\n", + " :strt :cmbn\n", + " :orgn '(circle))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.4 Morphisms" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"-----------------------------------------------------------------[class-doc]\n", + "MORPHISM\n", + "Slots: (sorc trgt degr intr strt ???-clnm ?-clnm rslts idnm orgn)\n", + "Intances of this class represent morphisms between chain complexes, and the\n", + "differential homomorphism of a chain complex is treated as a morphism of\n", + "degree -1. The class has 10 slots:\n", + "\n", + "1. SORC, an object of class CHAIN-COMPLEX, the source chain complex of this\n", + " morphism.\n", + "\n", + "2. TRGT, an object of class CHAIN-COMPLEX, the target chain complex of this\n", + " morphism.\n", + "\n", + "3. DEGR, an integer, the degree of the morphism.\n", + "\n", + "4. INTR, a Lisp function implementing the morphism, taking account of the\n", + " strategy STRT.\n", + "\n", + "5. STRT, a symbol, one of :GNRT or :CMBN.\n", + "\n", + "6. ???-CLNM, an integer updated by the system for internal statistics.\n", + "\n", + "7. ?-CLNM, another integer maintained by the system for internal pusposes.\n", + "\n", + "8. RSLTS, an array of length +MAXIMAL-DIMENSION+ reserved by the system for\n", + " caching intermediate results.\n", + "\n", + "9. IDNM, an integer, a system-generated identifier for this object.\n", + "\n", + "10. ORGN, a list containg a comment indicating the origin of the object. The\n", + " should be unique (per session), since it is used in the implementation for\n", + " caching purposes.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:morphism 'type)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4.1 The function $\\texttt{build-mprh}$" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "BUILD-MRPH\n", + "Args: (&key sorc trgt degr intr strt orgn)\n", + "Returns an instance of the class MORPHISM. The keyword arguments are as\n", + "follows:\n", + "\n", + ":SORC SORC, the source object, a CHAIN-COMPLEX type object\n", + "\n", + ":TRGT TRGT, the target object, a CHAIN-COMPLEX type object\n", + "\n", + ":DEGR DEGR, the degree of the morphism, an integer\n", + "\n", + ":INTR INTR, the Lisp function defining the effective mapping\n", + "\n", + ":STRT STRT, one of the keywords :GNRT or :CMBN, defining the mapping strategy\n", + " of the differential homomorphism, either by generator or by\n", + " combination. The default is :GNRT\n", + "\n", + ":ORGN ORGN, a list containing a relevant and carefully chosen comment about\n", + " the origin of the chain complex. This comment should be unique\n", + " for a Kenzo session (between calls of CAT-INIT), as it is used\n", + " for caching purposes.\n", + "\n", + "Use this function instead of creating instances via the standard constructor\n", + "MAKE-INSTANCE.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'cat:build-mrph 'function)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The differential homomorphism in a chain complex instance" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "---done---" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cat-init)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Chain-Complex]" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ZCC (cat:z-chcm))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Cohomology-Class on K1 of degree 1]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def zero-morphism (cat:build-mrph :sorc ZCC\n", + " :trgt ZCC\n", + " :degr -1\n", + " :intr #'(lambda (comb)\n", + " (cat:cmbn (1- (cat:degr comb))))\n", + " :strt :cmbn\n", + " :orgn '(zero morphism on ZCC)))" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K4 Cohomology-Class on K1 of degree 0]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def id-morphism (cat:build-mrph :sorc ZCC\n", + " :trgt ZCC\n", + " :degr 0\n", + " :intr #'identity\n", + " :strt :cmbn\n", + " :orgn '(identity morphism on ZCC)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4.3 Functions defining morphisms" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ccn-boundary #'(lambda (dgr gnr)\n", + " (if (evenp (+ dgr gnr))\n", + " (cat:cmbn (1- dgr) 1 (- gnr 10))\n", + " (cat:cmbn (1- dgr)))))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K5 Chain-Complex]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ccn (cat:build-chcm :cmpr #'cat:f-cmpr\n", + " :basis #'(lambda (n) (cat: K5]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def upper-shift (cat:build-mrph\n", + " :sorc ccn :trgt ccn :strt :gnrt :degr +1\n", + " :intr #'(lambda (d gn) (cat:cmbn (1+ d) 1 (+ gn 10)))\n", + " :orgn '(ccn shift +10)))" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K8 Morphism (degree -1): K5 -> K5]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def lower-shift (cat:build-mrph\n", + " :sorc ccn :trgt ccn :strt :gnrt :degr -1\n", + " :intr #'(lambda (d gn) (cat:cmbn (1- d) 1 (- gn 10)))\n", + " :orgn '(ccn shift -10)))" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 12>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? ccn 2 22)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 0}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? ccn (cat:? ccn 2 22))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 5}\n", + "<1 * 50>\n", + "<5 * 55>\n", + "<9 * 59>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def combn (cat:cmbn 5 1 50 5 55 9 59))" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<5 * 45>\n", + "<9 * 49>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? ccn combn)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 3}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? ccn (cat:? ccn combn))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 16>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? upper-shift 0 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<1 * 41>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? lower-shift 5 51)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 3}\n", + "<1 * 31>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? lower-shift (cat:? lower-shift 5 51))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<2 * 11>\n", + "<3 * 12>\n", + "<4 * 13>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def comb1 (cat:cmbn 1 1 10 2 11 3 12 4 13))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K9 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def identity? (cat:cmps upper-shift lower-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:degr identity?)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<2 * 11>\n", + "<3 * 12>\n", + "<4 * 13>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? identity? comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:2cmbn-sbtr (cat:cmpr ccn) comb1 (cat:? identity? comb1))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K10 Morphism (degree 2): K5 -> K5]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def upper-shift2 (cat:cmps upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:degr upper-shift2)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 3}\n", + "<1 * 30>\n", + "<2 * 31>\n", + "<3 * 32>\n", + "<4 * 33>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? upper-shift2 comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K11 Morphism (degree 1): K5 -> K5]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def twice-up-shift (cat:add upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:degr twice-up-shift)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 2}\n", + "<2 * 20>\n", + "<4 * 21>\n", + "<6 * 22>\n", + "<8 * 23>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? twice-up-shift comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K12 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def up-d (cat:cmps upper-shift (cat:dffr1 ccn)))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K13 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def d-up (cat:cmps (cat:dffr1 ccn) upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 11>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? up-d 1 11)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? d-up 1 11)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<2 * 11>\n", + "<3 * 12>\n", + "<4 * 13>\n", + "<5 * 14>\n", + "<6 * 15>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def comb3 (cat:cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<2 * 11>\n", + "<4 * 13>\n", + "<6 * 15>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? up-d comb3)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<3 * 12>\n", + "<5 * 14>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? d-up comb3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4.4 Accessing $\\texttt{Kenzo}$ objects" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Chain-Complex]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:k 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K1 Chain-Complex]\n", + " Origin: (Z-CHCM)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Cohomology-Class on K1 of degree 1]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:k 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K3 Cohomology-Class on K1 of degree 1]\n", + " Origin: (ZERO MORPHISM ON ZCC)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K8 Morphism (degree -1): K5 -> K5]\n", + " Origin: (CCN SHIFT -10)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd 8)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K5 Chain-Complex]\n", + " Origin: (CCN)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K9 Morphism (degree 0): K5 -> K5]\n", + " Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd 9)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Object: [K9 Morphism (degree 0): K5 -> K5]\n", + " Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n", + "\n", + "\n", + "Object: [K8 Morphism (degree -1): K5 -> K5]\n", + " Origin: (CCN SHIFT -10)\n", + "\n", + "\n", + "Object: [K7 Morphism (degree 1): K5 -> K5]\n", + " Origin: (CCN SHIFT 10)\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "(9 8 7)" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kd2 9)" + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "CCL 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/Overview.ipynb b/examples/Overview.ipynb index 9aaeec5..1377b46 100644 --- a/examples/Overview.ipynb +++ b/examples/Overview.ipynb @@ -1,2658 +1,2759 @@ { - "metadata": { - "language": "common-lisp", - "name": "", - "signature": "sha256:05fd4b76f25f4c221cceaf16125a2f13aee03b4b6f7820c59ad9af3b5471bb4f" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Overview" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this overview we try to show, without entering in detailed explanations, various possibilities of $\\texttt{Kenzo}$ in algebraic topology.\n", - "\n", - "Load the $\\texttt{Kenzo}$ software as follows:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(ql:quickload \"kenzo\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 1, - "text": [ - "(\"kenzo\")" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The main functionality of the $\\texttt{Kenzo}$ software is defined package in the $\\texttt{cat}$ Lisp package. Initialize the $\\texttt{cat}$ package as follows:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:cat-init)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "---done---" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 2, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Print the $\\texttt{Kenzo}$ version as follows:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:kenzo-version)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "*** Kenzo-Version 1.1.7 ***\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us begin with 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), 15 the $3$--simplex and the $4$--simplex are respectively labelled $\\texttt{\"*\"}$, $\\texttt{M3}$ and $\\texttt{N4}$. Two faces of the $4$-simplex $\\texttt{N4}$ are identified with the $3$-simplex $\\texttt{M3}$, the others being contracted on the base point. To create the simplicial set one types simply: " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def m23 (cat:moore 2 3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "[K1 Simplicial-Set]" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The system answers that a $\\texttt{Kenzo}$ object has been created, with number $1$ and type $\\texttt{SIMPLICIAL SET}$. This object may be referenced by the symbol $\\texttt{m23}$." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "m23" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 5, - "text": [ - "[K1 Simplicial-Set]" - ] - } - ], - "prompt_number": 5 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:homology m23 0 5)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 0.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "Computing the boundary of the generator 1/1 (dimension 0) :\n", - "* \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 1.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 0 :\n", - "\n", - "\n", - "Component Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 1.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 2.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 1 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 2.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "Computing the boundary of the generator 1/1 (dimension 3) :\n", - "M3 \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 2 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "Computing the boundary of the generator 1/1 (dimension 3) :\n", - "M3 \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "Computing the boundary of the generator 1/1 (dimension 4) :\n", - "N4 \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 3 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "Computing the boundary of the generator 1/1 (dimension 4) :\n", - "N4 \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 32s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 6, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As $\\texttt{m23}$ is a simplicial set, it is possible to create the cartesian product $\\texttt{m23}\\times\\texttt{m23}$ by the function $\\texttt{crts-prdc}$. This is a new simplicial set." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def m23xm23 (cat:crts-prdc m23 m23))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 7, - "text": [ - "[K10 Simplicial-Set]" - ] - } - ], - "prompt_number": 7 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:basis m23xm23 6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 8, - "text": [ - "( ...)" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(length (cat:basis m23xm23 6))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 9, - "text": [ - "230" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The number of elements of the basis is quite large (230). The user will note that the basis elements are formed by cartesian products of *degenerated simplices*. In the list, an element like $\\texttt{}$ 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 $\\texttt{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", - "collapsed": false, - "input": [ - "(cat:def t2m23 (cat:tnsr-prdc m23 m23))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 10, - "text": [ - "[K3 Chain-Complex]" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:basis t2m23 6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 11, - "text": [ - "()" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Eilenberg-Zilber theorem is used to compute the homology groups of the cartesian product space: as chain complexes, $\\texttt{m23xm23}$ and $\\texttt{t2m23}$ have the same homology groups, but the computations using the tensor product are considerably faster." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology m23xm23 0 8)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 0.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/1 (dimension 0) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 1.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 0 :\n", - "\n", - "\n", - "Component Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 1.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 2.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 1 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 2.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 2 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 3 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/1 (dimension 6) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 5 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/1 (dimension 6) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 7.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 6 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 7.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 2/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 8.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "Computing the boundary of the generator 1/1 (dimension 8) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 7 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 8m 49s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 12, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us consider now the space $\\mathrm{K}(\\mathbb{Z}, 1)$. This is an Abelian simplicial group created in $\\texttt{Kenzo}$ by the function $\\texttt{k-z}$. In this simplicial group, a simplex in dimension $n$ \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 $\\texttt{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: $\\texttt{(2 3 4 5)}$. In dimension $0$, the only \n", - "simplex is $\\texttt{NIL}$ (the base point)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def kz1 (cat:k-z 1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 13, - "text": [ - "[K38 Abelian-Simplicial-Group]" - ] - } - ], - "prompt_number": 13 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:cprd kz1 4 '(2 3 4 5))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 14, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<1 * >\n", - "<1 * >\n", - "<1 * >\n", - "<1 * >\n", - "<1 * >\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:aprd kz1 6 (cat:tnpr 2 '(1 2) 4 '(3 4 5 6)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 15, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 6}\n", - "<1 * (1 2 3 4 5 6)>\n", - "<-1 * (1 3 2 4 5 6)>\n", - "<1 * (1 3 4 2 5 6)>\n", - "<-1 * (1 3 4 5 2 6)>\n", - "<1 * (1 3 4 5 6 2)>\n", - "<1 * (3 1 2 4 5 6)>\n", - "<-1 * (3 1 4 2 5 6)>\n", - "<1 * (3 1 4 5 2 6)>\n", - "<-1 * (3 1 4 5 6 2)>\n", - "<1 * (3 4 1 2 5 6)>\n", - "... ...\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 15 - }, - { - "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: $\\texttt{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", - "collapsed": false, - "input": [ - "(cat:def k-z2-2 (cat:k-z2 2))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 16, - "text": [ - "[K64 Abelian-Simplicial-Group]" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology k-z2-2 4)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "Computing the boundary of the generator 2/2 (dimension 4) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 3.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "Computing the boundary of the generator 1/3 (dimension 5) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "Computing the boundary of the generator 2/3 (dimension 5) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "Computing the boundary of the generator 3/3 (dimension 5) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "Component Z/4Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 9s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 17, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 17 - }, - { - "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 $\\texttt{sphere}$ and $\\texttt{loop-space}$. Then we compute the $H_4$ and $H_5$ of $\\Omega^2 S^3$:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def s3 (cat:sphere 3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 18, - "text": [ - "[K174 Simplicial-Set]" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def o2s3 (cat:loop-space s3 2))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 19, - "text": [ - "[K191 Simplicial-Group]" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology o2s3 4 6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 3.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 18s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 18s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 18s.\n", - "Computing the boundary of the generator 3/3 (dimension 4) :\n", - "<>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 5.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 18s.\n", - "Computing the boundary of the generator 1/5 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 18s.\n", - "Computing the boundary of the generator 2/5 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 3/5 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 4/5 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 5/5 (dimension 5) :\n", - "<>][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "Component Z/3Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 5.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 1/5 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 2/5 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 3/5 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 4/5 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 5/5 (dimension 5) :\n", - "<>][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 8.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 1/8 (dimension 6) :\n", - "<>][5 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 19s.\n", - "Computing the boundary of the generator 2/8 (dimension 6) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 20s.\n", - "Computing the boundary of the generator 3/8 (dimension 6) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 20s.\n", - "Computing the boundary of the generator 4/8 (dimension 6) :\n", - "<>][1 <>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 20s.\n", - "Computing the boundary of the generator 5/8 (dimension 6) :\n", - "<>][1 <>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 21s.\n", - "Computing the boundary of the generator 6/8 (dimension 6) :\n", - "<>][3 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 21s.\n", - "Computing the boundary of the generator 7/8 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 21s.\n", - "Computing the boundary of the generator 8/8 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 5 :\n", - "\n", - "\n", - "Component Z/3Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 22s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 20, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us take now the first loop space $\\Omega^1 S^3$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def os3 (cat:loop-space s3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 21, - "text": [ - "[K179 Simplicial-Group]" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the following instruction, we locate in the symbol $\\texttt{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", - "collapsed": false, - "input": [ - "(cat:def L1 (cat:loop3 0 's3 1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 22, - "text": [ - "<>" - ] - } - ], - "prompt_number": 22 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:def null-simp (cat:absm 3 cat:+null-loop+))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 23, - "text": [ - ">>" - ] - } - ], - "prompt_number": 23 - }, - { - "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 $\\texttt{os3}$ a $3$--simplex named $\\texttt{D3}$, the attaching map being described by the list of its faces in dimension $2$." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def dos3 (cat:disk-pasting os3 3 ' \n", - " (list L1 null-simp L1 null-simp)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 24, - "text": [ - "[K435 Simplicial-Set]" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us compute a few homology groups of the new space $\\texttt{dos3}$:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology dos3 2 4)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 2.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "Computing the boundary of the generator 1/1 (dimension 2) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "Computing the boundary of the generator 1/1 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 2 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "Computing the boundary of the generator 1/1 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "Computing the boundary of the generator 1/1 (dimension 4) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 3 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 44s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 25, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But more interesting, let us build the loop space of the object $\\texttt{dos3}$ and let us compute the homology in dimension $5$:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def odos3 (cat:loop-space dos3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 26, - "text": [ - "[K453 Simplicial-Group]" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology odos3 5)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 14.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 51s.\n", - "Computing the boundary of the generator 1/14 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 51s.\n", - "Computing the boundary of the generator 2/14 (dimension 5) :\n", - "<][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 51s.\n", - "Computing the boundary of the generator 3/14 (dimension 5) :\n", - "<>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 51s.\n", - "Computing the boundary of the generator 4/14 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 5/14 (dimension 5) :\n", - "<>][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 6/14 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 7/14 (dimension 5) :\n", - "<][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 8/14 (dimension 5) :\n", - "<][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 9/14 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 10/14 (dimension 5) :\n", - "<>][1 <>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 11/14 (dimension 5) :\n", - "<>][1 <>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 12/14 (dimension 5) :\n", - "<>][2 ][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 13/14 (dimension 5) :\n", - "<][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 14/14 (dimension 5) :\n", - "<>][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 26.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 1/26 (dimension 6) :\n", - "<>][5 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 52s.\n", - "Computing the boundary of the generator 2/26 (dimension 6) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 3/26 (dimension 6) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 4/26 (dimension 6) :\n", - "<>][2 ][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 5/26 (dimension 6) :\n", - "<>][3 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 6/26 (dimension 6) :\n", - "<][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 7/26 (dimension 6) :\n", - "<][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 8/26 (dimension 6) :\n", - "<][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 9/26 (dimension 6) :\n", - "<>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 53s.\n", - "Computing the boundary of the generator 10/26 (dimension 6) :\n", - "<>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 11/26 (dimension 6) :\n", - "<>][1 <>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 12/26 (dimension 6) :\n", - "<>][1 <>][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 13/26 (dimension 6) :\n", - "<>][1 <>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 14/26 (dimension 6) :\n", - "<>][2 ][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 15/26 (dimension 6) :\n", - "<>][2 ][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 54s.\n", - "Computing the boundary of the generator 16/26 (dimension 6) :\n", - "<>][3 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 17/26 (dimension 6) :\n", - "<][1 <>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 18/26 (dimension 6) :\n", - "<][1 <>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 19/26 (dimension 6) :\n", - "<][2 ][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 20/26 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 21/26 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 55s.\n", - "Computing the boundary of the generator 22/26 (dimension 6) :\n", - "<>][1 <>][1 <>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 56s.\n", - "Computing the boundary of the generator 23/26 (dimension 6) :\n", - "<>][1 <>][2 ][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 56s.\n", - "Computing the boundary of the generator 24/26 (dimension 6) :\n", - "<>][2 ][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 56s.\n", - "Computing the boundary of the generator 25/26 (dimension 6) :\n", - "<][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 56s.\n", - "Computing the boundary of the generator 26/26 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 5 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z/2Z\n", - "\n", - "Component Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 9m 56s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 27, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 27 - }, - { - "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", - "collapsed": false, - "input": [ - "(typep s3 'cat:kan)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 28, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(typep os3 'cat:kan)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 29, - "text": [ - "T" - ] - } - ], - "prompt_number": 29 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(typep os3 'cat:simplicial-group)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 30, - "text": [ - "T" - ] - } - ], - "prompt_number": 30 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(typep os3 'cat:ab-simplicial-group)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 31, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 31 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:def L2 (cat:loop3 0 's3 2))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 32, - "text": [ - "<>" - ] - } - ], - "prompt_number": 32 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def square (cat:aprd os3 4 (cat:tnpr 2 L2 2 L2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 33, - "text": [ - "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<1 * <>>\n", - "<-1 * <>>\n", - "<1 * <>>\n", - "<1 * <>>\n", - "<-1 * <>>\n", - "<1 * <>>\n", - "------------------------------------------------------------------------------\n" - ] - } - ], - "prompt_number": 33 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We see that the result is a linear combination of words composed from degeneracies of $\\texttt{L2}$. The following instruction selects the generator part of the \n", - "second element of the previous combination." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def L4 (cat:gnrt (second (cat:cmbn-list square))))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 34, - "text": [ - "<>" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us use the lisp function $\\texttt{mapcar}$ (one among the various iteration functions of Lisp) to create the list of the faces 1, 2, 3 and 4 of the object $\\texttt{L4}$, this list is a \"Kan hat\"." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def hat (mapcar #'(lambda (i) (cat:face os3 i 4 l4)) '(1 2 3 4)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 35, - "text": [ - "(>> >> >> >>)" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The function $\\texttt{kfll}$ tries to find a filling of this \"Kan hat\", and we see that the face $2$ of the resulting simplex (which is very different from $\\texttt{L4}$) is the same as the face $2$ of $\\texttt{L4}$." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def kan-simplex (cat:kfll os3 0 4 hat))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 36, - "text": [ - ">>" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:face os3 2 4 kan-simplex)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 37, - "text": [ - ">>" - ] - } - ], - "prompt_number": 37 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(second hat)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 38, - "text": [ - ">>" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let ${\\cal G}$ be a simplicial group $0$--reduced. $\\Omega S^3$ is such a group. The software $\\texttt{Kenzo}$ allows the construction of the universal bundle $\\bar{\\cal W}{\\cal 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$ is null." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def cls-os3 (cat:classifying-space os3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 39, - "text": [ - "[K598 Simplicial-Set]" - ] - } - ], - "prompt_number": 39 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(typep cls-os3 'cat:simplicial-group)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 40, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology cls-os3 4)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 0.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 43s.\n", - "Computing the boundary of the generator 1/1 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 43s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 41, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 41 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us end this short overview with an example of computation of homotopy groups. The method used in $\\texttt{Kenzo}$ is the Whitehead tower. In this current 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", - "collapsed": false, - "input": [ - "(cat:def ch3 (cat:chml-clss m23 3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 42, - "text": [ - "[K729 Cohomology-Class on K1 of degree 3]" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then the function $\\texttt{z2-whitehead}$ is called to build a fibration over the simplicial set $\\texttt{m23}$ canonically associated to the cohomology class $\\texttt{ch3}$." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def f3 (cat:z2-whitehead m23 ch3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 43, - "text": [ - "[K730 Fibration K1 -> K64]" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then the total space of the fibration is built:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def x4 (cat:fibration-total f3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 44, - "text": [ - "[K736 Simplicial-Set]" - ] - } - ], - "prompt_number": 44 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:homology x4 3 5)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 2/2 (dimension 3) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 3.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 3/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 3 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 3.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 3/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 4.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 1/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 2/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 3/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "Computing the boundary of the generator 4/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "Component Z/2Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 10m 55s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 45, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 45 - }, - { - "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", - "collapsed": false, - "input": [ - "(cat:def ch4 (cat:chml-clss x4 4))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 46, - "text": [ - "[K817 Cohomology-Class on K802 of degree 4]" - ] - } - ], - "prompt_number": 46 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def f4 (cat:z2-whitehead x4 ch4))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 47, - "text": [ - "[K832 Fibration K736 -> K818]" - ] - } - ], - "prompt_number": 47 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:def x5 (cat:fibration-total f4))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 48, - "text": [ - "[K838 Simplicial-Set]" - ] - } - ], - "prompt_number": 48 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(cat:homology x5 4 6)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 4.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 1/4 (dimension 4) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 2/4 (dimension 4) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 3/4 (dimension 4) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 4/4 (dimension 4) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 7.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 1/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 2/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 3/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 4/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 5/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 6/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 9s.\n", - "Computing the boundary of the generator 7/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 4 :\n", - "\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 7.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 1/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 2/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 3/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 4/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 5/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 6/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 7/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 14.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 1/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 2/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 3/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 4/14 (dimension 6) :\n", - ">> <>][3 <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 5/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 6/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 7/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 8/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 10s.\n", - "Computing the boundary of the generator 9/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 11s.\n", - "Computing the boundary of the generator 10/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 11s.\n", - "Computing the boundary of the generator 11/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 12s.\n", - "Computing the boundary of the generator 12/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 13s.\n", - "Computing the boundary of the generator 13/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 14s.\n", - "Computing the boundary of the generator 14/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - "\n", - "\n", - "Homology in dimension 5 :\n", - "\n", - "\n", - "Component Z/4Z\n", - "\n", - "\n", - "---done---\n", - "\n", - ";; Clock -> 2015-08-08, 10h 11m 15s.\n", - "\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 49, - "text": [ - "NIL" - ] - } - ], - "prompt_number": 49 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So $\\pi_5(\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}))$ is $\\mathbb{Z}/4\\mathbb{Z}$." - ] + "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 $\\texttt{Kenzo}$ in algebraic topology.\n", + "\n", + "Load the $\\texttt{Kenzo}$ software as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(\"kenzo\")" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" } ], - "metadata": {} + "source": [ + "(ql:quickload \"kenzo\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main functionality of the $\\texttt{Kenzo}$ software is defined package in the $\\texttt{cat}$ Lisp package. Initialize the $\\texttt{cat}$ package as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "---done---" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cat-init)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Print the $\\texttt{Kenzo}$ version as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "*** Kenzo-Version 1.1.7 ***\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:kenzo-version)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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), 15 the $3$--simplex and the $4$--simplex are respectively labelled $\\texttt{\"*\"}$, $\\texttt{M3}$ and $\\texttt{N4}$. Two faces of the $4$-simplex $\\texttt{N4}$ are identified with the $3$-simplex $\\texttt{M3}$, the others being contracted on the base point. To create the simplicial set one types simply: " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Simplicial-Set]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def m23 (cat:moore 2 3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The system answers that a $\\texttt{Kenzo}$ object has been created, with number $1$ and type $\\texttt{SIMPLICIAL SET}$. This object may be referenced by the symbol $\\texttt{m23}$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K1 Simplicial-Set]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 0.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 0) :\n", + "* \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 1.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 0 :\n", + "\n", + "\n", + "Component Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 1.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 2.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 1 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 2.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 3) :\n", + "M3 \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 2 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 3) :\n", + "M3 \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 4) :\n", + "N4 \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 3 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 4) :\n", + "N4 \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:homology m23 0 5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As $\\texttt{m23}$ is a simplicial set, it is possible to create the cartesian product $\\texttt{m23}\\times\\texttt{m23}$ by the function $\\texttt{crts-prdc}$. This is a new simplicial set." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K10 Simplicial-Set]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def m23xm23 (cat: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": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "( ...)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:basis m23xm23 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "230" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(length (cat:basis m23xm23 6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The number of elements of the basis is quite large (230). The user will note that the basis elements are formed by cartesian products of *degenerated simplices*. In the list, an element like $\\texttt{}$ 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 $\\texttt{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": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Chain-Complex]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def t2m23 (cat:tnsr-prdc m23 m23))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "()" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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, $\\texttt{m23xm23}$ and $\\texttt{t2m23}$ have the same homology groups, but the computations using the tensor product are considerably faster." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 0.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 0) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 1.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 0 :\n", + "\n", + "\n", + "Component Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 1.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 2.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 1 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 2.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 2 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 4) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 4) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 3 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 4) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 4) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 6.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 6) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 5 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 6.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 6) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 7.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 7) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 7) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 6 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 7.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 7) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 7) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 8.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/1 (dimension 8) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 7 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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 $\\texttt{Kenzo}$ by the function $\\texttt{k-z}$. In this simplicial group, a simplex in dimension $n$ \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 $\\texttt{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: $\\texttt{(2 3 4 5)}$. In dimension $0$, the only \n", + "simplex is $\\texttt{NIL}$ (the base point)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K38 Abelian-Simplicial-Group]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def kz1 (cat: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": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<1 * >\n", + "<1 * >\n", + "<1 * >\n", + "<1 * >\n", + "<1 * >\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:cprd kz1 4 '(2 3 4 5))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 6}\n", + "<1 * (1 2 3 4 5 6)>\n", + "<-1 * (1 3 2 4 5 6)>\n", + "<1 * (1 3 4 2 5 6)>\n", + "<-1 * (1 3 4 5 2 6)>\n", + "<1 * (1 3 4 5 6 2)>\n", + "<1 * (3 1 2 4 5 6)>\n", + "<-1 * (3 1 4 2 5 6)>\n", + "<1 * (3 1 4 5 2 6)>\n", + "<-1 * (3 1 4 5 6 2)>\n", + "<1 * (3 4 1 2 5 6)>\n", + "... ...\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:aprd kz1 6 (cat: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: $\\texttt{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": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K64 Abelian-Simplicial-Group]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def k-z2-2 (cat:k-z2 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/2 (dimension 4) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/2 (dimension 4) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 3.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/3 (dimension 5) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/3 (dimension 5) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 3/3 (dimension 5) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "Component Z/4Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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 $\\texttt{sphere}$ and $\\texttt{loop-space}$. Then we compute the $H_4$ and $H_5$ of $\\Omega^2 S^3$:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K174 Simplicial-Set]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def s3 (cat:sphere 3))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K191 Simplicial-Group]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def o2s3 (cat:loop-space s3 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 3.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/3 (dimension 4) :\n", + "<>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 2/3 (dimension 4) :\n", + "<>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 3/3 (dimension 4) :\n", + "<>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 5.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + "Computing the boundary of the generator 1/5 (dimension 5) :\n", + "<>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 26s.\n", + "Computing the boundary of the generator 2/5 (dimension 5) :\n", + "<>][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 3/5 (dimension 5) :\n", + "<>][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 4/5 (dimension 5) :\n", + "<>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 5/5 (dimension 5) :\n", + "<>][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "Component Z/3Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 5.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 1/5 (dimension 5) :\n", + "<>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 2/5 (dimension 5) :\n", + "<>][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 3/5 (dimension 5) :\n", + "<>][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 4/5 (dimension 5) :\n", + "<>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 5/5 (dimension 5) :\n", + "<>][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 6.\n", + "Rank of the source-module : 8.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 1/8 (dimension 6) :\n", + "<>][5 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 2/8 (dimension 6) :\n", + "<>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + "Computing the boundary of the generator 3/8 (dimension 6) :\n", + "<>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 28s.\n", + "Computing the boundary of the generator 4/8 (dimension 6) :\n", + "<>][1 <>][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 28s.\n", + "Computing the boundary of the generator 5/8 (dimension 6) :\n", + "<>][1 <>][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 29s.\n", + "Computing the boundary of the generator 6/8 (dimension 6) :\n", + "<>][3 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 29s.\n", + "Computing the boundary of the generator 7/8 (dimension 6) :\n", + "<>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 29s.\n", + "Computing the boundary of the generator 8/8 (dimension 6) :\n", + "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 5 :\n", + "\n", + "\n", + "Component Z/3Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K179 Simplicial-Group]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def os3 (cat:loop-space s3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following instruction, we locate in the symbol $\\texttt{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": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<>" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def L1 (cat: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": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ">>" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def null-simp (cat:absm 3 cat:+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 $\\texttt{os3}$ a $3$--simplex named $\\texttt{D3}$, the attaching map being described by the list of its faces in dimension $2$." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K435 Simplicial-Set]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def dos3 (cat: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 $\\texttt{dos3}$:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 2.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 1/1 (dimension 2) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 1/1 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 2 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 1/1 (dimension 3) :\n", + " \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 1/1 (dimension 4) :\n", + "<> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 3 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:homology dos3 2 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But more interesting, let us build the loop space of the object $\\texttt{dos3}$ and let us compute the homology in dimension $5$:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K453 Simplicial-Group]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def odos3 (cat:loop-space dos3))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 14.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 1/14 (dimension 5) :\n", + "<>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 2/14 (dimension 5) :\n", + "<][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 3/14 (dimension 5) :\n", + "<>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 4/14 (dimension 5) :\n", + "<>][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 5/14 (dimension 5) :\n", + "<>][2 ][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 6/14 (dimension 5) :\n", + "<>][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 7/14 (dimension 5) :\n", + "<][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 8/14 (dimension 5) :\n", + "<][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + "Computing the boundary of the generator 9/14 (dimension 5) :\n", + "<>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 10/14 (dimension 5) :\n", + "<>][1 <>][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 11/14 (dimension 5) :\n", + "<>][1 <>][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 12/14 (dimension 5) :\n", + "<>][2 ][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 13/14 (dimension 5) :\n", + "<][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 14/14 (dimension 5) :\n", + "<>][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 6.\n", + "Rank of the source-module : 26.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 1/26 (dimension 6) :\n", + "<>][5 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + "Computing the boundary of the generator 2/26 (dimension 6) :\n", + "<>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 32s.\n", + "Computing the boundary of the generator 3/26 (dimension 6) :\n", + "<>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 32s.\n", + "Computing the boundary of the generator 4/26 (dimension 6) :\n", + "<>][2 ][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 32s.\n", + "Computing the boundary of the generator 5/26 (dimension 6) :\n", + "<>][3 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 32s.\n", + "Computing the boundary of the generator 6/26 (dimension 6) :\n", + "<][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 32s.\n", + "Computing the boundary of the generator 7/26 (dimension 6) :\n", + "<][2 ][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 8/26 (dimension 6) :\n", + "<][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 9/26 (dimension 6) :\n", + "<>][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 10/26 (dimension 6) :\n", + "<>][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 11/26 (dimension 6) :\n", + "<>][1 <>][1 <>][3 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 12/26 (dimension 6) :\n", + "<>][1 <>][2 ][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 33s.\n", + "Computing the boundary of the generator 13/26 (dimension 6) :\n", + "<>][1 <>][3 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 14/26 (dimension 6) :\n", + "<>][2 ][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 15/26 (dimension 6) :\n", + "<>][2 ][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 16/26 (dimension 6) :\n", + "<>][3 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 17/26 (dimension 6) :\n", + "<][1 <>][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 18/26 (dimension 6) :\n", + "<][1 <>][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 19/26 (dimension 6) :\n", + "<][2 ][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 34s.\n", + "Computing the boundary of the generator 20/26 (dimension 6) :\n", + "<>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 21/26 (dimension 6) :\n", + "<>][1 <>][1 <>][1 <>][2 ]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 22/26 (dimension 6) :\n", + "<>][1 <>][1 <>][2 ][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 23/26 (dimension 6) :\n", + "<>][1 <>][2 ][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 24/26 (dimension 6) :\n", + "<>][2 ][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 25/26 (dimension 6) :\n", + "<][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 35s.\n", + "Computing the boundary of the generator 26/26 (dimension 6) :\n", + "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 5 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z/2Z\n", + "\n", + "Component Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(typep s3 'cat:kan)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "T" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(typep os3 'cat:kan)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "T" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(typep os3 'cat:simplicial-group)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(typep os3 'cat: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": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<>" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def L2 (cat:loop3 0 's3 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<1 * <>>\n", + "<-1 * <>>\n", + "<1 * <>>\n", + "<1 * <>>\n", + "<-1 * <>>\n", + "<1 * <>>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def square (cat:aprd os3 4 (cat: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 $\\texttt{L2}$. The following instruction selects the generator part of the \n", + "second element of the previous combination." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<>" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def L4 (cat:gnrt (second (cat:cmbn-list square))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us use the lisp function $\\texttt{mapcar}$ (one among the various iteration functions of Lisp) to create the list of the faces 1, 2, 3 and 4 of the object $\\texttt{L4}$, this list is a \"Kan hat\"." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(>> >> >> >>)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def hat (mapcar #'(lambda (i) (cat:face os3 i 4 l4)) '(1 2 3 4)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function $\\texttt{kfll}$ tries to find a filling of this \"Kan hat\", and we see that the face $2$ of the resulting simplex (which is very different from $\\texttt{L4}$) is the same as the face $2$ of $\\texttt{L4}$." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ">>" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def kan-simplex (cat:kfll os3 0 4 hat))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ">>" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:face os3 2 4 kan-simplex)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ">>" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(second hat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let ${\\cal G}$ be a simplicial group $0$--reduced. $\\Omega S^3$ is such a group. The software $\\texttt{Kenzo}$ allows the construction of the universal bundle $\\bar{\\cal W}{\\cal 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$ is null." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K598 Simplicial-Set]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def cls-os3 (cat:classifying-space os3))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(typep cls-os3 'cat:simplicial-group)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 0.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 1.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/1 (dimension 5) :\n", + "<>]>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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 $\\texttt{Kenzo}$ is the Whitehead tower. In this current 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": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K729 Cohomology-Class on K1 of degree 3]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ch3 (cat:chml-clss m23 3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then the function $\\texttt{z2-whitehead}$ is called to build a fibration over the simplicial set $\\texttt{m23}$ canonically associated to the cohomology class $\\texttt{ch3}$." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K730 Fibration K1 -> K64]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def f3 (cat:z2-whitehead m23 ch3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then the total space of the fibration is built:" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K736 Simplicial-Set]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def x4 (cat: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": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 3.\n", + "Rank of the source-module : 2.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/2 (dimension 3) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/2 (dimension 3) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 3.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 3/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 3 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 3.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 3/3 (dimension 4) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 4.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/4 (dimension 5) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/4 (dimension 5) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 3/4 (dimension 5) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 4/4 (dimension 5) :\n", + ">> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "Component Z/2Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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": 46, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K817 Cohomology-Class on K802 of degree 4]" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def ch4 (cat:chml-clss x4 4))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K832 Fibration K736 -> K818]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def f4 (cat:z2-whitehead x4 ch4))" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K838 Simplicial-Set]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def x5 (cat:fibration-total f4))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Computing boundary-matrix in dimension 4.\n", + "Rank of the source-module : 4.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/4 (dimension 4) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/4 (dimension 4) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 3/4 (dimension 4) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 4/4 (dimension 4) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 7.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 1/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 2/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 3/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 4/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + "Computing the boundary of the generator 5/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 6/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 7/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 4 :\n", + "\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 5.\n", + "Rank of the source-module : 7.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 1/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 2/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 3/7 (dimension 5) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 4/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 5/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 6/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 7/7 (dimension 5) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + "Computing boundary-matrix in dimension 6.\n", + "Rank of the source-module : 14.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 1/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 2/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + "Computing the boundary of the generator 3/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 4/14 (dimension 6) :\n", + ">> <>][3 <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 5/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 6/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 7/14 (dimension 6) :\n", + ">> <>]>>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 8/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 9/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 38s.\n", + "Computing the boundary of the generator 10/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 39s.\n", + "Computing the boundary of the generator 11/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 39s.\n", + "Computing the boundary of the generator 12/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 41s.\n", + "Computing the boundary of the generator 13/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 42s.\n", + "Computing the boundary of the generator 14/14 (dimension 6) :\n", + ">> <>> \n", + "End of computing.\n", + "\n", + "\n", + "\n", + "\n", + "Homology in dimension 5 :\n", + "\n", + "\n", + "Component Z/4Z\n", + "\n", + "\n", + "---done---\n", + "\n", + ";; Clock -> 2015-08-14, 21h 17m 43s.\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat: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": "CCL 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 }