From 87cbc7e99bbd324eb71b3b6a1f52ad5f697b1516 Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Sun, 29 Nov 2015 21:31:54 -0600 Subject: [PATCH 1/7] Build Docker image with 'docker build -t image_name .' Run with 'docker run -d -p 8888:8888 image_name' --- Dockerfile | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3659b54 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM sergiobuj/cl-jupyter +MAINTAINER gheber + +RUN apt-get update + +# Update Quicklisp and install Kenzo +RUN sbcl --eval "(ql:update-client)" +RUN sbcl --eval "(ql:update-all-dists)" +RUN sbcl --eval "(ql:quickload :kenzo)" + +RUN cp /root/quicklisp/dists/quicklisp/software/kenzo-*-git/examples/*.ipynb /notebooks/ From d169572ae9cef48d4839865c77d9724b4130bb2c Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Mon, 28 Dec 2015 19:14:23 -0600 Subject: [PATCH 2/7] Updated introduction and formatting. --- examples/Overview.ipynb | 365 +++++++++++++++++++++------------------- 1 file changed, 191 insertions(+), 174 deletions(-) diff --git a/examples/Overview.ipynb b/examples/Overview.ipynb index 1377b46..1f7f575 100644 --- a/examples/Overview.ipynb +++ b/examples/Overview.ipynb @@ -13,7 +13,11 @@ "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:" + "The material is arranged in a sequence of cells. Cells marked with $\\texttt{In [*]}$ represent (editable) input expressions, which in a traditional REPL (Read-Evaluate-Print Loop) would be typed by the user. Cells marked with $\\texttt{Out [*]}$ represent the value of the correpsponding input expression. Note that if an input expression was not evaluated previously, the ouput cell might be missing. Finally, there might be additional, non-editable, diagnostic output printed between an input and output cell. This is a side-effect of the input form evaluation and can be ignored on first reading.\n", + "\n", + "### Getting off the Ground\n", + "\n", + "Load the $\\texttt{Kenzo}$ software by evaluating the follwing expression. When loaded successfully, the value of this form is a single string atom list $(\\texttt{\"kenzo\"})$." ] }, { @@ -23,6 +27,18 @@ "collapsed": false }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "To load \"kenzo\":\n", + " Load 1 ASDF system:\n", + " kenzo\n", + "\n", + "; Loading \"kenzo\"\n", + "\n" + ] + }, { "data": { "text/plain": [ @@ -42,7 +58,7 @@ "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:" + "The main functionality of the $\\texttt{Kenzo}$ software is defined in a Lisp package called $\\texttt{cat}$. Initialize the software by calling the $\\texttt{cat-init}$ function of the $\\texttt{cat}$ package. Upon successful initialization this form evaluates to $\\texttt{NIL}$." ] }, { @@ -79,7 +95,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Print the $\\texttt{Kenzo}$ version as follows:" + "You can print the $\\texttt{Kenzo}$ version by calling the $\\texttt{kenzo-version}$ function:" ] }, { @@ -117,7 +133,9 @@ "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: " + "### $\\texttt{Kenzo}$ in Action\n", + "\n", + "Let us begin by the space $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}, 3)$ described as a simplicial set having only three non-degenerate simplices, namely in dimension $0$, $3$ and $4$. In the representation created by the software, the $0$-simplex (base point), the $3$-simplex and the $4$-simplex are respectively labelled $\\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: " ] }, { @@ -194,7 +212,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 0) :\n", "* \n", "End of computing.\n", @@ -214,7 +232,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n", "\n", "Computing boundary-matrix in dimension 1.\n", @@ -233,7 +251,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n", "\n", "Computing boundary-matrix in dimension 2.\n", @@ -244,7 +262,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 3) :\n", "M3 \n", "End of computing.\n", @@ -258,14 +276,14 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 3) :\n", "M3 \n", "End of computing.\n", @@ -275,7 +293,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 4) :\n", "N4 \n", "End of computing.\n", @@ -291,14 +309,14 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 4) :\n", "N4 \n", "End of computing.\n", @@ -316,7 +334,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -419,7 +437,7 @@ "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", + "As shown by the last command, the number of elements of the basis is quite large (230). The user will note that the basis elements are 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:" ] @@ -491,7 +509,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 0) :\n", " \n", "End of computing.\n", @@ -511,7 +529,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n", "\n", "Computing boundary-matrix in dimension 1.\n", @@ -530,7 +548,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n", "\n", "Computing boundary-matrix in dimension 2.\n", @@ -541,13 +559,13 @@ "Rank of the source-module : 2.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 3) :\n", " \n", "End of computing.\n", @@ -561,20 +579,20 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 3) :\n", " \n", "End of computing.\n", @@ -584,13 +602,13 @@ "Rank of the source-module : 2.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 4) :\n", " \n", "End of computing.\n", @@ -608,20 +626,20 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 4) :\n", " \n", "End of computing.\n", @@ -639,7 +657,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n", "\n", "Computing boundary-matrix in dimension 5.\n", @@ -650,7 +668,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 6) :\n", " \n", "End of computing.\n", @@ -664,14 +682,14 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 6) :\n", " \n", "End of computing.\n", @@ -681,13 +699,13 @@ "Rank of the source-module : 2.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 7) :\n", " \n", "End of computing.\n", @@ -703,20 +721,20 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 7) :\n", " \n", "End of computing.\n", @@ -726,7 +744,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 8) :\n", " \n", "End of computing.\n", @@ -742,7 +760,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -765,8 +783,7 @@ "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", + "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$ 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)." ] @@ -912,13 +929,13 @@ "Rank of the source-module : 2.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 2/2 (dimension 4) :\n", "<> \n", "End of computing.\n", @@ -928,19 +945,19 @@ "Rank of the source-module : 3.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 3/3 (dimension 5) :\n", "<> \n", "End of computing.\n", @@ -956,7 +973,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -1043,19 +1060,19 @@ "Rank of the source-module : 3.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 3/3 (dimension 4) :\n", "<>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1065,31 +1082,31 @@ "Rank of the source-module : 5.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 25s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 5/5 (dimension 5) :\n", "<>][1 <>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1107,38 +1124,38 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 5/5 (dimension 5) :\n", "<>][1 <>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1148,49 +1165,49 @@ "Rank of the source-module : 8.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 27s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 8/8 (dimension 6) :\n", "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1208,7 +1225,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -1260,7 +1277,7 @@ "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$." + "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$." ] }, { @@ -1289,7 +1306,7 @@ "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$: " + "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$: " ] }, { @@ -1318,7 +1335,7 @@ "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$." + "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$." ] }, { @@ -1367,7 +1384,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 2) :\n", "<> \n", "End of computing.\n", @@ -1377,7 +1394,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 3) :\n", " \n", "End of computing.\n", @@ -1393,14 +1410,14 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 3) :\n", " \n", "End of computing.\n", @@ -1410,7 +1427,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 1/1 (dimension 4) :\n", "<> \n", "End of computing.\n", @@ -1424,7 +1441,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -1488,85 +1505,85 @@ "Rank of the source-module : 14.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 30s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 14/14 (dimension 5) :\n", "<>][1 <>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1576,157 +1593,157 @@ "Rank of the source-module : 26.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 31s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\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", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "Computing the boundary of the generator 26/26 (dimension 6) :\n", "<>][1 <>][1 <>][1 <>][1 <>][1 <>]>> \n", "End of computing.\n", @@ -1754,7 +1771,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 1s.\n", "\n" ] }, @@ -1777,7 +1794,7 @@ "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." + "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." ] }, { @@ -2063,7 +2080,7 @@ "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." + "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." ] }, { @@ -2130,7 +2147,7 @@ "Rank of the source-module : 1.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 1/1 (dimension 5) :\n", "<>]>> \n", "End of computing.\n", @@ -2144,7 +2161,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "\n" ] }, @@ -2167,7 +2184,7 @@ "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", + "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:" ] @@ -2275,13 +2292,13 @@ "Rank of the source-module : 2.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 2/2 (dimension 3) :\n", ">> \n", "End of computing.\n", @@ -2291,19 +2308,19 @@ "Rank of the source-module : 3.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 3/3 (dimension 4) :\n", ">> \n", "End of computing.\n", @@ -2317,26 +2334,26 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 3/3 (dimension 4) :\n", ">> \n", "End of computing.\n", @@ -2346,25 +2363,25 @@ "Rank of the source-module : 4.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 4/4 (dimension 5) :\n", ">> \n", "End of computing.\n", @@ -2380,7 +2397,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "\n" ] }, @@ -2488,25 +2505,25 @@ "Rank of the source-module : 4.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 4/4 (dimension 4) :\n", ">> <>> \n", "End of computing.\n", @@ -2516,43 +2533,43 @@ "Rank of the source-module : 7.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 36s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 7/7 (dimension 5) :\n", ">> <>> \n", "End of computing.\n", @@ -2566,50 +2583,50 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 7/7 (dimension 5) :\n", ">> <>> \n", "End of computing.\n", @@ -2619,85 +2636,85 @@ "Rank of the source-module : 14.\n", "\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 37s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\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", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "Computing the boundary of the generator 14/14 (dimension 6) :\n", ">> <>> \n", "End of computing.\n", @@ -2713,7 +2730,7 @@ "\n", "---done---\n", "\n", - ";; Clock -> 2015-08-14, 21h 17m 43s.\n", + ";; Clock -> 2015-12-29, 1h 11m 2s.\n", "\n" ] }, @@ -2742,7 +2759,7 @@ ], "metadata": { "kernelspec": { - "display_name": "CCL Lisp", + "display_name": "SBCL Lisp", "language": "lisp", "name": "lisp" }, From 1170d62c64f878314956ff5495547eb85011535d Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Sat, 9 Jan 2016 19:52:13 -0500 Subject: [PATCH 3/7] Updated chapter 1. --- examples/Chapter1.ipynb | 820 +++++++++++++++++++++------------------- examples/diabolo.png | Bin 0 -> 10443 bytes 2 files changed, 438 insertions(+), 382 deletions(-) create mode 100644 examples/diabolo.png diff --git a/examples/Chapter1.ipynb b/examples/Chapter1.ipynb index 36bdacf..bb5b5af 100644 --- a/examples/Chapter1.ipynb +++ b/examples/Chapter1.ipynb @@ -1,12 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Chapter 1" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -21,6 +14,7 @@ "To load \"kenzo\":\n", " Load 1 ASDF system:\n", " kenzo\n", + "\n", "; Loading \"kenzo\"\n", "\n" ] @@ -28,7 +22,7 @@ { "data": { "text/plain": [ - "(\"kenzo\")" + "(KENZO)" ] }, "execution_count": 1, @@ -37,7 +31,7 @@ } ], "source": [ - "(ql:quickload \"kenzo\")" + "(ql:quickload 'kenzo)" ] }, { @@ -74,7 +68,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.2.2 Ordering the generators" + "# Chain Complexes\n", + "\n", + "## Introduction\n", + "\n", + "## Generators, terms, and combinations\n", + "\n", + "To become familiar with the Lisp functions implementing the chain complexes, the best is to begin with an example. *Simplicial complexes* are good candidates for this purpose, and we shall take as a typical example the following simplicial complex." ] }, { @@ -83,6 +83,57 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAD5CAYAAADMd4SKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACh1SURBVHhe7d0LkFZlHcfxB8UL4zXNdIwIgUlNnbyPl10kdVzM+wyjLFqhKQZYluGik5YllUs2XlJINKGpWHSYvOdCyiQgGmrmJTVjsVHSNK+paSoSv2fPf3n27Hn3Avteznm+n5m3c3tfzXfPe87/PM/vPGfAmrUcAABAwW2UTAEAAAqNogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBoicSS5cudQMGDOh4jR49OtnS2bx58/z2SZMmJWsAACgGip4IrFy50tXX1ydL7RYsWNClsNFyY2NjsgQA+WcXcvbq7oLO3oPiouiJwPz58/20ubnZrVmzxrW1tfnlhQsX+qmMGDHCzZw50w0fPjxZAwD5phbu9IWcjnPTp09PltYp1fqNYqHoicjUqVN9q8+wYcN88bNixYpkSzsVQ9OmTUuWACDf5s6d66ctLS3+mLdkyRK/vGjRIj81KoLU+o3io+iJQFNTUzLnfEuOmm/VshNSAaRiCACKxlp76urqfPHT2trql0WtQbognDhxYrIGRUbREwn90MOuK7XqpAsfACiSKVOmJHPr8jrpbqzx48f7Y+OMGTOSNSgyip6IqDUnbOJV4aOrHAAoIuvKD6kbywofhZp1HJwzZ45fRvFR9ERAP3Bd4eguBlETb0NDg58HgKJT4aOXsj2iwkf5RoWaRXe3hndtaZ4LwmKi6ImAmm9F/drWxGuhPRVAAFBE6sIPC5ixY8dyh2rkKHoioB+6XeGE0s2+AFAkEyZM8FNrydFL3VkqfKzrK3wZzXNBWEwD1v5xOfMBAApJt6Pr7iyjgic9XIdRUSScFouLogcAAESB7i0AABAFih4AABAFih4AABAFih4AABAFgswReu655zoeuHf44Ye7XXbZxc8DQNFx/IsbRU9EnnzySXfssce6V1991W266aZ+3QcffOA++clPujvvvNPtueeefh0AFA3HPwhFTyT0gz/ssMPc6tWr3VtvvZWsbbfNNtu4jTfe2N1333388AEUDsc/GIqeSAwdOtS98MIL7uOPP07WdLbRRhu5IUOG+KZfACgSjn8wBJkjoB+ymnRL/eBF2/SeV155JVkDAPnH8Q8hip4IKLQ3aNCgZKm0LbbYwi1evDhZAoD84/iHEEVPJHrTi/nRRx916e8GgLzj+AdD0RMB3Zb53nvvJUul6T16LwAUBcc/hCh6IqBxKHbYYQcf1itF2wYOHOgeeuihZA0A5F9vj396D2P2FB93b0VCt2yOHDnSj0vx7rvvJmvbqS97k002cW+++aZf/uY3v+muuuoqPw8AeaNj2YMPPuhf999/v9txxx3dHXfc4Y9/77//fvKudjr+adwe5Xm4Zb34KHoiosLnmGOO8Xco2J99wIAB7lOf+pS76667XGtrqzv//PP9+n333ddde+217qCDDvLLAFCLPvzwQ/fYY4+5v/zlL52mb7/9tt++9957uwsuuMB3X2n6xhtv+OOfWnfC4x8FTxwoeiKkWzhvvPFGP3/GGWd0atLVldHkyZPdn//8Z7/805/+1E2ZMsXPA0C1vfzyyx2FjRU5Tz31VLK1q/POO88df/zxyZJzL730kmtsbPTzK1eupEsrMhQ9kTr99NP9dPbs2X6api6un//8537+xBNPdNdcc4379Kc/7ZcBoBreeecd19zc7I9H1h3fnf3228/97Gc/S5bWGTVqlJ9y+osPQeYIPfHEE37sCr00n+Xqq692N910k38uza233ur22Wcfd/PNNydbAaDyttxyS3fppZe6Rx55xF155ZXuiCOOSLZ0pRzPqaeemiwB7Sh6IqT+6+eff96/NF/KySef7JuO1dLz73//251yyinu3HPPTbYCQHUMGzbMH4vuueeeTl1XoaOPPtpnE4EQRU9kNPhWWOhovrsBudSldcstt/hsj6gFSE3Gyv4AQLU88MAD/lh0++23J2vWUbGjogdIo+iJjIqcpUuXJkvOz3fX2mMUZtZBRgcThZwPPvhgd/nllydbAaBydOw55JBD/LFojz32cJdcckmyxfnhN770pS/57i0gjaInMlkFTm+KHtHt6+pL/8Y3vuGXdXv7SSed5P75z3/6ZQAoJx1rdMyxoTV0F5aG1lDm0KjgOfLII5MloDOKnoiUatVJt/70hJAzgErTMUZj7uiYs9122/lA89lnn+23bb311m6rrbbyt5/TrYXu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", + "text/plain": [ + "#" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(png-from-file \"diabolo.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this simplicial complex, called here *diabolo*, there are 3 associated chain groups.\n", + "\n", + "* $C_0$, the free $\\mathbb{Z}$-module on the set of vertices $\\{s_0,s_1,s_2,s_3,s_4,s_5\\}$\n", + "* $C_1$, the free $\\mathbb{Z}$-module on the set of edges $\\{s_{01},s_{02},s_{12},s_{23},s_{34},s_{35}, s_{45}\\}$\n", + "* $C_2$, the free $\\mathbb{Z}$-module on the set of triangles (here a singleton) $\\{s_{345}\\}$\n", + "\n", + "The elements of either of those groups $C_p$ are linear integer combinations of the corresponding basis (set of $\\sigma_i$'s), i.e., elements of the form\n", + "$$\\sum\\lambda_i\\sigma_i, \\quad \\lambda_i\\in\\mathbb{Z}.$$\n", + "An element $\\sigma_i$ of any basis is also called a *generator* and in our specific case this generator will be represented by a Lisp symbol. For instance, $s_{45}$ will be translated into $\\texttt{s45}$. However, the user should be aware that in more realistic usage of the software, generators may be of any type. A product such as $\\lambda_i\\sigma_i$ is called a *term* and a sum of terms, a *combination*.\n", + "\n", + "### Representation of a combination\n", + "\n", + "A combination is represented internally in the system by a list habing the following general form:\n", + "$$\\texttt{(:cmbn degree}\\quad(\\lambda_1\\cdot\\sigma_1)\\dots(\\lambda_k\\cdot\\sigma_k)\\texttt{)}$$\n", + "and containing\n", + "\n", + "1. The degree of the combination corresponding to the index $p\\in\\mathbb{Z}$ of the group $C_p$ to which this combination belongs.\n", + "2. The list of the internal representation of the terms, namely the list of pairs $(\\lambda_i\\cdot\\sigma_i)$.\n", + "\n", + "This choice of representation implaies that only homogeneous combinations will be considered. A type $\\texttt{CMBN}$ and a printing method are provided with this internal representation. The external form of a combination is shown in the examples.\n", + "\n", + "### Ordering the generators" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -95,7 +146,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -106,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -117,7 +168,7 @@ ":LESS" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -128,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -145,7 +196,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -156,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -167,7 +218,7 @@ ":GREATER" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -178,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -194,7 +245,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -205,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -216,7 +267,7 @@ ":GREATER" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -229,12 +280,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.2.3 Functions handling combinations" + "### Functions handling combinations" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -252,7 +303,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -263,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -280,7 +331,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -291,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -306,7 +357,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -317,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -328,7 +379,7 @@ "T" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -346,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -357,7 +408,7 @@ "((1 . U) (2 . V) (3 . W) (4 . Z))" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -368,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -379,7 +430,7 @@ "(3 . W)" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -390,7 +441,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -405,7 +456,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -416,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -427,7 +478,7 @@ "3" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -438,7 +489,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -453,7 +504,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -464,7 +515,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -475,7 +526,7 @@ "W" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -486,7 +537,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -501,7 +552,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -512,7 +563,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -529,7 +580,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -540,7 +591,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -555,7 +606,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 21, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -566,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -583,7 +634,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -594,7 +645,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -612,7 +663,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -623,7 +674,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -640,7 +691,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -651,7 +702,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -669,7 +720,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -680,7 +731,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -697,7 +748,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -708,7 +759,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -725,7 +776,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 27, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -739,38 +790,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.3.1 The function build-chcm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "## Representation of a chain complex\n", + "\n", + "### The function build-chcm\n", + "\n", "#### A first example of a chain complex" ] }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "#" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:def diabolo-cmpr #'cat:s-cmpr)" - ] - }, { "cell_type": "code", "execution_count": 29, @@ -781,7 +807,7 @@ { "data": { "text/plain": [ - "#" + "#" ] }, "execution_count": 29, @@ -789,6 +815,28 @@ "output_type": "execute_result" } ], + "source": [ + "(cat:def diabolo-cmpr #'cat:s-cmpr)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(cat:def diabolo-basis #'(lambda (dmn)\n", " (case dmn\n", @@ -800,7 +848,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -811,7 +859,7 @@ "S0" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -822,7 +870,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -830,10 +878,10 @@ { "data": { "text/plain": [ - "#" + "#" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -860,7 +908,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -871,7 +919,7 @@ ":GNRT" ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -882,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -893,7 +941,7 @@ "(DIABOLO-FOR-EXAMPLE)" ] }, - "execution_count": 33, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -904,7 +952,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -932,17 +980,19 @@ " 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", + ":ORGN ORGN, a list which is the copy of a Lisp statement, in principle the\n", + " statement which was at the origin of the creation of this Kenzo\n", + " object. A caching process, using this slot, prevents the creation\n", + " of multiple copies of the same mathematical object, which is\n", + " important for efficiency. It is used also for debugging and\n", + " analyzing the program.\n", "\n", "Use this function instead of creating instances via the standard constructor\n", "MAKE-INSTANCE.\n", "------------------------------------------------------------------------------\"" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -953,7 +1003,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -964,7 +1014,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -977,7 +1027,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -993,35 +1043,13 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cat:chcm 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Chain-Complex]" - ] - }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:chcm 1)" + "(documentation 'cat:chcm 'function)" ] }, { @@ -1034,7 +1062,7 @@ { "data": { "text/plain": [ - "(DIABOLO-FOR-EXAMPLE)" + "[K1 Chain-Complex]" ] }, "execution_count": 38, @@ -1043,7 +1071,7 @@ } ], "source": [ - "(cat:orgn diabolo)" + "(cat:chcm 1)" ] }, { @@ -1056,7 +1084,7 @@ { "data": { "text/plain": [ - "1" + "(DIABOLO-FOR-EXAMPLE)" ] }, "execution_count": 39, @@ -1065,7 +1093,7 @@ } ], "source": [ - "(cat:idnm diabolo)" + "(cat:orgn diabolo)" ] }, { @@ -1078,7 +1106,7 @@ { "data": { "text/plain": [ - "(S0 S1 S2 S3 S4 S5)" + "1" ] }, "execution_count": 40, @@ -1087,7 +1115,7 @@ } ], "source": [ - "(cat:basis diabolo 0)" + "(cat:idnm diabolo)" ] }, { @@ -1100,7 +1128,7 @@ { "data": { "text/plain": [ - "(S01 S02 S12 S23 S34 S35 S45)" + "(S0 S1 S2 S3 S4 S5)" ] }, "execution_count": 41, @@ -1109,7 +1137,7 @@ } ], "source": [ - "(cat:basis diabolo 1)" + "(cat:basis diabolo 0)" ] }, { @@ -1122,7 +1150,7 @@ { "data": { "text/plain": [ - "(S345)" + "(S01 S02 S12 S23 S34 S35 S45)" ] }, "execution_count": 42, @@ -1131,7 +1159,7 @@ } ], "source": [ - "(cat:basis diabolo 2)" + "(cat:basis diabolo 1)" ] }, { @@ -1144,7 +1172,7 @@ { "data": { "text/plain": [ - "NIL" + "(S345)" ] }, "execution_count": 43, @@ -1152,13 +1180,35 @@ "output_type": "execute_result" } ], + "source": [ + "(cat:basis diabolo 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(cat:basis diabolo 10)" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "metadata": { "collapsed": false }, @@ -1174,7 +1224,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 44, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1185,7 +1235,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -1198,7 +1248,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 45, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1216,7 +1266,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -1227,7 +1277,7 @@ "[K3 Chain-Complex]" ] }, - "execution_count": 46, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1251,7 +1301,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -1266,7 +1316,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 47, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1284,7 +1334,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "metadata": { "collapsed": false }, @@ -1295,7 +1345,7 @@ "CIRCLE" ] }, - "execution_count": 48, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1321,12 +1371,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 1.4 Morphisms" + "## Morphisms" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "metadata": { "collapsed": false }, @@ -1377,13 +1427,15 @@ "9. IDNM, an integer, a system-generated identifier for this object. Its reader\n", " function is IDNM.\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. Its reader function is ORGN.\n", + "10. ORGN, a list which is the copy of a Lisp statement, in principle the\n", + " statement which was at the origin of the creation of this Kenzo object.\n", + " A caching process, using this slot, prevents the creation of multiple\n", + " copies of the same mathematical object, which is important for efficiency.\n", + " It is used also for debugging and analyzing the program.\n", "-----------------------------------------------------------------------------\"" ] }, - "execution_count": 49, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1396,12 +1448,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.4.1 The function $\\texttt{build-mprh}$" + "### The function $\\texttt{build-mprh}$" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -1427,17 +1479,19 @@ " 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", + ":ORGN ORGN, a list which is the copy of a Lisp statement, in principle the\n", + " statement which was at the origin of the creation of this Kenzo\n", + " object. A caching process, using this slot, prevents the creation\n", + " of multiple copies of the same mathematical object, which is\n", + " important for efficiency. It is used also for debugging and\n", + " analyzing the program.\n", "\n", "Use this function instead of creating instances via the standard constructor\n", "MAKE-INSTANCE.\n", "------------------------------------------------------------------------------\"" ] }, - "execution_count": 50, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1455,7 +1509,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -1474,35 +1528,13 @@ "NIL" ] }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:cat-init)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Chain-Complex]" - ] - }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def ZCC (cat:z-chcm))" + "(cat:cat-init)" ] }, { @@ -1515,7 +1547,7 @@ { "data": { "text/plain": [ - "[K3 Cohomology-Class on K1 of degree 1]" + "[K1 Chain-Complex]" ] }, "execution_count": 53, @@ -1523,6 +1555,28 @@ "output_type": "execute_result" } ], + "source": [ + "(cat:def ZCC (cat:z-chcm))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Cohomology-Class on K1 of degree 1]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(cat:def zero-morphism (cat:build-mrph :sorc ZCC\n", " :trgt ZCC\n", @@ -1535,7 +1589,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -1546,7 +1600,7 @@ "[K4 Cohomology-Class on K1 of degree 0]" ] }, - "execution_count": 54, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1564,12 +1618,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.4.3 Functions defining morphisms" + "### Applying morphisms\n", + "\n", + "### Functions defining morphisms" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 56, "metadata": { "collapsed": false }, @@ -1577,10 +1633,10 @@ { "data": { "text/plain": [ - "#" + "#" ] }, - "execution_count": 55, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -1594,7 +1650,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 57, "metadata": { "collapsed": false }, @@ -1605,7 +1661,7 @@ "[K5 Chain-Complex]" ] }, - "execution_count": 56, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1621,7 +1677,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 58, "metadata": { "collapsed": false }, @@ -1632,7 +1688,7 @@ "[K7 Morphism (degree 1): K5 -> K5]" ] }, - "execution_count": 57, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -1646,7 +1702,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 59, "metadata": { "collapsed": false }, @@ -1657,7 +1713,7 @@ "[K8 Morphism (degree -1): K5 -> K5]" ] }, - "execution_count": 58, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -1671,7 +1727,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 60, "metadata": { "collapsed": false }, @@ -1685,7 +1741,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 59, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -1696,7 +1752,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 61, "metadata": { "collapsed": false }, @@ -1709,7 +1765,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 60, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } @@ -1720,7 +1776,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 62, "metadata": { "collapsed": false }, @@ -1736,7 +1792,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 61, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } @@ -1747,7 +1803,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 63, "metadata": { "collapsed": false }, @@ -1762,37 +1818,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? ccn combn)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "------------------------------------------------------------------------------\n" - ] - }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:? ccn (cat:? ccn combn))" + "(cat:? ccn combn)" ] }, { @@ -1806,8 +1838,7 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 16>\n", + "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, @@ -1817,7 +1848,7 @@ } ], "source": [ - "(cat:? upper-shift 0 6)" + "(cat:? ccn (cat:? ccn combn))" ] }, { @@ -1831,8 +1862,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<1 * 41>\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 16>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1842,7 +1873,7 @@ } ], "source": [ - "(cat:? lower-shift 5 51)" + "(cat:? upper-shift 0 6)" ] }, { @@ -1856,8 +1887,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "<1 * 31>\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<1 * 41>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1867,7 +1898,7 @@ } ], "source": [ - "(cat:? lower-shift (cat:? lower-shift 5 51))" + "(cat:? lower-shift 5 51)" ] }, { @@ -1881,11 +1912,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<2 * 11>\n", - "<3 * 12>\n", - "<4 * 13>\n", + "----------------------------------------------------------------------{CMBN 3}\n", + "<1 * 31>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1895,7 +1923,7 @@ } ], "source": [ - "(cat:def comb1 (cat:cmbn 1 1 10 2 11 3 12 4 13))" + "(cat:? lower-shift (cat:? lower-shift 5 51))" ] }, { @@ -1904,50 +1932,6 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K9 Morphism (degree 0): K5 -> K5]" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:def identity? (cat:cmps upper-shift lower-shift))" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:degr identity?)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -1961,13 +1945,57 @@ "------------------------------------------------------------------------------\n" ] }, + "execution_count": 68, + "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": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K9 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:def identity? (cat:cmps upper-shift lower-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:? identity? comb1)" + "(cat:degr identity?)" ] }, { @@ -1982,6 +2010,10 @@ "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<2 * 11>\n", + "<3 * 12>\n", + "<4 * 13>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1991,7 +2023,7 @@ } ], "source": [ - "(cat:2cmbn-sbtr (cat:cmpr ccn) comb1 (cat:? identity? comb1))" + "(cat:? identity? comb1)" ] }, { @@ -2004,7 +2036,9 @@ { "data": { "text/plain": [ - "[K10 Morphism (degree 2): K5 -> K5]" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 72, @@ -2013,7 +2047,7 @@ } ], "source": [ - "(cat:def upper-shift2 (cat:cmps upper-shift upper-shift))" + "(cat:2cmbn-sbtr (cat:cmpr ccn) comb1 (cat:? identity? comb1))" ] }, { @@ -2026,7 +2060,7 @@ { "data": { "text/plain": [ - "2" + "[K10 Morphism (degree 2): K5 -> K5]" ] }, "execution_count": 73, @@ -2034,13 +2068,35 @@ "output_type": "execute_result" } ], + "source": [ + "(cat:def upper-shift2 (cat:cmps upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(cat:degr upper-shift2)" ] }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 75, "metadata": { "collapsed": false }, @@ -2057,35 +2113,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? upper-shift2 comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K11 Morphism (degree 1): K5 -> K5]" - ] - }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def twice-up-shift (cat:add upper-shift upper-shift))" + "(cat:? upper-shift2 comb1)" ] }, { @@ -2098,7 +2132,7 @@ { "data": { "text/plain": [ - "1" + "[K11 Morphism (degree 1): K5 -> K5]" ] }, "execution_count": 76, @@ -2106,13 +2140,35 @@ "output_type": "execute_result" } ], + "source": [ + "(cat:def twice-up-shift (cat:add upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(cat:degr twice-up-shift)" ] }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 78, "metadata": { "collapsed": false }, @@ -2129,35 +2185,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? twice-up-shift comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K12 Morphism (degree 0): K5 -> K5]" - ] - }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def up-d (cat:cmps upper-shift (cat:dffr1 ccn)))" + "(cat:? twice-up-shift comb1)" ] }, { @@ -2170,7 +2204,7 @@ { "data": { "text/plain": [ - "[K13 Morphism (degree 0): K5 -> K5]" + "[K12 Morphism (degree 0): K5 -> K5]" ] }, "execution_count": 79, @@ -2179,7 +2213,7 @@ } ], "source": [ - "(cat:def d-up (cat:cmps (cat:dffr1 ccn) upper-shift))" + "(cat:def up-d (cat:cmps upper-shift (cat:dffr1 ccn)))" ] }, { @@ -2192,10 +2226,7 @@ { "data": { "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 11>\n", - "------------------------------------------------------------------------------\n" + "[K13 Morphism (degree 0): K5 -> K5]" ] }, "execution_count": 80, @@ -2204,7 +2235,7 @@ } ], "source": [ - "(cat:? up-d 1 11)" + "(cat:def d-up (cat:cmps (cat:dffr1 ccn) upper-shift))" ] }, { @@ -2219,6 +2250,7 @@ "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 11>\n", "------------------------------------------------------------------------------\n" ] }, @@ -2228,7 +2260,7 @@ } ], "source": [ - "(cat:? d-up 1 11)" + "(cat:? up-d 1 11)" ] }, { @@ -2243,12 +2275,6 @@ "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" ] }, @@ -2258,7 +2284,7 @@ } ], "source": [ - "(cat:def comb3 (cat:cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" + "(cat:? d-up 1 11)" ] }, { @@ -2273,8 +2299,11 @@ "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" ] @@ -2285,7 +2314,7 @@ } ], "source": [ - "(cat:? up-d comb3)" + "(cat:def comb3 (cat:cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" ] }, { @@ -2294,6 +2323,33 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<2 * 11>\n", + "<4 * 13>\n", + "<6 * 15>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cat:? up-d comb3)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -2306,7 +2362,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 84, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" } @@ -2319,12 +2375,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.4.4 Accessing $\\texttt{Kenzo}$ objects" + "### Accessing $\\texttt{Kenzo}$ objects" ] }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 86, "metadata": { "collapsed": false }, @@ -2335,7 +2391,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 85, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -2346,7 +2402,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 87, "metadata": { "collapsed": false }, @@ -2367,7 +2423,7 @@ "NIL" ] }, - "execution_count": 86, + "execution_count": 87, "metadata": {}, "output_type": "execute_result" } @@ -2378,7 +2434,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 88, "metadata": { "collapsed": false }, @@ -2389,7 +2445,7 @@ "[K3 Cohomology-Class on K1 of degree 1]" ] }, - "execution_count": 87, + "execution_count": 88, "metadata": {}, "output_type": "execute_result" } @@ -2400,7 +2456,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 89, "metadata": { "collapsed": false }, @@ -2421,7 +2477,7 @@ "NIL" ] }, - "execution_count": 88, + "execution_count": 89, "metadata": {}, "output_type": "execute_result" } @@ -2432,7 +2488,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 90, "metadata": { "collapsed": false }, @@ -2453,7 +2509,7 @@ "NIL" ] }, - "execution_count": 89, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } @@ -2464,7 +2520,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 91, "metadata": { "collapsed": false }, @@ -2485,7 +2541,7 @@ "NIL" ] }, - "execution_count": 90, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } @@ -2496,7 +2552,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 92, "metadata": { "collapsed": false }, @@ -2517,7 +2573,7 @@ "NIL" ] }, - "execution_count": 91, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" } @@ -2528,7 +2584,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 93, "metadata": { "collapsed": false }, @@ -2557,7 +2613,7 @@ "(9 8 7)" ] }, - "execution_count": 92, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } @@ -2569,7 +2625,7 @@ ], "metadata": { "kernelspec": { - "display_name": "CCL Lisp", + "display_name": "SBCL Lisp", "language": "lisp", "name": "lisp" }, diff --git a/examples/diabolo.png b/examples/diabolo.png new file mode 100644 index 0000000000000000000000000000000000000000..0e70e89f8bc7aa639a5cd58c9a6057c46d48cb7f GIT binary patch literal 10443 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 Date: Sun, 10 Jan 2016 13:53:28 -0500 Subject: [PATCH 4/7] Updated notebooks. --- examples/Chapter1.ipynb | 1125 ++++++++++--------- examples/Overview.ipynb | 2267 +++------------------------------------ 2 files changed, 747 insertions(+), 2645 deletions(-) diff --git a/examples/Chapter1.ipynb b/examples/Chapter1.ipynb index bb5b5af..b3c99fe 100644 --- a/examples/Chapter1.ipynb +++ b/examples/Chapter1.ipynb @@ -40,6 +40,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(in-package \"CAT\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -55,13 +77,13 @@ "NIL" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:cat-init)" + "(cat-init)" ] }, { @@ -72,6 +94,33 @@ "\n", "## Introduction\n", "\n", + "A *chain complex* $(C_p, d_p)$ is a collection of free $\\mathbb{Z}$-modules $(C_p)$, one for each\n", + "$p \\in \\mathbb{Z}$, together with a homomorphism $d_p : C_p \\rightarrow C_{p-1}$, such\n", + "that, for all $p$, $d_{p-1} \\circ d_p = 0$. (See, for example, __P.J. Giblin__ in *Graph, Surface and Homology*, Chapman and Hall Math. series, 1981.)\n", + "\n", + "__In the Kenzo program__, a *morphism* $f=(f_p)$, of degree $k$, from a chain complex $(C_p, d_p)$ to another $(C'_p, d'_p)$ is a collection of homomorphisms\n", + "\n", + "$$f_p : C_p \\rightarrow C'_{p+k}.$$\n", + "\n", + "This is expressed by the following diagram, generally __not assumend commutative__.\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\cdots & \\leftarrow & C_{p-1} & \\quad\\xleftarrow{d_p} & C_p & \\quad\\xleftarrow{d_{p+1}} & C_{p+1} & \\quad\\leftarrow & \\cdots \\\\\n", + " & & f_{p-1} \\Bigg\\downarrow & & f_p \\Bigg\\downarrow & & f_{p+1} \\Bigg\\downarrow \\\\\n", + "\\cdots & \\leftarrow & C'_{p+k-1} & \\quad\\xleftarrow{d'_{p+k}} & C'_{p+k} & \\quad\\xleftarrow{d'_{p+k+1}} & C'_{p+k+1} & \\quad\\leftarrow & \\cdots \\end{aligned}\n", + "$$\n", + "\n", + "Three types of morphisms are most generally considered.\n", + "\n", + "1. $k=0$. If the commutativity relation $d'_p\\circ f_p=f_{p-1}\\circ d_p$ holds for every $p$, then the morphism $f$ is an ordinary chain complex morphism or *chain map*.\n", + "2. $k=-1$. If $(C_p,d_p)=(C'_p,d'_p)$ and $f_p=d_p$, then $f$ is the *differential* of the chain complex $(C_p,d_p)$ and, in fact, this differential is implemented in the ${\\tt Kenzo}$ program as a morphism of degree $-1$.\n", + "3. $k=+1$. In this case, $f$ is usually a *homotopy operator*, that is, some relation $$d'_{p+1}\\circ f_p+f_{p-1}\\circ d_p=g_p-g'_p$$ is satisfied for two (ordinary) chain complex morphisms $g$ and $g'$.\n", + "\n", + "For technical reasons, these three types of morphisms have been implemented in the $\\texttt{Kenzo}$ program\n", + "in a unique type.\n", + "\n", + "\n", "## Generators, terms, and combinations\n", "\n", "To become familiar with the Lisp functions implementing the chain complexes, the best is to begin with an example. *Simplicial complexes* are good candidates for this purpose, and we shall take as a typical example the following simplicial complex." @@ -79,7 +128,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -88,16 +137,16 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAD5CAYAAADMd4SKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACh1SURBVHhe7d0LkFZlHcfxB8UL4zXNdIwIgUlNnbyPl10kdVzM+wyjLFqhKQZYluGik5YllUs2XlJINKGpWHSYvOdCyiQgGmrmJTVjsVHSNK+paSoSv2fPf3n27Hn3Avteznm+n5m3c3tfzXfPe87/PM/vPGfAmrUcAABAwW2UTAEAAAqNogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBoicSS5cudQMGDOh4jR49OtnS2bx58/z2SZMmJWsAACgGip4IrFy50tXX1ydL7RYsWNClsNFyY2NjsgQA+WcXcvbq7oLO3oPiouiJwPz58/20ubnZrVmzxrW1tfnlhQsX+qmMGDHCzZw50w0fPjxZAwD5phbu9IWcjnPTp09PltYp1fqNYqHoicjUqVN9q8+wYcN88bNixYpkSzsVQ9OmTUuWACDf5s6d66ctLS3+mLdkyRK/vGjRIj81KoLU+o3io+iJQFNTUzLnfEuOmm/VshNSAaRiCACKxlp76urqfPHT2trql0WtQbognDhxYrIGRUbREwn90MOuK7XqpAsfACiSKVOmJHPr8jrpbqzx48f7Y+OMGTOSNSgyip6IqDUnbOJV4aOrHAAoIuvKD6kbywofhZp1HJwzZ45fRvFR9ERAP3Bd4eguBlETb0NDg58HgKJT4aOXsj2iwkf5RoWaRXe3hndtaZ4LwmKi6ImAmm9F/drWxGuhPRVAAFBE6sIPC5ixY8dyh2rkKHoioB+6XeGE0s2+AFAkEyZM8FNrydFL3VkqfKzrK3wZzXNBWEwD1v5xOfMBAApJt6Pr7iyjgic9XIdRUSScFouLogcAAESB7i0AABAFih4AABAFih4AABAFih4AABAFgswReu655zoeuHf44Ye7XXbZxc8DQNFx/IsbRU9EnnzySXfssce6V1991W266aZ+3QcffOA++clPujvvvNPtueeefh0AFA3HPwhFTyT0gz/ssMPc6tWr3VtvvZWsbbfNNtu4jTfe2N1333388AEUDsc/GIqeSAwdOtS98MIL7uOPP07WdLbRRhu5IUOG+KZfACgSjn8wBJkjoB+ymnRL/eBF2/SeV155JVkDAPnH8Q8hip4IKLQ3aNCgZKm0LbbYwi1evDhZAoD84/iHEEVPJHrTi/nRRx916e8GgLzj+AdD0RMB3Zb53nvvJUul6T16LwAUBcc/hCh6IqBxKHbYYQcf1itF2wYOHOgeeuihZA0A5F9vj396D2P2FB93b0VCt2yOHDnSj0vx7rvvJmvbqS97k002cW+++aZf/uY3v+muuuoqPw8AeaNj2YMPPuhf999/v9txxx3dHXfc4Y9/77//fvKudjr+adwe5Xm4Zb34KHoiosLnmGOO8Xco2J99wIAB7lOf+pS76667XGtrqzv//PP9+n333ddde+217qCDDvLLAFCLPvzwQ/fYY4+5v/zlL52mb7/9tt++9957uwsuuMB3X2n6xhtv+OOfWnfC4x8FTxwoeiKkWzhvvPFGP3/GGWd0atLVldHkyZPdn//8Z7/805/+1E2ZMsXPA0C1vfzyyx2FjRU5Tz31VLK1q/POO88df/zxyZJzL730kmtsbPTzK1eupEsrMhQ9kTr99NP9dPbs2X6api6un//8537+xBNPdNdcc4379Kc/7ZcBoBreeecd19zc7I9H1h3fnf3228/97Gc/S5bWGTVqlJ9y+osPQeYIPfHEE37sCr00n+Xqq692N910k38uza233ur22Wcfd/PNNydbAaDyttxyS3fppZe6Rx55xF155ZXuiCOOSLZ0pRzPqaeemiwB7Sh6IqT+6+eff96/NF/KySef7JuO1dLz73//251yyinu3HPPTbYCQHUMGzbMH4vuueeeTl1XoaOPPtpnE4EQRU9kNPhWWOhovrsBudSldcstt/hsj6gFSE3Gyv4AQLU88MAD/lh0++23J2vWUbGjogdIo+iJjIqcpUuXJkvOz3fX2mMUZtZBRgcThZwPPvhgd/nllydbAaBydOw55JBD/LFojz32cJdcckmyxfnhN770pS/57i0gjaInMlkFTm+KHtHt6+pL/8Y3vuGXdXv7SSed5P75z3/6ZQAoJx1rdMyxoTV0F5aG1lDm0KjgOfLII5MloDOKnoiUatVJt/70hJAzgErTMUZj7uiYs9122/lA89lnn+23bb311m6rrbbyt5/TrYXuUPRERMVNVn4nnfPpjWqGnOfNm+cHFbPXpEmTki2dTZ8+3W/XNKSxOXrzeQC1QUNo6Bjz6quv+ju2Zs2a5err65Ot7YOsamRltQLttttuyVqgK4qeSPR0p5a26T19UY2Qs1qkbGAxM3PmzC6FzejRo93UqVOTpc6GDx+ezLXL+jyA6rOwso0Zpguriy++2Lcypx144IEl7+QCDEVPJMIxebbddls/FZu3sXvWRyVDznPnzvXTlpYWP7DYkiVL/HL4/11XfQsWLOhS3IhaiWTixIn+8/rnyPr+twMoj3RYWRcnaskpRb9poCcUPZFQ2E/OPPNM9/e//93Py9NPP+1OO+00P2/vWR+VDjlba09dXZ0vXvTcsJDWTZgwIVlaRw8VFD18VQYPHuynGvcDQPWVCivvvvvufrmUQYMGJXNAaRQ9EXj44Yf9VK0x119/faem4Z122sn9+te/9i0mevqwvXd9lTvkHD4HzDI56soKdTe0/IwZM/z2sWPH+mVrORo3bpyfAqiedFh52rRpHWFloD9Q9ERAXVgqeLp7YrpaTB599FE/zPuGKmfIWS0y6aJGXVnpwqc3FGBWk7me5aP/fgDVkxVW5neJ/kbRE4ERI0a4gQMHJkul6T39dedDuUPOKnz0skyOCh/dldVbKpKs4GlqakrWAqi0voSVgQ1F0YOyUnfUsmXL+i3krAJOXVo2rpC6qbICy91RC4+KJAoeoLr6GlYGNhRFD8pOhU5/hZwtnKwxOizT09bW5guf3oSRdfeWDqyiW9pL5YIAlE86rKxMXW/CysCGouhBxfRHyFktM2qhCangWbFiRbLUvTlz5iRzAKohK6ycdaclUA4D1qRToYiCWjekGn9+XeWdc845/qAnCjBeddVVfh5Acem3btkdhZU1tk41sjujRo3yU05/8aGlBxVXjZGcAVQPYWXUCooeVE1/h5wB1B7CyqglFD2oqv4MOQOoHYSVUYsoelATyj2SM4DKSYeVf/SjHxFWRk2g6EHNKOdIzgAqI2tk5UMPPTTZClQXRQ9qSqmQs4KQAGoXYWXkAUUPalI65KwgJCFnoDYRVkZeUPSgZhFyRkw0KriNEK6XPWrFTJ8+vdP2Us+as/dpWm6ElZE3FD2oeYScUXT2PLiQHrVihY0en6LHpoSynjmnQin9vnIhrIw8ouhBLhByRpHZ8+A0QrBeGqlYli9f7qf2+JSWlha/3QqedGuPCqVK0G/PwspHHnkkYWXkBkUPcoOQM4pOLT4yY8YMX9yMHTvWL7e2tnZalvRDdu2huVYwlYOFlfXbk29961vuoosuIqyM3KDoQe4QckbR2EN01eJjmR11aaWp+0rbRowY0ekhu3qvusfUEjR06NBkbf/KCiur5RXIE4oe5BIhZxRJU1OTL1hCjY2NXQqfuro63+KjFh4VPyqC1MWl9zY0NHRqCeovhJVRJBQ9yDVCzigKFSwqaPRSASOW5VHLjoocy/CMHDnST+fOnevmz5/v59XSo/dYkFlT6/JaX4SVUTQUPci9rJCzRoUF8iDssjLKyYRsmxU4ixcv9tNydWUJYWUU0YC1VxVrknlERAdZKdqfX7kDa4ZX5ueaa67xXWFALVNR09bWliyto6yPur5UGGXdmaXPhGFm0fg8auWxz/bVgw8+6CZPnuyzO6KwctGyO6NGjfJTTn/xoaUHhULIGXmkUHJ63J2waFGWJ535ySp4NpR+K7pIIKyMoqKlJ1JFbekJqYvLngOkA7dafXTbO4DOFFY+55xzfHZHFFYucnaHlp540dKDwkqHnBXIJOQMdBaGlbfffnvCyig0ih4UWhhyViCTkDOwTjqsfN111xFWRqFR9KDw0iM5q8uLkZwRM4WVGVkZMaLoQTQIOQOdw8p77rknYWVEhaIHUWEkZ8QqPbLyqaee6sP9jKyMmFD0IEqEnBGTrLDyWWedlWwF4kHRg2gRckYMtE8TVgbaUfQgaoScUVQWVraxqggrAxQ9gEfIGUWSDiv/4he/IKwMrEXRAyQIOSPvSoWVd9ttN78MxI6iB0gh5Iw8IqwM9IyiB8hAyBl5QlgZ6B2KHqAEQs6odYSVgb6h6AF6UOsh59GjR/un5ttr6dKlyZZ2Wg63T58+PdmC8HvRKy38bkeMGJGsrQ3psLJadwgrA92j6AF6oVZDzpMmTXILFixIltrV19e7lStX+nlNtRyaOnWqmzdvXrIUr6wiJlyX/m7b2tp8EVRtpcLKu+66q18GUBpFD9AHtRZy1nOTZM2aNf41ceJEv7x8+XI/nT9/vp82Nzf77ZrK4sWL/TRWav1SEdPQ0NDx3Q0fPtyvs4LRvlut00tWrFjhp9VCWBnYMBQ9QB/VYshZrRIyY8YMfwIfO3asX160aJGfqktOhgwZ4qdDhw7109ipJcdavVTQ6LsbNmyYX7ZiyJblqKOOSuYqj7AysOEoeoD1UCshZ2u5UauEZU/CrqvW1lZ/4q6rq/PLc+bM8dMxY8b4aaz0faiVRxobGzu+O2vlCSkDpVYgfdcqKiuNsDLQfwasPSCuSeYRER3ghT//hlOhc8455/hAqagQUvi5UlTk6MQdamlp6WjtMcqjqGUja1us1EJm3VhGXVlh645R3kfbKvmbUVjZsjsKKytTRnZnw40aNcpPOf7Fh5YeYANVO+SsAkYHb72s9cJadIxO2BQ8XVl3YHjyUw5KLT66MAiDzda1VYkQOGFloDwoeoB+UumQs92KHp6Y1e2RphYetVBQ8KyjLit9d5aFEusqFGvp0fdmQwAsXLjQTwcPHuyn5UJYGSgfurciRfdW+egqXd1dOmmJWoBUEJWDdbmk6QTe1NTkT+66RT1Nd3lVI59SK9SSo5xOliVLlvjMT9Z3p8+U8w4uhZUtu6Ow8te//nWyO2VA91a8aOkB+tn6hpzff//9ZK73dAJOn7yt4JFZs2b5KTpTS05WsWgFj+g7tCEApJwFD2FloDJo6YkULT2V0ZeQ87e//W13xRVXJEuIBWHlyqOlJ1609ABl1JeQs7rD0gFkFBdhZaDyKHqACuhNyPmtt97y3RuPPfZYsgZFlQ4r//jHPyasDFQARQ9QId2N5Pzaa6+5N954w3eDzZ49269DMWWNrGwjZgMoL4oeoIJKhZzvvfdevyw33nhjxzOzUBzpsLIyXISVgcoiyBwpgszVlw45h44++mhf/Oy0007JGuRZOqys1p7Pfe5zfhmVR5A5XrT0AFViIWd1daTdfffdhJoLoFRYmYIHqA6KHqAKXnnlFXfDDTe4E044oeSozb/85S/9uDHIJ8LKQO2heytSdG9Vx0cffeS7Oq699lq3atWqZG1pxx57rLvjjjuSJeQFIyvXNrq34kXREymKnurRqL66i0u3puul+RdeeCHZ2pVahL72ta8lS84999xzbtGiRX7+8MMPd7vssoufR8+eeeYZ984777j9998/WdN33X3/CitPnjy5I6elsLJa81BbKHriRdFTg/SASD0R24RD40v6mUBZf0J7tlCpofMpemrH66+/3lH8hIWQOfTQQ32o+YMPPvAtP7rVedNNN/XbtE4tCHfeeacPyKJ7amnbZ5993Oabb+6LEz2AVfO98eSTT3b7/be2thYmrKz/joceeihZar/LcK+99kqWnH94rW61N3PnznU777xzsrSOve/ss892jY2Nft2LL77oxo0b5+dDf/zjH5O58uup6Ek/007z9hDakJ64r/+u8Fl2pZ7rxrG2NpDpqTF66nNY8Eh9fb3/IYl+ZOmHIIZP2Ra9J+tHh9q03XbbuS9+8Yu+VUDh5UcffdS3/OiEoWcw/e9///OF7mGHHebefPNN9+677/oxffTSvNZpm07K6N7AgQPd97//fd/ic/rpp7sDDzzQXXjhhR1PUi9F32133//IkSMLE1bWo1DCgkc0oriKFVErV1jwSFYR88QTT3R5n2hMqlqmi870c9myjqc6JlshF7LvCbWJoqfGzJw50091VaCXPfBw+fLlfmp39Kj1R9v1Y9QP1A7aKpr0Q6ToybfBgwf7Vgg7Af3hD3/wJ1eN2pymddp23HHHJWvQnTFjxrjx48f7eZ2YL7vsMt+Co2JFLRZZ37G2d/f967X11lsXIqx82223+alaXvSy7jkViqI7C+V73/ue324tPOmTvT16Jc2Kc7Ue2b9Dr1qgQkYXnTp+2jG4oaHBb0sXxkcddVQy19myZcv81I7R9kJtoOipUSpeRE2m+sHoBCjWCmTdXRMmTPDTMBSrFoKFCxcmS8g7ZUh0dfzxxx8na7rSNnW76K4w9OyrX/1qp+5AFS0qeFT4qMBRIaSCSPT967vt6fv/8MMP3e67756syT97+K1aIFWUKL8kGlgzXBYVPmH3lrV6ZeWZLO+kokjdTNbVVEt0IanWVVG3pY7BYcRAx2e9J3wKv7G8l1roFSOwKAFqA0VPjWlubvZTtfjYD0bdVaGsVpznn3/eT1UkWYGEYtBBdNCgQclSaVtssYXbcccdO/YbXqVfBxxwQMnuQF3Rq8tLxY9ObldeeWWvvn9lgx5//PFkKb+UvxG1+FhRYifykIpCbdMo4yoYjd6r1km1BGUNrpn1sN1aKXyU27FCRjEC21/CVh7N6/isY7W6NdO6y1Ci+ih6akxTU5NvqQmpuypd+CAuvWkeV0gX5dGb73/16tX+zrC80/FGBUvohz/8YZfCR8FmtfiohUdFi4ogdXHpvSoqw5Ygo+166TPWraX3SlZhVQ26cLSLT6NWGyt8NK8LTx2r09Q9phagrO4xjuG1gaKnBqmlJv2DCUfnTYfsZMiQIckcikYnj/feey9ZKk3v0UHX9h1epV9qiSh1t5u6MX7yk5/4O7J0AlSYvDffv+7k2nfffZOlfNM+ly5KLMuj0LKKHMvwfOELX/DTe+65x913331+Xt+v3mNBZk3V5WXFTtgyVIvfmQoa21esZV3/n61w0TFYrTcWZFbLj24oUUuRPhO29mQVf6geip4aoisJ/ZDCu7H0QMJQOlQ3a9YsP1XwFcWkcWB22GEHt9FGpX+u2qb3MGZP7/zqV7/q1L21zTbb+JP5b3/7W1/sXHDBBR23aPf2+99kk018/ifPrMsqvBvrK1/5SjLXTt1ZYgWOhliQ3jwnLuufb4Nv6juuNhU1OgbrDi4zbdq0ZK5nWcdwjtG1hXF6akx6fAij5lZdfehHmb5NUlci6X5kXfFrfdY2sT5m/vy1SXcKaaA7ve6//35/wFTGQq0Juk06pCyPxo1ZvHgxY/X0gp5gr9vV1RWlwuaYY47xrzComqYCSfmNUt+/Ch79zeS0005zZ555pp/PIxUk6TuxxMbaUeGSdWeWWkLCMLNkjdOT9c/X58LWn3JT4SVZxz87NqbpvyWdl7TjcThOT9YxvNRxGJVHS0+N0Q/DmlONFTyiH126v5kfU77prp+HH37Yj7ysk4kyA+qu1JPWf/CDH/g7i77zne/4okbPcFJgdrPNNvMvzWsdBU/vKPek73S33XZzs2fP9kNBqCuru4JH9N129/3r9mTd1SS/+c1v/NPzn332Wb+cN1nFS1i0qFBMZ36yPlNK+r2VLnh6klUIZRU8paSP4RQ8tYWWnkjR0lM9L7/8cpfRl5966qlka1fKC+jZTYbHUKw/HkMB6a6lB8VG0RMpip7q0AlXLXUasde6Q7qjh1VqYELkCw8crW0UPfGi6IkURU91KXOlAKde9957b7K2M3Vx6ZlbRxxxRLIGeXLzzTf7Vh8NbKgusPPOO88/Rw3VR9ETLzI9QBXo1tZzzz3X3+Z7/PHHJ2s7U9g2jwWP3QFjLxtdPKSwp20P73SR9OftTsW8Ofnkk33X5YknnuhH1P7ud7/rc1sAqoeiB6iSBx54wO23337u9ttvT9aso2LnjDPOSJbyQwVK+u5CZZJsSH9JP9BR83aLcNbnwwfu5o1u777lllsKE3IG8o6iB6iCyy+/3B1yyCE+8KrB2dS6YXRXkAqePA44aXfh6G4XdR3oriax4K+Kl/CBjlb82DPl7PPKPWm7jUuVdQt1nkyZMsUXufpb6/Z3PTPPHuwJoHIoeoAK0nOHTjrppI4HMuoW9UceeaRTN5YKnnDwtjyy1hrdCq7iRQ9tFN0iLvaEanXzid3iaw/YTQ/x39Mt5Xlw0EEH+b+1jXGjB3pq4DtlfgBUBkUPUCEKtu69997u1ltv9Xfy3HTTTe7qq6/227bbbjv3iU98wo8HoyxPXqlFw1gmJxzd1h6xYgO5WQuXWj5CahHSZzW+id5fJPqb62+vfUCZLo2BowEoAZQfRQ9QAbqF+ZRTTvFX9Qq2KuCqoKvRYwz0KATd7WPPOsoje/ZQSF1XYeFjbDRbdWGlW3bsn6NiSMVP2P1XBFkh5+uvvz7ZCqBcKHqAMrKwso3ZokCrgq32/KKQCoNwEMI8U8Gil7I9osInDCMr2GwFj3V9ib6D8I4t5Z4kfOBuUaRDznruFyFnoLwoeoAySYeVly1b1qn7J81Ofnlmt6Jb0aLurPRjVdRqM3Xq1C4Fj1jGxwLN+s7E1hcRIWegchicMFI6MQl//v6nsLKu2JXdEQVXLbtTdGrBUUGTZs8fUmtPuggy2hdLbdddYEUIM/eEkZwrg8EJ40VLD9CPugsrx0DZnPQDca3gET3hvDtq0bHb3E0sBY8QcgbKi5aeSNHS0//Cq3QFVPV8razsDtCTdGvhqaee6s466yw/jw1HS0+8aOkBNlBfwspAb5QKOf/tb3/zywDWD0UPsAH6GlYG+kL7kvYpCzmru8tafwD0Hd1bkaJ7a8PEHFZGdRBy7j90b8WLlh6gj2IPK6M6CDkDG46iB+iDnkZWBsqJkZyBDUPRA/QCYWXUilIh52eeecYvAyiNogfoAWFl1KJ0yFkZH0LOQPcIMkeKIHPPCCsjLwg59w1B5njR0gNkIKyMPCHkDPQORQ+QQlgZeUTIGegZRQ+QIKyMvCsVcn766af9MhA7ih5gLcLKKJJ0yHnixImEnIG1CDJHiiBzO8LKKDpCzl0RZI4XLT2IFmFlxICQM7AORQ+idO655xJWRjQIOQPtKHoQFQsrW4sOYWXEgpAzQNGDiBBWBgg5I24EmSMVU5CZsDKQLdaQM0HmeNHSg0IjrAyURsgZsaHoQWERVgZ6lhVynjVrVrIVKBaKHhTOgw8+SFgZ6IN0yHnu3Llu8uTJhJxROBQ9KBSFlQ8++OB+CyuPGDHC55/stXLlymRLu0mTJnVs03vTwu1ZnwfM6NGjO+0rS5cuTba0mz59eqft6X0p3FbqPT0JQ85//etfCTmjcCh6UAgKK5900knu/PPP98sKKz/yyCO+AFpfOgm1tbUlS+2GDx+ezLWfhGbOnJksOf9efcakt0v4ecCoOF6wYEGy1K6+vr6jaJk3b56bOnWqnzfhvtSfxbR+M/rt6DckV155pZs2bZrvJgbyjqIHuReGlXfYYYd+CSvrJKKTkE4susNDr4aGBr/NrsAt96Bix+4C0WfsBJTebiep9BU8YMWx7WtqYZHly5f76Zw5c/y0paWl075k+5q9z7bba9iwYX79+kiHnCdMmEDIGblH0YNcS4eVH3300X4NK6tgUYuNtLa2+hNJXV2dP9lom04+dmKxE9WLL76Yud26v3beeWc/BdLU4iMzZszw+9rYsWP9su17tizhvrV48WI/bWxsXO+urSxhyPn1118n5Izco+hBLpU7rKyTiRUx6lawE0m6lSYrx7Nq1Sr/eZ2kVqxY4dfpBKRWILUW2YkKMM3NzX6qFh/b19Sllab9T9u039m+JVkFjoqi/ih8CDmjSCh6kDv9HVYuRVfbdjIyyln0tXtKJx7rjtAVO5DW1NTku6ZCarVJFz5qZbRuq7AItzyQtullBfv8+fP9tD9khZxVDAF5QtGD3EiHlTWa7IaGlXuik5GdSKxw0ZWuCa+2zeDBg5O59itz+5z+GUAp6rqyfc3yY5blsbsIreVm5MiRfmr7on3O2Pb+lg45X3XVVYSckSsUPciFrLCyDrjloitsnWTCu7F0cDe60lYxo9yOnYgsjGqZHa1Xy5BQ8KCUsMvKXHTRRclcO9tmLTeW4Rk6dKjfz/R5vYwVS0OGDPHT/kbIGXnFs7ciZQfIPPz5w+cDKVB5zTXXVGSgwfAkElI3hK7KFXBO30asK3TrwtKJSkVR2pIlS3w3BWBK7SvqXlVrowojK6BD+owKcBXn6Vvepdy/7/Rz7caNG+cLoFrHs7fiRUsPapaFla3gqfTIylkHRCt4RCcjy06IWn6s4NFJKuskBmRRN6l1gxoreERFcjrzYwWPaL+zLjFTiRM6IWfkDS09kar1lh6FlS27o+CkWnfKmd0BsGEeeOAB3+qjGwxEw0kog1eLaOmJF0VPpGq16Ek3l6trq5zZHQD9K+yOPuKII3xrqLI/tYSiJ150b6FmVDqsDKD/hSHne++9l5AzagpFD2qCrg7LObIygMphJGfUKooeVFW1w8oAyoOQM2oRRQ+qJj2ysoKQ5RhZGUD1MJIzaglFDyqu1MjKBx10kF8GUCxZIzlfeumljOSMiqPoQUURVgbilRVytueHAZVA0YOKIawMIB1y1iM3CDmjUih6UHaElQGECDmjWih6UFaElQGUQsgZlUbRg7IgrAygN8odctaxaPXq1clSaR999JF75plnkiUUFUUP+h1hZQB9Va6Q8zvvvOMmTZrknnrqqWRNV/r37LPPPv69KDaKHvQrwsoA1ldWyPm6665Ltq6fXXfd1U9V+ChD9NZbb/ll+de//uW+/OUvu/r6erf55pu7/fffP9mCouKBo5Hq7weOKqysIKI9YVkHF7I7ANaX8oDWPb7HHnv4BxHvvvvufjnLBx984DbddNNkqbPW1lZ32WWX+fktt9yyo0Vn2223dW+++aafnz17ths/fryfR3HR0oMNRlgZQH/ra8i5u9ve1XU1bNgwPx92YVnBs9dee7nDDz/cz6PYKHqw3ggrAyinvoSclctRi06WHXfcsdvj0jHHHOOGDBmSLKHIKHqwXggrA6iUrJDzkiVLkq3t3n33Xfe73/3OtbW1JWs6UwG1xRZbJEvrbLPNNr7oQRwoetBnhJUBVFo65HzxxRd3hJz/85//uLfffts9++yz7u677/br0tSFpcInTQVPXV1dsoSio+hBrzGyMoBqSo/k3NLS0ukGCvn973/v7rvvvmSps6wuLlp54kLRg14hrAygVqRDzpdcckmyxbn//ve/vvBRa1CajmFq8TFq4aHoiQtFD7pFWBlALbKQs7ra0/70pz9lhpqV6Qm7uFTwKNODeFD0oCTCygBq0SuvvOJuuOEGd8IJJ/jjVJa77rrLPf7448nSOrpg091culuLVp74UPQgE2FlALVGz8fSIIPKFp511lnu9ttvLznAqlqplflJ03g9GrdH4/KEXV2IA0VPhJ577rlkrvO8EFYGUKsGDhzoxowZ46644gr/iIrjjjvOfeYzn0m2dqXsofI9oZdeesm3XA8ePLjL8Q/Fx2MoIvLkk0+6Y4891rfe2HDtGrpdY1/ceeedvg/csjsKCF577bVkdwDUNAWWH3vsMX87u6Y2bw444AB3wQUX+NvaL7zwQj8K8yabbOILqPD4t+eeeyafQJFR9ERCBc9hhx3mVq9e3emBe6Ig30YbbeTeeOMNv6yuLbI7APJq1apVfoRmBZo1/fznP+9uu+02f/xLP0ldx7+NN97Y3+ZO4VN8FD2RGDp0qHvhhRfcxx9/nKzpTEXPVltt5Z9fQ3YHQJF89rOf9YVQd8c/BZvp7io+Mj0R0A9ZXVqlfvCibboKGjVqVLIGAPJPx7/XXnutx+OfjpG6KwzFRtETgUWLFrlBgwYlS6VpDIvFixcnSwCQfxz/EKLoiURvejF1O2g67wMAecfxD4aiJwIaj+K9995LlkrTe/ReACgKjn8IUfREYJdddvHjUiisV4q26T16LwAUBcc/hCh6IqFxKHRrpvqt07RO2/QeACgajn8wFD2R0PgTCultv/32bvPNN3ebbbaZf2le67SNMSoAFBHHPxjG6YmQbuHUHQ2iPmyadAHEguNf3Ch6AABAFOjeAgAAUaDoAQAAUaDoAQAAUaDoAQAAUaDoAdDJypUr3YABA7p96T1po0ePdpMmTUqWsmm7Pj99+vRkTd+E/9+A3pg3b17HPqNXeh/Vvhhuz3oPioOiJwI9/ejTJzm9H/EaNmyYf1ZRc3Oza2ho8PPha/jw4f6lIifU2trqZsyYkSxl03b9c9eX/r+1tbUlS0D3li5d6hobG5OldjNnzuxUdP/jH/9I5hADip6C682PXiewkN6vzwFZVqxY4VpaWtyCBQvWu8VmQ6jwAXpj7ty5fqr9VQX7kiVL/LKN0yMLFy70x8CwsO+peEd+UfQUXE8/emvVmThxot9uV+H2OcRryJAhyVxXY8eO9a1AU6dOTda0F9hhK2HYbZDVetjddi3btlKfD1m3mb2yut8QL7vwq6ur88c5tUqK9hO1HOpl+w5dW8VG0ROJUj96Db8uI0eO9NMxY8b4KScN9GT8+PF+qmJHJ4r6+nq/LCpS1G2gfU0F95w5c5It7axYskI7bF3UZ7WsbfbScqnCR/9u7a/2XhX2unJnH8aUKVOSOddR1ITdsi+++GIyt45awil8iouip+B6+tGbwYMHJ3Pt1IUB9FY6q3PRRRe5cePG+fn0viV6b1NTk5/XVC2N1rqoz6pQCmlZ69NU2OgkFXZHqLDXP+/yyy9P1iBWlk8LqVvWjoHLli3zU+2Pep/lxbRPoZgoegqupx89UMrzzz+fzGWzVkIVGWkqmrVerTNhC1ApQ4cO7WiZ0YknXShp2U5IYQuOXamncz7hPw+wVkArpnUM1P6hglvrrQDXfpTOOKJYKHoiUepHb1atWpXMtRsxYkQyB3SlrihdDatFpRQV1iqMLEfWEytcsk462j+z1u+8887JXGfqWksXQoiPjmNq3bauU2XRwv3IsmAWyNf7VFxT+BQXRU/B9fSjtyyPXbXPnz/fTzlhQNLFsVh+R/tR2K0U3vqrk4ieYK3t1oUQmjVrVjLX3nKjjI91h02bNq1L65AyPVqfpv1UhVfYcmkFWdi1izhNmDDBT7U/Wfe+FTXad2yf0/6nbbbf2edQQGuv/lFgzc3N6tvq8lr7o0/esSZz+9qr82QrYrP2pJC5T4Qv7VehcFtLS8uatYVIx3JDQ0PHvOiz2r9snV76d4b0zwi32/6YXm/Cf1+4HkgfA8Njn6T3xfS+jWIZoP9Z+4dGgemqO7y1WFc5YVBZV9paZ9QFphYhAACKhKIHAABEgUwPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIAkUPAACIgHP/B7khz1wG257bAAAAAElFTkSuQmCC", "text/plain": [ - "#" + "#" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(png-from-file \"diabolo.png\")" + "(cl-jupyter-user:png-from-file \"diabolo.png\")" ] }, { @@ -116,7 +165,7 @@ "\n", "### Representation of a combination\n", "\n", - "A combination is represented internally in the system by a list habing the following general form:\n", + "A combination is represented internally in the system by a list having the following general form:\n", "$$\\texttt{(:cmbn degree}\\quad(\\lambda_1\\cdot\\sigma_1)\\dots(\\lambda_k\\cdot\\sigma_k)\\texttt{)}$$\n", "and containing\n", "\n", @@ -130,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -146,18 +195,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:f-cmpr 'function)" + "(documentation 'f-cmpr 'function)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -168,18 +217,18 @@ ":LESS" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:f-cmpr 123 789)" + "(f-cmpr 123 789)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -196,18 +245,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:s-cmpr 'function)" + "(documentation 's-cmpr 'function)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -218,18 +267,18 @@ ":GREATER" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:s-cmpr 'circulation 'circular)" + "(s-cmpr 'circulation 'circular)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -245,18 +294,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:l-cmpr 'function)" + "(documentation 'l-cmpr 'function)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -267,13 +316,13 @@ ":GREATER" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:l-cmpr '(1 a b) '(1 a))" + "(l-cmpr '(1 a b) '(1 a))" ] }, { @@ -285,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -303,18 +352,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:cmbn 'function)" + "(documentation 'cmbn 'function)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -331,18 +380,18 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def comb1 (cat:cmbn 1 1 'u 2 'v 3 'w 4 'z))" + "(def comb1 (cmbn 1 1 'u 2 'v 3 'w 4 'z))" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -357,42 +406,13 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cat:cmbn-non-zero-p 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "T" - ] - }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:cmbn-non-zero-p comb1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The reader function $\\texttt{cat:cmbn-list}$ gets the list of terms of the combination $\\texttt{cmbn}$. Beware: a term is not a Kenzo object." + "(documentation 'cmbn-non-zero-p 'function)" ] }, { @@ -405,7 +425,7 @@ { "data": { "text/plain": [ - "((1 . U) (2 . V) (3 . W) (4 . Z))" + "T" ] }, "execution_count": 14, @@ -414,7 +434,14 @@ } ], "source": [ - "(cat:cmbn-list comb1)" + "(cmbn-non-zero-p comb1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The reader function $\\texttt{cat:cmbn-list}$ gets the list of terms of the combination $\\texttt{cmbn}$. Beware: a term is not a Kenzo object." ] }, { @@ -427,7 +454,7 @@ { "data": { "text/plain": [ - "(3 . W)" + "((1 . U) (2 . V) (3 . W) (4 . Z))" ] }, "execution_count": 15, @@ -436,7 +463,7 @@ } ], "source": [ - "(cat:def term3 (third (cat:cmbn-list comb1)))" + "(cmbn-list comb1)" ] }, { @@ -445,6 +472,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3 . W)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def term3 (third (cmbn-list comb1)))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -456,18 +505,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:cffc 'function)" + "(documentation 'cffc 'function)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -478,18 +527,18 @@ "3" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:cffc term3)" + "(cffc term3)" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -504,18 +553,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:gnrt 'function)" + "(documentation 'gnrt 'function)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -526,18 +575,18 @@ "W" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:gnrt term3)" + "(gnrt term3)" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -552,18 +601,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:cmbn-opps 'function)" + "(documentation 'cmbn-opps 'function)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -580,18 +629,18 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 21, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def mcomb1 (cat:cmbn-opps comb1))" + "(def mcomb1 (cmbn-opps comb1))" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -606,18 +655,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:n-cmbn 'function)" + "(documentation 'n-cmbn 'function)" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -634,18 +683,18 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def comb2 (cat:n-cmbn 10 comb1))" + "(def comb2 (n-cmbn 10 comb1))" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -663,18 +712,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:2cmbn-add 'function)" + "(documentation '2cmbn-add 'function)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -691,18 +740,18 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def cmb12 (cat:2cmbn-add #'cat:s-cmpr comb1 comb2))" + "(def cmb12 (2cmbn-add #'s-cmpr comb1 comb2))" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -720,18 +769,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:2cmbn-sbtr 'function)" + "(documentation '2cmbn-sbtr 'function)" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -748,18 +797,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 27, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:ncmbn-add 'function)" + "(documentation 'ncmbn-add 'function)" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -776,14 +825,14 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 28, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:ncmbn-add #'cat:s-cmpr\n", - " comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2)" + "(ncmbn-add #'s-cmpr\n", + " comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2)" ] }, { @@ -797,28 +846,6 @@ "#### A first example of a chain complex" ] }, - { - "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-cmpr #'cat:s-cmpr)" - ] - }, { "cell_type": "code", "execution_count": 30, @@ -829,7 +856,7 @@ { "data": { "text/plain": [ - "#" + "#" ] }, "execution_count": 30, @@ -838,12 +865,7 @@ } ], "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))))" + "(def diabolo-cmpr #'s-cmpr)" ] }, { @@ -856,7 +878,7 @@ { "data": { "text/plain": [ - "S0" + "#" ] }, "execution_count": 31, @@ -865,7 +887,12 @@ } ], "source": [ - "(cat:def diabolo-bspn 's0)" + "(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))))" ] }, { @@ -878,7 +905,7 @@ { "data": { "text/plain": [ - "#" + "S0" ] }, "execution_count": 32, @@ -887,23 +914,7 @@ } ], "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\")))))" + "(def diabolo-bspn 's0)" ] }, { @@ -916,7 +927,7 @@ { "data": { "text/plain": [ - ":GNRT" + "#" ] }, "execution_count": 33, @@ -925,7 +936,23 @@ } ], "source": [ - "(cat:def diabolo-strt :GNRT)" + "(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 (cmbn -1)) ; Note the null combination of degree -1\n", + " (1 (case gnr\n", + " (s01 (cmbn 0 -1 's0 1 's1))\n", + " (s02 (cmbn 0 -1 's0 1 's2))\n", + " (s12 (cmbn 0 -1 's1 1 's2))\n", + " (s23 (cmbn 0 -1 's2 1 's3))\n", + " (s34 (cmbn 0 -1 's3 1 's4))\n", + " (s35 (cmbn 0 -1 's3 1 's5))\n", + " (s45 (cmbn 0 -1 's4 1 's5))))\n", + " (2 (case gnr\n", + " (s345 (cmbn 1 1 's34 -1 's35 1 's45))))\n", + " (otherwise (error \"Bad generator for complex diabolo\")))))" ] }, { @@ -938,7 +965,7 @@ { "data": { "text/plain": [ - "(DIABOLO-FOR-EXAMPLE)" + ":GNRT" ] }, "execution_count": 34, @@ -947,7 +974,7 @@ } ], "source": [ - "(cat:def diabolo-orgn '(diabolo-for-example))" + "(def diabolo-strt :GNRT)" ] }, { @@ -956,6 +983,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "(DIABOLO-FOR-EXAMPLE)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def diabolo-orgn '(diabolo-for-example))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -992,18 +1041,18 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:build-chcm 'function)" + "(documentation 'build-chcm 'function)" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1014,20 +1063,20 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 36, + "execution_count": 37, "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))" + "(def diabolo (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": 37, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1043,35 +1092,13 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cat:chcm 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Chain-Complex]" - ] - }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:chcm 1)" + "(documentation 'chcm 'function)" ] }, { @@ -1084,7 +1111,7 @@ { "data": { "text/plain": [ - "(DIABOLO-FOR-EXAMPLE)" + "[K1 Chain-Complex]" ] }, "execution_count": 39, @@ -1093,7 +1120,7 @@ } ], "source": [ - "(cat:orgn diabolo)" + "(chcm 1)" ] }, { @@ -1106,7 +1133,7 @@ { "data": { "text/plain": [ - "1" + "(DIABOLO-FOR-EXAMPLE)" ] }, "execution_count": 40, @@ -1115,7 +1142,7 @@ } ], "source": [ - "(cat:idnm diabolo)" + "(orgn diabolo)" ] }, { @@ -1128,7 +1155,7 @@ { "data": { "text/plain": [ - "(S0 S1 S2 S3 S4 S5)" + "1" ] }, "execution_count": 41, @@ -1137,7 +1164,7 @@ } ], "source": [ - "(cat:basis diabolo 0)" + "(idnm diabolo)" ] }, { @@ -1150,7 +1177,7 @@ { "data": { "text/plain": [ - "(S01 S02 S12 S23 S34 S35 S45)" + "(S0 S1 S2 S3 S4 S5)" ] }, "execution_count": 42, @@ -1159,7 +1186,7 @@ } ], "source": [ - "(cat:basis diabolo 1)" + "(basis diabolo 0)" ] }, { @@ -1172,7 +1199,7 @@ { "data": { "text/plain": [ - "(S345)" + "(S01 S02 S12 S23 S34 S35 S45)" ] }, "execution_count": 43, @@ -1181,7 +1208,7 @@ } ], "source": [ - "(cat:basis diabolo 2)" + "(basis diabolo 1)" ] }, { @@ -1194,7 +1221,7 @@ { "data": { "text/plain": [ - "NIL" + "(S345)" ] }, "execution_count": 44, @@ -1203,7 +1230,7 @@ } ], "source": [ - "(cat:basis diabolo 10)" + "(basis diabolo 2)" ] }, { @@ -1212,6 +1239,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "NIL" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(basis diabolo 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -1224,44 +1273,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:dffr diabolo 2 's345)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 0}\n", - "------------------------------------------------------------------------------\n" - ] - }, "execution_count": 46, "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}$" + "(dffr diabolo 2 's345)" ] }, { @@ -1274,7 +1292,9 @@ { "data": { "text/plain": [ - "[K3 Chain-Complex]" + "\n", + "----------------------------------------------------------------------{CMBN 0}\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 47, @@ -1283,20 +1303,14 @@ } ], "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))))" + "(dffr diabolo *)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### An important trivial case: the unit chain complex, $\\mathbb{Z}$" ] }, { @@ -1305,6 +1319,41 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K3 Chain-Complex]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def ZCC\n", + " (the chain-complex\n", + " (build-chcm\n", + " :cmpr #'(lambda (gnrt1 gnrt2)\n", + " (declare (ignore gnrt1 gnrt2))\n", + " (the cmpr :equal))\n", + " :basis #'(lambda (n)\n", + " (the list\n", + " (if (zerop n) '(:Z-gnrt) +empty-list+)))\n", + " :bsgn :Z-gnrt\n", + " :intr-dffr #'(lambda (cmbn)\n", + " (the cmbn (zero-cmbn (1- (cmbn-degr cmbn)))))\n", + " :strt :cmbn\n", + " :orgn '(zcc-constant))))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -1316,13 +1365,13 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 48, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:z-chcm 'function)" + "(documentation 'z-chcm 'function)" ] }, { @@ -1334,35 +1383,43 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "REDEFINITION-WITH-DEFUN: \n", + " #\n" + ] + }, { "data": { "text/plain": [ "CIRCLE" ] }, - "execution_count": 49, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(defun CIRCLE ()\n", - " (the cat:chain-complex\n", - " (cat:build-chcm\n", + " (the chain-complex\n", + " (build-chcm\n", " :cmpr #'(lambda (gnrt1 gnrt2)\n", " (declare (ignore gnrt1 gnrt2))\n", - " (the cat:cmpr :equal))\n", + " (the cmpr :equal))\n", " :basis #'(lambda (dmns)\n", " (the list\n", " (case dmns (0 '(*)) (1 '(s1))\n", - " (otherwise cat:+empty-list+))))\n", + " (otherwise +empty-list+))))\n", " :bsgn '*\n", - " :intr-dffr #'cat:zero-intr-dffr\n", + " :intr-dffr #'zero-intr-dffr\n", " :strt :cmbn\n", " :orgn '(circle))))" ] @@ -1376,7 +1433,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -1435,13 +1492,13 @@ "-----------------------------------------------------------------------------\"" ] }, - "execution_count": 50, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:morphism 'type)" + "(documentation 'morphism 'type)" ] }, { @@ -1453,7 +1510,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -1491,13 +1548,13 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 51, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'cat:build-mrph 'function)" + "(documentation 'build-mrph 'function)" ] }, { @@ -1509,7 +1566,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -1528,35 +1585,13 @@ "NIL" ] }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:cat-init)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Chain-Complex]" - ] - }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def ZCC (cat:z-chcm))" + "(cat-init)" ] }, { @@ -1569,7 +1604,7 @@ { "data": { "text/plain": [ - "[K3 Cohomology-Class on K1 of degree 1]" + "[K1 Chain-Complex]" ] }, "execution_count": 54, @@ -1578,13 +1613,7 @@ } ], "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)))" + "(def ZCC (z-chcm))" ] }, { @@ -1597,7 +1626,7 @@ { "data": { "text/plain": [ - "[K4 Cohomology-Class on K1 of degree 0]" + "[K3 Cohomology-Class on K1 of degree 1]" ] }, "execution_count": 55, @@ -1606,12 +1635,40 @@ } ], "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)))" + "(def zero-morphism (build-mrph :sorc ZCC\n", + " :trgt ZCC\n", + " :degr -1\n", + " :intr #'(lambda (comb)\n", + " (cmbn (1- (degr comb))))\n", + " :strt :cmbn\n", + " :orgn '(zero morphism on ZCC)))" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K4 Cohomology-Class on K1 of degree 0]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def id-morphism (build-mrph :sorc ZCC\n", + " :trgt ZCC\n", + " :degr 0\n", + " :intr #'identity\n", + " :strt :cmbn\n", + " :orgn '(identity morphism on ZCC)))" ] }, { @@ -1623,31 +1680,6 @@ "### Functions defining morphisms" ] }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "#" - ] - }, - "execution_count": 56, - "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": 57, @@ -1658,7 +1690,7 @@ { "data": { "text/plain": [ - "[K5 Chain-Complex]" + "#" ] }, "execution_count": 57, @@ -1667,12 +1699,10 @@ } ], "source": [ - "(cat:def ccn (cat:build-chcm :cmpr #'cat:f-cmpr\n", - " :basis #'(lambda (n) (cat: K5]" + "[K5 Chain-Complex]" ] }, "execution_count": 58, @@ -1694,10 +1724,12 @@ } ], "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)))" + "(def ccn (build-chcm :cmpr #'f-cmpr\n", + " :basis #'(lambda (n) ( K5]" + "[K7 Morphism (degree 1): K5 -> K5]" ] }, "execution_count": 59, @@ -1719,10 +1751,10 @@ } ], "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)))" + "(def upper-shift (build-mrph\n", + " :sorc ccn :trgt ccn :strt :gnrt :degr +1\n", + " :intr #'(lambda (d gn) (cmbn (1+ d) 1 (+ gn 10)))\n", + " :orgn '(ccn shift +10)))" ] }, { @@ -1735,10 +1767,7 @@ { "data": { "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 12>\n", - "------------------------------------------------------------------------------\n" + "[K8 Morphism (degree -1): K5 -> K5]" ] }, "execution_count": 60, @@ -1747,7 +1776,10 @@ } ], "source": [ - "(cat:? ccn 2 22)" + "(def lower-shift (build-mrph\n", + " :sorc ccn :trgt ccn :strt :gnrt :degr -1\n", + " :intr #'(lambda (d gn) (cmbn (1- d) 1 (- gn 10)))\n", + " :orgn '(ccn shift -10)))" ] }, { @@ -1761,7 +1793,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 0}\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 12>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1771,7 +1804,7 @@ } ], "source": [ - "(cat:? ccn (cat:? ccn 2 22))" + "(? ccn 2 22)" ] }, { @@ -1780,6 +1813,30 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 0}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(? ccn *)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -1792,18 +1849,18 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 62, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def combn (cat:cmbn 5 1 50 5 55 9 59))" + "(def combn (cmbn 5 1 50 5 55 9 59))" ] }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 64, "metadata": { "collapsed": false }, @@ -1818,37 +1875,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? ccn combn)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "------------------------------------------------------------------------------\n" - ] - }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:? ccn (cat:? ccn combn))" + "(? ccn combn)" ] }, { @@ -1862,8 +1895,7 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 16>\n", + "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, @@ -1873,7 +1905,7 @@ } ], "source": [ - "(cat:? upper-shift 0 6)" + "(? ccn *)" ] }, { @@ -1887,8 +1919,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 4}\n", - "<1 * 41>\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 16>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1898,7 +1930,7 @@ } ], "source": [ - "(cat:? lower-shift 5 51)" + "(? upper-shift 0 6)" ] }, { @@ -1912,8 +1944,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 3}\n", - "<1 * 31>\n", + "----------------------------------------------------------------------{CMBN 4}\n", + "<1 * 41>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1923,7 +1955,7 @@ } ], "source": [ - "(cat:? lower-shift (cat:? lower-shift 5 51))" + "(? lower-shift 5 51)" ] }, { @@ -1937,11 +1969,8 @@ "data": { "text/plain": [ "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<2 * 11>\n", - "<3 * 12>\n", - "<4 * 13>\n", + "----------------------------------------------------------------------{CMBN 3}\n", + "<1 * 31>\n", "------------------------------------------------------------------------------\n" ] }, @@ -1951,7 +1980,7 @@ } ], "source": [ - "(cat:def comb1 (cat:cmbn 1 1 10 2 11 3 12 4 13))" + "(? lower-shift (? lower-shift 5 51))" ] }, { @@ -1960,50 +1989,6 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K9 Morphism (degree 0): K5 -> K5]" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:def identity? (cat:cmps upper-shift lower-shift))" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:degr identity?)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -2017,13 +2002,57 @@ "------------------------------------------------------------------------------\n" ] }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def comb1 (cmbn 1 1 10 2 11 3 12 4 13))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K9 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def identity? (cmps upper-shift lower-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:? identity? comb1)" + "(degr identity?)" ] }, { @@ -2038,6 +2067,10 @@ "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<2 * 11>\n", + "<3 * 12>\n", + "<4 * 13>\n", "------------------------------------------------------------------------------\n" ] }, @@ -2047,7 +2080,7 @@ } ], "source": [ - "(cat:2cmbn-sbtr (cat:cmpr ccn) comb1 (cat:? identity? comb1))" + "(? identity? comb1)" ] }, { @@ -2060,7 +2093,9 @@ { "data": { "text/plain": [ - "[K10 Morphism (degree 2): K5 -> K5]" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 73, @@ -2069,7 +2104,7 @@ } ], "source": [ - "(cat:def upper-shift2 (cat:cmps upper-shift upper-shift))" + "(2cmbn-sbtr (cmpr ccn) comb1 *)" ] }, { @@ -2082,7 +2117,7 @@ { "data": { "text/plain": [ - "2" + "[K10 Morphism (degree 2): K5 -> K5]" ] }, "execution_count": 74, @@ -2091,7 +2126,7 @@ } ], "source": [ - "(cat:degr upper-shift2)" + "(def upper-shift2 (cmps upper-shift upper-shift))" ] }, { @@ -2100,6 +2135,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(degr upper-shift2)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -2113,35 +2170,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? upper-shift2 comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K11 Morphism (degree 1): K5 -> K5]" - ] - }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def twice-up-shift (cat:add upper-shift upper-shift))" + "(? upper-shift2 comb1)" ] }, { @@ -2154,7 +2189,7 @@ { "data": { "text/plain": [ - "1" + "[K11 Morphism (degree 1): K5 -> K5]" ] }, "execution_count": 77, @@ -2163,7 +2198,7 @@ } ], "source": [ - "(cat:degr twice-up-shift)" + "(def twice-up-shift (add upper-shift upper-shift))" ] }, { @@ -2172,6 +2207,28 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(degr twice-up-shift)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -2185,35 +2242,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cat:? twice-up-shift comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K12 Morphism (degree 0): K5 -> K5]" - ] - }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:def up-d (cat:cmps upper-shift (cat:dffr1 ccn)))" + "(? twice-up-shift comb1)" ] }, { @@ -2226,7 +2261,7 @@ { "data": { "text/plain": [ - "[K13 Morphism (degree 0): K5 -> K5]" + "[K12 Morphism (degree 0): K5 -> K5]" ] }, "execution_count": 80, @@ -2235,7 +2270,7 @@ } ], "source": [ - "(cat:def d-up (cat:cmps (cat:dffr1 ccn) upper-shift))" + "(def up-d (cmps upper-shift (dffr1 ccn)))" ] }, { @@ -2248,10 +2283,7 @@ { "data": { "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 11>\n", - "------------------------------------------------------------------------------\n" + "[K13 Morphism (degree 0): K5 -> K5]" ] }, "execution_count": 81, @@ -2260,7 +2292,7 @@ } ], "source": [ - "(cat:? up-d 1 11)" + "(def d-up (cmps (dffr1 ccn) upper-shift))" ] }, { @@ -2275,6 +2307,7 @@ "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 11>\n", "------------------------------------------------------------------------------\n" ] }, @@ -2284,7 +2317,7 @@ } ], "source": [ - "(cat:? d-up 1 11)" + "(? up-d 1 11)" ] }, { @@ -2299,12 +2332,6 @@ "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" ] }, @@ -2314,7 +2341,7 @@ } ], "source": [ - "(cat:def comb3 (cat:cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" + "(? d-up 1 11)" ] }, { @@ -2329,8 +2356,11 @@ "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" ] @@ -2341,7 +2371,7 @@ } ], "source": [ - "(cat:? up-d comb3)" + "(def comb3 (cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" ] }, { @@ -2350,6 +2380,33 @@ "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<2 * 11>\n", + "<4 * 13>\n", + "<6 * 15>\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(? up-d comb3)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -2362,13 +2419,13 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 85, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:? d-up comb3)" + "(? d-up comb3)" ] }, { @@ -2380,7 +2437,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 87, "metadata": { "collapsed": false }, @@ -2391,18 +2448,18 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 86, + "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:k 1)" + "(k 1)" ] }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 88, "metadata": { "collapsed": false }, @@ -2423,18 +2480,18 @@ "NIL" ] }, - "execution_count": 87, + "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd 1)" + "(kd 1)" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 89, "metadata": { "collapsed": false }, @@ -2445,18 +2502,18 @@ "[K3 Cohomology-Class on K1 of degree 1]" ] }, - "execution_count": 88, + "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:k 3)" + "(k 3)" ] }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 90, "metadata": { "collapsed": false }, @@ -2477,18 +2534,18 @@ "NIL" ] }, - "execution_count": 89, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd 3)" + "(kd 3)" ] }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 91, "metadata": { "collapsed": false }, @@ -2509,18 +2566,18 @@ "NIL" ] }, - "execution_count": 90, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd 8)" + "(kd 8)" ] }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 92, "metadata": { "collapsed": false }, @@ -2541,18 +2598,18 @@ "NIL" ] }, - "execution_count": 91, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd 5)" + "(kd 5)" ] }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 93, "metadata": { "collapsed": false }, @@ -2573,18 +2630,18 @@ "NIL" ] }, - "execution_count": 92, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd 9)" + "(kd 9)" ] }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 94, "metadata": { "collapsed": false }, @@ -2613,13 +2670,13 @@ "(9 8 7)" ] }, - "execution_count": 93, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(cat:kd2 9)" + "(kd2 9)" ] } ], diff --git a/examples/Overview.ipynb b/examples/Overview.ipynb index 1f7f575..90a3c25 100644 --- a/examples/Overview.ipynb +++ b/examples/Overview.ipynb @@ -22,34 +22,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "To load \"kenzo\":\n", - " Load 1 ASDF system:\n", - " kenzo\n", - "\n", - "; Loading \"kenzo\"\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "(\"kenzo\")" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(ql:quickload \"kenzo\")" ] @@ -63,32 +40,24 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "---done---" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:cat-init)" + "(in-package \"CAT\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(cat-init)" ] }, { @@ -100,33 +69,13 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "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" - } - ], + "outputs": [], "source": [ - "(cat:kenzo-version)" + "(kenzo-version)" ] }, { @@ -140,24 +89,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Simplicial-Set]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def m23 (cat:moore 2 3))" + "(def m23 (moore 2 3))" ] }, { @@ -169,22 +107,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K1 Simplicial-Set]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "m23" ] @@ -198,159 +125,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology m23 0 5)" + "(homology m23 0 5)" ] }, { @@ -362,24 +143,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K10 Simplicial-Set]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def m23xm23 (cat:crts-prdc m23 m23))" + "(def m23xm23 (crts-prdc m23 m23))" ] }, { @@ -391,46 +161,24 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "( ...)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:basis m23xm23 6)" + "(basis m23xm23 6)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "230" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(length (cat:basis m23xm23 6))" + "(length *)" ] }, { @@ -444,46 +192,24 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K3 Chain-Complex]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def t2m23 (cat:tnsr-prdc m23 m23))" + "(def t2m23 (tnsr-prdc m23 m23))" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "()" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:basis t2m23 6)" + "(basis t2m23 6)" ] }, { @@ -495,288 +221,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 6.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 7.\n", - "Rank of the source-module : 2.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 7) :\n", - " \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology m23xm23 0 8)" + "(homology m23xm23 0 8)" ] }, { @@ -790,24 +241,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K38 Abelian-Simplicial-Group]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def kz1 (cat:k-z 1))" + "(def kz1 (k-z 1))" ] }, { @@ -820,66 +260,24 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "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" - } - ], + "outputs": [], "source": [ - "(cat:cprd kz1 4 '(2 3 4 5))" + "(cprd kz1 4 '(2 3 4 5))" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "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" - } - ], + "outputs": [], "source": [ - "(cat:aprd kz1 6 (cat:tnpr 2 '(1 2) 4 '(3 4 5 6)))" + "(aprd kz1 6 (tnpr 2 '(1 2) 4 '(3 4 5 6)))" ] }, { @@ -893,103 +291,24 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K64 Abelian-Simplicial-Group]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def k-z2-2 (cat:k-z2 2))" + "(def k-z2-2 (k-z2 2))" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/2 (dimension 4) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/3 (dimension 5) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/3 (dimension 5) :\n", - "<> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology k-z2-2 4)" + "(homology k-z2-2 4)" ] }, { @@ -1002,246 +321,35 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K174 Simplicial-Set]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def s3 (cat:sphere 3))" + "(def s3 (sphere 3))" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K191 Simplicial-Group]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def o2s3 (cat:loop-space s3 2))" + "(def o2s3 (loop-space s3 2))" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/5 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/5 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 3/5 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 4/5 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 5.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/5 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/5 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 3/5 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 4/5 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/8 (dimension 6) :\n", - "<>][5 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/8 (dimension 6) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 3/8 (dimension 6) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 4/8 (dimension 6) :\n", - "<>][1 <>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 5/8 (dimension 6) :\n", - "<>][1 <>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 6/8 (dimension 6) :\n", - "<>][3 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 7/8 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology o2s3 4 6)" + "(homology o2s3 4 6)" ] }, { @@ -1253,24 +361,13 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K179 Simplicial-Group]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def os3 (cat:loop-space s3))" + "(def os3 (loop-space s3))" ] }, { @@ -1282,24 +379,13 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "<>" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def L1 (cat:loop3 0 's3 1))" + "(def L1 (loop3 0 's3 1))" ] }, { @@ -1311,24 +397,13 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - ">>" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def null-simp (cat:absm 3 cat:+null-loop+))" + "(def null-simp (absm 3 +null-loop+))" ] }, { @@ -1340,25 +415,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K435 Simplicial-Set]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def dos3 (cat:disk-pasting os3 3 ' \n", - " (list L1 null-simp L1 null-simp)))" + "(def dos3 (disk-pasting os3 3 '\n", + " (list L1 null-simp L1 null-simp)))" ] }, { @@ -1370,94 +434,13 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 3.\n", - "Rank of the source-module : 1.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology dos3 2 4)" + "(homology dos3 2 4)" ] }, { @@ -1469,325 +452,24 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K453 Simplicial-Group]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def odos3 (cat:loop-space dos3))" + "(def odos3 (loop-space dos3))" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/14 (dimension 5) :\n", - "<>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/14 (dimension 5) :\n", - "<][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 3/14 (dimension 5) :\n", - "<>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 4/14 (dimension 5) :\n", - "<>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 5/14 (dimension 5) :\n", - "<>][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 6/14 (dimension 5) :\n", - "<>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 7/14 (dimension 5) :\n", - "<][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 8/14 (dimension 5) :\n", - "<][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 9/14 (dimension 5) :\n", - "<>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 10/14 (dimension 5) :\n", - "<>][1 <>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 11/14 (dimension 5) :\n", - "<>][1 <>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 12/14 (dimension 5) :\n", - "<>][2 ][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 13/14 (dimension 5) :\n", - "<][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 1/26 (dimension 6) :\n", - "<>][5 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 2/26 (dimension 6) :\n", - "<>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 3/26 (dimension 6) :\n", - "<>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 4/26 (dimension 6) :\n", - "<>][2 ][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 5/26 (dimension 6) :\n", - "<>][3 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 6/26 (dimension 6) :\n", - "<][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 7/26 (dimension 6) :\n", - "<][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 8/26 (dimension 6) :\n", - "<][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 9/26 (dimension 6) :\n", - "<>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 10/26 (dimension 6) :\n", - "<>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 11/26 (dimension 6) :\n", - "<>][1 <>][1 <>][3 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 12/26 (dimension 6) :\n", - "<>][1 <>][2 ][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 13/26 (dimension 6) :\n", - "<>][1 <>][3 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 14/26 (dimension 6) :\n", - "<>][2 ][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 15/26 (dimension 6) :\n", - "<>][2 ][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 16/26 (dimension 6) :\n", - "<>][3 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 17/26 (dimension 6) :\n", - "<][1 <>][1 <>][2 ]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 18/26 (dimension 6) :\n", - "<][1 <>][2 ][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 19/26 (dimension 6) :\n", - "<][2 ][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\n", - "Computing the boundary of the generator 20/26 (dimension 6) :\n", - "<>][1 <>][1 <>][1 <>]>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\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-12-29, 1h 11m 1s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology odos3 5)" + "(homology odos3 5)" ] }, { @@ -1799,90 +481,46 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(typep s3 'cat:kan)" + "(typep s3 'kan)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "T" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(typep os3 'cat:kan)" + "(typep os3 'kan)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "T" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(typep os3 'cat:simplicial-group)" + "(typep os3 'simplicial-group)" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(typep os3 'cat:ab-simplicial-group)" + "(typep os3 'ab-simplicial-group)" ] }, { @@ -1894,54 +532,24 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "<>" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def L2 (cat:loop3 0 's3 2))" + "(def L2 (loop3 0 's3 2))" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "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" - } - ], + "outputs": [], "source": [ - "(cat:def square (cat:aprd os3 4 (cat:tnpr 2 L2 2 L2)))" + "(def square (aprd os3 4 (tnpr 2 L2 2 L2)))" ] }, { @@ -1954,24 +562,13 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "<>" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def L4 (cat:gnrt (second (cat:cmbn-list square))))" + "(def L4 (gnrt (second (cmbn-list square))))" ] }, { @@ -1983,24 +580,13 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(>> >> >> >>)" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def hat (mapcar #'(lambda (i) (cat:face os3 i 4 l4)) '(1 2 3 4)))" + "(def hat (mapcar #'(lambda (i) (face os3 i 4 l4)) '(1 2 3 4)))" ] }, { @@ -2012,66 +598,33 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - ">>" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def kan-simplex (cat:kfll os3 0 4 hat))" + "(def kan-simplex (kfll os3 0 4 hat))" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - ">>" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:face os3 2 4 kan-simplex)" + "(face os3 2 4 kan-simplex)" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - ">>" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(second hat)" ] @@ -2085,99 +638,35 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K598 Simplicial-Set]" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def cls-os3 (cat:classifying-space os3))" + "(def cls-os3 (classifying-space os3))" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(typep cls-os3 'cat:simplicial-group)" + "(typep cls-os3 'simplicial-group)" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "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-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology cls-os3 4)" + "(homology cls-os3 4)" ] }, { @@ -2191,24 +680,13 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K729 Cohomology-Class on K1 of degree 3]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def ch3 (cat:chml-clss m23 3))" + "(def ch3 (chml-clss m23 3))" ] }, { @@ -2220,24 +698,13 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K730 Fibration K1 -> K64]" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def f3 (cat:z2-whitehead m23 ch3))" + "(def f3 (z2-whitehead m23 ch3))" ] }, { @@ -2249,24 +716,13 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K736 Simplicial-Set]" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def x4 (cat:fibration-total f3))" + "(def x4 (fibration-total f3))" ] }, { @@ -2278,142 +734,13 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/2 (dimension 3) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 4.\n", - "Rank of the source-module : 3.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/3 (dimension 4) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 3/4 (dimension 5) :\n", - ">> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology x4 3 5)" + "(homology x4 3 5)" ] }, { @@ -2425,328 +752,46 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K817 Cohomology-Class on K802 of degree 4]" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def ch4 (cat:chml-clss x4 4))" + "(def ch4 (chml-clss x4 4))" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K832 Fibration K736 -> K818]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def f4 (cat:z2-whitehead x4 ch4))" + "(def f4 (z2-whitehead x4 ch4))" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K838 Simplicial-Set]" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:def x5 (cat:fibration-total f4))" + "(def x5 (fibration-total f4))" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/4 (dimension 4) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/4 (dimension 4) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 3/4 (dimension 4) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 3/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 4/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 5/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 6/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "\n", - "\n", - "Computing boundary-matrix in dimension 5.\n", - "Rank of the source-module : 7.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 3/7 (dimension 5) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 4/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 5/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 6/7 (dimension 5) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 1/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 2/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 3/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 4/14 (dimension 6) :\n", - ">> <>][3 <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 5/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 6/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 7/14 (dimension 6) :\n", - ">> <>]>>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 8/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 9/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 10/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 11/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 12/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\n", - "Computing the boundary of the generator 13/14 (dimension 6) :\n", - ">> <>> \n", - "End of computing.\n", - "\n", - "\n", - ";; Clock -> 2015-12-29, 1h 11m 2s.\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-12-29, 1h 11m 2s.\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "NIL" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(cat:homology x5 4 6)" + "(homology x5 4 6)" ] }, { From 04ec4331a47fb913cd1c979b5555bddc5162a87c Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Sun, 10 Jan 2016 18:06:15 -0500 Subject: [PATCH 5/7] Updated notebook. --- examples/Chapter1.ipynb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/Chapter1.ipynb b/examples/Chapter1.ipynb index b3c99fe..5fb8e1d 100644 --- a/examples/Chapter1.ipynb +++ b/examples/Chapter1.ipynb @@ -165,8 +165,8 @@ "\n", "### Representation of a combination\n", "\n", - "A combination is represented internally in the system by a list having the following general form:\n", - "$$\\texttt{(:cmbn degree}\\quad(\\lambda_1\\cdot\\sigma_1)\\dots(\\lambda_k\\cdot\\sigma_k)\\texttt{)}$$\n", + "A combination is represented internally in the system by a structure having the following general form:\n", + "$$\\#\\texttt{S(CMBN}\\quad\\texttt{DEGREE P}\\quad\\texttt{LIST (}\\texttt{(}\\lambda_1\\cdot\\sigma_1\\texttt{)}\\dots\\texttt{(}\\lambda_k\\cdot\\sigma_k\\texttt{)))}$$\n", "and containing\n", "\n", "1. The degree of the combination corresponding to the index $p\\in\\mathbb{Z}$ of the group $C_p$ to which this combination belongs.\n", @@ -174,7 +174,14 @@ "\n", "This choice of representation implaies that only homogeneous combinations will be considered. A type $\\texttt{CMBN}$ and a printing method are provided with this internal representation. The external form of a combination is shown in the examples.\n", "\n", - "### Ordering the generators" + "### Ordering the generators\n", + "\n", + "In order to speed up the execution of algorithms involving combinations, the list of pairs $(\\lambda_i.\\sigma_i)$ is ordered by an adequate ordering function (ex: the lexicographical ordering n the symbols). For programming convenience, an enumerated type $\\texttt{CMPR}$ has been defined:\n", + "```lisp\n", + "(deftype cmpr() '(member :less :equal :greater))\n", + "```\n", + "A number of macros, functions and methods have been defined on usual sets (symbols, numbers, lists, etc.) taking their value in the set $\\texttt{[:less, :equal, :greater]}$. Of course, the user may define its own function for a particular case.\n", + "The functions $\\texttt{f-cmpr}$, $\\texttt{s-cmpr}$, and $\\texttt{l-cmpr}$ can be used to compare various couples of common items." ] }, { @@ -329,7 +336,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Functions handling combinations" + "### Functions handling combinations\n", + "\n", + "The software provides a set of functions, methods, and macros to create or modify combinations." ] }, { From 05a386f8ae447f807fce60dc10056bde10b05fa8 Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Sun, 10 Jan 2016 18:32:20 -0500 Subject: [PATCH 6/7] Added Emacs mode line. --- src/chain-complexes.lisp | 4 +- src/chcm-elementary-op.lisp | 378 ++++++++++---------- src/classes.lisp | 4 +- src/combinations.lisp | 690 ++++++++++++++++++------------------ src/macros.lisp | 48 +-- src/various.lisp | 52 +-- 6 files changed, 594 insertions(+), 582 deletions(-) diff --git a/src/chain-complexes.lisp b/src/chain-complexes.lisp index c6efb70..cbb4317 100644 --- a/src/chain-complexes.lisp +++ b/src/chain-complexes.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES ;;; CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES ;;; CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES CHAIN-COMPLEXES @@ -513,7 +515,7 @@ MAKE-INSTANCE. (error "In the combination located by *WRONG-CMBN*, the generators:~@ ~A and ~A are in a wrong order." (cdar mark2) (cdar mark1)))))) - cmbn) + cmbn) #| (DEFVAR *PROFILER-STACK*) diff --git a/src/chcm-elementary-op.lisp b/src/chcm-elementary-op.lisp index 6b4aeb8..83bb8d1 100644 --- a/src/chcm-elementary-op.lisp +++ b/src/chcm-elementary-op.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP ;;; CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP ;;; CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP CHCM-ELEMENTARY-OP @@ -14,41 +16,41 @@ Build the unit chain complex. ------------------------------------------------------------------------------" (the chain-complex (build-chcm - :cmpr #'(lambda (gnrt1 gnrt2) - (declare (ignore gnrt1 gnrt2)) - (the cmpr :equal)) - :basis #'(lambda (n) - (declare (type fixnum n)) - (the list + :cmpr #'(lambda (gnrt1 gnrt2) + (declare (ignore gnrt1 gnrt2)) + (the cmpr :equal)) + :basis #'(lambda (n) + (declare (type fixnum n)) + (the list (if (zerop n) - (list :Z-gnrt) - +empty-list+))) - :bsgn :Z-gnrt - :intr-dffr #'zero-intr-dffr - :strt :cmbn - :orgn '(Z-chcm)))) + (list :Z-gnrt) + +empty-list+))) + :bsgn :Z-gnrt + :intr-dffr #'zero-intr-dffr + :strt :cmbn + :orgn '(Z-chcm)))) (DEFUN ZERO-MRPH (chcm1 &optional (chcm2 chcm1) (degr 0)) (declare (type chain-complex chcm1 chcm2) - (type fixnum degr)) + (type fixnum degr)) (the morphism (build-mrph - :sorc chcm1 :trgt chcm2 :degr degr - :intr #'(lambda (cmbn) - (declare (type cmbn cmbn)) - (zero-cmbn (+ (cmbn-degr cmbn) degr))) - :strt :cmbn - :orgn `(zero-mrph ,chcm1 ,chcm2 ,degr)))) + :sorc chcm1 :trgt chcm2 :degr degr + :intr #'(lambda (cmbn) + (declare (type cmbn cmbn)) + (zero-cmbn (+ (cmbn-degr cmbn) degr))) + :strt :cmbn + :orgn `(zero-mrph ,chcm1 ,chcm2 ,degr)))) (DEFUN IDNT-MRPH (chcm) (declare (type chain-complex chcm)) (the morphism (build-mrph - :sorc chcm :trgt chcm :degr 0 - :intr #'identity - :strt :cmbn - :orgn `(idnt-mrph ,chcm)))) + :sorc chcm :trgt chcm :degr 0 + :intr #'identity + :strt :cmbn + :orgn `(idnt-mrph ,chcm)))) (DEFUN OPPS (mrph) @@ -56,17 +58,17 @@ Build the unit chain complex. (the morphism (with-slots (sorc trgt degr) mrph (build-mrph - :sorc sorc :trgt trgt :degr degr - :intr #'(lambda (cmbn) - (declare (type cmbn cmbn)) - (cmbn-opps (cmbn-? mrph cmbn))) - :strt :cmbn - :orgn `(opps ,mrph))))) + :sorc sorc :trgt trgt :degr degr + :intr #'(lambda (cmbn) + (declare (type cmbn cmbn)) + (cmbn-opps (cmbn-? mrph cmbn))) + :strt :cmbn + :orgn `(opps ,mrph))))) (DEFGENERIC CMPS (chcm-or-mrph1 chcm-or-mrph2 &optional strt) (:documentation - "---------------------------------------------------------------[generic-doc] + "---------------------------------------------------------------[generic-doc] CMPS Args: (arg1 arg2 &optional opt) A generic function whose specializations implement the composition @@ -94,47 +96,47 @@ composition of two morphisms, where the optional argument is a strategy. (the morphism (with-slots ((sorc1 sorc) (trgt1 trgt) (degr1 degr) (strt1 strt)) mrph1 (declare - (type chain-complex sorc1 trgt1) - (fixnum degr1) - (type strt strt1)) - (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 - (declare + (type chain-complex sorc1 trgt1) + (fixnum degr1) + (type strt strt1)) + (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 + (declare (type chain-complex sorc2 trgt2) (fixnum degr2) (type strt strt2)) - (unless (eq (grmd sorc1) (grmd trgt2)) - (error "In 2MRPH-CMPS, the morphisms ~A and ~A may not be composed (cf source and target)." - mrph1 mrph2)) - (unless strt - (setf strt (if (and (eq strt1 :gnrt) - (eq strt2 :gnrt)) - :gnrt - :cmbn))) - (when (or (eq (first (orgn mrph1)) 'zero-mrph) - (eq (first (orgn mrph2)) 'zero-mrph)) - (return-from cmps + (unless (eq (grmd sorc1) (grmd trgt2)) + (error "In 2MRPH-CMPS, the morphisms ~A and ~A may not be composed (cf source and target)." + mrph1 mrph2)) + (unless strt + (setf strt (if (and (eq strt1 :gnrt) + (eq strt2 :gnrt)) + :gnrt + :cmbn))) + (when (or (eq (first (orgn mrph1)) 'zero-mrph) + (eq (first (orgn mrph2)) 'zero-mrph)) + (return-from cmps (zero-mrph sorc2 trgt1 (+ degr1 degr2)))) - (when (eq (first (orgn mrph1)) 'idnt-mrph) - (return-from cmps mrph2)) - (when (eq (first (orgn mrph2)) 'idnt-mrph) - (return-from cmps mrph1)) - (ecase strt - (:cmbn (build-mrph - :sorc sorc2 :trgt trgt1 :degr (+ degr1 degr2) - :intr #'(lambda (cmbn) - (declare (type cmbn cmbn)) - (the cmbn + (when (eq (first (orgn mrph1)) 'idnt-mrph) + (return-from cmps mrph2)) + (when (eq (first (orgn mrph2)) 'idnt-mrph) + (return-from cmps mrph1)) + (ecase strt + (:cmbn (build-mrph + :sorc sorc2 :trgt trgt1 :degr (+ degr1 degr2) + :intr #'(lambda (cmbn) + (declare (type cmbn cmbn)) + (the cmbn (cmbn-? mrph1 (cmbn-? mrph2 cmbn)))) - :strt :cmbn :orgn `(2mrph-cmps ,mrph1 ,mrph2 ,strt))) - (:gnrt (build-mrph - :sorc sorc2 :trgt trgt1 :degr (+ degr1 degr2) - :intr #'(lambda (degr gnrt) - (declare - (type fixnum degr) - (type gnrt gnrt)) - (the cmbn + :strt :cmbn :orgn `(2mrph-cmps ,mrph1 ,mrph2 ,strt))) + (:gnrt (build-mrph + :sorc sorc2 :trgt trgt1 :degr (+ degr1 degr2) + :intr #'(lambda (degr gnrt) + (declare + (type fixnum degr) + (type gnrt gnrt)) + (the cmbn (cmbn-? mrph1 (gnrt-? mrph2 degr gnrt)))) - :strt :gnrt :orgn `(2mrph-cmps ,mrph1 ,mrph2 ,strt)))))))) + :strt :gnrt :orgn `(2mrph-cmps ,mrph1 ,mrph2 ,strt)))))))) (DEFUN N-MRPH-INTR (n mrph) @@ -142,8 +144,8 @@ composition of two morphisms, where the optional argument is a strategy. (fixnum n) (type morphism mrph)) (flet ((rslt (cmbn) - (declare (type cmbn cmbn)) - (n-cmbn n (cmbn-? mrph cmbn)))) + (declare (type cmbn cmbn)) + (n-cmbn n (cmbn-? mrph cmbn)))) (the intr-mrph #'rslt))) (DEFUN N-MRPH (n mrph) @@ -152,13 +154,13 @@ composition of two morphisms, where the optional argument is a strategy. (type morphism mrph)) (the morphism (with-slots (sorc trgt degr) mrph - (declare - (type chain-complex sorc trgt) - (fixnum degr)) - (build-mrph - :sorc sorc :trgt trgt :degr degr - :intr (n-mrph-intr n mrph) :strt :cmbn - :orgn `(n-mrph ,n ,mrph))))) + (declare + (type chain-complex sorc trgt) + (fixnum degr)) + (build-mrph + :sorc sorc :trgt trgt :degr degr + :intr (n-mrph-intr n mrph) :strt :cmbn + :orgn `(n-mrph ,n ,mrph))))) (DEFGENERIC ADD (chcm-or-mrph morphism &optional strt)) @@ -167,52 +169,52 @@ composition of two morphisms, where the optional argument is a strategy. (the morphism (with-slots ((sorc1 sorc) (trgt1 trgt) (degr1 degr) (strt1 strt)) mrph1 (declare - (type chain-complex sorc1 trgt1) - (fixnum degr1) - (type strt strt1)) - (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 - (declare + (type chain-complex sorc1 trgt1) + (fixnum degr1) + (type strt strt1)) + (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 + (declare (type chain-complex sorc2 trgt2) (fixnum degr2) (type strt strt2)) - (unless (and (eq (grmd sorc1) (grmd sorc2)) - (eq (grmd trgt1) (grmd trgt2)) - (= degr1 degr2)) - (error "In 2MRPH-ADD, ~A and ~A may not be added." mrph1 mrph2)) - (when (eq (first (orgn mrph1)) 'zero-mrph) - (return-from add mrph2)) - (when (eq (first (orgn mrph2)) 'zero-mrph) - (return-from add mrph1)) - (unless strt - (setf strt - (if (and (eq strt1 :gnrt) - (eq strt2 :gnrt)) - :gnrt - :cmbn))) - (when (or (eq (first (orgn mrph1)) 'idnt-mrph) - (eq (first (orgn mrph2)) 'idnt-mrph)) - (setf strt :cmbn)) - (let ((cmpr (cmpr trgt1))) - (declare (type cmprf cmpr)) - (ecase strt + (unless (and (eq (grmd sorc1) (grmd sorc2)) + (eq (grmd trgt1) (grmd trgt2)) + (= degr1 degr2)) + (error "In 2MRPH-ADD, ~A and ~A may not be added." mrph1 mrph2)) + (when (eq (first (orgn mrph1)) 'zero-mrph) + (return-from add mrph2)) + (when (eq (first (orgn mrph2)) 'zero-mrph) + (return-from add mrph1)) + (unless strt + (setf strt + (if (and (eq strt1 :gnrt) + (eq strt2 :gnrt)) + :gnrt + :cmbn))) + (when (or (eq (first (orgn mrph1)) 'idnt-mrph) + (eq (first (orgn mrph2)) 'idnt-mrph)) + (setf strt :cmbn)) + (let ((cmpr (cmpr trgt1))) + (declare (type cmprf cmpr)) + (ecase strt (:gnrt (build-mrph - :sorc sorc1 :trgt trgt1 :degr degr1 - :intr #'(lambda (degr gnrt) - (declare (type fixnum degr) (type gnrt gnrt)) - (2cmbn-add cmpr - (gnrt-? mrph1 degr gnrt) - (gnrt-? mrph2 degr gnrt))) - :strt :gnrt - :orgn `(2mrph-add ,mrph1 ,mrph2 ,strt))) + :sorc sorc1 :trgt trgt1 :degr degr1 + :intr #'(lambda (degr gnrt) + (declare (type fixnum degr) (type gnrt gnrt)) + (2cmbn-add cmpr + (gnrt-? mrph1 degr gnrt) + (gnrt-? mrph2 degr gnrt))) + :strt :gnrt + :orgn `(2mrph-add ,mrph1 ,mrph2 ,strt))) (:cmbn (build-mrph - :sorc sorc1 :trgt trgt1 :degr degr1 - :intr #'(lambda (cmbn) - (declare (type cmbn cmbn)) - (2cmbn-add cmpr - (cmbn-? mrph1 cmbn) - (cmbn-? mrph2 cmbn))) - :strt :cmbn - :orgn `(2mrph-add ,mrph1 ,mrph2 ,strt))))))))) + :sorc sorc1 :trgt trgt1 :degr degr1 + :intr #'(lambda (cmbn) + (declare (type cmbn cmbn)) + (2cmbn-add cmpr + (cmbn-? mrph1 cmbn) + (cmbn-? mrph2 cmbn))) + :strt :cmbn + :orgn `(2mrph-add ,mrph1 ,mrph2 ,strt))))))))) (DEFGENERIC SBTR (chcm-or-mrph morphism &optional strt)) @@ -221,53 +223,53 @@ composition of two morphisms, where the optional argument is a strategy. (the morphism (with-slots ((sorc1 sorc) (trgt1 trgt) (degr1 degr) (strt1 strt)) mrph1 (declare - (type chain-complex sorc1 trgt1) - (fixnum degr1) - (type strt strt1)) - (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 - (declare + (type chain-complex sorc1 trgt1) + (fixnum degr1) + (type strt strt1)) + (with-slots ((sorc2 sorc) (trgt2 trgt) (degr2 degr) (strt2 strt)) mrph2 + (declare (type chain-complex sorc2 trgt2) (fixnum degr2) (type strt strt2)) - (unless (and (eq (grmd sorc1) (grmd sorc2)) - (eq (grmd trgt1) (grmd trgt2)) - (= degr1 degr2)) - (error "In 2MRPH-SBTR, ~A and ~A may not be subtracteded." - mrph1 mrph2)) - (when (eq (first (orgn mrph1)) 'zero-mrph) - (return-from sbtr mrph2)) - (when (eq (first (orgn mrph2)) 'zero-mrph) - (return-from sbtr mrph1)) - (unless strt - (setf strt - (if (and (eq strt1 :gnrt) - (eq strt2 :gnrt)) - :gnrt - :cmbn))) - (when (or (eq (first (orgn mrph1)) 'idnt-mrph) - (eq (first (orgn mrph2)) 'idnt-mrph)) - (setf strt :cmbn)) - (let ((cmpr (cmpr trgt1))) - (declare (type cmprf cmpr)) - (ecase strt + (unless (and (eq (grmd sorc1) (grmd sorc2)) + (eq (grmd trgt1) (grmd trgt2)) + (= degr1 degr2)) + (error "In 2MRPH-SBTR, ~A and ~A may not be subtracteded." + mrph1 mrph2)) + (when (eq (first (orgn mrph1)) 'zero-mrph) + (return-from sbtr mrph2)) + (when (eq (first (orgn mrph2)) 'zero-mrph) + (return-from sbtr mrph1)) + (unless strt + (setf strt + (if (and (eq strt1 :gnrt) + (eq strt2 :gnrt)) + :gnrt + :cmbn))) + (when (or (eq (first (orgn mrph1)) 'idnt-mrph) + (eq (first (orgn mrph2)) 'idnt-mrph)) + (setf strt :cmbn)) + (let ((cmpr (cmpr trgt1))) + (declare (type cmprf cmpr)) + (ecase strt (:gnrt (build-mrph - :sorc sorc1 :trgt trgt1 :degr degr1 - :intr #'(lambda (degr gnrt) - (declare (type fixnum degr) (type gnrt gnrt)) - (2cmbn-sbtr cmpr - (gnrt-? mrph1 degr gnrt) - (gnrt-? mrph2 degr gnrt))) - :strt :gnrt - :orgn `(2mrph-sbtr ,mrph1 ,mrph2 ,strt))) + :sorc sorc1 :trgt trgt1 :degr degr1 + :intr #'(lambda (degr gnrt) + (declare (type fixnum degr) (type gnrt gnrt)) + (2cmbn-sbtr cmpr + (gnrt-? mrph1 degr gnrt) + (gnrt-? mrph2 degr gnrt))) + :strt :gnrt + :orgn `(2mrph-sbtr ,mrph1 ,mrph2 ,strt))) (:cmbn (build-mrph - :sorc sorc1 :trgt trgt1 :degr degr1 - :intr #'(lambda (cmbn) - (declare (type cmbn cmbn)) - (2cmbn-sbtr cmpr - (cmbn-? mrph1 cmbn) - (cmbn-? mrph2 cmbn))) - :strt :cmbn - :orgn `(2mrph-sbtr ,mrph1 ,mrph2 ,strt))))))))) + :sorc sorc1 :trgt trgt1 :degr degr1 + :intr #'(lambda (cmbn) + (declare (type cmbn cmbn)) + (2cmbn-sbtr cmpr + (cmbn-? mrph1 cmbn) + (cmbn-? mrph2 cmbn))) + :strt :cmbn + :orgn `(2mrph-sbtr ,mrph1 ,mrph2 ,strt))))))))) (DEFUN CHANGE-SORC-TRGT (mrph &key new-sorc new-trgt) (declare @@ -276,12 +278,12 @@ composition of two morphisms, where the optional argument is a strategy. (the morphism (with-slots (sorc trgt degr intr strt) mrph (build-mrph - :sorc (or new-sorc sorc) - :trgt (or new-trgt trgt) - :degr degr - :intr intr - :strt strt - :orgn `(change-sorc-trgt ,mrph ,new-sorc ,new-trgt))))) + :sorc (or new-sorc sorc) + :trgt (or new-trgt trgt) + :degr degr + :intr intr + :strt strt + :orgn `(change-sorc-trgt ,mrph ,new-sorc ,new-trgt))))) (DEFUN DSTR-CHANGE-SORC-TRGT (mrph &key new-sorc new-trgt) (declare @@ -290,9 +292,9 @@ composition of two morphisms, where the optional argument is a strategy. (the morphism (with-slots (sorc trgt) mrph (when new-sorc - (setf sorc new-sorc)) + (setf sorc new-sorc)) (when new-trgt - (setf trgt new-trgt)) + (setf trgt new-trgt)) mrph))) (DEFMETHOD ADD ((chcm chain-complex) (perturbation morphism) &optional strt) @@ -300,28 +302,28 @@ composition of two morphisms, where the optional argument is a strategy. (the chain-complex (with-slots (cmpr basis bsgn dffr) chcm (declare - (type cmprf cmpr) - (type basis basis) - (type morphism dffr)) - (with-slots (sorc trgt degr) perturbation - (declare + (type cmprf cmpr) + (type basis basis) + (type morphism dffr)) + (with-slots (sorc trgt degr) perturbation + (declare (type chain-complex sorc trgt) (fixnum degr)) - (unless (and (eq (grmd sorc) (grmd chcm)) - (eq (grmd trgt) (grmd chcm)) - (= degr -1)) - (error "In (METHOD ADD CHAIN-COMPLEX MORPHISM), the data are not coherent.")) - (let ((new-dffr (add dffr perturbation strt))) - (declare (type morphism new-dffr)) - (let ((new-chcm (build-chcm - :cmpr cmpr - :basis basis - :intr-dffr (intr new-dffr) - :strt (strt new-dffr) - :orgn `(add ,chcm ,perturbation)))) - (declare (type chain-complex new-chcm)) - (if (slot-boundp chcm 'bsgn) - (setf (slot-value new-chcm 'bsgn) bsgn) - (slot-makunbound new-chcm 'bsgn)) - (setf (slot-value new-chcm 'grmd) (grmd chcm)) - new-chcm)))))) + (unless (and (eq (grmd sorc) (grmd chcm)) + (eq (grmd trgt) (grmd chcm)) + (= degr -1)) + (error "In (METHOD ADD CHAIN-COMPLEX MORPHISM), the data are not coherent.")) + (let ((new-dffr (add dffr perturbation strt))) + (declare (type morphism new-dffr)) + (let ((new-chcm (build-chcm + :cmpr cmpr + :basis basis + :intr-dffr (intr new-dffr) + :strt (strt new-dffr) + :orgn `(add ,chcm ,perturbation)))) + (declare (type chain-complex new-chcm)) + (if (slot-boundp chcm 'bsgn) + (setf (slot-value new-chcm 'bsgn) bsgn) + (slot-makunbound new-chcm 'bsgn)) + (setf (slot-value new-chcm 'grmd) (grmd chcm)) + new-chcm)))))) diff --git a/src/classes.lisp b/src/classes.lisp index 41b2cbe..45d7390 100644 --- a/src/classes.lisp +++ b/src/classes.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES ;;; CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES ;;; CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES CLASSES @@ -202,7 +204,7 @@ Intances of this class represent chain complexes. The class has 8 slots: ;; STRT = STRaTegy (DEFTYPE STRT () - "-----------------------------------------------------------------[type-doc] + "-----------------------------------------------------------------[type-doc] STRT A derived type, which represents the mapping strategy of morphisms. ------------------------------------------------------------------------------" diff --git a/src/combinations.lisp b/src/combinations.lisp index 5665d20..d3b09f2 100644 --- a/src/combinations.lisp +++ b/src/combinations.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS ;;; COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS ;;; COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS COMBINATIONS @@ -22,19 +24,19 @@ is ignored. ------------------------------------------------------------------------------" (the cmbn (with-cmbn (degr list) cmbn - (format stream "~%~70@{-~}{CMBN ~D}" degr) - (do ((mark list (cdr mark)) - (nth 0 (1+ nth))) - ((endp mark)) - (declare - (list mark) - (fixnum nth)) - (when (and *print-length* (= nth *print-length*)) - (format stream "~%... ...") - (return)) - (format stream "~%<~D * ~A>" (-cffc mark) (-gnrt mark))) - (format stream "~%~78@{-~}~%" t) - cmbn))) + (format stream "~%~70@{-~}{CMBN ~D}" degr) + (do ((mark list (cdr mark)) + (nth 0 (1+ nth))) + ((endp mark)) + (declare + (list mark) + (fixnum nth)) + (when (and *print-length* (= nth *print-length*)) + (format stream "~%... ...") + (return)) + (format stream "~%<~D * ~A>" (-cffc mark) (-gnrt mark))) + (format stream "~%~78@{-~}~%" t) + cmbn))) (DEFUN MAPLEXICO (cmpr list1 list2) @@ -43,17 +45,17 @@ is ignored. (list list1 list2)) (the boolean (do ((mark1 list1 (cdr mark1)) - (mark2 list2 (cdr mark2))) - (nil) + (mark2 list2 (cdr mark2))) + (nil) (declare (list mark1 mark2)) (unless mark1 - (return-from maplexico - (if mark2 :less :equal))) + (return-from maplexico + (if mark2 :less :equal))) (unless mark2 - (return-from maplexico :greater)) + (return-from maplexico :greater)) (case (funcall cmpr (car mark1) (car mark2)) - (:less (return-from maplexico :less)) - (:greater (return-from maplexico :greater)))))) + (:less (return-from maplexico :less)) + (:greater (return-from maplexico :greater)))))) (DEFUN S-CMPR (symbol1 symbol2) @@ -67,12 +69,12 @@ comparison function of the strings (SYMBOL-NAME SYMBOL1) and ------------------------------------------------------------------------------" (the cmpr (if (#+aclpc acl:whole-string< - #-aclpc string< symbol1 symbol2) - :less - (if (#+aclpc acl:whole-string= - #-aclpc string= symbol1 symbol2) - :equal - :greater)))) + #-aclpc string< symbol1 symbol2) + :less + (if (#+aclpc acl:whole-string= + #-aclpc string= symbol1 symbol2) + :equal + :greater)))) (DEFUN F-CMPR (n1 n2) @@ -85,10 +87,10 @@ comparison of the integers N1 and N2. ------------------------------------------------------------------------------" (the cmpr (if (< n1 n2) - :less - (if (= n1 n2) - :equal - :greater)))) + :less + (if (= n1 n2) + :equal + :greater)))) (DEFUN L-CMPR (list1 list2) @@ -108,12 +110,12 @@ of the generator lists LIST1 and LIST2. (lexico (s-cmpr (first list1) (first list2)) (l-cmpr (rest list1) (rest list2))) - :greater) + :greater) (if (symbolp (first list2)) - :less - (lexico - (f-cmpr (first list1) (first list2)) - (l-cmpr (rest list1) (rest list2)))))) + :less + (lexico + (f-cmpr (first list1) (first list2)) + (l-cmpr (rest list1) (rest list2)))))) ;;;; ;;;; COMBINATIONS @@ -124,10 +126,10 @@ of the generator lists LIST1 and LIST2. (declare (fixnum degr)) (the cmbn (let ((rslt (list degr :cmbn))) - (do ((mark rest (cddr mark))) - ((endp mark) (nreverse rslt)) - (declare (list mark)) - (push (term (car mark) (cadr mark)) rslt))))) + (do ((mark rest (cddr mark))) + ((endp mark) (nreverse rslt)) + (declare (list mark)) + (push (term (car mark) (cadr mark)) rslt))))) |# (DEFUN CMBN (degr &rest rest) @@ -142,12 +144,12 @@ is an instance of the null combination of degree DEGR. ------------------------------------------------------------------------------" (the cmbn (make-cmbn :degr degr - :list (do ((rslt +empty-list+ - (cons (term (car mark) (cadr mark)) - rslt)) - (mark rest (cddr mark))) - ((endp mark) (nreverse rslt)) - (declare (list rslt mark)))))) + :list (do ((rslt +empty-list+ + (cons (term (car mark) (cadr mark)) + rslt)) + (mark rest (cddr mark))) + ((endp mark) (nreverse rslt)) + (declare (list rslt mark)))))) (setf *print-pretty* nil) @@ -165,18 +167,18 @@ CHECK-CMBN raises an error if the generators of CMBN are out-of-order. ------------------------------------------------------------------------------" (the boolean (do ((cmpr (cmpr chcm)) - (mark2 (cmbn-list cmbn) mark1) - (mark1 (rest (cmbn-list cmbn)) (cdr mark1))) - ((endp mark1) t) - (declare - (type cmprf cmpr) - (list mark1 mark2)) - (unless (eq :less (funcall cmpr (-gnrt mark2) (-gnrt mark1))) - (error "In CHECK-CMBN, bad order; the generator:~@ + (mark2 (cmbn-list cmbn) mark1) + (mark1 (rest (cmbn-list cmbn)) (cdr mark1))) + ((endp mark1) t) + (declare + (type cmprf cmpr) + (list mark1 mark2)) + (unless (eq :less (funcall cmpr (-gnrt mark2) (-gnrt mark1))) + (error "In CHECK-CMBN, bad order; the generator:~@ ~A~@ is not less than the generator:~@ ~A." - (-gnrt mark2) (-gnrt mark1)))))) + (-gnrt mark2) (-gnrt mark1)))))) (DEFUN ZERO-CMBN (degr) @@ -188,8 +190,8 @@ Returns an instance of the null combination of degree DEGR. ------------------------------------------------------------------------------" (the cmbn (make-cmbn - :degr degr - :list +empty-list+))) + :degr degr + :list +empty-list+))) (DEFINE-CONSTANT +ZERO-NEGATIVE-CMBN+ @@ -220,14 +222,14 @@ Returns the combination opposite combination of CMBN. ------------------------------------------------------------------------------" (the cmbn (with-cmbn (degr list) cmbn - (make-cmbn - :degr degr - :list (mapcar #'(lambda (term) - (declare (type term term)) - (with-term - (cffc gnrt) term - (term (- cffc) gnrt))) - list))))) + (make-cmbn + :degr degr + :list (mapcar #'(lambda (term) + (declare (type term term)) + (with-term + (cffc gnrt) term + (term (- cffc) gnrt))) + list))))) (DEFUN N-CMBN (n cmbn) @@ -242,16 +244,16 @@ Returns N times the combination CMBN. N must be non-zero. ------------------------------------------------------------------------------" (the cmbn (if (= n 1) - cmbn - (with-cmbn (degr list) cmbn - (make-cmbn - :degr degr - :list (mapcar #'(lambda (term) - (declare (type term term)) - (with-term - (cffc gnrt) term - (term (* n cffc) gnrt))) - list)))))) + cmbn + (with-cmbn (degr list) cmbn + (make-cmbn + :degr degr + :list (mapcar #'(lambda (term) + (declare (type term term)) + (with-term + (cffc gnrt) term + (term (* n cffc) gnrt))) + list)))))) (DEFUN 2CMBN-ADD (cmpr cmbn1 cmbn2) @@ -268,62 +270,62 @@ combination. ------------------------------------------------------------------------------" (the cmbn (with-cmbn - (degr1 list1) cmbn1 - (with-cmbn - (degr2 list2) cmbn2 - (unless (= degr1 degr2) - (error "In ADD, the combination arguments have different degrees ~D and ~D." - degr1 degr2)) - (unless list1 - (return-from 2cmbn-add cmbn2)) - (unless list2 - (return-from 2cmbn-add cmbn1)) - (let ((pre-rslt +empty-list+) - (mark1 list1) - (mark2 list2)) - (declare (list pre-rslt mark1 mark2)) - (with--term - (cffc1 gnrt1) mark1 - (with--term - (cffc2 gnrt2) mark2 - (tagbody - :begin - (ecase (funcall cmpr gnrt1 gnrt2) - (:equal - (let ((cffc (+ cffc1 cffc2))) - (declare (fixnum cffc)) - (unless (zerop cffc) - (push (term cffc gnrt1) pre-rslt)) - (setf mark1 (cdr mark1) - mark2 (cdr mark2)) - (unless mark1 (go :cmbn1-is-finished)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc1 (-cffc mark1) - gnrt1 (-gnrt mark1) - cffc2 (-cffc mark2) - gnrt2 (-gnrt mark2)) - (go :begin))) - (:less - (push (-term mark1) pre-rslt) - (setf mark1 (cdr mark1)) - (unless mark1 (go :cmbn1-is-finished)) - (setf cffc1 (-cffc mark1) - gnrt1 (-gnrt mark1)) - (go :begin)) - (:greater - (push (-term mark2) pre-rslt) - (setf mark2 (cdr mark2)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc2 (-cffc mark2) - gnrt2 (-gnrt mark2)) - (go :begin))) - :cmbn1-is-finished - (setf pre-rslt (nreconc pre-rslt mark2)) - (go :exit) - :cmbn2-is-finished - (setf pre-rslt (nreconc pre-rslt mark1)) - :exit)) - (make-cmbn :degr degr1 :list pre-rslt))))))) + (degr1 list1) cmbn1 + (with-cmbn + (degr2 list2) cmbn2 + (unless (= degr1 degr2) + (error "In ADD, the combination arguments have different degrees ~D and ~D." + degr1 degr2)) + (unless list1 + (return-from 2cmbn-add cmbn2)) + (unless list2 + (return-from 2cmbn-add cmbn1)) + (let ((pre-rslt +empty-list+) + (mark1 list1) + (mark2 list2)) + (declare (list pre-rslt mark1 mark2)) + (with--term + (cffc1 gnrt1) mark1 + (with--term + (cffc2 gnrt2) mark2 + (tagbody + :begin + (ecase (funcall cmpr gnrt1 gnrt2) + (:equal + (let ((cffc (+ cffc1 cffc2))) + (declare (fixnum cffc)) + (unless (zerop cffc) + (push (term cffc gnrt1) pre-rslt)) + (setf mark1 (cdr mark1) + mark2 (cdr mark2)) + (unless mark1 (go :cmbn1-is-finished)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc1 (-cffc mark1) + gnrt1 (-gnrt mark1) + cffc2 (-cffc mark2) + gnrt2 (-gnrt mark2)) + (go :begin))) + (:less + (push (-term mark1) pre-rslt) + (setf mark1 (cdr mark1)) + (unless mark1 (go :cmbn1-is-finished)) + (setf cffc1 (-cffc mark1) + gnrt1 (-gnrt mark1)) + (go :begin)) + (:greater + (push (-term mark2) pre-rslt) + (setf mark2 (cdr mark2)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc2 (-cffc mark2) + gnrt2 (-gnrt mark2)) + (go :begin))) + :cmbn1-is-finished + (setf pre-rslt (nreconc pre-rslt mark2)) + (go :exit) + :cmbn2-is-finished + (setf pre-rslt (nreconc pre-rslt mark1)) + :exit)) + (make-cmbn :degr degr1 :list pre-rslt))))))) (DEFUN 2CMBN-SBTR (cmpr cmbn1 cmbn2) @@ -340,73 +342,73 @@ combination. ------------------------------------------------------------------------------" (the cmbn (with-cmbn - (degr1 list1) cmbn1 - (with-cmbn - (degr2 list2) cmbn2 - (unless (= degr1 degr2) - (error "In SBTR, the combination arguments have different degrees ~D and ~D." - degr1 degr2)) - (unless list1 - (return-from 2cmbn-sbtr (cmbn-opps cmbn2))) - (unless list2 - (return-from 2cmbn-sbtr cmbn1)) - (let ((pre-rslt +empty-list+) - (mark1 list1) - (mark2 list2)) - (declare (list pre-rslt mark1 mark2)) - (with--term - (cffc1 gnrt1) mark1 - (with--term - (cffc2 gnrt2) mark2 - (tagbody - :begin - (ecase (funcall cmpr gnrt1 gnrt2) - (:equal - (let ((cffc (- cffc1 cffc2))) - (declare (fixnum cffc)) - (unless (zerop cffc) - (push (term cffc gnrt1) pre-rslt)) - (unless mark1 (go :cmbn1-is-finished)) - (setf mark1 (cdr mark1) - mark2 (cdr mark2)) - (unless mark1 (go :cmbn1-is-finished)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc1 (-cffc mark1) - gnrt1 (-gnrt mark1) - cffc2 (-cffc mark2) - gnrt2 (-gnrt mark2)) - (go :begin))) - (:less - (push (-term mark1) pre-rslt) - (setf mark1 (cdr mark1)) - (unless mark1 (go :cmbn1-is-finished)) - (setf cffc1 (-cffc mark1) - gnrt1 (-gnrt mark1)) - (go :begin)) - (:greater - (push (term (- cffc2) gnrt2) pre-rslt) - (setf mark2 (cdr mark2)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc2 (-cffc mark2) - gnrt2 (-gnrt mark2)) - (go :begin))) - :cmbn1-is-finished - (setf pre-rslt - (nreconc pre-rslt - (mapcar #'(lambda (term) - (declare (cons term)) - (with-term - (cffc gnrt) term - (term (- cffc) - gnrt))) - mark2))) - (go :exit) - :cmbn2-is-finished - (setf pre-rslt (nreconc pre-rslt mark1)) - :exit)) - (make-cmbn - :degr degr1 - :list pre-rslt))))))) + (degr1 list1) cmbn1 + (with-cmbn + (degr2 list2) cmbn2 + (unless (= degr1 degr2) + (error "In SBTR, the combination arguments have different degrees ~D and ~D." + degr1 degr2)) + (unless list1 + (return-from 2cmbn-sbtr (cmbn-opps cmbn2))) + (unless list2 + (return-from 2cmbn-sbtr cmbn1)) + (let ((pre-rslt +empty-list+) + (mark1 list1) + (mark2 list2)) + (declare (list pre-rslt mark1 mark2)) + (with--term + (cffc1 gnrt1) mark1 + (with--term + (cffc2 gnrt2) mark2 + (tagbody + :begin + (ecase (funcall cmpr gnrt1 gnrt2) + (:equal + (let ((cffc (- cffc1 cffc2))) + (declare (fixnum cffc)) + (unless (zerop cffc) + (push (term cffc gnrt1) pre-rslt)) + (unless mark1 (go :cmbn1-is-finished)) + (setf mark1 (cdr mark1) + mark2 (cdr mark2)) + (unless mark1 (go :cmbn1-is-finished)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc1 (-cffc mark1) + gnrt1 (-gnrt mark1) + cffc2 (-cffc mark2) + gnrt2 (-gnrt mark2)) + (go :begin))) + (:less + (push (-term mark1) pre-rslt) + (setf mark1 (cdr mark1)) + (unless mark1 (go :cmbn1-is-finished)) + (setf cffc1 (-cffc mark1) + gnrt1 (-gnrt mark1)) + (go :begin)) + (:greater + (push (term (- cffc2) gnrt2) pre-rslt) + (setf mark2 (cdr mark2)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc2 (-cffc mark2) + gnrt2 (-gnrt mark2)) + (go :begin))) + :cmbn1-is-finished + (setf pre-rslt + (nreconc pre-rslt + (mapcar #'(lambda (term) + (declare (cons term)) + (with-term + (cffc gnrt) term + (term (- cffc) + gnrt))) + mark2))) + (go :exit) + :cmbn2-is-finished + (setf pre-rslt (nreconc pre-rslt mark1)) + :exit)) + (make-cmbn + :degr degr1 + :list pre-rslt))))))) (DEFUN 2N-2CMBN (cmpr n1 cmbn1 n2 cmbn2) @@ -426,86 +428,86 @@ the result combination. ------------------------------------------------------------------------------" (the cmbn (with-cmbn - (degr1 list1) cmbn1 - (with-cmbn - (degr2 list2) cmbn2 - (unless (= degr1 degr2) - (error "In 2N-2CMBN, the combination arguments have different degrees ~D and ~D." - degr1 degr2)) - (unless list1 - (return-from 2n-2cmbn (n-cmbn n2 cmbn2))) - (unless list2 - (return-from 2n-2cmbn (n-cmbn n1 cmbn1))) - (let ((pre-rslt +empty-list+) - (mark1 list1) - (mark2 list2)) - (declare (list pre-rslt mark1 mark2)) - (with--term - (cffc1 gnrt1) mark1 - (with--term - (cffc2 gnrt2) mark2 - (setf cffc1 (* n1 cffc1) - cffc2 (* n2 cffc2)) - (tagbody - :begin - (ecase (funcall cmpr gnrt1 gnrt2) - (:equal - (let ((cffc (+ cffc1 cffc2))) - (declare (fixnum cffc)) - (unless (zerop cffc) - (push (term cffc gnrt1) pre-rslt)) - (setf mark1 (cdr mark1) - mark2 (cdr mark2)) - (unless mark1 (go :cmbn1-is-finished)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc1 (* n1 (-cffc mark1)) - gnrt1 (-gnrt mark1) - cffc2 (* n2 (-cffc mark2)) - gnrt2 (-gnrt mark2)) - (go :begin))) - (:less - (push (term cffc1 gnrt1) pre-rslt) - (setf mark1 (cdr mark1)) - (unless mark1 (go :cmbn1-is-finished)) - (setf cffc1 (* n1 (-cffc mark1)) - gnrt1 (-gnrt mark1)) - (go :begin)) - (:greater - (push (term cffc2 gnrt2) pre-rslt) - (setf mark2 (cdr mark2)) - (unless mark2 (go :cmbn2-is-finished)) - (setf cffc2 (* n2 (-cffc mark2)) - gnrt2 (-gnrt mark2)) - (go :begin))) - :cmbn1-is-finished - (setf pre-rslt - (nreconc pre-rslt - (if (= 1 n2) - mark2 - (mapcar #'(lambda (term) - (declare (cons term)) - (with-term - (cffc gnrt) term - (term (* n2 cffc) - gnrt))) - mark2)))) - (go :exit) - :cmbn2-is-finished - (setf pre-rslt - (nreconc pre-rslt - (if (= 1 n1) - mark1 - (mapcar #'(lambda (term) - (declare (cons term)) - (with-term - (cffc gnrt) term - (term (* n1 cffc) - gnrt))) - mark1)))) - :exit)) - (make-cmbn - :degr degr1 - :list pre-rslt))))))) + (degr1 list1) cmbn1 + (with-cmbn + (degr2 list2) cmbn2 + (unless (= degr1 degr2) + (error "In 2N-2CMBN, the combination arguments have different degrees ~D and ~D." + degr1 degr2)) + (unless list1 + (return-from 2n-2cmbn (n-cmbn n2 cmbn2))) + (unless list2 + (return-from 2n-2cmbn (n-cmbn n1 cmbn1))) + (let ((pre-rslt +empty-list+) + (mark1 list1) + (mark2 list2)) + (declare (list pre-rslt mark1 mark2)) + (with--term + (cffc1 gnrt1) mark1 + (with--term + (cffc2 gnrt2) mark2 + (setf cffc1 (* n1 cffc1) + cffc2 (* n2 cffc2)) + (tagbody + :begin + (ecase (funcall cmpr gnrt1 gnrt2) + (:equal + (let ((cffc (+ cffc1 cffc2))) + (declare (fixnum cffc)) + (unless (zerop cffc) + (push (term cffc gnrt1) pre-rslt)) + (setf mark1 (cdr mark1) + mark2 (cdr mark2)) + (unless mark1 (go :cmbn1-is-finished)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc1 (* n1 (-cffc mark1)) + gnrt1 (-gnrt mark1) + cffc2 (* n2 (-cffc mark2)) + gnrt2 (-gnrt mark2)) + (go :begin))) + (:less + (push (term cffc1 gnrt1) pre-rslt) + (setf mark1 (cdr mark1)) + (unless mark1 (go :cmbn1-is-finished)) + (setf cffc1 (* n1 (-cffc mark1)) + gnrt1 (-gnrt mark1)) + (go :begin)) + (:greater + (push (term cffc2 gnrt2) pre-rslt) + (setf mark2 (cdr mark2)) + (unless mark2 (go :cmbn2-is-finished)) + (setf cffc2 (* n2 (-cffc mark2)) + gnrt2 (-gnrt mark2)) + (go :begin))) + :cmbn1-is-finished + (setf pre-rslt + (nreconc pre-rslt + (if (= 1 n2) + mark2 + (mapcar #'(lambda (term) + (declare (cons term)) + (with-term + (cffc gnrt) term + (term (* n2 cffc) + gnrt))) + mark2)))) + (go :exit) + :cmbn2-is-finished + (setf pre-rslt + (nreconc pre-rslt + (if (= 1 n1) + mark1 + (mapcar #'(lambda (term) + (declare (cons term)) + (with-term + (cffc gnrt) term + (term (* n1 cffc) + gnrt))) + mark1)))) + :exit)) + (make-cmbn + :degr degr1 + :list pre-rslt))))))) (DEFUN CMBN-CMBN (cmpr n-cmbn-list) @@ -531,38 +533,38 @@ combination. (unless (cddr n-cmbn-list) (return-from cmbn-cmbn (2n-2cmbn cmpr - (caar n-cmbn-list) (cdar n-cmbn-list) - (caadr n-cmbn-list) (cdadr n-cmbn-list)))) + (caar n-cmbn-list) (cdar n-cmbn-list) + (caadr n-cmbn-list) (cdadr n-cmbn-list)))) (the cmbn (let ((new-rslt +empty-list+)) - (declare (list new-rslt)) - (do ((mark1 (rest n-cmbn-list) (cddr mark1)) - (mark2 n-cmbn-list (cdr mark1))) - ((endp mark2)) - (declare (list mark1 mark2)) - (when (endp mark1) - (push (n-cmbn (caar mark2) (cdar mark2)) new-rslt) - (return)) - (push (2n-2cmbn cmpr - (caar mark2) (cdar mark2) - (caar mark1) (cdar mark1)) - new-rslt)) - (let ((old-rslt +empty-list+)) - (declare (list old-rslt)) - (loop - (unless (rest new-rslt) - (return-from cmbn-cmbn (first new-rslt))) - (setf old-rslt new-rslt - new-rslt +empty-list+) - (do ((mark1 (rest old-rslt) (cddr mark1)) - (mark2 old-rslt (cdr mark1))) - ((endp mark2)) - (declare (list mark1 mark2)) - (when (endp mark1) - (push (car mark2) new-rslt) - (return)) - (push (2cmbn-add cmpr (car mark2) (car mark1)) - new-rslt))))))) + (declare (list new-rslt)) + (do ((mark1 (rest n-cmbn-list) (cddr mark1)) + (mark2 n-cmbn-list (cdr mark1))) + ((endp mark2)) + (declare (list mark1 mark2)) + (when (endp mark1) + (push (n-cmbn (caar mark2) (cdar mark2)) new-rslt) + (return)) + (push (2n-2cmbn cmpr + (caar mark2) (cdar mark2) + (caar mark1) (cdar mark1)) + new-rslt)) + (let ((old-rslt +empty-list+)) + (declare (list old-rslt)) + (loop + (unless (rest new-rslt) + (return-from cmbn-cmbn (first new-rslt))) + (setf old-rslt new-rslt + new-rslt +empty-list+) + (do ((mark1 (rest old-rslt) (cddr mark1)) + (mark2 old-rslt (cdr mark1))) + ((endp mark2)) + (declare (list mark1 mark2)) + (when (endp mark1) + (push (car mark2) new-rslt) + (return)) + (push (2cmbn-add cmpr (car mark2) (car mark1)) + new-rslt))))))) (DEFUN NTERM-ADD (cmpr degr &rest rest) @@ -586,24 +588,24 @@ is returned. (let ((rslt (list (first rest)))) (declare (list rslt)) (dolist (term (rest rest)) - (declare (type term term)) - (with-term (cffc gnrt) term - (do ((mark1 rslt (cdr mark1)) - (mark2 nil mark1)) - ((endp mark1) (setf (cdr mark2) (list term))) - (ecase (funcall cmpr gnrt (-gnrt mark1)) - (:less - (if mark2 - (push term (cdr mark2)) - (push term rslt)) - (return)) - (:equal - (incf (-cffc mark1) cffc) - (return)) - (:greater ))))) + (declare (type term term)) + (with-term (cffc gnrt) term + (do ((mark1 rslt (cdr mark1)) + (mark2 nil mark1)) + ((endp mark1) (setf (cdr mark2) (list term))) + (ecase (funcall cmpr gnrt (-gnrt mark1)) + (:less + (if mark2 + (push term (cdr mark2)) + (push term rslt)) + (return)) + (:equal + (incf (-cffc mark1) cffc) + (return)) + (:greater ))))) (make-cmbn - :degr degr - :list (delete 0 rslt :key #'car))))) + :degr degr + :list (delete 0 rslt :key #'car))))) (DEFUN NCMBN-ADD (cmpr cmbn &rest rest) @@ -621,7 +623,7 @@ the input combinations and to order the terms of the result combination. (cmbn-cmbn cmpr (mapcar #'(lambda (cmbn) (declare (type cmbn cmbn)) (cons 1 cmbn)) - (cons cmbn rest))))) + (cons cmbn rest))))) (DEFUN DSTR-ADD-TERM-TO-CMBN (cmpr cffc gnrt cmbn) @@ -642,26 +644,26 @@ result combination. (let ((list (cmbn-list cmbn))) (declare (list list)) (unless list - (push (term cffc gnrt) (cmbn-list cmbn)) - (return-from dstr-add-term-to-cmbn cmbn)) + (push (term cffc gnrt) (cmbn-list cmbn)) + (return-from dstr-add-term-to-cmbn cmbn)) (do ((mark2 nil mark1) (mark1 list (cdr mark1))) ((endp mark1) (setf (cdr mark2) (list (term cffc gnrt)))) - (declare (list mark1 mark2)) - (ecase (funcall cmpr gnrt (-gnrt mark1)) - (:less - (if mark2 - (push (term cffc gnrt) (cdr mark2)) - (push (term cffc gnrt) (cmbn-list cmbn))) - (return)) - (:equal - (let ((new-cffc (+ cffc (-cffc mark1)))) - (declare (fixnum new-cffc)) - (if (zerop new-cffc) - (if mark2 - (pop (cdr mark2)) - (pop (cmbn-list cmbn))) - (setf (-cffc mark1) new-cffc)) - (return))) - (:greater))) + (declare (list mark1 mark2)) + (ecase (funcall cmpr gnrt (-gnrt mark1)) + (:less + (if mark2 + (push (term cffc gnrt) (cdr mark2)) + (push (term cffc gnrt) (cmbn-list cmbn))) + (return)) + (:equal + (let ((new-cffc (+ cffc (-cffc mark1)))) + (declare (fixnum new-cffc)) + (if (zerop new-cffc) + (if mark2 + (pop (cdr mark2)) + (pop (cmbn-list cmbn))) + (setf (-cffc mark1) new-cffc)) + (return))) + (:greater))) cmbn))) diff --git a/src/macros.lisp b/src/macros.lisp index 0fefbb2..c9af69a 100644 --- a/src/macros.lisp +++ b/src/macros.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; MACROS MACROS MACROS MACROS MACROS MACROS MACROS ;;; MACROS MACROS MACROS MACROS MACROS MACROS MACROS ;;; MACROS MACROS MACROS MACROS MACROS MACROS MACROS @@ -63,8 +65,8 @@ and returns VALUE. `(let ((,vrslt ,(first rest))) (declare (type cmpr ,vrslt)) (if (eq ,vrslt :equal) - (lexico ,@(rest rest)) - ,vrslt)))) + (lexico ,@(rest rest)) + ,vrslt)))) (DEFMACRO TERM (cffc gnrt) @@ -103,7 +105,7 @@ Returns the the generator of a term. (DEFMACRO WITH-TERM ((cffc gnrt) term . body) `(let (,@(if cffc `((,cffc (cffc ,term))) nil) - ,@(if gnrt `((,gnrt (gnrt ,term))) nil)) + ,@(if gnrt `((,gnrt (gnrt ,term))) nil)) (declare (fixnum ,@(if cffc `(,cffc) nil)) (type gnrt ,@(if gnrt `(,gnrt) nil))) @@ -112,7 +114,7 @@ Returns the the generator of a term. (DEFMACRO WITH--TERM ((cffc gnrt) mark . body) `(let ((,cffc (-cffc ,mark)) - (,gnrt (-gnrt ,mark))) + (,gnrt (-gnrt ,mark))) (declare (fixnum ,cffc) (type gnrt ,gnrt)) @@ -121,7 +123,7 @@ Returns the the generator of a term. (DEFMACRO WITH-CMBN ((degr list) cmbn . body) `(let ((,degr (cmbn-degr ,cmbn)) - (,list (cmbn-list ,cmbn))) + (,list (cmbn-list ,cmbn))) (declare (fixnum ,degr) (list ,list)) @@ -459,7 +461,7 @@ the chain complex D." (DEFMACRO WITH-BICN ((bcnx ibicn) bicn . body) `(let ((,bcnx (bcnx ,bicn)) - (,ibicn (ibicn ,bicn))) + (,ibicn (ibicn ,bicn))) (declare (type (member :bcnb :bcnc :bcnd) ,bcnx) (type gnrt ,ibicn)) @@ -492,9 +494,9 @@ the chain complex D." (DEFMACRO WITH-TNPR ((degr1 gnrt1 degr2 gnrt2) tnpr . body) `(let (,@(if degr1 `((,degr1 (degr1 ,tnpr))) nil) - ,@(if gnrt1 `((,gnrt1 (gnrt1 ,tnpr))) nil) - ,@(if degr2 `((,degr2 (degr2 ,tnpr))) nil) - ,@(if gnrt2 `((,gnrt2 (gnrt2 ,tnpr))) nil)) + ,@(if gnrt1 `((,gnrt1 (gnrt1 ,tnpr))) nil) + ,@(if degr2 `((,degr2 (degr2 ,tnpr))) nil) + ,@(if gnrt2 `((,gnrt2 (gnrt2 ,tnpr))) nil)) (declare (fixnum ,@(if degr1 `(,degr1) nil) ,@(if degr2 `(,degr2) nil)) (type gnrt ,@(if gnrt1 `(,gnrt1) nil) ,@(if gnrt2 `(,gnrt2) nil))) @@ -535,7 +537,7 @@ the chain complex D." (DEFMACRO WITH-CBGN ((cdegr cgnrt) cbgn . body) `(let ((,cdegr (cdegr ,cbgn)) - (,cgnrt (cgnrt ,cbgn))) + (,cgnrt (cgnrt ,cbgn))) (declare (fixnum ,cdegr) (type gnrt ,cgnrt)) @@ -544,7 +546,7 @@ the chain complex D." (DEFMACRO WITH--CBGN ((cdegr cgnrt) cbgn . body) `(let ((,cdegr (-cdegr ,cbgn)) - (,cgnrt (-cgnrt ,cbgn))) + (,cgnrt (-cgnrt ,cbgn))) (declare (fixnum ,cdegr) (type gnrt ,cgnrt)) @@ -596,7 +598,7 @@ the chain complex D." (DEFMACRO WITH-BRGN ((bdegr bgnrt) brgn . body) `(let ((,bdegr (bdegr ,brgn)) - (,bgnrt (bgnrt ,brgn))) + (,bgnrt (bgnrt ,brgn))) (declare (fixnum ,bdegr) (type gnrt ,bgnrt)) @@ -605,7 +607,7 @@ the chain complex D." (DEFMACRO WITH--BRGN ((bdegr bgnrt) brgn . body) `(let ((,bdegr (-bdegr ,brgn)) - (,bgnrt (-bgnrt ,brgn))) + (,bgnrt (-bgnrt ,brgn))) (declare (fixnum ,bdegr) (type gnrt ,bgnrt)) @@ -681,7 +683,7 @@ the chain complex D." (declare (fixnum ,dgop-var) (type gmsm ,gmsm-var)) - ,@body)))) + ,@body)))) (DEFMACRO DEGENERATE-P (absm) @@ -751,8 +753,8 @@ the chain complex D." (ecase (length rest) (2 `(cons :crpr (cons (cdr ,(first rest)) (cdr ,(second rest))))) (4 `(cons :crpr (cons - (cons ,(first rest) ,(second rest)) - (cons ,(third rest) ,(fourth rest))))))) + (cons ,(first rest) ,(second rest)) + (cons ,(third rest) ,(fourth rest))))))) |# (DEFMACRO CRPR (&rest rest) (ecase (length rest) @@ -805,7 +807,7 @@ the chain complex D." #| (DEFMACRO WITH-CRPR-2 ((absm1 absm2) crpr . body) `(let ((,absm1 (cons :absm (cadr ,crpr))) - (,absm2 (cons :absm (cddr ,crpr)))) + (,absm2 (cons :absm (cddr ,crpr)))) (declare (type absm ,absm1 ,absm2)) ,@body)) |# @@ -819,9 +821,9 @@ the chain complex D." (DEFMACRO WITH-CRPR-4 ((dgop1 gmsm1 dgop2 gmsm2) crpr . body) `(let ((,dgop1 (dgop1 ,crpr)) - (,gmsm1 (gmsm1 ,crpr)) - (,dgop2 (dgop2 ,crpr)) - (,gmsm2 (gmsm2 ,crpr))) + (,gmsm1 (gmsm1 ,crpr)) + (,dgop2 (dgop2 ,crpr)) + (,gmsm2 (gmsm2 ,crpr))) (declare (fixnum ,dgop1 ,dgop2) (type gmsm ,gmsm1 ,gmsm2)) @@ -884,7 +886,7 @@ the chain complex D." (DEFMACRO WITH-POWR ((gmsm expn) powr . body) `(let ((,gmsm (car ,powr)) - (,expn (cdr ,powr))) + (,expn (cdr ,powr))) (declare (type gmsm ,gmsm) (fixnum expn)) @@ -893,8 +895,8 @@ the chain complex D." (DEFMACRO WITH-APOWR ((dgop gmsm expn) apowr . body) `(let ((,dgop (apdgop ,apowr)) - (,gmsm (cadr ,apowr)) - (,expn (cddr ,apowr))) + (,gmsm (cadr ,apowr)) + (,expn (cddr ,apowr))) (declare (fixnum ,dgop ,expn) (type gmsm ,gmsm)) diff --git a/src/various.lisp b/src/various.lisp index 2df1452..81a67b8 100644 --- a/src/various.lisp +++ b/src/various.lisp @@ -1,3 +1,5 @@ +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- + ;;; VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS ;;; VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS ;;; VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS VARIOUS @@ -13,10 +15,10 @@ (setf p (- n p))) (the fixnum (do ((nn n (1- nn)) - (pp 1 (1+ pp)) - (rslt 1 (/ (* rslt nn) pp))) - ((> pp p) rslt) - (declare (fixnum nn pp rslt))))) + (pp 1 (1+ pp)) + (rslt 1 (/ (* rslt nn) pp))) + ((> pp p) rslt) + (declare (fixnum nn pp rslt))))) (SETF *PRINT-LEVEL* 5 @@ -26,46 +28,46 @@ (declare (fixnum a b)) (the list (do ((i (1- b) (1- i)) - (rslt +empty-list+ (cons i rslt))) - ((< i a) rslt) + (rslt +empty-list+ (cons i rslt))) + ((< i a) rslt) (declare (fixnum i) (list rslt))))) (DEFUN (a b) (declare (fixnum a b)) (the list (do ((i b (1- i)) - (rslt +empty-list+ (cons i rslt))) - ((< i a) rslt) - (declare (fixnum i) (list rslt))))) + (rslt +empty-list+ (cons i rslt))) + ((< i a) rslt) + (declare (fixnum i) (list rslt))))) (DEFUN >A-B< (a b) (declare (fixnum a b)) (the list (do ((i (1- b) (1- i)) - (rslt +empty-list+ (cons i rslt))) - ((= i a) rslt) - (declare (fixnum i) (list rslt))))) + (rslt +empty-list+ (cons i rslt))) + ((= i a) rslt) + (declare (fixnum i) (list rslt))))) (DEFUN >A-B> (a b) (declare (fixnum a b)) (the list (do ((i b (1- i)) - (rslt +empty-list+ (cons i rslt))) - ((= i a) rslt) - (declare (fixnum i) (list rslt))))) + (rslt +empty-list+ (cons i rslt))) + ((= i a) rslt) + (declare (fixnum i) (list rslt))))) (DEFUN V (a b) (declare (fixnum a b)) (the (vector fixnum) (let ((rslt (make-array (1+ (- b a)) :element-type 'fixnum))) - (declare (type (vector fixnum) rslt)) - (do ((i a (1+ i)) - (mark 0 (1+ mark))) - ((> i b)) - (declare (fixnum i mark)) - (setf (aref rslt mark) i)) - rslt))) + (declare (type (vector fixnum) rslt)) + (do ((i a (1+ i)) + (mark 0 (1+ mark))) + ((> i b)) + (declare (fixnum i mark)) + (setf (aref rslt mark) i)) + rslt))) (DEFUN SRANDOM (max) @@ -74,15 +76,15 @@ (let ((rslt (- (random (+ max max)) max))) (declare (fixnum rslt)) (if (zerop rslt) - max - rslt)))) + max + rslt)))) (DEFUN CLOCK () (multiple-value-bind (sec min hour day month year) (get-decoded-time) (format t "~%;; Clock -> ~4D-~2,'0D-~2,'0D, ~Dh ~Dm ~Ds.~%" - year month day hour min sec)) + year month day hour min sec)) (values)) #| From b9d65f477f825ca927a2ddc76161f305e229be03 Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Thu, 11 Feb 2016 22:31:41 -0500 Subject: [PATCH 7/7] Notebook updates. --- examples/Chapter1.ipynb | 1677 +++++++++++++++++++-------------------- 1 file changed, 810 insertions(+), 867 deletions(-) diff --git a/examples/Chapter1.ipynb b/examples/Chapter1.ipynb index 5fb8e1d..0d0d181 100644 --- a/examples/Chapter1.ipynb +++ b/examples/Chapter1.ipynb @@ -137,7 +137,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAD5CAYAAADMd4SKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACh1SURBVHhe7d0LkFZlHcfxB8UL4zXNdIwIgUlNnbyPl10kdVzM+wyjLFqhKQZYluGik5YllUs2XlJINKGpWHSYvOdCyiQgGmrmJTVjsVHSNK+paSoSv2fPf3n27Hn3Avteznm+n5m3c3tfzXfPe87/PM/vPGfAmrUcAABAwW2UTAEAAAqNogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBogcAAESBoicSS5cudQMGDOh4jR49OtnS2bx58/z2SZMmJWsAACgGip4IrFy50tXX1ydL7RYsWNClsNFyY2NjsgQA+WcXcvbq7oLO3oPiouiJwPz58/20ubnZrVmzxrW1tfnlhQsX+qmMGDHCzZw50w0fPjxZAwD5phbu9IWcjnPTp09PltYp1fqNYqHoicjUqVN9q8+wYcN88bNixYpkSzsVQ9OmTUuWACDf5s6d66ctLS3+mLdkyRK/vGjRIj81KoLU+o3io+iJQFNTUzLnfEuOmm/VshNSAaRiCACKxlp76urqfPHT2trql0WtQbognDhxYrIGRUbREwn90MOuK7XqpAsfACiSKVOmJHPr8jrpbqzx48f7Y+OMGTOSNSgyip6IqDUnbOJV4aOrHAAoIuvKD6kbywofhZp1HJwzZ45fRvFR9ERAP3Bd4eguBlETb0NDg58HgKJT4aOXsj2iwkf5RoWaRXe3hndtaZ4LwmKi6ImAmm9F/drWxGuhPRVAAFBE6sIPC5ixY8dyh2rkKHoioB+6XeGE0s2+AFAkEyZM8FNrydFL3VkqfKzrK3wZzXNBWEwD1v5xOfMBAApJt6Pr7iyjgic9XIdRUSScFouLogcAAESB7i0AABAFih4AABAFih4AABAFih4AABAFgswReu655zoeuHf44Ye7XXbZxc8DQNFx/IsbRU9EnnzySXfssce6V1991W266aZ+3QcffOA++clPujvvvNPtueeefh0AFA3HPwhFTyT0gz/ssMPc6tWr3VtvvZWsbbfNNtu4jTfe2N1333388AEUDsc/GIqeSAwdOtS98MIL7uOPP07WdLbRRhu5IUOG+KZfACgSjn8wBJkjoB+ymnRL/eBF2/SeV155JVkDAPnH8Q8hip4IKLQ3aNCgZKm0LbbYwi1evDhZAoD84/iHEEVPJHrTi/nRRx916e8GgLzj+AdD0RMB3Zb53nvvJUul6T16LwAUBcc/hCh6IqBxKHbYYQcf1itF2wYOHOgeeuihZA0A5F9vj396D2P2FB93b0VCt2yOHDnSj0vx7rvvJmvbqS97k002cW+++aZf/uY3v+muuuoqPw8AeaNj2YMPPuhf999/v9txxx3dHXfc4Y9/77//fvKudjr+adwe5Xm4Zb34KHoiosLnmGOO8Xco2J99wIAB7lOf+pS76667XGtrqzv//PP9+n333ddde+217qCDDvLLAFCLPvzwQ/fYY4+5v/zlL52mb7/9tt++9957uwsuuMB3X2n6xhtv+OOfWnfC4x8FTxwoeiKkWzhvvPFGP3/GGWd0atLVldHkyZPdn//8Z7/805/+1E2ZMsXPA0C1vfzyyx2FjRU5Tz31VLK1q/POO88df/zxyZJzL730kmtsbPTzK1eupEsrMhQ9kTr99NP9dPbs2X6api6un//8537+xBNPdNdcc4379Kc/7ZcBoBreeecd19zc7I9H1h3fnf3228/97Gc/S5bWGTVqlJ9y+osPQeYIPfHEE37sCr00n+Xqq692N910k38uza233ur22Wcfd/PNNydbAaDyttxyS3fppZe6Rx55xF155ZXuiCOOSLZ0pRzPqaeemiwB7Sh6IqT+6+eff96/NF/KySef7JuO1dLz73//251yyinu3HPPTbYCQHUMGzbMH4vuueeeTl1XoaOPPtpnE4EQRU9kNPhWWOhovrsBudSldcstt/hsj6gFSE3Gyv4AQLU88MAD/lh0++23J2vWUbGjogdIo+iJjIqcpUuXJkvOz3fX2mMUZtZBRgcThZwPPvhgd/nllydbAaBydOw55JBD/LFojz32cJdcckmyxfnhN770pS/57i0gjaInMlkFTm+KHtHt6+pL/8Y3vuGXdXv7SSed5P75z3/6ZQAoJx1rdMyxoTV0F5aG1lDm0KjgOfLII5MloDOKnoiUatVJt/70hJAzgErTMUZj7uiYs9122/lA89lnn+23bb311m6rrbbyt5/TrYXu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", "text/plain": [ - "#" + "#" ] }, "execution_count": 4, @@ -161,27 +161,39 @@ "\n", "The elements of either of those groups $C_p$ are linear integer combinations of the corresponding basis (set of $\\sigma_i$'s), i.e., elements of the form\n", "$$\\sum\\lambda_i\\sigma_i, \\quad \\lambda_i\\in\\mathbb{Z}.$$\n", - "An element $\\sigma_i$ of any basis is also called a *generator* and in our specific case this generator will be represented by a Lisp symbol. For instance, $s_{45}$ will be translated into $\\texttt{s45}$. However, the user should be aware that in more realistic usage of the software, generators may be of any type. A product such as $\\lambda_i\\sigma_i$ is called a *term* and a sum of terms, a *combination*.\n", + "An element $\\sigma_i$ of any basis is also called a *generator* and in our specific case this generator will be represented by a Lisp symbol. For instance, $s_{45}$ will be translated into `s45`. However, the user should be aware that in more realistic usage of the software, generators may be of any type. A product such as $\\lambda_i\\sigma_i$ is called a *term* and a sum of terms, a *combination*.\n", "\n", "### Representation of a combination\n", "\n", "A combination is represented internally in the system by a structure having the following general form:\n", + "\n", "$$\\#\\texttt{S(CMBN}\\quad\\texttt{DEGREE P}\\quad\\texttt{LIST (}\\texttt{(}\\lambda_1\\cdot\\sigma_1\\texttt{)}\\dots\\texttt{(}\\lambda_k\\cdot\\sigma_k\\texttt{)))}$$\n", "and containing\n", "\n", "1. The degree of the combination corresponding to the index $p\\in\\mathbb{Z}$ of the group $C_p$ to which this combination belongs.\n", "2. The list of the internal representation of the terms, namely the list of pairs $(\\lambda_i\\cdot\\sigma_i)$.\n", "\n", - "This choice of representation implaies that only homogeneous combinations will be considered. A type $\\texttt{CMBN}$ and a printing method are provided with this internal representation. The external form of a combination is shown in the examples.\n", + "This choice of representation implaies that only homogeneous combinations will be considered. A type `CMBN` and a printing method are provided with this internal representation. The external form of a combination is shown in the examples.\n", "\n", "### Ordering the generators\n", "\n", - "In order to speed up the execution of algorithms involving combinations, the list of pairs $(\\lambda_i.\\sigma_i)$ is ordered by an adequate ordering function (ex: the lexicographical ordering n the symbols). For programming convenience, an enumerated type $\\texttt{CMPR}$ has been defined:\n", + "In order to speed up the execution of algorithms involving combinations, the list of pairs $(\\lambda_i.\\sigma_i)$ is ordered by an adequate ordering function (ex: the lexicographical ordering n the symbols). For programming convenience, an enumerated type `CMPR` has been defined:\n", "```lisp\n", "(deftype cmpr() '(member :less :equal :greater))\n", "```\n", - "A number of macros, functions and methods have been defined on usual sets (symbols, numbers, lists, etc.) taking their value in the set $\\texttt{[:less, :equal, :greater]}$. Of course, the user may define its own function for a particular case.\n", - "The functions $\\texttt{f-cmpr}$, $\\texttt{s-cmpr}$, and $\\texttt{l-cmpr}$ can be used to compare various couples of common items." + "A number of macros, functions and methods have been defined on usual sets (symbols, numbers, lists, etc.) taking their value in the set `[:less, :equal, :greater]`. Of course, the user may define its own function for a particular case. There exists functions to compare various couples of usual items:\n", + "\n", + "> *Function* `(f-cmpr n1 n2)`\n", + ">> Return `:less`, `:equal`, `:greater`, according to the result of the canonical comparison of both integers `n1` and `n2`.\n", + "\n", + "> *Function* `(s-cmpr symbol1 symbol2)`\n", + ">> Return `:less`, `:equal`, `:greater`, according to the result of the lisp comparison functions on the strings `(symbol-name symbol1)` and `(symbol-name symbol2)`\n", + "\n", + "> *Function* `(l-cmpr list1 list2)`\n", + ">> Return `:less`, `:equal`, `:greater`, according to the lexicographical ordering of the two lists `list1`\n", + "and `list2` representing legal generators in this implementation.\n", + "\n", + "#### Examples" ] }, { @@ -194,12 +206,7 @@ { "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", - "------------------------------------------------------------------------------\"" + ":LESS" ] }, "execution_count": 5, @@ -208,7 +215,7 @@ } ], "source": [ - "(documentation 'f-cmpr 'function)" + "(f-cmpr 123 789)" ] }, { @@ -221,7 +228,7 @@ { "data": { "text/plain": [ - ":LESS" + ":GREATER" ] }, "execution_count": 6, @@ -230,7 +237,7 @@ } ], "source": [ - "(f-cmpr 123 789)" + "(s-cmpr 'circulation 'circular)" ] }, { @@ -243,13 +250,7 @@ { "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", - "------------------------------------------------------------------------------\"" + ":EQUAL" ] }, "execution_count": 7, @@ -258,7 +259,7 @@ } ], "source": [ - "(documentation 's-cmpr 'function)" + "(s-cmpr 'qwerty 'qwerty)" ] }, { @@ -279,55 +280,6 @@ "output_type": "execute_result" } ], - "source": [ - "(s-cmpr 'circulation 'circular)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "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": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'l-cmpr 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":GREATER" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "(l-cmpr '(1 a b) '(1 a))" ] @@ -336,43 +288,62 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Functions handling combinations\n", + "1.2.3 Functions handling combinations\n", "\n", - "The software provides a set of functions, methods, and macros to create or modify combinations." + "The software provides a set of functions, methods, and macros to create or modify combinations.\n", + "\n", + "> *Macro* `(term-cmbn dgr cf gnr)`\n", + ">> Construct the combination of degree `dgr` with unique term `cf * gnr`.\n", + "\n", + "> *Function* `(cmbn dgr cf1 gnr1 cf2 gnr2 ... cfn gnrn)`\n", + ">> Construct a combination of degree `dgr`, sum of the terms $cf_i * gnr_i$. The sequence of pairs $\\lbrace cf_i\\ gnr_i\\rbrace$ has an undefinite length and may be void. In this case, the combination is a null combination of degree `dgr`. \n", + "\n", + "> *Function* `(cmbn-p object)`\n", + ">> Test is `object` is a legal combination.\n", + "\n", + "> *Macro* `(cmbn-degr cmbn)\n", + ">> Get the degree (an integer) of the combination `cmbn`.\n", + "\n", + "> *Macro* `(cmbn-list cmbn)`\n", + ">> Get the list of the terms of the combination `cmbn`. Beware: a term is not a `Kenzo` object. One may select the coefficient (an integer) or the generator - a `Kenzo` object - respectively by the macros `cffc` and `gnrt`.\n", + "\n", + "> *Function* `(zero-cmbn dgr)`\n", + ">> Create an instance of a null combination in the degree `dgr`.\n", + "\n", + "> *Function* `(zero-pure-dffr cmbn)`\n", + ">> Create a null combination of degree $degr(cmbn) - 1$.\n", + "\n", + "> *Macro* `(cmbn-zero-p cmbn)`\n", + ">> Test if `cmbn` is a null combination in any degree.\n", + "\n", + "> *Macro* `(cmbn-non-zero-p cmbn)`\n", + ">> Test if `cmbn` is a non-null combination in any degree.\n", + "\n", + "> *Function* `(cmbn-opps cmbn)`\n", + ">> Create a combination opposite to `cmbn`.\n", + "\n", + "> *Function* `(n-cmbn n cmbn)`\n", + ">> Create a combination multiple of `cmbn` by the factor `n`.\n", + "\n", + "> *Function* `(2cmbn-add cmpr cmbn1 cmbn2)`\n", + ">> Create a combination, sum of both combinations `cmbn1` and `cmbn2`. The first argument, `cmpr`, must be a function or macro relevant to compare the generators of the involved combinations, in order to return an ordered combination.\n", + "\n", + "> *Function* `(ncmbn-add cmpr cmbn1 cmbn2 ... cmbnk)`\n", + ">> Create a combination, sum of the indefinite number of combinations $cmbn_i$. As to the first argument, `cmpr`, see the function `2cmbn-add`.\n", + "\n", + "> *Function* `(2n-2cmbn cmpr n1 cmbn1 n2 cmbn2)`\n", + ">> Build the combination `n1 * cmbn1 + n2 * cmbn2`. Both integers `n1` and `n2` must be\n", + "non null. As to the first argument, `cmpr`, see the function `2cmbn-add`.\n", + "\n", + "> *Function* `(2cmbn-sbtr cmpr cmbn1 cmbn2)`\n", + ">> Create a combination, difference of `cmbn1` and `cmbn2`. As to the first argument, `cmpr`, see the function `2cmbn-add`.\n", + "\n", + "#### Examples" ] }, { "cell_type": "code", - "execution_count": 11, - "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 length including NIL, in which case the combination\n", - "is an instance of the null combination of degree DEGR.\n", - "------------------------------------------------------------------------------\"" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cmbn 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -389,7 +360,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -398,6 +369,72 @@ "(def comb1 (cmbn 1 1 'u 2 'v 3 'w 4 'z))" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "T" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cmbn-non-zero-p comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "((1 . U) (2 . V) (3 . W) (4 . Z))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(cmbn-list comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3 . W)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def term3 (third *)) ;; not a Kenzo object!" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -408,11 +445,7 @@ { "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", - "------------------------------------------------------------------------------\"" + "3" ] }, "execution_count": 13, @@ -421,7 +454,7 @@ } ], "source": [ - "(documentation 'cmbn-non-zero-p 'function)" + "(cffc term3)" ] }, { @@ -430,153 +463,6 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "T" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cmbn-non-zero-p comb1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The reader function $\\texttt{cat:cmbn-list}$ gets the list of terms of the combination $\\texttt{cmbn}$. Beware: a term is not a Kenzo object." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "((1 . U) (2 . V) (3 . W) (4 . Z))" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cmbn-list comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(3 . W)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(def term3 (third (cmbn-list comb1)))" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\"-----------------------------------------------------------------[macro-doc]\n", - "CFFC\n", - "Args: (term)\n", - "Returns the the coefficient (integer) of a term.\n", - "------------------------------------------------------------------------------\"" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cffc 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(cffc term3)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\"-----------------------------------------------------------------[macro-doc]\n", - "GNRT\n", - "Args: (term)\n", - "Returns the the generator of a term.\n", - "------------------------------------------------------------------------------\"" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'gnrt 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -584,7 +470,7 @@ "W" ] }, - "execution_count": 20, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -595,33 +481,7 @@ }, { "cell_type": "code", - "execution_count": 21, - "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": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'cmbn-opps 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -638,7 +498,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 22, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -649,33 +509,7 @@ }, { "cell_type": "code", - "execution_count": 23, - "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": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'n-cmbn 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -692,7 +526,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 24, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -703,36 +537,7 @@ }, { "cell_type": "code", - "execution_count": 25, - "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": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation '2cmbn-add 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -749,7 +554,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 26, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -760,7 +565,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -768,56 +573,27 @@ { "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", - "------------------------------------------------------------------------------\"" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<-10 * U>\n", + "<-20 * V>\n", + "<-30 * W>\n", + "<-40 * Z>\n", + "------------------------------------------------------------------------------\n" ] }, - "execution_count": 27, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation '2cmbn-sbtr 'function)" + "(2cmbn-sbtr #'s-cmpr comb1 cmb12)" ] }, { "cell_type": "code", - "execution_count": 28, - "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": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(documentation 'ncmbn-add 'function)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -834,7 +610,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 29, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -850,14 +626,69 @@ "source": [ "## Representation of a chain complex\n", "\n", - "### The function build-chcm\n", + "A chain complex is implemented as an instance of a `CLOS` class, \n", + "the class `CHAIN-COMPLEX`, whose definition is\n", "\n", - "#### A first example of a chain complex" + "```lisp\n", + "(DEFCLASS CHAIN-COMPLEX ()\n", + " ((cmpr :type cmprf :initarg :cmpr :reader cmpr1)\n", + " (basis :type basis :initarg :basis :reader basis1)\n", + " ;; BaSe GeNerator\n", + " (bsgn :type gnrt :initarg :bsgn :reader bsgn)\n", + " ;; DiFFeRential\n", + " (dffr :type morphism :initarg :dffr :reader dffr1)\n", + " ;; GRound MoDule\n", + " (grmd :type chain-complex :initarg :grmd :reader grmd)\n", + " ;; EFfective HoMology\n", + " (efhm :type homotopy-equivalence :initarg :efhm :reader efhm)\n", + " ;; IDentification NuMber\n", + " (idnm :type fixnum :initform (incf *idnm-counter*) :reader idnm)\n", + " ;; ORiGiN\n", + " (orgn :type list :initarg :orgn :reader orgn)))\n", + "```\n", + "\n", + "This class has 8 slots:\n", + "\n", + "1. `cmpr`, a comparison function or method for generators with a range in the set `[:less, :equal, :greater]`. It is very important to note that the generators to be compared are assumed to be of the *same degree*, i.e. they must belong to the same group $C_p$. As an exception with the general policy of the software, this degree is not explicitly precised. The implementor has chosen to avoid additional tests because in real problems the program spends a lot of time comparing generators.\n", + "2. `basis`, a lisp function giving the distinguished **ordered** basis of the free $\\mathbb{Z}$-modules ($C_p$). (Recall that in the software, only free chain complexes are considered.) When some components of the chain complex are not finitely generated, we say that the chain complex is *locally effective*. In this case the value of this slot must be the keyword `locally-effective`.\n", + "3. `bsgn`, a lisp object of any type representing a distinguished generator in dimension 0, the base generator. \n", + "4. `dffr`, the differential morphism, instance of the class `MORPHISM`, defined hereafter. The pure lisp function corresponding to the differential homomorphism for each $p$ ($d_p : C_p \\rightarrow C_{p-1}$) is defined in the instance morphism object and not directly in the instance chain complex object.\n", + "5. `idnm`, an integer, number plate for this object. This is generated by the system in a sequential way, each time a new `Kenzo` object is created.\n", + "6. `orgn`, a list containing a comment to recall to the user the *origin* of the object. This comment must be chosen with care because, when the user creates a new chain complex instance, the system `Kenzo` uses the comment list information to search in a specific list (here `*chcm-list*`) if the object has not been already built. So, one avoids the duplication of instances of the same object.\n", + "\n", + "The two slots `grmd` and `efhm` will be explained later. The accessors of the slots are the functions whose name appears after the specifier `:reader` in the class definition. A printing method has been associated to the class `CHAIN-COMPLEX` and the external representation of a chain complex instance is a string like `[Kn Chain-Complex]`, \n", + "where `n` is the number plate of this `Kenzo` object.\n", + "\n", + "\n", + "### The function `build-chcm`\n", + "\n", + "To facilitate the construction of instances of the class `CHAIN-COMPLEX` and to free the user to call\n", + "the standard constructor `make-instance`, the software provides the function\n", + "\n", + "```lisp\n", + "build-chcm :cmpr cmpr :basis basis :bsgn bsgn :intr-dffr intr-dffr :strt strt :orgn orgn\n", + "```\n", + "\n", + "defined with keyword parameters. The returned value is an instance of the class `CHAIN-COMPLEX`. In particular, this function frees the user to build himself the instance of the class `MORPHISM` corresponding to the differential homomorphism. The keyword arguments of `build-chcm` are:\n", + "\n", + "- `cmpr`, the comparison function for generators.\n", + "- `basis`, the function defining the distinguished basis of the free $\\mathbb{Z}$-modules $C_p$ or the keyword `:locally-effective`.\n", + "- `bsgn`, a generator, the base point of the underlying set.\n", + "- `intr-dffr`, a **lisp function** defining the differential homomorphism for each $p$ ($d_p : C_p \\rightarrow C_{p-1}$).\n", + "- `strt`, one of the two values: `:gnrt` or `:cmbn`, defining the mapping *strategy* of the differential homomorphism, either by generator or by combination. The default is `:gnrt`. The real connection between the arguments `intr-dffr` and `strt`will be detailed hereafter through typical examples. The general idea is the following: if the strategy is `:gnrt`, the `:intr-dffr` argument function uses two arguments, namely a degree and a generator of this degree and computes the boundary combination of this generator. If the strategy is `:cmbn`, the `:intr-dffr` argument function uses a combination as argument and computes the boundary combination of this argument. We recall that a combination contains its own degree.\n", + "- `orgn`, a list containing a relevant and carefully chosen comment about the `origin` of the chain complex. If, during a Lisp session, the user wishes to modify any slot of an existing chain complex, by calling again `build-chcm`, he must change also the comment, otherwise the new version of the object will not be created. This remark is valid for any kind of instantiation of `Kenzo` objects. For avoiding such a constraint, one may use the function `cat-init`, before the redefinition.\n", + "\n", + "After creation of an instance of chain complex, the function `build-chcm` pushes this\n", + "object in the list of already created chain complexes `*chcm-list*`.\n", + "\n", + "#### A first example of a chain complex\n", + "\n", + "Let us consider our small example *diabolo*. We shall give the same name to the corresponding chain complex instance. Let us define, one by one, the values of the key parameters, though it is possible to put them directly in the `build-chcm` call. First, the function `s-cmpr`, already seen above, is the natural choice to compare generators, which are here, lisp symbols:" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -868,7 +699,7 @@ "#" ] }, - "execution_count": 30, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -877,9 +708,16 @@ "(def diabolo-cmpr #'s-cmpr)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function for the basis consists in enumerating the distinguished basis as lisp lists according to the degree:" + ] + }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -887,10 +725,10 @@ { "data": { "text/plain": [ - "#" + "#" ] }, - "execution_count": 31, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -904,9 +742,16 @@ " (otherwise nil))))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the base point, we may choose any vertex:" + ] + }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -917,7 +762,7 @@ "S0" ] }, - "execution_count": 32, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -926,9 +771,20 @@ "(def diabolo-bspn 's0)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The lisp function for the differential homomorphism, also called boundary homomorphism, computes the boundary of each generator, in this case, according to the classical (simplicial) rule:\n", + "\n", + "$$ {\\bf d}[{s_0s_1\\ldots s_n}] = \\sum_{i=0}^n{(-1)^is_0s_1\\ldots\\widehat{s_i}\\ldots s_n}.$$\n", + "\n", + "It must be noted that our differential uses a predefined choice for the order of the vertices." + ] + }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -936,10 +792,10 @@ { "data": { "text/plain": [ - "#" + "#" ] }, - "execution_count": 33, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -964,9 +820,16 @@ " (otherwise (error \"Bad generator for complex diabolo\")))))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The strategy is by generator and the comment recalls the name of the problem:" + ] + }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -977,7 +840,7 @@ ":GNRT" ] }, - "execution_count": 34, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -988,7 +851,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -999,7 +862,7 @@ "(DIABOLO-FOR-EXAMPLE)" ] }, - "execution_count": 35, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1009,59 +872,15 @@ ] }, { - "cell_type": "code", - "execution_count": 36, - "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 which is the copy of a Lisp statement, in principle the\n", - " statement which was at the origin of the creation of this Kenzo\n", - " object. A caching process, using this slot, prevents the creation\n", - " of multiple copies of the same mathematical object, which is\n", - " important for efficiency. It is used also for debugging and\n", - " analyzing the program.\n", - "\n", - "Use this function instead of creating instances via the standard constructor\n", - "MAKE-INSTANCE.\n", - "------------------------------------------------------------------------------\"" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "(documentation 'build-chcm 'function)" + "The effective call to `build-chcm` is now reduced to:" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1072,7 +891,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 37, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1083,9 +902,40 @@ " :strt diabolo-strt :orgn diabolo-orgn))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The value of the symbol `diabolo` is the `CHAIN-COMPLEX` instance which is here the first created `Kenzo` object. The string `[K1 Chain-Complex]` is printed by the printing method associated to the class.\n", + "\n", + "### Simple functions handling chain complexes\n", + "\n", + "> *Function* `(cat-init)`\n", + ">> Clear among others, the list `*chcm-list*`, list of user created chain complexes and reset the global counter to 1. The existing objects and in particular here the chain complexes, are not destroyed but they will not enter any more in account during the search process for duplicated objects. This remark is general for the other types of objects saved in specific lists. \n", + "\n", + "> *Functions* `(chcm n)`\n", + ">> Return from the list `*chcm-list*` the chain complex instance whose the Kenzo identification is `n`; if it does not exist, return `NIL`.\n", + "\n", + "> *Macro* `(cmpr object item1 item2)`\n", + ">> Apply the comparison function associated to the chain complex `object` to the two generators `item1` and `item2`.\n", + "\n", + "> *Macro* `(basis object n :dgnr)\n", + ">> With only one argument (`object`), get the function attached to the slot `basis` of the chain complex object. With two arguments, get the distinguished basis of the group of degree `n` in the chain complex `object`. If the chain complex is locally effective, this function returns an error because, in some degrees, the corresponding set of generators is probably infinite. With a third argument, the keyword `:dgnr`, get also the *degenerate* elements of the basis in degree `n`.\n", + "\n", + "> *Macro* `(dffr chcm &rest)`\n", + ">> Versatile macro to apply the differential morphism of the chain complex `chcm` either to a combination or a generator with a degree, respectively `(dffr chcm cmbn)` or `(dffr chcm degr gnrt)`. The macro `?`, described later, may be used for the same purpose.\n", + "\n", + "> *Function* `(z-chcm)`\n", + ">> Build the unit chain complex (see hereafter).\n", + "\n", + "#### Examples\n", + "\n", + "Let us apply some accessors functions and the simple functions above to the chain complex `diabolo`. First, we see that the list `*chcm-list*` contains only one element, namely the chain complex just created." + ] + }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -1093,26 +943,21 @@ { "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", - "------------------------------------------------------------------------------\"" + "([K1 Chain-Complex])" ] }, - "execution_count": 38, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(documentation 'chcm 'function)" + "*chcm-list*" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -1123,7 +968,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 39, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1134,7 +979,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -1145,7 +990,7 @@ "(DIABOLO-FOR-EXAMPLE)" ] }, - "execution_count": 40, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1156,7 +1001,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -1167,7 +1012,7 @@ "1" ] }, - "execution_count": 41, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1178,7 +1023,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1189,7 +1034,7 @@ "(S0 S1 S2 S3 S4 S5)" ] }, - "execution_count": 42, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1200,7 +1045,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1211,7 +1056,7 @@ "(S01 S02 S12 S23 S34 S35 S45)" ] }, - "execution_count": 43, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1222,7 +1067,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1233,7 +1078,7 @@ "(S345)" ] }, - "execution_count": 44, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1244,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -1255,7 +1100,7 @@ "NIL" ] }, - "execution_count": 45, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1266,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1282,7 +1127,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 46, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1293,7 +1138,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1306,7 +1151,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 47, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1319,12 +1164,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### An important trivial case: the unit chain complex, $\\mathbb{Z}$" + "#### An important trivial case: the unit chain complex, $\\mathbb{Z}$\n", + "\n", + "The unit chain complex, has a unique non null component, namely a $\\mathbb{Z}$-module of degree 0 generated by a unique generator, called here `:Z-gnrt`. It is defined by the following call to `build-chcm`:" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1335,7 +1182,7 @@ "[K3 Chain-Complex]" ] }, - "execution_count": 48, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1358,41 +1205,35 @@ ] }, { - "cell_type": "code", - "execution_count": 49, + "cell_type": "markdown", "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "\"--------------------------------------------------------------[function-doc]\n", - "Z-CHCM\n", - "Args: ()\n", - "Build the unit chain complex.\n", - "------------------------------------------------------------------------------\"" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "(documentation 'z-chcm 'function)" + "In this definition,\n", + "\n", + "1. The `:cmpr` keyword argument is a function returning `:equal` on any pair on generators (because there is a unique generator!).\n", + "2. The `:basis` keyword argument is a lisp function returning the null basis (the constant `+empty-list+ = ()`) for $p \\not= 0$ and the list `(:Z-gnrt)`, for $p=0$.\n", + "3. The base generator is of course `Z-gnrt`.\n", + "4. The `:intr-dffr` keyword argument is a lisp function defining the differential which, to any combination of degre $p$ of the chain complex, returns a *null combination* of degree $p-1$. This simple lisp function is also provided in `Kenzo` and is called `zero-intr-dffr`.\n", + "5. The `:strt` keyword argument is the combination strategy (`:cmbn`).\n", + "6. The `:orgn` keyword argument is the comment list `(zcc-constant)`.\n", + "\n", + "In the software `Kenzo`, the chain complex instance `ZCC` may be built, when needed, by the lisp statement: `(z-chcm)`. This statement may be used freely each time one needs this chain complex, since the system recognizes if it has already been created." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### The chain complex $\\texttt{circle}$" + "#### The chain complex `circle`\n", + "\n", + "On the model of the previous chain complex, one may define a function `circle` for building a chain complex having the same homology as the circle." ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1402,7 +1243,7 @@ "output_type": "stream", "text": [ "REDEFINITION-WITH-DEFUN: \n", - " #\n" + " #\n" ] }, { @@ -1411,7 +1252,7 @@ "CIRCLE" ] }, - "execution_count": 50, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1442,7 +1283,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1501,7 +1342,7 @@ "-----------------------------------------------------------------------------\"" ] }, - "execution_count": 51, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1519,7 +1360,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1557,7 +1398,7 @@ "------------------------------------------------------------------------------\"" ] }, - "execution_count": 52, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1575,7 +1416,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1594,7 +1435,7 @@ "NIL" ] }, - "execution_count": 53, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1605,7 +1446,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -1616,7 +1457,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 54, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1627,7 +1468,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -1638,7 +1479,7 @@ "[K3 Cohomology-Class on K1 of degree 1]" ] }, - "execution_count": 55, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1655,7 +1496,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 44, "metadata": { "collapsed": false }, @@ -1666,7 +1507,7 @@ "[K4 Cohomology-Class on K1 of degree 0]" ] }, - "execution_count": 56, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1691,7 +1532,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 45, "metadata": { "collapsed": false }, @@ -1699,10 +1540,10 @@ { "data": { "text/plain": [ - "#" + "#" ] }, - "execution_count": 57, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1716,7 +1557,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -1727,7 +1568,7 @@ "[K5 Chain-Complex]" ] }, - "execution_count": 58, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1743,7 +1584,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -1754,7 +1595,7 @@ "[K7 Morphism (degree 1): K5 -> K5]" ] }, - "execution_count": 59, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1768,7 +1609,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -1779,7 +1620,7 @@ "[K8 Morphism (degree -1): K5 -> K5]" ] }, - "execution_count": 60, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1793,7 +1634,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 49, "metadata": { "collapsed": false }, @@ -1807,7 +1648,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 61, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1818,7 +1659,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 50, "metadata": { "collapsed": false }, @@ -1831,7 +1672,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 62, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1842,7 +1683,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -1858,7 +1699,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 63, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1869,7 +1710,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -1884,7 +1725,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 64, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1895,7 +1736,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -1908,7 +1749,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 65, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -1919,7 +1760,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 54, "metadata": { "collapsed": false }, @@ -1933,7 +1774,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 66, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -1944,7 +1785,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -1958,7 +1799,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 67, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1969,7 +1810,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 56, "metadata": { "collapsed": false }, @@ -1983,7 +1824,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 68, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -1994,7 +1835,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 57, "metadata": { "collapsed": false }, @@ -2011,7 +1852,7 @@ "------------------------------------------------------------------------------\n" ] }, - "execution_count": 69, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -2020,6 +1861,290 @@ "(def comb1 (cmbn 1 1 10 2 11 3 12 4 13))" ] }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K9 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def identity? (cmps upper-shift lower-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(degr identity?)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "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": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(? identity? comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(2cmbn-sbtr (cmpr ccn) comb1 *)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K10 Morphism (degree 2): K5 -> K5]" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def upper-shift2 (cmps upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(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": [ + "(? upper-shift2 comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K11 Morphism (degree 1): K5 -> K5]" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def twice-up-shift (add upper-shift upper-shift))" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(degr twice-up-shift)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "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": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(? twice-up-shift comb1)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K12 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def up-d (cmps upper-shift (dffr1 ccn)))" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[K13 Morphism (degree 0): K5 -> K5]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(def d-up (cmps (dffr1 ccn) upper-shift))" + ] + }, { "cell_type": "code", "execution_count": 70, @@ -2030,7 +2155,10 @@ { "data": { "text/plain": [ - "[K9 Morphism (degree 0): K5 -> K5]" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 11>\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 70, @@ -2039,7 +2167,7 @@ } ], "source": [ - "(def identity? (cmps upper-shift lower-shift))" + "(? up-d 1 11)" ] }, { @@ -2052,7 +2180,9 @@ { "data": { "text/plain": [ - "0" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 71, @@ -2061,7 +2191,7 @@ } ], "source": [ - "(degr identity?)" + "(? d-up 1 11)" ] }, { @@ -2080,6 +2210,8 @@ "<2 * 11>\n", "<3 * 12>\n", "<4 * 13>\n", + "<5 * 14>\n", + "<6 * 15>\n", "------------------------------------------------------------------------------\n" ] }, @@ -2089,7 +2221,7 @@ } ], "source": [ - "(? identity? comb1)" + "(def comb3 (cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" ] }, { @@ -2104,6 +2236,9 @@ "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", + "<2 * 11>\n", + "<4 * 13>\n", + "<6 * 15>\n", "------------------------------------------------------------------------------\n" ] }, @@ -2113,7 +2248,7 @@ } ], "source": [ - "(2cmbn-sbtr (cmpr ccn) comb1 *)" + "(? up-d comb3)" ] }, { @@ -2126,7 +2261,12 @@ { "data": { "text/plain": [ - "[K10 Morphism (degree 2): K5 -> K5]" + "\n", + "----------------------------------------------------------------------{CMBN 1}\n", + "<1 * 10>\n", + "<3 * 12>\n", + "<5 * 14>\n", + "------------------------------------------------------------------------------\n" ] }, "execution_count": 74, @@ -2134,305 +2274,6 @@ "output_type": "execute_result" } ], - "source": [ - "(def upper-shift2 (cmps upper-shift upper-shift))" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(degr upper-shift2)" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "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": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(? upper-shift2 comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K11 Morphism (degree 1): K5 -> K5]" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(def twice-up-shift (add upper-shift upper-shift))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(degr twice-up-shift)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "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": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(? twice-up-shift comb1)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K12 Morphism (degree 0): K5 -> K5]" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(def up-d (cmps upper-shift (dffr1 ccn)))" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[K13 Morphism (degree 0): K5 -> K5]" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(def d-up (cmps (dffr1 ccn) upper-shift))" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 11>\n", - "------------------------------------------------------------------------------\n" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(? up-d 1 11)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "------------------------------------------------------------------------------\n" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(? d-up 1 11)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "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": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(def comb3 (cmbn 1 1 10 2 11 3 12 4 13 5 14 6 15))" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<2 * 11>\n", - "<4 * 13>\n", - "<6 * 15>\n", - "------------------------------------------------------------------------------\n" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(? up-d comb3)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "----------------------------------------------------------------------{CMBN 1}\n", - "<1 * 10>\n", - "<3 * 12>\n", - "<5 * 14>\n", - "------------------------------------------------------------------------------\n" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "(? d-up comb3)" ] @@ -2441,12 +2282,44 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Accessing $\\texttt{Kenzo}$ objects" + "### Accessing `Kenzo` objects\n", + "\n", + "Up to now, we have seen two kinds of `Kenzo` objects stored in specific lists and retrievable by a number, namely the chain complexes and the morphisms. The retrieval functions are specific to the object: `chcm` for a chain complex, `mrph` for a morphism. The same scheme will be applied for others kinds of objects: reductions, homotopy equivalences, \n", + "coalgebras, algebras, simplicial morphism, etc, each having its specific list. But, in fact the numbering is independent\n", + "of the type of the object and is incremented each time an object is created. Three general functions are at the disposal of the user to get information about the `n`-th `Kenzo` object: `K`, `KD`, and `KD2`. They may be useful for debugging purpose.\n", + "\n", + "#### Function `K`" ] }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "K\n", + "Args: (idnm)\n", + "Returns the IDNM-th Kenzo object.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'k 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, "metadata": { "collapsed": false }, @@ -2457,7 +2330,7 @@ "[K1 Chain-Complex]" ] }, - "execution_count": 87, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -2466,9 +2339,43 @@ "(k 1)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Function `KD`" + ] + }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "KD\n", + "Args: (idnm)\n", + "Return the type of Kenzo object number IDNM and print the comment list\n", + "(SLOT :ORGN) of the object.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'kd 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, "metadata": { "collapsed": false }, @@ -2489,7 +2396,7 @@ "NIL" ] }, - "execution_count": 88, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -2500,7 +2407,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 79, "metadata": { "collapsed": false }, @@ -2511,7 +2418,7 @@ "[K3 Cohomology-Class on K1 of degree 1]" ] }, - "execution_count": 89, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -2522,7 +2429,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 80, "metadata": { "collapsed": false }, @@ -2543,7 +2450,7 @@ "NIL" ] }, - "execution_count": 90, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -2554,7 +2461,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 81, "metadata": { "collapsed": false }, @@ -2575,7 +2482,7 @@ "NIL" ] }, - "execution_count": 91, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -2586,7 +2493,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 82, "metadata": { "collapsed": false }, @@ -2607,7 +2514,7 @@ "NIL" ] }, - "execution_count": 92, + "execution_count": 82, "metadata": {}, "output_type": "execute_result" } @@ -2618,7 +2525,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 83, "metadata": { "collapsed": false }, @@ -2639,7 +2546,7 @@ "NIL" ] }, - "execution_count": 93, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } @@ -2648,9 +2555,45 @@ "(kd 9)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Function `KD2`" + ] + }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"--------------------------------------------------------------[function-doc]\n", + "KD2\n", + "Args: (idnm)\n", + "Return the type of Kenzo object number IDNM, print the comment list\n", + "(SLOT :ORGN) of the object and, recursively, return the same information\n", + "for all Kenzo objects of the same type in relation with this object. Return\n", + "the list of object numbers.\n", + "------------------------------------------------------------------------------\"" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(documentation 'kd2 'function)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, "metadata": { "collapsed": false }, @@ -2679,7 +2622,7 @@ "(9 8 7)" ] }, - "execution_count": 94, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" }