kenzo/examples/Chapter1.ipynb
2016-01-10 13:53:28 -05:00

2700 lines
75 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"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"
}
],
"source": [
"(ql:quickload 'kenzo)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"#<PACKAGE \"CAT\">"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(in-package \"CAT\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"---done---"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(cat-init)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Chain Complexes\n",
"\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."
]
},
{
"cell_type": "code",
"execution_count": 4,
"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": [
"#<CL-JUPYTER-USER::PNG-BYTES {10063F7BA3}>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(cl-jupyter-user: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 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",
"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": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"--------------------------------------------------------------[function-doc]\n",
"F-CMPR\n",
"Args: (n1 n2)\n",
"Returns :LESS, :EQUAL, or :GREATER, according to the result of the canonical\n",
"comparison of the integers N1 and N2.\n",
"------------------------------------------------------------------------------\""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 'f-cmpr 'function)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
":LESS"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(f-cmpr 123 789)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"--------------------------------------------------------------[function-doc]\n",
"S-CMPR\n",
"Args: (symbol1 symbol2)\n",
"Returns :LESS, :EQUAL, or :GREATER, according to the result of the Lisp string\n",
"comparison function of the strings (SYMBOL-NAME SYMBOL1) and\n",
"(SYMBOL-NAME SYMBOL2).\n",
"------------------------------------------------------------------------------\""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 's-cmpr 'function)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
":GREATER"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(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))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Functions handling combinations"
]
},
{
"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,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<1 * U>\n",
"<2 * V>\n",
"<3 * W>\n",
"<4 * Z>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def comb1 (cmbn 1 1 'u 2 'v 3 'w 4 'z))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"-----------------------------------------------------------------[macro-doc]\n",
"CMBN-NON-ZERO-P\n",
"Args: (cmbn)\n",
"Tests if the combination CMBN is a non-null combination of any degree.\n",
"------------------------------------------------------------------------------\""
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 'cmbn-non-zero-p 'function)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"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": {
"text/plain": [
"W"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(gnrt term3)"
]
},
{
"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,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<-1 * U>\n",
"<-2 * V>\n",
"<-3 * W>\n",
"<-4 * Z>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def mcomb1 (cmbn-opps comb1))"
]
},
{
"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,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<10 * U>\n",
"<20 * V>\n",
"<30 * W>\n",
"<40 * Z>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def comb2 (n-cmbn 10 comb1))"
]
},
{
"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,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<11 * U>\n",
"<22 * V>\n",
"<33 * W>\n",
"<44 * Z>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def cmb12 (2cmbn-add #'s-cmpr comb1 comb2))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"--------------------------------------------------------------[function-doc]\n",
"2CMBN-SBTR\n",
"Args: (cmpr cmbn1 cmbn2)\n",
"Returns the combination, which is the difference of CMBN1 and CMBN2. The first\n",
"argument, CMPR, must be a function or macro, which is used to compare the\n",
"generators of the combination arguments and to order the terms of the result\n",
"combination.\n",
"------------------------------------------------------------------------------\""
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation '2cmbn-sbtr 'function)"
]
},
{
"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,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<55 * U>\n",
"<110 * V>\n",
"<165 * W>\n",
"<220 * Z>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(ncmbn-add #'s-cmpr\n",
" comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2 comb1 comb2)"
]
},
{
"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": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"#<FUNCTION S-CMPR>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def diabolo-cmpr #'s-cmpr)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"#<FUNCTION (LAMBDA (DMN) :IN \"/home/gerd/git/cl-jupyter/cl-jupyter.lisp\") {1006EEE2CB}>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def diabolo-basis #'(lambda (dmn)\n",
" (case dmn\n",
" (0 '(s0 s1 s2 s3 s4 s5))\n",
" (1 '(s01 s02 s12 s23 s34 s35 s45))\n",
" (2 '(s345))\n",
" (otherwise nil))))"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"S0"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def diabolo-bspn 's0)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"#<FUNCTION (LAMBDA (DMN GNR) :IN \"/home/gerd/git/cl-jupyter/cl-jupyter.lisp\") {10070DAB5B}>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(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\")))))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
":GNRT"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def diabolo-strt :GNRT)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"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": {
"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"
}
],
"source": [
"(documentation 'build-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": [
"(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": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"--------------------------------------------------------------[function-doc]\n",
"CHCM\n",
"Args: (idnm)\n",
"Return from the list *CHCM-LIST* the chain complex instance with Kenzo\n",
"identifier IDNUM or NIL, if it doesn't exist.\n",
"------------------------------------------------------------------------------\""
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 'chcm 'function)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K1 Chain-Complex]"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(chcm 1)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(DIABOLO-FOR-EXAMPLE)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(orgn diabolo)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(idnm diabolo)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(S0 S1 S2 S3 S4 S5)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(basis diabolo 0)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(S01 S02 S12 S23 S34 S35 S45)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(basis diabolo 1)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(S345)"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(basis diabolo 2)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"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": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<1 * S34>\n",
"<-1 * S35>\n",
"<1 * S45>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(dffr diabolo 2 's345)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 0}\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(dffr diabolo *)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### An important trivial case: the unit chain complex, $\\mathbb{Z}$"
]
},
{
"cell_type": "code",
"execution_count": 48,
"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": {
"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)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The chain complex $\\texttt{circle}$"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"REDEFINITION-WITH-DEFUN: \n",
" #<SB-KERNEL:REDEFINITION-WITH-DEFUN {10047995D3}>\n"
]
},
{
"data": {
"text/plain": [
"CIRCLE"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(defun CIRCLE ()\n",
" (the chain-complex\n",
" (build-chcm\n",
" :cmpr #'(lambda (gnrt1 gnrt2)\n",
" (declare (ignore gnrt1 gnrt2))\n",
" (the cmpr :equal))\n",
" :basis #'(lambda (dmns)\n",
" (the list\n",
" (case dmns (0 '(*)) (1 '(s1))\n",
" (otherwise +empty-list+))))\n",
" :bsgn '*\n",
" :intr-dffr #'zero-intr-dffr\n",
" :strt :cmbn\n",
" :orgn '(circle))))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Morphisms"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"----------------------------------------------------------------[class-doc]\n",
"MORPHISM\n",
"Slots: (sorc trgt degr intr strt ???-clnm ?-clnm rslts idnm orgn)\n",
"Intances of this class represent morphisms between chain complexes, and the\n",
"differential homomorphism of a chain complex is treated as a morphism of\n",
"degree -1. The class has 10 slots:\n",
"\n",
"1. SORC, an object of type CHAIN-COMPLEX, the source chain complex of this\n",
" morphism. Its reader function is SORC.\n",
"\n",
"2. TRGT, an object of type CHAIN-COMPLEX, the target chain complex of this\n",
" morphism. Its reader function is TRGT.\n",
"\n",
"3. DEGR, an integer, the degree of the morphism. Its reader function is DEGR.\n",
"\n",
"4. INTR, a Lisp INTeRnal function implementing the morphism, taking account\n",
" of the strategy STRT. Its reader function is INTR.\n",
"\n",
"5. STRT, a symbol, one of :GNRT or :CMBN. Its reader function is STRT.\n",
"\n",
" If this slot is :GNRT, the implementation of INTR is a function:\n",
" (function (degr gnrt) cmbn)\n",
" and for any call of this function, the result is stored in the slot\n",
" RSLTS to avoid later a possibly long recalculation for the same\n",
" argument.\n",
"\n",
" If this slot is :CMBN, the implementation of INTR is a function:\n",
" (function (cmbn) cmbn)\n",
" and the RSLTS slot is not used. Think for example to an identity or\n",
" null function, where storing a result is wasted time.\n",
"\n",
"6. ???-CLNM, an integer updated by the system for internal statistics. Its\n",
" reader function is ???-CLNM.\n",
"\n",
"7. ?-CLNM, another integer maintained by the system for internal pusposes. Its\n",
" reader function is ?-CLNM.\n",
"\n",
"8. RSLTS, an array of length +MAXIMAL-DIMENSION+ reserved by the system for\n",
" caching intermediate results. Its reader function is RSLTS.\n",
"\n",
"9. IDNM, an integer, a system-generated identifier for this object. Its reader\n",
" function is IDNM.\n",
"\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": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 'morphism 'type)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The function $\\texttt{build-mprh}$"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"--------------------------------------------------------------[function-doc]\n",
"BUILD-MRPH\n",
"Args: (&key sorc trgt degr intr strt orgn)\n",
"Returns an instance of the class MORPHISM. The keyword arguments are as\n",
"follows:\n",
"\n",
":SORC SORC, the source object, a CHAIN-COMPLEX type object\n",
"\n",
":TRGT TRGT, the target object, a CHAIN-COMPLEX type object\n",
"\n",
":DEGR DEGR, the degree of the morphism, an integer\n",
"\n",
":INTR INTR, the Lisp function defining the effective mapping\n",
"\n",
":STRT STRT, one of the keywords :GNRT or :CMBN, defining the mapping strategy\n",
" of the differential homomorphism, either by generator or by\n",
" combination. The default is :GNRT\n",
"\n",
":ORGN ORGN, a list 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": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(documentation 'build-mrph 'function)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The differential homomorphism in a chain complex instance"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"---done---"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(cat-init)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K1 Chain-Complex]"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def ZCC (z-chcm))"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K3 Cohomology-Class on K1 of degree 1]"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(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)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Applying morphisms\n",
"\n",
"### Functions defining morphisms"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"#<FUNCTION (LAMBDA (DGR GNR) :IN \"/home/gerd/git/cl-jupyter/cl-jupyter.lisp\") {1004B84A7B}>"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def ccn-boundary #'(lambda (dgr gnr)\n",
" (if (evenp (+ dgr gnr))\n",
" (cmbn (1- dgr) 1 (- gnr 10))\n",
" (cmbn (1- dgr)))))"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K5 Chain-Complex]"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def ccn (build-chcm :cmpr #'f-cmpr\n",
" :basis #'(lambda (n) (<a-b< (* 10 n) (* 10 (1+ n))))\n",
" :bsgn 0\n",
" :intr-dffr ccn-boundary\n",
" :strt :gnrt\n",
" :orgn '(ccn)))"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K7 Morphism (degree 1): K5 -> K5]"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(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)))"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K8 Morphism (degree -1): K5 -> K5]"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(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)))"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<1 * 12>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? ccn 2 22)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"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": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 5}\n",
"<1 * 50>\n",
"<5 * 55>\n",
"<9 * 59>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(def combn (cmbn 5 1 50 5 55 9 59))"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 4}\n",
"<5 * 45>\n",
"<9 * 49>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? ccn combn)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 3}\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? ccn *)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"<1 * 16>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? upper-shift 0 6)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 4}\n",
"<1 * 41>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? lower-shift 5 51)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 3}\n",
"<1 * 31>\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? lower-shift (? lower-shift 5 51))"
]
},
{
"cell_type": "code",
"execution_count": 69,
"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": 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": [
"(degr identity?)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"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": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(? identity? comb1)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\n",
"----------------------------------------------------------------------{CMBN 1}\n",
"------------------------------------------------------------------------------\n"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(2cmbn-sbtr (cmpr ccn) comb1 *)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K10 Morphism (degree 2): K5 -> K5]"
]
},
"execution_count": 74,
"metadata": {},
"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)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Accessing $\\texttt{Kenzo}$ objects"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K1 Chain-Complex]"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(k 1)"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K1 Chain-Complex]\n",
" Origin: (Z-CHCM)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd 1)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[K3 Cohomology-Class on K1 of degree 1]"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(k 3)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K3 Cohomology-Class on K1 of degree 1]\n",
" Origin: (ZERO MORPHISM ON ZCC)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd 3)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K8 Morphism (degree -1): K5 -> K5]\n",
" Origin: (CCN SHIFT -10)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd 8)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K5 Chain-Complex]\n",
" Origin: (CCN)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd 5)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K9 Morphism (degree 0): K5 -> K5]\n",
" Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"NIL"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd 9)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Object: [K9 Morphism (degree 0): K5 -> K5]\n",
" Origin: (2MRPH-CMPS [K7 Morphism (degree 1): K5 -> K5] [K8 Morphism (degree -1): K5 -> K5] GNRT)\n",
"\n",
"\n",
"Object: [K8 Morphism (degree -1): K5 -> K5]\n",
" Origin: (CCN SHIFT -10)\n",
"\n",
"\n",
"Object: [K7 Morphism (degree 1): K5 -> K5]\n",
" Origin: (CCN SHIFT 10)\n",
"\n"
]
},
{
"data": {
"text/plain": [
"(9 8 7)"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(kd2 9)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "SBCL Lisp",
"language": "lisp",
"name": "lisp"
},
"language_info": {
"codemirror_mode": "text/x-common-lisp",
"mimetype": "text/x-common-lisp",
"name": "common-lisp",
"pygments_lexer": "common-lisp",
"version": "X3J13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}