5869 lines
353 KiB
Plaintext
5869 lines
353 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Simplicial Sets\n",
|
|
"\n",
|
|
"## Introduction\n",
|
|
"\n",
|
|
"A *simplicial set* (**Hilton & Wylie**, *Homology theory*, Cambridge University Press, 1967) $K$ is a union $K={\\displaystyle{\\bigcup_{q\\ge 0}{K^q}}}$, where the $K^q$ are disjoints sets, together with functions\n",
|
|
"\n",
|
|
"$$\\partial_i^q: K^q \\longrightarrow K^{q-1},\\quad q>0,\\quad i=0,\\ldots , q,$$\n",
|
|
"\n",
|
|
"$$\\eta_i^q: K^q \\longrightarrow K^{q+1},\\quad q\\ge 0,\\quad i=0,\\ldots ,q,$$\n",
|
|
"\n",
|
|
"subject to the relations\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\begin{aligned}\n",
|
|
"\\partial_i^{q-1}\\partial_j^q & = & \\partial_{j-1}^{q-1}\\partial_i^q, & i < j \\cr\n",
|
|
"\\eta_i^{q+1}\\eta_j^q & = & \\eta_j^{q+1}\\eta_{i-1}^q, & i > j \\cr\n",
|
|
"\\partial_i^{q+1}\\eta_j^q & = & \\eta_{j-1}^{q-1}\\partial_i^q, & i < j \\cr\n",
|
|
"\\partial_i^{q+1}\\eta_i^q & = & \\partial_{i+1}^{q+1}\\eta_i^q & Identity, \\cr\n",
|
|
"\\partial_i^{q+1}\\eta_j^q & = & \\eta_j^{q-1}\\partial_{i-1}^q, & i > j+1.\\cr \n",
|
|
"\\end{aligned}\n",
|
|
"$$\n",
|
|
"\n",
|
|
"An element of $K^q$ is an (*abstract*) $q$-simplex of $K$ and the functions $\\partial$ and $\\eta$ are respectively the *face operators* and the *degeneracy operators*. Formally, their action on a simplex is very simple. For instance, if a $q$--simplex is an ordered set of vertices, like $\\lbrace v_0, v_1, \\ldots,v_i,\\ldots, v_q \\rbrace$, the rules are the following (we omit the indication of the dimension of the simplex):\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\begin{aligned}\n",
|
|
"\\partial_i \\lbrace v_0, v_1, \\ldots,v_i,\\ldots, v_q \\rbrace & = &\n",
|
|
" \\lbrace v_0, v_1, \\ldots,{\\bf v_{i-1}}, {\\bf v_{i+1}},\\ldots, v_q \\rbrace, \\\\\n",
|
|
"\\eta_i \\lbrace v_0, v_1, \\ldots,v_i,\\ldots, v_q \\rbrace & = &\n",
|
|
" \\lbrace v_0, v_1, \\ldots,{\\bf v_i},{\\bf v_i},\\ldots, v_q \\rbrace.\n",
|
|
"\\end{aligned}\n",
|
|
"$$\n",
|
|
"\n",
|
|
"The operators $\\partial_i^q$ will be used hereafter to define the boundary operator $d^q$ for the $q$-component of the associated chain complex:\n",
|
|
"\n",
|
|
"$$d^q = \\sum_{i=0}^q { (-1)^i \\partial_i^q}.$$\n",
|
|
"\n",
|
|
"The image of a simplex under some $\\eta$ is called *degenerate*, because it\n",
|
|
"is not directly implied in the realization of the simplicial set.\n",
|
|
"\n",
|
|
"### Example\n",
|
|
"\n",
|
|
"Let us take the small example *diabolo* from the chapter 1. For a better understanding, it is convenient to use a list representation for the simplices. So the set $K^0$ of 0-simplices (vertices) is:\n",
|
|
"\n",
|
|
"$$\\lbrace (0), (1),\\ldots (5) \\rbrace.$$\n",
|
|
"\n",
|
|
"The set $K^1$ of 1-simplices contains the set of regular simplices:\n",
|
|
"\n",
|
|
"$$\\lbrace (0\\ 1), (0\\ 2), (1\\ 2), (2\\ 3), (3\\ 4), (3\\ 5), (4\\ 5) \\rbrace,$$\n",
|
|
"\n",
|
|
"but also the degenerate 1-simplices:\n",
|
|
"\n",
|
|
"$$\\lbrace (0\\ 0), (1\\ 1), (2\\ 2),\\ldots,(5 \\ 5) \\rbrace.$$\n",
|
|
"\n",
|
|
"The set $K^2$ of 2-simplices contains the regular singleton: \n",
|
|
"\n",
|
|
"$$\\lbrace ( 3\\ 4\\ 5) \\rbrace$$\n",
|
|
"\n",
|
|
"but also the degenerate 2-simplices:\n",
|
|
"\n",
|
|
"$$\\lbrace (0\\ 0\\ 0), \\ldots, (5\\ 5\\ 5), (0\\ 0\\ 1), (0\\ 0\\ 2), (1\\ 1\\ 2),\\ldots, (4\\ 5\\ 5)\\rbrace.$$\n",
|
|
"\n",
|
|
"The sets $K^q$ ($q >2$) contain only degenerate simplices. With this naming of the elements of a $q$-simplex, the action of $\\partial$ and $\\eta$ is now clear. For instance\n",
|
|
"\n",
|
|
"$$\\partial_0 (0\\ 1) = (1),\\ \\partial_1 (0\\ 1) = (0),$$\n",
|
|
"\n",
|
|
"$$\\eta_0 (0\\ 1) = (0\\ 0\\ 1),\\ \n",
|
|
" \\eta_1 (1\\ 2)= (1\\ 2\\ 2),\\ \\eta_2(3\\ 4\\ 5)=(3\\ 4\\ 5\\ 5). $$\n",
|
|
"\n",
|
|
"By the way, we see that a simplex is non-degenerate if the list is strictly increasing.\n",
|
|
"\n",
|
|
"## Notion of abstract simplex in this Lisp implementation\n",
|
|
"\n",
|
|
"In this implementation, on account of the essential following property: *any simplex\n",
|
|
"may be expressed in an unique way as a possibly iterated degeneracy of a non--degenerate simplex*, we call an **abstract simplex**, (in short **absm**), a pair consisting of:\n",
|
|
"- a (possibly iterated) degeneracy operator,\n",
|
|
"- a \"geometric\" simplex, i.e. a non--degenerate simplex.\n",
|
|
"For instance, if $\\sigma$ is a non-degenerate simplex, and $\\sigma'$ is the degenerate simplex $\\eta_3\\eta_1\\sigma$, the corresponding abstract simplices are respectively $\\lbrace \\emptyset, \\sigma \\rbrace$ and $\\lbrace \\eta_3\\eta_1, \\sigma \\rbrace$.\n",
|
|
"\n",
|
|
"An abstract simplex is represented internally in the system by the following lisp object:\n",
|
|
"$$\\texttt{(:absm}\\quad\\mathit{dgop}\\quad\\texttt{.}\\quad\\mathit{gmsm}\\texttt{)}$$\n",
|
|
"where,\n",
|
|
"1. *dgop* is a non-negative integer coding a *strictly decreasing integer list*. This strictly decreasing list of integers represents a sequence of $\\eta$ operators and is coded as a **unique** integer with the following convention: a number $i$ in the sequence is the $i+1$--th binary bit of a machine word. The null list is coded as the number 0 whereas the list `(0)`, i.e. the $\\eta_0$ operator, is coded as the integer `1`, etc. Two functions are provided to help the user for the transformation in both directions.\n",
|
|
"2. *gmsm* is a geometric simplex, i.e. any kind lisp object modelizing a non-degenerate simplex. For practical reason, a type `GMSM`, (any kind of lisp object), has been defined.\n",
|
|
"\n",
|
|
"The simplest constructor is the macro `(absm (dgop-ext-int` *dgop-list*`)` *gmsm*`)`, where *dgop-list* is a strictly decreasing integer list. A type `ABSM` has been defined. The associated printing method prints such an object under the form:\n",
|
|
"$$\\texttt{<AbSm}\\quad\\mathit{ext-dgop}\\quad\\mathit{gmsm}{\\texttt >}$$\n",
|
|
"where *ext-dgop* shows clearly the sequence of the operators $\\eta_i$ (see the examples). The accessor functions for the components are the macros `dgop` and `gmsm`.\n",
|
|
"\n",
|
|
"### Simple functions for abstract simplices\n",
|
|
"\n",
|
|
"`dgop-ext-int` *ext-dgop* *[Function]*\n",
|
|
">Code on an integer the valid list representing the degeneracy operator *ext-dgop*.\n",
|
|
"\n",
|
|
"`dgop-int-ext` *dgop* *[Function]*\n",
|
|
"> Give the list representing a degeneracy operator from the integer *dgop*.\n",
|
|
"\n",
|
|
"`absm` *dgop gmsm* *[Macro]*\n",
|
|
"> Create an abstract simplex, using directly the coded representation, *dgop*, of the degeneracy operator.\n",
|
|
"\n",
|
|
"`dgop` *absm* *[Macro]*\n",
|
|
"> Get the integer code of the internal representation of the degeneracy operator of the abstract simplex *absm*.\n",
|
|
" \n",
|
|
"`gmsm` *absm* *[Macro]*\n",
|
|
"> Get the basic non-degenerate simplex part of the abstract simplex `absm`.\n",
|
|
"\n",
|
|
"`absm-p` *object* *[Predicate]*\n",
|
|
">Test if *object* is an abstract simplex.\n",
|
|
"\n",
|
|
"### Examples\n",
|
|
"\n",
|
|
"Let us suppose that `:sigma` \"is\" a geometric simplex, we may construct the abstract simplices of the beginning of the section."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"1"
|
|
]
|
|
},
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgop-ext-int '(0))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"17"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgop-ext-int '(4 0))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(5 4 3 2 1 0)"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgop-int-ext 63)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-ERROR: \n",
|
|
"In DGOP-EXT-INT, the external dgop (2 2) is not decreasing.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgop-ext-int '(2 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - SIGMA>"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def asigma (absm 0 :sigma))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 3-1 SIGMA>"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def asigma-prime (absm (dgop-ext-int '(3 1)) :sigma))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"T"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(absm-p asigma-prime)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The following command gives the sixth degeneracy of the vertex 0 represented as `(0)`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 5-4-3-2-1-0 (0)>"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def deg-6 (absm (dgop-ext-int '(5 4 3 2 1 0)) '(0)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"63"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgop deg-6)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(0)"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(gmsm deg-6)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Representation of a simplicial set\n",
|
|
"\n",
|
|
"A simplicial set is implemented as an instance of the class `SIMPLICIAL-SET`, subclass of the class `COALGEBRA`.\n",
|
|
"\n",
|
|
"```commonlisp\n",
|
|
"(DEFCLASS SIMPLICIAL-SET (coalgebra)\n",
|
|
" ((face :type face :initarg :face :reader face1)))\n",
|
|
"\n",
|
|
"```\n",
|
|
"\n",
|
|
"This class inherits also from the class `CHAIN-COMPLEX` and has one slot of its own:\n",
|
|
"\n",
|
|
">`face`, a lisp function computing any face of any geometric simplex of the simplicial set.\n",
|
|
"This is a function with 3 arguments: a face index (a non--negative integer, `indx`), a simplex dimension (a positive integer, `dmns`) and a geometric simplex (`gmsm`), the $indx$-th face of which is looked for. Whatever the face simplex is, degenerate or not, the simplex returned by this function must be an **abstract** simplex, i.e. an `ABSM` object.\n",
|
|
"\n",
|
|
"A printing method has been associated to the class `SIMPLICIAL-SET` and the external representation of an instance is a string like `[K`*n* `Simplicial-Set]`, where $n$ is the number plate of the Kenzo object.\n",
|
|
"\n",
|
|
"## The function `build-smst`\n",
|
|
"\n",
|
|
"To facilitate the construction of instances of the class `SIMPLICIAL-SET`, the software `Kenzo` provides the function `build-smst` defined with keyword parameters:\n",
|
|
"\n",
|
|
"`build-smst`\n",
|
|
">`:cmpr` *cmpr* `:basis` *basis* `:bspn` *bspn* `:face` *face* \n",
|
|
"`:face*` *face$*$* `:intr-bndr` *intr-bndr* `:bndr-strt` *bndr-strt* \n",
|
|
"`:intr-dgnl` *intr-dgnl* `:dgnl-strt` *dgnl-strt* `:orgn` *orgn*\n",
|
|
"\n",
|
|
"The returned value is an object of type `SIMPLICIAL-SET`. This function assigns an identification number `idnm` to the Kenzo object instance in a sequential way and pushes this object on the list of already created simplicial sets instances, `*smst-list*`.\n",
|
|
"\n",
|
|
"The keywords parameters are:\n",
|
|
"- *cmpr*, a comparison function for generators. \n",
|
|
"- *basis*, if the simplicial set is effective, this argument must be the lisp function returning the list of non-degenerate simplices of the simplicial set, in a given dimension; if the simplicial set is locally effective, this argument must be the keyword `:locally-effective`.\n",
|
|
"- *bspn*, the lisp representation of the base point (an item of type `GMSM`). This is in fact the slot `bsgn` of the associated chain complex.\n",
|
|
"- *face*, a lisp function for the face operators.\n",
|
|
"- $face*$, a lisp function for the face operators, returning the symbol `:degenerate` if the corresponding face is degenerate.\n",
|
|
"- *intr-bndr*, a lisp function for the differential of the associated chain complex.\n",
|
|
"- *bndr-strt*, the strategy (`:cmbn` or `:gnrt`) for the function *intr-bndr*.\n",
|
|
"- *intr-dgnl*, a lisp function for the coproduct of the coalgebra.\n",
|
|
"- *dngl-strt*, the strategy (`:cmbn` or `:gnrt`) for the function *intr-dgnl*.\n",
|
|
"- *org*, the comment list, adequately chosen.\n",
|
|
"\n",
|
|
"The three arguments $face*$, *intr-bndr* and *intr-dgnl* are not mandatory. Only the function *face* is necessary to define precisely the simplicial set. From the function *face*, we know that we may construct:\n",
|
|
"- The differential for the associated chain complex, according to the formula:\n",
|
|
"$$d^q = \\sum_{i=0}^q { (-1)^i \\partial_i^q}.$$\n",
|
|
"- The coproduct of the underlying coalgebra (the Alexander-Whitney diagonal, $\\Delta$) according to the formula:\n",
|
|
"$$\\Delta(\\sigma)= \\sum_{i=0}^{n}{{\\tilde{\\delta}}^{(i)}\\sigma \\otimes \\delta_0^{(i)} \\sigma},$$\n",
|
|
"where the power $(i)$ denotes the $i$-th composition of the operator and $\\tilde{\\delta}$ is the\n",
|
|
"*last face* operator, so that\n",
|
|
"$${\\tilde{\\delta}}^{(i)}=\\delta_{n-i+1}\\circ \\cdots \\circ \\delta_{n-1}\\circ \\delta_n.$$\n",
|
|
"\n",
|
|
"But, as the differential ignore degenerate faces, it may be interesting for the user to provide a face function, weaker than the function *face* but sufficient and more efficient to compute the boundary of a simplex. It is the raison d'etre of the parameter $face*$ which may be used as an alternative to *face*. In both cases, the strategy is set to `:gnrt` by the system. It may also arrive that the user knows a particularly simple form for the differential, he may then use the parameter *intr-bndr*. In the computation of differentials in the associated chain complex, this function will be used instead of the canonical differential computed from the face function. In this last case, the user is required to provide the strategy. Same remark for the parameter *intr-dgnl*.\n",
|
|
"\n",
|
|
"### Examples\n",
|
|
"\n",
|
|
"As first example, we give the construction of the simplicial set $\\Delta^n$ corresponding to the \n",
|
|
"standard $n$-simplex. This is given only as example. The program `Kenzo` provides a function\n",
|
|
"for the same purpose which will be described later. For every simplex, we shall use a list representation as in our first example `diabolo`. The various keyword arguments for the call to `build-smst`, are:\n",
|
|
"1. *bspn*, the list `(0)`, i.e. the representation of the vertex 0.\n",
|
|
"2. *cmpr*, the lisp function `#'l-cmpr`, since this function is adequate to compare the lists representing the simplices.\n",
|
|
"3. *basis*, the lisp function returning the list of all possible non-degenerate simplices in some dimension. Here, this is the combinatory function returning the set of all the lists of $p+1$ objects taken among $n+1$. Such a function is for instance the function (`delta-inj` *p n*) whose definition is given hereafter. So, the `:basis` keyword argument is simply:\n",
|
|
"``lisp\n",
|
|
"#'(lambda(dmn) (delta-inj dmn n))\n",
|
|
"``.\n",
|
|
"Note that here, `n` is a global parameter.\n",
|
|
"4. *face*, the lisp function for the face operators (`face-delta-n`). It consists simply in removing the $i$-th element of the list describing a simplex ($i$ starting at 0).\n",
|
|
"5. *org* will be a comment."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"DELTA-INJ"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(defun delta-inj (m n)\n",
|
|
" (declare (type fixnum m n))\n",
|
|
" (cond ((> m n) +empty-list+)\n",
|
|
" ((zerop m) (mapcar #'list (<a-b> 0 n)))\n",
|
|
" (t (mapcan #'(lambda (list)\n",
|
|
" (declare (type list list))\n",
|
|
" (mapcar #'(lambda (k)\n",
|
|
" (declare (type fixnum k))\n",
|
|
" (cons k list))\n",
|
|
" (<a-b< 0 (first list))))\n",
|
|
" (delta-inj (1- m) n)))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0) (1) (2) (3))"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(delta-inj 0 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0 1) (0 2) (1 2) (0 3) (1 3) (2 3))"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(delta-inj 1 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0 1 2 3))"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(delta-inj 3 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-STYLE-WARNING: \n",
|
|
" #<SB-INT:SIMPLE-STYLE-WARNING \"undefined ~(~A~): ~S\" {10057A8B93}>\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"#<FUNCTION (LAMBDA (I DMN GSM) :IN \"/root/cl-jupyter-master/cl-jupyter.lisp\") {1005798B3B}>"
|
|
]
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def face-delta-n\n",
|
|
" #'(lambda (i dmn gsm)\n",
|
|
" (declare (ignore dmn))\n",
|
|
" (absm 0 (append (subseq gsm 0 i)\n",
|
|
" (subseq gsm (1+ i))) )))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"To create $\\Delta^n$ for any order $n$, we embed the call of `build-smst` in a function having $n$ as parameter."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"DELTA-N"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(defun delta-n(n)\n",
|
|
" (declare (type fixnum n))\n",
|
|
" (build-smst :cmpr #'l-cmpr\n",
|
|
" :basis #'(lambda(dmn)(delta-inj dmn n))\n",
|
|
" :bspn '(0)\n",
|
|
" :face face-delta-n\n",
|
|
" :orgn `(delta-n ,n)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K1 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def delta4 (delta-n 4))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(0)"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(bspn delta4)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0) (1) (2) (3) (4))"
|
|
]
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis delta4 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0 1 2 3) (0 1 2 4) (0 1 3 4) (0 2 3 4) (1 2 3 4))"
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis delta4 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"A second example is the contruction of the simplicial complex $\\Delta^\\mathbb{N}$ freely generated by the positive integers. The construction of the `SIMPLICIAL-SET` instance to implement this simplicial set is quite similar to that of $\\Delta^n$, but in this case the `:basis` keyword argument is the keyword `:locally-effective`, since the sets $K^q$ are infinite. Whence, the definition of $\\Delta^\\mathbb{N}$:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K6 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def delta-infty\n",
|
|
" (build-smst :cmpr #'l-cmpr\n",
|
|
" :basis :locally-effective\n",
|
|
" :bspn '(0)\n",
|
|
" :face face-delta-n\n",
|
|
" :orgn `(delta-infinity)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"A third example is the construction of the simplicial set corresponding to `diabolo`. This simplicial set is a sub-complex of $\\Delta^2$. The `:face` function is exactly the same as in the examples above and the `:basis` function returns the sub-simplices of `diabolo`, by enumeration. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K11 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def diabolo-ss \n",
|
|
" (build-smst :cmpr #'l-cmpr\n",
|
|
" :basis #'(lambda (dmn)\n",
|
|
" (case dmn\n",
|
|
" (0 '((0)(1)(2)(3)(4)(5)))\n",
|
|
" (1 '((0 1)(0 2)(1 2)(2 3)(3 4)(3 5)(4 5)))\n",
|
|
" (2 '((3 4 5)))))\n",
|
|
" :bspn '(0)\n",
|
|
" :face face-delta-n\n",
|
|
" :orgn '(simplicial set for diabolo)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## A first set of helpful functions on simplicial sets\n",
|
|
"\n",
|
|
"We give now a first set of functions, methods or macros acting on simplicial set instances. \n",
|
|
"\n",
|
|
"`cat-init` *[Function]*\n",
|
|
"> Clear in particular `*smst-list*`, the list of user created simplicial sets and reset the global counter to 1.\n",
|
|
"\n",
|
|
"`smst` *n* *[Function]*\n",
|
|
"> Retrieve in the list `*smst-list*` the simplicial set instance whose the Kenzo identification\n",
|
|
"is $n$. If it does not exist, return `NIL`.\n",
|
|
"\n",
|
|
"`cmpr` *smst absm1 absm2* *[Macro]*\n",
|
|
"> Compare the abstract simplices *absm1* and *absm2* with the comparison function associated with the simplicial set *smst*.\n",
|
|
"\n",
|
|
"`bspn` *smst* *[Macro]*\n",
|
|
"> Return the base point of the simplicial set *smst*.\n",
|
|
"\n",
|
|
"`bndr` *smst* `&rest` *[Macro]*\n",
|
|
"> Identical to the macro `dffr` (see the chain complex chapter). For simplicial sets, it is more traditional to use the term *boundary*.\n",
|
|
"\n",
|
|
"`dgnl` *smst* `&rest` *[Macro]*\n",
|
|
"> Identical to the macro `cprd` (see the coalgebra chapter). For simplicial sets, this recalls the \n",
|
|
"Alexander-Witney diagonal.\n",
|
|
"\n",
|
|
"`face` *smst i k gmsm-or-absm* *[Macro]*\n",
|
|
"> Versatile macro to apply the face operator $\\partial_i^k$ on the simplex *gmsm-or-absm* of the simplicial set *smst*. The name of the simplex parameter shows clearly that it may be either a geometric simplex or an abstract simplex. With only one argument (*smst*), return the function *face*. \n",
|
|
"In any other case, we recall that this application returns always an object of type `ABSM`.\n",
|
|
"\n",
|
|
"`degenerate-p` *absm* *[Macro]*\n",
|
|
"> Return `t` if the abstract simplex *asm* is degenerate, `nil` otherwise.\n",
|
|
"\n",
|
|
"`non-degenerate-p` *absm* *[Macro]*\n",
|
|
"> Return `t` if the abstract simplex *asm* is non-degenerate, `nil` otherwise.\n",
|
|
"\n",
|
|
"`check-smst` *smst dmns1* `&optional` *dmns2 (1+ dmns1)* *[Function]*\n",
|
|
"> Return `t` if the fundamental relations between the face operators $\\partial_i^k$\n",
|
|
"with $k=dmns1,\\ldots, dmns2-1$, applied on the effective simplicial set *smst*, are satisfied, otherwise `nil`. If the optional parameter *dmns2* is omitted, the test is done only for\n",
|
|
"$k=dmns1$.\n",
|
|
"\n",
|
|
"## Examples\n",
|
|
"\n",
|
|
"After having created instances of the standard simplicial sets $\\Delta^2$ and $\\Delta^3$ ($\\Delta^\\mathbb{N}$ has been defined previously), let us test some simple functions. Note that, since the class of simplicial sets is a sub-class of the class of coalgebras, itself subclass of chain complexes, the functions defined on these classes are available."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K16 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def delta2 (delta-n 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K21 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def delta3 (delta-n 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(degenerate-p (absm 0 '(1 2 3)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"T"
|
|
]
|
|
},
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(degenerate-p (absm 5 '(0 1 2 3 4)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0 1 2) (0 1 3) (0 2 3) (1 2 3))"
|
|
]
|
|
},
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis delta3 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0) (1) (2))"
|
|
]
|
|
},
|
|
"execution_count": 28,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis delta2 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
" The set of simplices in any dimension for the simplicial set $\\Delta^\\mathbb{N}$ is infinite:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-ERROR: \n",
|
|
"The object [K6 Simplicial-Set] is locally-effective.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis delta-infty 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us test the face function. We see that, though `delta-infty` is locally effective, nevertheless, we may work with its simplices:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 30,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - (0 1 3 4)>"
|
|
]
|
|
},
|
|
"execution_count": 30,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face delta-infty 2 4 '(0 1 2 3 4))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - (0 1 3 4)>"
|
|
]
|
|
},
|
|
"execution_count": 31,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face delta-infty 2 4 (absm 0 '(0 1 2 3 4)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - (0 1 2 3 4)>"
|
|
]
|
|
},
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face delta-infty 2 5 (absm (dgop-ext-int '(1)) '(0 1 2 3 4)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 2 (0 1 3 4)>"
|
|
]
|
|
},
|
|
"execution_count": 33,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face delta-infty 2 5 (absm (dgop-ext-int '(3)) '(0 1 2 3 4)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(0)"
|
|
]
|
|
},
|
|
"execution_count": 34,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(bspn delta-infty)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The two following statement show that `delta-infty` may be considered also as a coalgebra and a chain complex."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 35,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 4}\n",
|
|
"<1 * <TnPr (0) (0 1 2 3 4)>>\n",
|
|
"<1 * <TnPr (0 1) (1 2 3 4)>>\n",
|
|
"<1 * <TnPr (0 1 2) (2 3 4)>>\n",
|
|
"<1 * <TnPr (0 1 2 3) (3 4)>>\n",
|
|
"<1 * <TnPr (0 1 2 3 4) (4)>>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 35,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cprd delta-infty 4 '(0 1 2 3 4))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 36,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 3}\n",
|
|
"<1 * (0 1 2 3)>\n",
|
|
"<-1 * (0 1 2 4)>\n",
|
|
"<1 * (0 1 3 4)>\n",
|
|
"<-1 * (0 2 3 4)>\n",
|
|
"<1 * (1 2 3 4)>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 36,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? delta-infty 4 '(0 1 2 3 4))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The simplicial set `diabolo-ss`, has also all the properties of a coalgebra and of a chain complex."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 37,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((0 1) (0 2) (1 2) (2 3) (3 4) (3 5) (4 5))"
|
|
]
|
|
},
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis diabolo-ss 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 38,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((3 4 5))"
|
|
]
|
|
},
|
|
"execution_count": 38,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis diabolo-ss 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"<1 * (3 4)>\n",
|
|
"<-1 * (3 5)>\n",
|
|
"<1 * (4 5)>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 39,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? diabolo-ss 2 (first *))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 40,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 0}\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 40,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? diabolo-ss *)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"<1 * <TnPr (3) (3 4)>>\n",
|
|
"<-1 * <TnPr (3) (3 5)>>\n",
|
|
"<1 * <TnPr (4) (4 5)>>\n",
|
|
"<1 * <TnPr (3 4) (4)>>\n",
|
|
"<-1 * <TnPr (3 5) (5)>>\n",
|
|
"<1 * <TnPr (4 5) (5)>>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgnl diabolo-ss **)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## The function `build-finite-ss`\n",
|
|
"\n",
|
|
"The function `build-finite-ss` is a powerful function simplifying the creation of a finite simplicial set. From the lisp point of view, it accepts only one argument, the structured list of the simplices and their faces. In this list, every non--degenerate simplex must be coded as a symbol given by the user. The structure of the list is the following:\n",
|
|
"\n",
|
|
"- **0** (in fact, optional)\n",
|
|
"- $<$Sequence of the vertices, the first item being the base point$>$,\n",
|
|
"- **1**\n",
|
|
"- $<$Sequence of description of simplices in dimension 1$>$,\n",
|
|
"- **2**\n",
|
|
"- $<$Sequence of description of simplices in dimension 2$>$,\n",
|
|
"- ... ... ... ... ... ...\n",
|
|
"- **n**\n",
|
|
"- $<$Sequence of description of simplices in dimension n$>$.\n",
|
|
"\n",
|
|
"where $<$Sequence of description of simplices in dimension k$>$ is a sequence of the following items:\n",
|
|
"\n",
|
|
"1. A symbol, the symbolic name of the simplex.\n",
|
|
"2. A list of faces of this simplex, describing the faces of the simplex. A face can be described in two ways:\n",
|
|
" - a symbol, the symbolic name of a **non-degenerate** simplex composing itself the face.\n",
|
|
" - or a list of the form ($i_k\\ i_{k-1}\\ \\ldots \\ i_1 \\ i_0$ `symbol`) meaning that the degeneracy $\\eta_{i_k}\\eta_{i_{k-1}}\\ldots\\eta_{i_1}\\eta_{i_0}$ is to be applied to the non-degenerate simplex of name `symbol` to produce the actual (possibly degenerate) face. If the simplex face has dimension 0 (a vertex), the name of this vertex is sufficient in the face description because the program computes itself the unique possible degeneracy of the vertex, i.e. $\\eta_{k-2}\\ldots\\eta_0$. \n",
|
|
"\n",
|
|
"### Examples\n",
|
|
"\n",
|
|
"Let us give some examples to clarify the use of `build-finite-ss`. In the first example, we use `build-finite-ss` to create a simplicial complex, corresponding to a triangulation of the torus. As the faces are never degenerated, the description of the faces is of simplified form."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 42,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {10067338A3}>"
|
|
]
|
|
},
|
|
"execution_count": 42,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"torus2.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The vertices will be named `v0`, `v1`, ..., `v6`, `v0` being the base point. The edges\n",
|
|
"will be named `e01`, `e02`, ..., `e56`, the list of faces of the edge $e_{ij}$ being\n",
|
|
"$(v_j\\ v_i)$. The triangles will be named `t013`, `t015`, ..., `t456`, the list of faces of\n",
|
|
"the triangle $t_{ijk}$ being $(e_{jk}\\ e_{ik}\\ e_{ij})$. With this convention of describing the simplices, the call to `build-finite-ss` is in simplified form:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 43,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {10068618AB}>\n",
|
|
"2. BSGN: V0\n",
|
|
"3. DFFR: [K27 Morphism (degree -1): K26 -> K26]\n",
|
|
"4. GRMD: [K26 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 26\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (V0 V1 V2 V3 V4 V5 V6 1 E01 (V1 V0) ...))\n",
|
|
"8. CPRD: [K30 Morphism (degree 0): K26 -> K28]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {10068618CB}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K26 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 43,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def torus2\n",
|
|
" (build-finite-ss \n",
|
|
" '(v0 v1 v2 v3 v4 v5 v6 \n",
|
|
"\n",
|
|
" 1 e01 (v1 v0) e02 (v2 v0) e03 (v3 v0)\n",
|
|
" e04 (v4 v0) e05 (v5 v0) e06 (v6 v0)\n",
|
|
" e12 (v2 v1) e13 (v3 v1) e14 (v4 v1)\n",
|
|
" e15 (v5 v1) e16 (v6 v1) e23 (v3 v2)\n",
|
|
" e24 (v4 v2) e25 (v5 v2) e26 (v6 v2)\n",
|
|
" e34 (v4 v3) e35 (v5 v3) e36 (v6 v3)\n",
|
|
" e45 (v5 v4) e46 (v6 v4) e56 (v6 v5)\n",
|
|
"\n",
|
|
" 2 t013 (e13 e03 e01) t015 (e15 e05 e01) t024 (e24 e04 e02)\n",
|
|
" t026 (e26 e06 e02) t036 (e36 e06 e03) t045 (e45 e05 e04)\n",
|
|
" t125 (e25 e15 e12) t126 (e26 e16 e12) t134 (e34 e14 e13)\n",
|
|
" t146 (e46 e16 e14) t234 (e34 e24 e23) t235 (e35 e25 e23)\n",
|
|
" t356 (e56 e36 e35) t456 (e56 e46 e45) )))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"After verification of the coherence of the description of the faces, the function `build-finite-ss` calls adequately the function `build-smst` to create an instance of the class `SIMPLICIAL SET` subclass of the class `CHAIN COMPLEX`. So that, it is easy for the user to obtain the homology groups of the torus, for instance in dimension 1:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 44,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 21.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/21 (dimension 1) :\n",
|
|
"E01 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/21 (dimension 1) :\n",
|
|
"E02 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/21 (dimension 1) :\n",
|
|
"E03 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/21 (dimension 1) :\n",
|
|
"E04 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 5/21 (dimension 1) :\n",
|
|
"E05 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 6/21 (dimension 1) :\n",
|
|
"E06 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 7/21 (dimension 1) :\n",
|
|
"E12 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 8/21 (dimension 1) :\n",
|
|
"E13 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 9/21 (dimension 1) :\n",
|
|
"E14 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 10/21 (dimension 1) :\n",
|
|
"E15 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 11/21 (dimension 1) :\n",
|
|
"E16 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 12/21 (dimension 1) :\n",
|
|
"E23 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 13/21 (dimension 1) :\n",
|
|
"E24 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 14/21 (dimension 1) :\n",
|
|
"E25 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 15/21 (dimension 1) :\n",
|
|
"E26 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 16/21 (dimension 1) :\n",
|
|
"E34 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 17/21 (dimension 1) :\n",
|
|
"E35 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 18/21 (dimension 1) :\n",
|
|
"E36 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 19/21 (dimension 1) :\n",
|
|
"E45 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 20/21 (dimension 1) :\n",
|
|
"E46 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 21/21 (dimension 1) :\n",
|
|
"E56 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 14.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/14 (dimension 2) :\n",
|
|
"T013 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/14 (dimension 2) :\n",
|
|
"T015 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/14 (dimension 2) :\n",
|
|
"T024 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/14 (dimension 2) :\n",
|
|
"T026 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 5/14 (dimension 2) :\n",
|
|
"T036 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 6/14 (dimension 2) :\n",
|
|
"T045 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 7/14 (dimension 2) :\n",
|
|
"T125 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 8/14 (dimension 2) :\n",
|
|
"T126 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 9/14 (dimension 2) :\n",
|
|
"T134 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 10/14 (dimension 2) :\n",
|
|
"T146 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 11/14 (dimension 2) :\n",
|
|
"T234 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 12/14 (dimension 2) :\n",
|
|
"T235 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 13/14 (dimension 2) :\n",
|
|
"T356 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 14/14 (dimension 2) :\n",
|
|
"T456 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 44,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(chcm-homology torus2 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The function `build-finite-ss` calls internally some verification functions mentioned above to verify the coherence of the description of the simplicial set and gives an error message if the description of the simplicial set is incorrect. For instance:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 45,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {10069D1BCB}>\n",
|
|
"2. BSGN: S0\n",
|
|
"3. DFFR: [K32 Morphism (degree -1): K31 -> K31]\n",
|
|
"4. GRMD: [K31 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 31\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (S0 S1 S2 S3 1 |0-1| (S1 S0) |1-2| (S2 S1) |2-3| ...))\n",
|
|
"8. CPRD: [K35 Morphism (degree 0): K31 -> K33]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {10069D1BEB}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-ERROR: \n",
|
|
"Noncoherent boundary operators detected by CHECK-FACES :\n",
|
|
"Simplex => 0-1-2\n",
|
|
"del_0 o del_0 => <AbSm - S3>\n",
|
|
"del_0 o del_1 => <AbSm - S2>\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 45,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def mm (build-finite-ss \n",
|
|
" '(s0 s1 s2 s3 \n",
|
|
" 1 0-1 (s1 s0) 1-2 (s2 s1) 2-3 (s3 s2)\n",
|
|
" 2 0-1-2 (2-3 1-2 0-1))\n",
|
|
" ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In the following examples, we show the power of `build-finite-ss` for the description of classical surfaces as simplicial sets, and in each case we verify the well known homology groups of those surfaces. The examples of the torus or the dunce-hat must be compared, as to the simplicity of the definition, to the respective ones in the previous page and in the Homology chapter."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 46,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {1006A6BEE3}>"
|
|
]
|
|
},
|
|
"execution_count": 46,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"cylinss.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 47,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {1006B8FB7B}>\n",
|
|
"2. BSGN: V0\n",
|
|
"3. DFFR: [K37 Morphism (degree -1): K36 -> K36]\n",
|
|
"4. GRMD: [K36 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 36\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (V0 V1 1 E0 (V1 V0) E1 (V1 V1) E2 (V0 V0) E3 ...))\n",
|
|
"8. CPRD: [K40 Morphism (degree 0): K36 -> K38]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {1006B8FB9B}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K36 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 47,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def cylinss (build-finite-ss \n",
|
|
" '(v0 v1 \n",
|
|
" 1 e0 (v1 v0) e1 (v1 v1) e2 (v0 v0) e3 (v1 v0)\n",
|
|
" 2 t0 (e1 e3 e0) t1 (e0 e3 e2)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 48,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 0.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 0) :\n",
|
|
"V0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 0) :\n",
|
|
"V1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 4.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/4 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/4 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/4 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/4 (dimension 1) :\n",
|
|
"E3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 4.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/4 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/4 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/4 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/4 (dimension 1) :\n",
|
|
"E3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 48,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology cylinss i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 49,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {1006CDCBD3}>"
|
|
]
|
|
},
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"moebiuss.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 50,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {1006E0FBAB}>\n",
|
|
"2. BSGN: V0\n",
|
|
"3. DFFR: [K42 Morphism (degree -1): K41 -> K41]\n",
|
|
"4. GRMD: [K41 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 41\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (V0 V1 1 E0 (V1 V0) E1 (V0 V1) E2 (V1 V0) E3 ...))\n",
|
|
"8. CPRD: [K45 Morphism (degree 0): K41 -> K43]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {1006E0FBCB}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K41 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 50,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def moebiuss (build-finite-ss \n",
|
|
" '(v0 v1 \n",
|
|
" 1 e0 (v1 v0) e1 (v0 v1) e2 (v1 v0) e3 (v0 v0)\n",
|
|
" 2 t0 (e1 e3 e0) t1 (e0 e2 e3)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 51,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 0.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 0) :\n",
|
|
"V0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 0) :\n",
|
|
"V1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 4.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/4 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/4 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/4 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/4 (dimension 1) :\n",
|
|
"E3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 4.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/4 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/4 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/4 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 4/4 (dimension 1) :\n",
|
|
"E3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 51,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology moebiuss i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 52,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {1006F5C3E3}>"
|
|
]
|
|
},
|
|
"execution_count": 52,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"toruss.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 53,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {100707F18B}>\n",
|
|
"2. BSGN: V0\n",
|
|
"3. DFFR: [K47 Morphism (degree -1): K46 -> K46]\n",
|
|
"4. GRMD: [K46 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 46\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (V0 1 E0 (V0 V0) E1 (V0 V0) E2 (V0 V0) 2 T0 ...))\n",
|
|
"8. CPRD: [K50 Morphism (degree 0): K46 -> K48]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {100707F1AB}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K46 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 53,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def toruss (build-finite-ss \n",
|
|
" '(v0\n",
|
|
" 1 e0 (v0 v0) e1 (v0 v0) e2 (v0 v0)\n",
|
|
" 2 t0 (e1 e2 e0) t1 (e0 e2 e1)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 54,
|
|
"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 -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 0) :\n",
|
|
"V0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology toruss i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 55,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {10071BC033}>"
|
|
]
|
|
},
|
|
"execution_count": 55,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"bottless.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 56,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {10072DF6BB}>\n",
|
|
"2. BSGN: V0\n",
|
|
"3. DFFR: [K52 Morphism (degree -1): K51 -> K51]\n",
|
|
"4. GRMD: [K51 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 51\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (V0 1 E0 (V0 V0) E1 (V0 V0) E2 (V0 V0) 2 T0 ...))\n",
|
|
"8. CPRD: [K55 Morphism (degree 0): K51 -> K53]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {10072DF6DB}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K51 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def bottless (build-finite-ss \n",
|
|
" '(v0\n",
|
|
" 1 e0 (v0 v0) e1 (v0 v0) e2 (v0 v0)\n",
|
|
" 2 t0 (e1 e2 e0) t1 (e0 e1 e2)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 57,
|
|
"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 -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 0) :\n",
|
|
"V0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"E0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"E1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"E2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z/2Z\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"T0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"T1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 57,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology bottless i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 58,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {100741B9A3}>"
|
|
]
|
|
},
|
|
"execution_count": 58,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"ppss.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 59,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {100753E22B}>\n",
|
|
"2. BSGN: *\n",
|
|
"3. DFFR: [K57 Morphism (degree -1): K56 -> K56]\n",
|
|
"4. GRMD: [K56 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 56\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (* 1 E (* *) 2 T (E * E)))\n",
|
|
"8. CPRD: [K60 Morphism (degree 0): K56 -> K58]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {100753E24B}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K56 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 59,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def ppss (build-finite-ss \n",
|
|
" '( *\n",
|
|
" 1 e (* *)\n",
|
|
" 2 t (e * e)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 60,
|
|
"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 -> 2016-03-11, 23h 47m 21s.\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 : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"E \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"E \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"T \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z/2Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 21s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"T \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 60,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology ppss i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The user will note that the list of faces for the 2-simplex `t`, is in simplified form. In particular, as the face 1 of `t` is the 0-degeneracy of the base point \"$*$\", it is sufficient to code the face 1 of `t`by \"`*`\" instead of the complete form `(0 *)`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 61,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {100766B883}>"
|
|
]
|
|
},
|
|
"execution_count": 61,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"duncess.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 62,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"The object is a STANDARD-OBJECT of type CAT::SIMPLICIAL-SET.\n",
|
|
"0. CMPR: #<FUNCTION S-CMPR>\n",
|
|
"1. BASIS: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-BASIS) {100778E04B}>\n",
|
|
"2. BSGN: *\n",
|
|
"3. DFFR: [K62 Morphism (degree -1): K61 -> K61]\n",
|
|
"4. GRMD: [K61 Simplicial-Set]\n",
|
|
"5. EFHM: \"unbound\"\n",
|
|
"6. IDNM: 61\n",
|
|
"7. ORGN: (BUILD-FINITE-SS (* 1 E (* *) 2 T (E E E)))\n",
|
|
"8. CPRD: [K65 Morphism (degree 0): K61 -> K63]\n",
|
|
"9. FACE: #<CLOSURE (FLET CAT::RSLT :IN CAT::FINITE-SS-FACE) {100778E06B}>\n",
|
|
"\n",
|
|
"> \n",
|
|
"Checking the 0-simplices...\n",
|
|
"Checking the 1-simplices...\n",
|
|
"Checking the 2-simplices..."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K61 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 62,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def duncess (build-finite-ss \n",
|
|
" '( *\n",
|
|
" 1 e (* *)\n",
|
|
" 2 t (e e e)) ))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 63,
|
|
"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 -> 2016-03-11, 23h 47m 22s.\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 : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"E \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"E \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"T \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"T \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 63,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3) (chcm-homology duncess i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Special simplicial sets\n",
|
|
"\n",
|
|
"The system provides useful functions to create interesting simplicial sets of constant usage. In particular, the user is advised from now to use the following version of the standard simplex implemented in `Kenzo` and not the one given previously for simplicity reason.\n",
|
|
"\n",
|
|
"### The standard simplex\n",
|
|
"\n",
|
|
"`delta` *dmns* *[Function]*\n",
|
|
"> Create the standard simplex $\\Delta^n$ with vertices $0,1,\\ldots,n$, where *dmns* is the parameter for $n$. This simplicial set is so important in the applications that the implementor has decided to code the simplices in a way similar to the coding\n",
|
|
"of the degeneracy operators. An increasing sequence of non-negative integers describing a simplex, is coded on a binary integer with the following convention: a number $i$ representing the vertex $i$ is the $(i+1)$--th binary bit of a machine word. The base point $0$ is the bit 1 in position 1 of the word. This representation is very efficient for saving memory space but somehow awkward to read.\n",
|
|
"\n",
|
|
"`delta-infinity` *[Function]*\n",
|
|
"> Create the locally effective standard simplex $\\Delta^\\mathbb{N}$ freely generated by the positive integers.\n",
|
|
"\n",
|
|
"`deltab` *[Function]*\n",
|
|
"> Create the locally effective *reduced* simplicial set $\\bar \\Delta$, built from $\\Delta^\\mathbb{N}$ by identifying all the vertices to the base point.\n",
|
|
"\n",
|
|
"`deltab2` *[Function]*\n",
|
|
"> Create the locally effective *1-reduced* simplicial set $\\Delta_2^\\mathbb{N}$, obtained from the above $\\bar \\Delta$, by identification of all the edges with the base point. This is the efficient version of the coalgebra that is used as example in the cobar chapter.\n",
|
|
"\n",
|
|
"`dlop-ext-int` *ext-dlop* *[Function]*\n",
|
|
"> Code on an integer the valid list (increasing order) representing the simplex *ext-dlop* of the standard simplex.\n",
|
|
"\n",
|
|
"`dlop-int-ext` *dgop* *[Function]*\n",
|
|
"> Give the list representing a simplex of the standard simplex from the integer *dgop*.\n",
|
|
"\n",
|
|
"`vertex-i` *absm i* *[Function]*\n",
|
|
"> Give the $i$-th vertex of the (coded, degenerate or not) abstract simplex `absm` belonging to a simplicial set of the $\\Delta$ family.\n",
|
|
"\n",
|
|
"`absm-ext-int` *vlist* *[Function]*\n",
|
|
"> Create a valid abstract simplex of the $\\Delta$ family from the simplex *vlist* written as a non-decreasing list of non-negative integers (i.e coding of any degenerate or non--degenerate simplex of the $\\Delta$ family).\n",
|
|
"\n",
|
|
"`absm-int-ext` *absm* *[Function]*\n",
|
|
"> From an internal coded form of an abstract simplex of the $\\Delta$ family, create the non-decreasing list\n",
|
|
"of non--negative integers representing the canonical external form of such a simplex.\n",
|
|
"\n",
|
|
"`soft-delta` *dmns* *[Function]*\n",
|
|
"> Create another version of the standard simplex $\\Delta^n$ designed for a better clarity in the printing of the results at testing time. More precisely, the simplices are represented internally by a list of the form `(:delt` *binary-code*`)`. With this representation, the system is able to recognize a coded simplex and to print it in a readable form. For the user, the only\n",
|
|
"requirement is to write a simplex coded $n$ as `(d` *n*`)`, where `d` is the macro building the internal representation (see the examples). Attention: the above conversion functions do not work with this representation.\n",
|
|
"\n",
|
|
"`soft-delta-infinity` *[Function]*\n",
|
|
"\n",
|
|
"### Examples"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 64,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K66 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 64,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def d3 (delta 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The simplices $2$, $4$ and $8$ are the coded representation of the vertices $1$, $2$ and $3$:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 65,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
":LESS"
|
|
]
|
|
},
|
|
"execution_count": 65,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cmpr d3 2 4)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 66,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
":EQUAL"
|
|
]
|
|
},
|
|
"execution_count": 66,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cmpr d3 4 4)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 67,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
":GREATER"
|
|
]
|
|
},
|
|
"execution_count": 67,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cmpr d3 8 4)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The list returned by the following statement getting the basis of $\\Delta^3$ in dimension 2, namely `(7 11 13 14)` is in fact the coded list of the following simplices `((0 1 2) (0 1 3) (0 2 3) (1 2 3))`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 68,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(7 11 13 14)"
|
|
]
|
|
},
|
|
"execution_count": 68,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis d3 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In the following statement, the integer $21$ represents the simplex in dimension $2$, `(0 1 4)`, $1$ represents the operator $\\partial_1$ and the face is therefore `(0 4)` represented as the integer $17$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 69,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - 17>"
|
|
]
|
|
},
|
|
"execution_count": 69,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face d3 1 2 21)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We may obtain the same result, using:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 70,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - 17>"
|
|
]
|
|
},
|
|
"execution_count": 70,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face d3 1 2 (dlop-ext-int '(0 1 4)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us test the conversion functions."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 71,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0"
|
|
]
|
|
},
|
|
"execution_count": 71,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(vertex-i (absm 0 1) 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 72,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0"
|
|
]
|
|
},
|
|
"execution_count": 72,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(vertex-i (absm 1 1) 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 73,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0"
|
|
]
|
|
},
|
|
"execution_count": 73,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(vertex-i (absm 1 1) 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 74,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"2"
|
|
]
|
|
},
|
|
"execution_count": 74,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(vertex-i (absm 0 7) 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 75,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 6-5-1-0 15>"
|
|
]
|
|
},
|
|
"execution_count": 75,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(absm-ext-int '(0 0 0 1 2 3 3 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 76,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 2-1 7>"
|
|
]
|
|
},
|
|
"execution_count": 76,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(absm-ext-int '(0 1 1 1 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 77,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(0 0 0 1 2 3 3 3)"
|
|
]
|
|
},
|
|
"execution_count": 77,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(absm-int-ext (absm-ext-int '(0 0 0 1 2 3 3 3)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The following call to the macro `?` returns the boundary of the simplex `(0 2 3)` of $\\Delta^3$, the integers $5$, $9$ and $12$ representing respectively the simplices `(0 2)`, `(0 3)` and `(2 3)`. The application of the coproduct `dgnl` to the simplex `(0 1 2 3)`, coded $15$, is also easily interpreted:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 78,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"<1 * 5>\n",
|
|
"<-1 * 9>\n",
|
|
"<1 * 12>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 78,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? d3 2 13)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 79,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 3}\n",
|
|
"<1 * <TnPr 1 15>>\n",
|
|
"<1 * <TnPr 3 14>>\n",
|
|
"<1 * <TnPr 7 12>>\n",
|
|
"<1 * <TnPr 15 8>>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 79,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgnl d3 3 15)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We may show now some examples with the *soft* version of the standard simplex. Using the macro `d` and the function `dlop-ext-int` the user may work with a readable form of the simplices and the degeneracy operators."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 80,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K71 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 80,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def d3 (soft-delta 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 81,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
":LESS"
|
|
]
|
|
},
|
|
"execution_count": 81,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cmpr d3 (d 2) (d 4))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 82,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"((:DELT . 3) (:DELT . 5) (:DELT . 6) (:DELT . 9) (:DELT . 10) (:DELT . 12))"
|
|
]
|
|
},
|
|
"execution_count": 82,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(basis d3 1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 83,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 3}\n",
|
|
"<1 * <TnPr (DELT . 1) (DELT . 15)>>\n",
|
|
"<1 * <TnPr (DELT . 3) (DELT . 14)>>\n",
|
|
"<1 * <TnPr (DELT . 7) (DELT . 12)>>\n",
|
|
"<1 * <TnPr (DELT . 15) (DELT . 8)>>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 83,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dgnl d3 3 (d (dlop-ext-int '(0 1 2 3))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 84,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - (DELT . 17)>"
|
|
]
|
|
},
|
|
"execution_count": 84,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face d3 1 2 (d (dlop-ext-int '(0 2 4))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 85,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"<1 * (DELT . 5)>\n",
|
|
"<-1 * (DELT . 9)>\n",
|
|
"<1 * (DELT . 12)>\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 85,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? d3 2 (d (dlop-ext-int '(0 2 3))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Spheres, Moore spaces and projective spaces\n",
|
|
"\n",
|
|
"`sphere` *n* *[Function]*\n",
|
|
"> Create a simplicial set, a model for the sphere of dimension $n$, ($n \\geq 0$). This is a typical example where the differential is known a priori to be null, so the `:intr-bndr` keyword parameter is set to function `zero-pure-dffr`. This function generates a name `S`*n* for the **unique** simplex of dimension $n$ whose faces are the degeneracies of the base point labelled \"`*`\".\n",
|
|
"\n",
|
|
"`sphere-wedge` *dmns1 ... dmnsn* *[Function]*\n",
|
|
"> Create a simplicial set for the wedge of spheres. Here, the $dmns_i$ are integers, namely the dimensions of the spheres to be wedged. The differential is null. In the representation created by the software, the 0-simplex (base point) is labelled \"`*`\" and in dimension $p$ the simplexes are labelled `S`*p*`-`*1*, ..., `S`*p*`-`*s*, where *s* is the number of spheres of dimension $p$ in the wedge. (See the example).\n",
|
|
"\n",
|
|
"`moore` *p n* *[Function]*\n",
|
|
"> Construct a simplicial set, a model for ${\\rm Moore}(\\mathbb{Z}/{p\\mathbb{Z}},n)$. The integers $p$ and $n$ must satisfy the conditions $p>1,\\ n> 2p-4$, otherwise the result is undefined. ${\\rm Moore}(\\mathbb{Z}/{p\\mathbb{Z}},n)$ is a space, whose the only non-null homology groups are $H_0=\\mathbb{Z}$ and $H_n=\\mathbb{Z}/{p\\mathbb{Z}}$. A Moore space has only three non-degenerate simplices, namely in dimension $0$, $n$ and $n+1$. A number $p$ of faces of the $(n+1)$-simplex are identified with the $n$-simplex, the others faces being contracted on the base point. In the representation created by the software, the 0-simplex (base point), the $n$-simplex and the $(n+1)$-simplex are respectively labelled \"`*`\", `M`$n$ and `N`$n'$, where $n'=n+1$.\n",
|
|
"\n",
|
|
"`R-proj-space &optional` *k l* *[Function]*\n",
|
|
"> If $k=1$ or omitted, build a simplicial set model of $K(\\mathbb{Z}_2,1)= P^\\infty\\mathbb{R}$. In dimension $n$, this simplicial set has only one non-degenerate simplex, namely the integer $n$. \n",
|
|
"The faces of this non-degenerate simplex $n$ are given by the following formulas: $\\partial_0 n = \\partial_n n = n-1$ and for $i \\not= 0$ and $i \\not=n$, $\\partial_i n= \\eta_{i-1} (n-2)$. If $k >1$, build an analogous simplicial set but with no simplices in dimensions $1 \\leq m < k$. If in addition to $k$ the argument $l$, ($l \\geq k$), is provided, build an analogous simplicial set but with no simplices in dimensions $m \\geq l$.\n",
|
|
"\n",
|
|
"### Examples\n",
|
|
"\n",
|
|
"Let us define first, an auxiliary function `show-structure` with 2 arguments *ss* and *dmn*, to show the structure (i.e. generators and faces) of the simplicial set *ss*, from the dimension 0 up to the dimension *dmn* included.\n",
|
|
"\n",
|
|
"```commonlisp\n",
|
|
"(defun show-structure (ss dmn)\n",
|
|
" (dotimes (i (1+ dmn))\n",
|
|
" (format t \"~2%Dimension = ~D :\" i)\n",
|
|
" (case i\n",
|
|
" (0 (format t \"~2%~8TVertices : ~8T~A\" (basis ss 0)))\n",
|
|
" (otherwise\n",
|
|
" (dolist (s (basis ss i))\n",
|
|
" (format t \"~2%~8TSimplex : ~A~2%~16TFaces : ~A\"\n",
|
|
" s (mapcar #'(lambda (j) (face ss j i s))\n",
|
|
" (<a-b> 0 i)))))\n",
|
|
" )))\n",
|
|
"```\n",
|
|
"\n",
|
|
"In these elementary examples, we show the structure of some simplicial sets built\n",
|
|
"from the functions above. Let us begin with $S^2$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 86,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K76 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 86,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def s2 (sphere 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 87,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"*"
|
|
]
|
|
},
|
|
"execution_count": 87,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(bspn s2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Applying the function `basis`, we see that the only non-null simplices are in dimension 0 and 2."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 88,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"(*) \n",
|
|
"NIL \n",
|
|
"(S2) \n",
|
|
"NIL "
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 88,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 4) (print (basis s2 i)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In dimension 2, the 3 faces of the simplicial set are all the degeneracy $\\eta_0$ of the base point."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 89,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(<AbSm 0 *> <AbSm 0 *> <AbSm 0 *>)"
|
|
]
|
|
},
|
|
"execution_count": 89,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(mapcar #'(lambda(i)(face s2 i 2 's2)) '(0 1 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 90,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 3-1-0 S2>"
|
|
]
|
|
},
|
|
"execution_count": 90,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face s2 5 7 (absm (dgop-ext-int '(5 3 1 0)) 's2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 91,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 4-2-0 S2>"
|
|
]
|
|
},
|
|
"execution_count": 91,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face s2 2 7 (absm (dgop-ext-int '(5 3 1 0)) 's2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The differential of the simplex `s2` in dimension 2 is of course the null combination of degree 1:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 92,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 92,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? s2 2 's2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, let us see the stucture of $S^3$, using our auxiliary function `show-structure`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 93,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K81 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 93,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def s3 (sphere 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 94,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (*)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
" Simplex : S3\n",
|
|
"\n",
|
|
" Faces : (<AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 94,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure s3 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The space ${\\rm Moore}(2,1)$ is the projective plane:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 95,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K86 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 95,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p2 (moore 2 1)) "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 96,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (*)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : M1\n",
|
|
"\n",
|
|
" Faces : (<AbSm - *> <AbSm - *>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : N2\n",
|
|
"\n",
|
|
" Faces : (<AbSm - M1> <AbSm 0 *> <AbSm - M1>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 96,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p2 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In the following example, note the identification of $p$ faces of the $(n+1)$-simplex with the $n$-simplex."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 97,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K91 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 97,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def sp2r (moore 2 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 98,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (*)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : M2\n",
|
|
"\n",
|
|
" Faces : (<AbSm 0 *> <AbSm 0 *> <AbSm 0 *>)\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
" Simplex : N3\n",
|
|
"\n",
|
|
" Faces : (<AbSm - M2> <AbSm 1-0 *> <AbSm - M2> <AbSm 1-0 *>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 98,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure sp2r 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us see an example of a wedge of spheres:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 99,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K96 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 99,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def w (sphere-wedge 3 2 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 100,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (*)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : S2-1\n",
|
|
"\n",
|
|
" Faces : (<AbSm 0 *> <AbSm 0 *> <AbSm 0 *>)\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
" Simplex : S3-1\n",
|
|
"\n",
|
|
" Faces : (<AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *>)\n",
|
|
"\n",
|
|
" Simplex : S3-2\n",
|
|
"\n",
|
|
" Faces : (<AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *> <AbSm 1-0 *>)\n",
|
|
"\n",
|
|
"Dimension = 4:\n",
|
|
"\n",
|
|
"Dimension = 5:"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 100,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure w 5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 101,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
":LESS"
|
|
]
|
|
},
|
|
"execution_count": 101,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cmpr w 's3-1 's3-2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 102,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 1-0 *>"
|
|
]
|
|
},
|
|
"execution_count": 102,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(face w 2 3 's3-1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 103,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 2}\n",
|
|
"------------------------------------------------------------------------------\n"
|
|
]
|
|
},
|
|
"execution_count": 103,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(? w 3 's3-2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us show now some examples with the simplicial sets generated by the function `R-proj-space`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 104,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K101 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 104,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p1 (R-proj-space))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 105,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"(0) \n",
|
|
"(1) \n",
|
|
"(2) \n",
|
|
"(3) \n",
|
|
"(4) \n",
|
|
"(5) \n",
|
|
"(6) "
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 7)(print(basis p1 i)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 106,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (0)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : 1\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 0> <AbSm - 0>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : 2\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 1> <AbSm 0 0> <AbSm - 1>)\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
" Simplex : 3\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 2> <AbSm 0 1> <AbSm 1 1> <AbSm - 2>)\n",
|
|
"\n",
|
|
"Dimension = 4:\n",
|
|
"\n",
|
|
" Simplex : 4\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 3> <AbSm 0 2> <AbSm 1 2> <AbSm 2 2> <AbSm - 3>)\n",
|
|
"\n",
|
|
"Dimension = 5:\n",
|
|
"\n",
|
|
" Simplex : 5\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 4> <AbSm 0 3> <AbSm 1 3> <AbSm 2 3> <AbSm 3 3> <AbSm - 4>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 106,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p1 5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 107,
|
|
"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 -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 0) :\n",
|
|
"0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z/2Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 2) :\n",
|
|
"2 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 3) :\n",
|
|
"3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 3) :\n",
|
|
"3 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 4.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 4) :\n",
|
|
"4 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 3 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z/2Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 4.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 4) :\n",
|
|
"4 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 5.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 5) :\n",
|
|
"5 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 4 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 107,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 5)(chcm-homology p1 i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 108,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K106 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 108,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p2 (R-proj-space 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 109,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (0)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : 1\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 0> <AbSm - 0>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
"Dimension = 4:\n",
|
|
"\n",
|
|
"Dimension = 5:"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 109,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p2 5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 110,
|
|
"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 -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 0) :\n",
|
|
"0 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"1 \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 1.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 1) :\n",
|
|
"1 \n",
|
|
"End of computing.\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",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\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 : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 4.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 3 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\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 : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 4 :\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 110,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 5)(chcm-homology p2 i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 111,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K111 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 111,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def pr3 (R-proj-space 3))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 112,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (0)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : 1\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 0> <AbSm - 0>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : 2\n",
|
|
"\n",
|
|
" Faces : (<AbSm - 1> <AbSm 0 0> <AbSm - 1>)\n",
|
|
"\n",
|
|
"Dimension = 3:\n",
|
|
"\n",
|
|
"Dimension = 4:"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 112,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure pr3 4)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 113,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN -1}\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 0}\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 1}\n",
|
|
"<2 * 1>\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 2}\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 3}\n",
|
|
"<2 * 3>\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 4}\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" \n",
|
|
"\n",
|
|
"----------------------------------------------------------------------{CMBN 5}\n",
|
|
"<2 * 5>\n",
|
|
"------------------------------------------------------------------------------\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 113,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 7) (print (? pr3 i i)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us use now the parameter *l*, allowing the truncation in the upper dimensions."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 114,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-ERROR: \n",
|
|
"The assertion (AND (TYPEP K (QUOTE FIXNUM)) (PLUSP K) (OR (EQ CAT::L :INFINITY) (AND (TYPEP CAT::L #) (<= K CAT::L)))) failed.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 114,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p12 (R-proj-space 1 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 115,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"TYPE-ERROR: \n",
|
|
" #<TYPE-ERROR expected-type: CAT::SIMPLICIAL-SET datum: NIL>\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 115,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p12 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Setting $k=l$ does not creates something amazing!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 116,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K116 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 116,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p22 (R-proj-space 2 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 117,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (0)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
"Dimension = 2:"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 117,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p22 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 118,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"SIMPLE-ERROR: \n",
|
|
"The assertion (AND (TYPEP K (QUOTE FIXNUM)) (PLUSP K) (OR (EQ CAT::L :INFINITY) (AND (TYPEP CAT::L #) (<= K CAT::L)))) failed.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 118,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p47 (R-proj-space 4 7))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 119,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"TYPE-ERROR: \n",
|
|
" #<TYPE-ERROR expected-type: CAT::SIMPLICIAL-SET datum: NIL>\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 119,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure p47 8)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Cartesian product of simplicials sets\n",
|
|
"\n",
|
|
"Let $X$ and $Y$ be two simplicial sets, the construction of $X\\times Y$ is based on the very definition $(X\\times Y)_n =X_n\\times Y_n$ where $X_n$, $Y_n$ and $(X\\times Y)_n$ are the *possibly degenerate* simplices of $X$, $Y$ and $X\\times Y$\n",
|
|
"respectively. A simplex of the product $X\\times Y$ is characterized by its projections on the factors $X$ and $Y$.\n",
|
|
"\n",
|
|
"The *non-degenerate* simplices of $X\\times Y$ are represented internally in the system by a lisp object of the form:\n",
|
|
"\n",
|
|
"> `(:crpr (`*dgop1* `.` *gmsm1*`).(`*dgop2* `.` *gmsm2*`))`\n",
|
|
"\n",
|
|
"where,\n",
|
|
"1. `dgop1` is an integer representing a coded degeneracy operator.\n",
|
|
"2. `gmsm1` is a non-degenerate simplex of $X$, to which is applied the degeneracy operator `dgop1`.\n",
|
|
"3. `dgop2` is an integer representing a coded degeneracy operator.\n",
|
|
"4. `gmsm2` is a non-degenerate simplex of $Y$, to which is applied the degeneracy operator `dgop2`.\n",
|
|
"\n",
|
|
"This object must be a *non-degenerate* simplex of $X \\times Y$, that is to say, the degeneracy operators *dgop1* and *dgop2* must not have a common $\\eta_j$, and therefore their list representations must have a void intersection.\n",
|
|
"The coded representation by binary bit positions, has the same property. The corresponding type is `CRPR`.\n",
|
|
"To construct such an object, one may use the macro `crpr`. As usual, a printing method has been defined to reflect the structure of the product under the form:\n",
|
|
"\n",
|
|
"> `<CrPr` *ext-dgop1 gmsm1 ext-dgop2 gmsm2*`>`\n",
|
|
"\n",
|
|
"where the sequence of the operators $\\eta_i$ is printed in explicit form (this is the meaning of *ext-dgop*).\n",
|
|
"If this sequence of $\\eta_i$ is void, i.e. if the simplex *gmsm* is not degenerate, the symbol `-` is printed instead.\n",
|
|
"\n",
|
|
"### Functions and macros for the product of simplicial sets\n",
|
|
"\n",
|
|
"`crpr` *dgop1 gmsm1 dgop2 gmsm2* *[Macro]*\n",
|
|
"> Build an object of type `CRPR`, using directly the integer coding for the degeneracy operators. The arguments *gmsm1* and *gmsm2* are non-degenerate simplices.\n",
|
|
"\n",
|
|
"`crpr` *absm1 absm2* *[Macro]*\n",
|
|
"> Build an object of type `CRPR`, using two abstract simplices *absm1* and *absm2*. If these abstract simplices are degenerate, the degeneracy operators must verify the condition of the definition, i.e. no common $\\eta_i$.\n",
|
|
"\n",
|
|
"`2absm-acrpr` *absm1 absm2* *[Function]*\n",
|
|
"> Build an abstract simplex, i.e. object of type `ABSM`, cartesian product of both abstract simplices *absm1* and *absm2*. In contrast with the previous function, there is no condition upon the degeneracy operators of the abstract simplices. Of course, the function `2absm-acrpr` returns a legal abstract simplex.\n",
|
|
"\n",
|
|
"`crpr-p` *object* *[Predicate]*\n",
|
|
">Test if *object* is of type `CRPR`.\n",
|
|
"\n",
|
|
"`dgop1` *crpr* *[Macro]*\n",
|
|
"> Select the degeneracy operator *dgop1* from the object `crpr`.\n",
|
|
"\n",
|
|
"`gmsm1` *crpr* *[Macro]*\n",
|
|
"> Select the geometric simplex *gmsm1* from the object `crpr`.\n",
|
|
"\n",
|
|
"`dgop2` *crpr* *[Macro]*\n",
|
|
"> Select the degeneracy operator *dgop2* from the object `crpr`.\n",
|
|
"\n",
|
|
"`gmsm2` *crpr* *[Macro]*\n",
|
|
"> Select the geometric simplex *gmsm2* from the object `crpr`.\n",
|
|
"\n",
|
|
"`absm1` *crpr* *[Macro]*\n",
|
|
"> Build the abstract simplex `(absm` *dgop1 gmsm1*`)` from *crpr*.\n",
|
|
"\n",
|
|
"`absm2` *crpr* *[Macro]*\n",
|
|
"> Build the abstract simplex `(absm` *dgop2 gmsm2*`)` from *crpr*.\n",
|
|
"\n",
|
|
"`crts-prdc` *smst1 smst2* *[Function]*\n",
|
|
"> Build the simplicial set, cartesian product $smst1 \\times smts2$.\n",
|
|
"\n",
|
|
"### Examples\n",
|
|
"\n",
|
|
"In the first example, note that the coded representations of $\\eta_1$ and $\\eta_2$ are respectively 2 and 4, but these degeneracy operators appear clearly as 1 and 2 in the printed result. In the second statement, the integer 28 is the coded representation of the degeneracy `(4 3 2)`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 120,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<CrPr 1 A 2 B>"
|
|
]
|
|
},
|
|
"execution_count": 120,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(crpr 2 'a 4 'b)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 121,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<CrPr - (0 1 2 3 4 5) 4-3-2 (0 1 2)>"
|
|
]
|
|
},
|
|
"execution_count": 121,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(crpr 0 '(0 1 2 3 4 5) 28 '(0 1 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"For more clarity, one may also write:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 122,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<CrPr - (0 1 2 3 4 5) 4-3-2 (0 1 2)>"
|
|
]
|
|
},
|
|
"execution_count": 122,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(crpr 0 '(0 1 2 3 4 5) (dgop-ext-int '(4 3 2)) '(0 1 2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In the following example, we see that both functions `crpr` and `2absm-acrpr` return the same geometric simplex,"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 123,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<CrPr 2 A 1-0 B>"
|
|
]
|
|
},
|
|
"execution_count": 123,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(crpr (absm 4 'a)(absm 3 'b))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 124,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm - <CrPr 2 A 1-0 B>>"
|
|
]
|
|
},
|
|
"execution_count": 124,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(2absm-acrpr (absm 4 'a)(absm 3 'b))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"whereas, in the following call to `crpr`, the condition upon the degeneracy operator is not respected and the result is an illegal cartesian product. The function `2absm-acrpr` returns the correct answer."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 125,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<CrPr 2-0 A 1-0 B>"
|
|
]
|
|
},
|
|
"execution_count": 125,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(crpr (absm 5 'a)(absm 3 'b))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 126,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<AbSm 0 <CrPr 1 A 0 B>>"
|
|
]
|
|
},
|
|
"execution_count": 126,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(2absm-acrpr (absm 5 'a) (absm 3 'b))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The following example is particularly instructive. The simplicial set whose the realization is homeomorphic to the square is built by using the product of two segments. A call like `(delta n)` builds the standard $n$-simplex. So first, we generate two copies `X` and `Y` of the standard 1-simplex and we list the abstract simplices up to dimension 2 for a better understanding of the components of the product `XY`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 127,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K121 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 127,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def X (delta 1))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 128,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K121 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 128,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def Y X)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 129,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"#<PNG-BYTES {1005CA35A3}>"
|
|
]
|
|
},
|
|
"execution_count": 129,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cl-jupyter-user:png-from-file \"ssquare.png\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In list representation (non-coded simplices), the abstract simplices of $X$ up to the dimension 2, including the degenerate ones are:\n",
|
|
"\n",
|
|
"- Dimension 0: `<AbSm - (0)>, <AbSm - (1)>`. \n",
|
|
"- Dimension 1: `<AbSm 0 (0)>, <AbSm 0 (1)>, <AbSm - (0 1)>`. \n",
|
|
"- Dimension 2: `<AbSm 1-0 (0)>, <AbSm 1-0 (1)>, <AbSm 0 (0 1)>, <AbSm 1 (0 1)>`.\n",
|
|
"\n",
|
|
"Let us look first at the non-degenerate simplices of the simplicial set $X \\times Y$. Those simplices are objects of type `CRPR`. In dimension 1, we see that some projections are degeneracies of vertices and, in dimension 2, the projections are all degeneracies of the 1-simplex `(0 1)` coded as 3. Nevertheless, all the listed simplices are *geometric* simplices (i.e. non-degenerate ones) of the product `XY`. The diagram above shows the relationship between the 3 simplicial sets. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 130,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K126 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 130,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def XY (crts-prdc X Y))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 131,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (<CrPr - 1 - 1> <CrPr - 1 - 2> <CrPr - 2 - 1> <CrPr - 2 - 2>)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : <CrPr - 3 - 3>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 2 - 2>> <AbSm - <CrPr - 1 - 1>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - 3 0 1>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 2 - 1>> <AbSm - <CrPr - 1 - 1>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - 3 0 2>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 2 - 2>> <AbSm - <CrPr - 1 - 2>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 1 - 3>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 1 - 2>> <AbSm - <CrPr - 1 - 1>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 2 - 3>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 2 - 2>> <AbSm - <CrPr - 2 - 1>>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 3 1 3>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - 3 0 2>> <AbSm - <CrPr - 3 - 3>> <AbSm - <CrPr 0 1 - 3>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 1 3 0 3>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr 0 2 - 3>> <AbSm - <CrPr - 3 - 3>> <AbSm - <CrPr - 3 0 1>>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 131,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure XY 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"To be more readable we may translate the coded representations of the degeneracy operators and of the simplices in the list representation:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"```\n",
|
|
"Dimension 0 :\n",
|
|
"\n",
|
|
" Vertices : (<CrPr - (0) - (0)> \n",
|
|
" <CrPr - (0) - (1)> \n",
|
|
" <CrPr - (1) - (0)> \n",
|
|
" <CrPr - (1) - (1)>)\n",
|
|
"\n",
|
|
"Dimension 1 :\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 (0) - (0 1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (0) - (1)> >\n",
|
|
" <AbSm - <CrPr - (0) - (0)> >)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 (1) - (0 1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (1) - (1)> >\n",
|
|
" <AbSm - <CrPr - (1) - (0)> >)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - (0 1) 0 (0)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (1) - (0)> >\n",
|
|
" <AbSm - <CrPr - (0) - (0)> >)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - (0 1) 0 (1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (1) - (1)> >\n",
|
|
" <AbSm - <CrPr - (0) - (1)> >)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - (0 1) - (0 1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (1) - (1)> >\n",
|
|
" <AbSm - <CrPr - (0) - (0)> >)\n",
|
|
"\n",
|
|
"Dimension 2 :\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 (0 1) 1 (0 1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - (0 1) 0 (1)> >\n",
|
|
" <AbSm - <CrPr - (0 1) - (0 1)> >\n",
|
|
" <AbSm - <CrPr 0 (0) - (0 1)> >)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 1 (0 1) 0 (0 1)>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr 0 (1) - (0 1)> >\n",
|
|
" <AbSm - <CrPr - (0 1) - (0 1)> >\n",
|
|
" <AbSm - <CrPr - (0 1) 0 (0)> >)\n",
|
|
"```\n",
|
|
"\n",
|
|
"In an analogous way, let us build the torus as the cartesian product of two 1-spheres. We recall that the base point of the sphere is named `*`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 132,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K136 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 132,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def s1xs1 (crts-prdc (sphere 1) (sphere 1)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 133,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"Dimension = 0:\n",
|
|
"\n",
|
|
" Vertices : (<CrPr - * - *>)\n",
|
|
"\n",
|
|
"Dimension = 1:\n",
|
|
"\n",
|
|
" Simplex : <CrPr - S1 - S1>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - * - *>> <AbSm - <CrPr - * - *>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr - S1 0 *>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - * - *>> <AbSm - <CrPr - * - *>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 * - S1>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - * - *>> <AbSm - <CrPr - * - *>>)\n",
|
|
"\n",
|
|
"Dimension = 2:\n",
|
|
"\n",
|
|
" Simplex : <CrPr 0 S1 1 S1>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr - S1 0 *>> <AbSm - <CrPr - S1 - S1>> <AbSm - <CrPr 0 * - S1>>)\n",
|
|
"\n",
|
|
" Simplex : <CrPr 1 S1 0 S1>\n",
|
|
"\n",
|
|
" Faces : (<AbSm - <CrPr 0 * - S1>> <AbSm - <CrPr - S1 - S1>> <AbSm - <CrPr - S1 0 *>>)"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 133,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(show-structure s1xs1 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let us verify that $S^1\\times S^1$ has the same homology groups as the torus."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 134,
|
|
"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 -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/1 (dimension 0) :\n",
|
|
"<CrPr - * - *> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"<CrPr - S1 - S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"<CrPr - S1 0 *> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"<CrPr 0 * - S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 0 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 1.\n",
|
|
"Rank of the source-module : 3.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/3 (dimension 1) :\n",
|
|
"<CrPr - S1 - S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 2/3 (dimension 1) :\n",
|
|
"<CrPr - S1 0 *> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 3/3 (dimension 1) :\n",
|
|
"<CrPr 0 * - S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"<CrPr 0 S1 1 S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"<CrPr 1 S1 0 S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 1 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---\n",
|
|
"Computing boundary-matrix in dimension 2.\n",
|
|
"Rank of the source-module : 2.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 1/2 (dimension 2) :\n",
|
|
"<CrPr 0 S1 1 S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
";; Clock -> 2016-03-11, 23h 47m 22s.\n",
|
|
"Computing the boundary of the generator 2/2 (dimension 2) :\n",
|
|
"<CrPr 1 S1 0 S1> \n",
|
|
"End of computing.\n",
|
|
"\n",
|
|
"\n",
|
|
"Computing boundary-matrix in dimension 3.\n",
|
|
"Rank of the source-module : 0.\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"Homology in dimension 2 :\n",
|
|
"\n",
|
|
"\n",
|
|
"Component Z\n",
|
|
"\n",
|
|
"\n",
|
|
"---done---"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 134,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 3)(chcm-homology s1xs1 i))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Of course, we may generate more complex products, whose basis are composed of rather long\n",
|
|
"lists of simplices as shown below. The user will also pay attention to the fact that the composition of the macro `crpr` is not associative. In the following example, the simplicial sets located respectively by `p1` and `p2` are different objects, though being canonically isomorphic."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 135,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K146 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 135,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p1 (crts-prdc (sphere 2) (crts-prdc (sphere 2) (sphere 3))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 136,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[K156 Simplicial-Set]"
|
|
]
|
|
},
|
|
"execution_count": 136,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(def p2 (crts-prdc (crts-prdc (sphere 2) (sphere 2)) (sphere 3)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 137,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"1 \n",
|
|
"0 \n",
|
|
"3 \n",
|
|
"22 \n",
|
|
"138 \n",
|
|
"390 \n",
|
|
"480 \n",
|
|
"210 "
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"NIL"
|
|
]
|
|
},
|
|
"execution_count": 137,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"(dotimes (i 8) (print (length (basis p1 i))))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Lisp files concerned in this chapter\n",
|
|
"\n",
|
|
"`simplicial-sets.lisp`, `delta.lisp`, `specials-smsts.lisp`, `cartesian-products.lisp`.\n",
|
|
"\n",
|
|
"[`classes.lisp`, `macros.lisp`, `various.lisp`]."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "SBCL Lisp",
|
|
"language": "lisp",
|
|
"name": "lisp"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": "text/x-common-lisp",
|
|
"mimetype": "text/x-common-lisp",
|
|
"name": "common-lisp",
|
|
"pygments_lexer": "common-lisp",
|
|
"version": "X3J13"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|