{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "To load \"kenzo\":\n", " Load 1 ASDF system:\n", " kenzo\n", "; Loading \"kenzo\"\n", "\n" ] }, { "data": { "text/plain": [ "#" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(ql:quickload \"kenzo\")\n", "(in-package :cat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Loop spaces fibrations\n", "\n", "## The canonical loop space fibration\n", "\n", "Let $X$ be a simplicial set. The program `Kenzo` implements the *canonical* twisted cartesian product of $X$ by its loop space $GX$, denoted $X \\times_\\tau GX$, giving the Kan (**Daniel M. Kan**. *A combinatorial definition of homotopy groups*, Ann. of Math., 1958, vol. 67, pp 282-312.) model of the contractible path space of $X$. The *canonical fibration*\n", "$$ GX\\quad \\hookrightarrow\\quad X \\times_\\tau GX \\hskip 1.2em \\longrightarrow \\hskip -1.2em \\longrightarrow \n", " \\quad X,$$\n", "is defined by the application $\\tau$, where $\\tau(x)$ is the *letter* $x$ in $GX$. This twisted cartesian product has the same simplices as the non-twisted one. So both associated chain complexes are equal as graded modules. The essential difference resides in the differential morphism. More precisely, the face operator $\\partial_n$ behaves differently in the twisted cartesian product. Let $(x,g) \\in (X \\times_\\tau GX)_n$, then the rules for the face operators are:\n", "$$\n", "\\begin{aligned}\n", "\\partial_i(x,g) & = & (\\partial_i x, \\partial_i g), \\qquad i From the simplicial set $X$, here the argument *space*, return the twisted cartesian product $X \\times_\\tau GX$ (a simplicial set). This function calls internally the functions `loop-space` and `crts-prdc` described in preceding chapters. The slot `grmd` of the resulting instance is set with the ordinary cartesian product $X \\times GX$.\n", "\n", "`dtau-d` *space* *[Function]*\n", "> From the simplicial set $X$, here the argument *space*, build the morphism perturbation (degree -1)\n", "$$d_\\tau - d : C_\\ast(X \\times GX) \\longrightarrow C_\\ast(X \\times GX).$$\n", "The work is essentialy done by the lisp function `dtau-d-intr` which computes the difference between the differential morphisms taking in account the discrepancy between the last face operator ($\\partial_n$) in both chain complexes, $C_\\ast(X \\times_\\tau GX)$ and $C_\\ast(X \\times GX)$.\n", "\n", "`szczarba` *space* *[Function]*\n", "> Starting from the simplicial set $X$, (the argument *space*), return two values: \n", "1- The reduction\n", "$$\n", "\\begin{aligned}\n", "{{\\cal C}_*(X \\times_\\tau GX)}\\quad & \\stackrel{h}{\\longrightarrow} & {}^s{{\\cal C}_*(X \\times_\\tau GX)} \\cr\n", " {\\scriptstyle f} \\downarrow \\uparrow {\\scriptstyle g}\\qquad \\cr\n", " \\quad{{\\cal C}_*(X) \\otimes_t {\\cal C}_*(GX)} \\cr\n", "\\end{aligned}\n", "$$\n", "obtained by perturbing by $d_\\tau-d$ the top chain complex of the reduction \n", "$$\n", "\\begin{aligned}\n", "{{\\cal C}_*(X \\times GX)}\\quad & \\stackrel{h}{\\longrightarrow} & {}^s{{\\cal C}_*(X \\times GX)} \\cr\n", " {\\scriptstyle f} \\downarrow \\uparrow {\\scriptstyle g}\\qquad \\cr\n", " \\quad{{\\cal C}_*(X) \\otimes {\\cal C}_*(GX)} \\cr\n", "\\end{aligned}\n", "$$\n", "2- The morphism corresponding to the perturbation of the bottom chain complex induced by the perturbation $d_\\tau-d$ upon the top chain complex of the above reduction.\n", "\n", "This algorithm implements in particular in a very efficient way the formulas of Szczarba (**R.H. Szczarba.** *The homology of twisted cartesian products.* Transactions of the American Math. Society, 1961, vol. 100, pp. 197-216).\n", "\n", "`twisted-tnsr-prdc` *space* *[Function]*\n", "> Return the twisted tensor product (a chain complex) $C_\\ast(X) \\otimes_t C_\\ast(GX)$. This is done simply by extraction of the bottom chain complex from the reduction `(szczarba` *space*`)`.\n", "\n", "### Examples\n", "\n", "For testing the functions above, we shall use a \"soft\" version of $\\bar{\\Delta}$ analogous to `soft-delta` or `soft-delta-infinity`. The input of the simplices will be done in clear with the help of the macro `code`. As this version does not exist in `Kenzo`, we have modified some functions of `soft-delta`, as indicated." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SOFT-DELTAB-CMPR" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(DEFUN SOFT-DELTAB-CMPR (gmsm1 gmsm2)\n", " (if (= 1 (logcount (cdr gmsm1))) \n", " :EQUAL\n", " (f-cmpr (cdr gmsm1)(cdr gmsm2)) ))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SOFT-DELTAB-BNDR" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(DEFUN SOFT-DELTAB-BNDR (dmns gmsm)\n", " (declare\n", " (fixnum dmns)\n", " (type soft-dlop gmsm))\n", " (the cmbn\n", " (if (< dmns 2)\n", " (zero-cmbn (1- dmns))\n", " (make-cmbn\n", " :degr (1- dmns)\n", " :list (mapcar #'(lambda (term)\n", " (with-term (cffc gmsm) term\n", " (term cffc (d gmsm))))\n", " (cmbn-list (delta-bndr dmns (cdr gmsm))))))))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SOFT-DELTAB" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(DEFUN SOFT-DELTAB ()\n", " (the simplicial-set\n", " (build-smst\n", " :cmpr #'soft-deltab-cmpr\n", " :basis :locally-effective\n", " :bspn (d 1)\n", " :face #'soft-delta-face\n", ";;; :intr-dgnl #'soft-delta-dgnl :dgnl-strt :gnrt\n", " :intr-bndr #'soft-deltab-bndr :bndr-strt :gnrt\n", " :orgn `(soft-deltab))))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CODE" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(defmacro code (arg) `(d (dlop-ext-int ,arg)))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K1 Simplicial-Set]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def db (soft-deltab))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K6 Simplicial-Group]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def gdb (loop-space db))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us compare the faces of a cartesian product in $\\bar{\\Delta} \\times \\Omega(\\bar{\\Delta})$ and the faces of the same object in $\\bar{\\Delta} \\times_\\tau \\Omega(\\bar{\\Delta})$:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K18 Simplicial-Set]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def crts-pr (crts-prdc db gdb))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K23 Simplicial-Set]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def tw-crts-pr (twisted-crts-prdc db))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def smpx (crpr 0 (code '(0 1 2 3 4)) \n", " 0 (loop3 0 (code '(0 1 2 3 4 5)) 1)))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5)\n", " (print (face crts-pr j 4 smpx)))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5)\n", " (print (face tw-crts-pr j 4 smpx)))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def smpx2 (crpr 0 (code '(1 2 3 4 5)) \n", " 0 (loop3 0 (code '(5 6 7 8 9 10)) 1)))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5)\n", " (print (face crts-pr j 4 smpx2)))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5)\n", " (print (face tw-crts-pr j 4 smpx2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The user will have noted that we may obtain the same twisted cartesian product by the fibration theory. Let us define a general function `loop-fbr` with a reduced simplicial set, *space*, as argument. This function uses the function `fibration-total` that we have seen in the chapter about fibrations. Here, we see that the lisp function for the simplicial morphism, (keyword `:sintr`), implements straightforwardly the canonical twisting operator which applies a simplex of $X$ to the corresponding 1-letter word of $GX$." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LOOP-FBR" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(defun loop-fbr (space)\n", " (fibration-total\n", " (build-smmr\n", " :sorc space \n", " :trgt (loop-space space) \n", " :degr -1\n", " :sintr #'(lambda (dmns gmsm) (declare (ignore dmns))\n", " (absm 0 (loop3 0 gmsm 1)))\n", " :orgn `(total-fibration ,space))))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K29 Simplicial-Set]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def fb-tt-db (loop-fbr db))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5)\n", " (print(face fb-tt-db j 4 smpx2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The four following statements show the relationship between the differentials:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K34 Morphism (degree -1): K18 -> K18]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def perturb (dtau-d db))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? perturb 4 smpx2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? crts-pr 4 smpx2)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? tw-crts-pr 4 smpx2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same type of tests may be done with another reduced simplicial set, namely $P^3\\mathbb{R}$." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K35 Simplicial-Set]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def pri3 (R-proj-space 3))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K57 Simplicial-Set]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def tw-pri3 (twisted-crts-prdc pri3))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":LOCALLY-EFFECTIVE" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(basis tw-pri3)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K52 Simplicial-Set]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def crt-pri3 (crts-prdc pri3 (loop-space pri3)))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def s (crpr 0 4 0 (loop3 0 5 1)))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (i 5) (print (face crt-pri3 i 4 s)))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (i 5) (print (face tw-pri3 i 4 s)))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K63 Simplicial-Set]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def fb-tt-pri3 (loop-fbr pri3))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", ">>> \n", ">>> \n", ">>> \n", ">>> \n", ">>> " ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(dotimes (j 5) (print (face fb-tt-pri3 j 4 s)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check now the Szczarba reduction, with the simplicial set $\\bar{\\Delta}$." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K90 Reduction K23 => K88]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def szc-reduc (szczarba db))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "---done---" ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(pre-check-rdct szc-reduc)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(setf *tc* (cmbn 2 1 (crpr 0 (code '(0 1 2)) \n", " 0 (loop3 0 (code '(5 6 7 8)) 1))))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * >>>\n", "<10 * >>>\n", "<100 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(setf *bc* (cmbn 2 1 (tnpr 0 (code '(0)) 2 (loop3 0 (code '(5 6 7 8)) 1))\n", " 10 (tnpr 1 (code '(10 11)) 1 (loop3 0 (code '(0 1 2)) 1))\n", " 100 (tnpr 2 (code '(0 1 2)) 0 (loop3 0 (code '(10 11)) 1))))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "---done---" ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(pre-check-rdct szc-reduc)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "*TC* => \n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n", "\n", "*BC* => \n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * >>>\n", "<10 * >>>\n", "<100 * >>>\n", "------------------------------------------------------------------------------\n", "\n", "Checking *TDD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 0}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *BDD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 0}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *DF-FD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *DG-GD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *ID-FG* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 2}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *ID-GF-DH-HD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 2}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *HH* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *FH* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *HG* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n", "\n", "---done---" ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(check-rdct-no-wait)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice with the twisting cochain.\n", "\n", "Let $B$ be a reduced simplicial set and its loop space $GB$ (a simplicial group). In the following examples, we shall use the efficient `Kenzo` version of the simplicial set $\\bar{\\Delta}$, i.e. the simplices are input and printed under their binary form coding.\n", "\n", "### The twisting cochain.\n", "\n", "The twisting cochain $t$ is the morphism\n", "$$t: aug \\circ d_{\\otimes t} \\circ coaug$$\n", "where,\n", "- $coaug$ is the morphism \n", "$$ coaug: B \\rightarrow B \\otimes GB,$$\n", "$$ coaug(b) = b \\otimes 1_{GB}. $$\n", "- $d_{\\otimes t}$ is the differential morphism of the twisted tensor product $B \\otimes_t GB$.\n", "- $aug$ is the morphism\n", "$$aug: B \\otimes GB \\longrightarrow GB , $$\n", "$$\n", "\\begin{aligned}\n", "aug(b_i \\otimes g_j)& = g_j, & b_i \\in B_0, \\\\\n", "aug(b_i \\otimes g_j)& = 0, & b_i \\in B_k,\\, k\\not=0.\n", "\\end{aligned}\n", "$$\n", "We recall that, as graded modules, $B\\otimes GB$ and $B \\otimes_t GB$ are identical.\n", "\n", "First, we create $\\bar{\\Delta}$ and $G\\bar{\\Delta}$. The function `twisted-tnsr-prdc` extracts the twisted tensor product $\\bar{\\Delta} \\otimes_t G\\bar{\\Delta}$ from the reduction obtained by a call to the function `szczarba`." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K112 Simplicial-Set]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def d (deltab))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K117 Simplicial-Group]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def gd (loop-space d))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K160 Chain-Complex]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def d-twtp-gd (twisted-tnsr-prdc d))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us define the coaugmentation and augmentation morphisms. As usual, it is sufficient to define the algorithm on a generator." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K163 Morphism (degree 0): K112 -> K160]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def coaug (build-mrph \n", " :sorc d \n", " :trgt d-twtp-gd \n", " :degr 0\n", " :intr #'(lambda (degr gnrt)\n", " (term-cmbn degr 1 (tnpr degr gnrt 0 +null-loop+)))\n", " :strt :gnrt \n", " :orgn '(coaug. d --> d-twtp-gd)))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? coaug 3 15)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? coaug (cmbn 4 1 31 1 62 1 124))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K164 Morphism (degree 0): K160 -> K117]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def aug (build-mrph\n", " :sorc d-twtp-gd\n", " :trgt gd\n", " :degr 0\n", " :intr #'(lambda (degr tnpr)\n", " (with-tnpr (degr1 gmsm1 degr2 loop2) tnpr\n", " (declare (ignore gmsm1 degr2))\n", " (if (zerop degr1)\n", " (term-cmbn degr 1 loop2)\n", " (zero-cmbn degr))))\n", " :strt :gnrt\n", " :orgn '(aug. of d-twtp-gd)))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<9 * <>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? aug (cmbn 2 9 (tnpr 0 1 2 (loop3 0 15 1))\n", " 3 (tnpr 1 3 1 (loop3 0 7 1))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The morphism `cochain` is simply a composition of morphisms. We apply it upon the simplices `(0)`, `(0 1 2)`, `(0 1 2 3)`, ..., coded as the integers $1,7,15,\\ldots$." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K166 Morphism (degree -1): K112 -> K117]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def cochain (i-cmps aug (dffr d-twtp-gd) coaug))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN -1}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 0 1)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<1 * <>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 2 7)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * <>>\n", "<-1 * <>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 3 15)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<-1 * <>>\n", "<1 * <>>\n", "<1 * <>>\n", "<-1 * <>>\n", "<-1 * <>>\n", "<1 * <>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 4 31)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<-1 * <>>\n", "<1 * <>>\n", "<1 * <>>\n", "<-1 * <>>\n", "<-1 * <>>\n", "<1 * <>>\n", "<1 * <>>\n", "<-1 * <>>\n", "<-1 * <>>\n", "<1 * <>>\n", "... ...\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 5 63)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We verify, that for a simplex in dimension $n$, the length of the resulting combination is $(n-1)!$." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "24" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(length(cmbn-list *))" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 5}\n", "<1 * <>>\n", "<-1 * <>>\n", "<-1 * <>>\n", "<1 * <>>\n", "<1 * <>>\n", "<-1 * <>>\n", "<-1 * <>>\n", "<1 * <>>\n", "<1 * <>>\n", "<-1 * <>>\n", "... ...\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? cochain 6 127)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "120" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(length(cmbn-list *))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Expression of the differential $d_{\\otimes t}$\n", "\n", "The differential $d_{\\otimes t}$ of the twisted tensor product $B \\otimes_t GB$ may be expressed as the sum of the differential of the simple tensor product $B \\otimes GB$ and the following morphism of degree -1,\n", "$$\\nabla: B \\otimes GB \\longrightarrow B \\otimes GB,$$\n", "where $\\nabla$ is the composition of the morphisms of the following sequence:\n", "$$B\\otimes GB \\buildrel {\\Delta\\otimes 1_{GB}} \\over \\longrightarrow (B\\otimes B) \\otimes GB\n", " \\buildrel {assoc} \\over \\longrightarrow B \\otimes (B \\otimes GB)\n", " \\buildrel {1_B \\otimes (t \\otimes 1_{GB})} \\over \\longrightarrow B \\otimes (GB \\otimes GB)\n", " \\buildrel {1_B \\otimes \\varpi} \\over \\longrightarrow B \\otimes GB.$$\n", "In the previous formula, $\\Delta$ is the coproduct in the coalgebra $B$, $\\varpi$ is the product in the algebra $GB$, $1_B$ is the identity morphism in $B$ and $1_{GB}$ the identity morphism in $GB$. We need also, as in a previous example, an \"assoc\" morphism for the compound tensor product. The user will note the easiness for coding in `Kenzo` such a long composition of morphisms." ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K167 Chain-Complex]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def 3-left (tnsr-prdc (tnsr-prdc d d) gd))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K169 Chain-Complex]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def 3-right (tnsr-prdc d (tnsr-prdc d gd)))" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K171 Morphism (degree 0): K167 -> K169]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def assoc1 (build-mrph\n", " :sorc 3-left\n", " :trgt 3-right\n", " :degr 0\n", " :intr #'(lambda (degr a2-a) (declare (ignore degr))\n", " (with-tnpr (degra2 gnrta2 degra gnrta) a2-a\n", " (declare (ignore degra2))\n", " (with-tnpr (degr1 gnrt1 degr2 gnrt2) gnrta2\n", " (cmbn (+ degr1 degr2 degra) \n", " 1 (tnpr degr1 \n", " gnrt1 \n", " (+ degr2 degra) \n", " (tnpr degr2 gnrt2 degra gnrta))))))\n", " :strt :gnrt\n", " :orgn '(assoc-double-tensor-product)))" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K172 Morphism (degree 0): K112 -> K112]" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def id-d (idnt-mrph d))" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K173 Morphism (degree 0): K117 -> K117]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def id-gd (idnt-mrph gd))" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K185 Morphism (degree -1): K139 -> K139]" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def nabla \n", " (add (dffr (tnsr-prdc d gd))\n", " (i-cmps (tnsr-prdc id-d (aprd gd))\n", " (tnsr-prdc id-d (tnsr-prdc cochain id-gd))\n", " assoc1\n", " (tnsr-prdc (cprd d) id-gd))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We verify that the morphism `nabla` and the differential of the twisted tensor product (accessible through the symbol `d-twtp-gd`) return the same results:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? (dffr d-twtp-gd) 2 (tnpr 1 3 1 (loop3 0 7 1)))" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? nabla 2 (tnpr 1 3 1 (loop3 0 7 1)))" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K186 Morphism (degree -1): K139 -> K139]" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def zero (sbtr nabla (dffr d-twtp-gd)))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero 2 (tnpr 1 3 1 (loop3 0 7 1)))" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero 5 (tnpr 3 15 2 (loop3 0 15 1)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The cup product of the twisting cochain\n", "\n", "The cup product $t \\sqcup t$ of the twisting cochain $t$,\n", "$$t\\sqcup t: B \\longrightarrow GB$$\n", "is defined by the following composition of morphisms:\n", "$$B \\buildrel {\\Delta} \\over \\longrightarrow B \\otimes B\n", " \\buildrel {t \\otimes t} \\over \\longrightarrow GB \\otimes GB \n", " \\buildrel {\\varpi} \\over \\longrightarrow GB.$$\n", "We may now verify the formula\n", "$$ d_{GB} \\circ t + t \\circ d_B + t\\sqcup t =0,$$\n", "where $d_B$ and $d_{GB}$ are the respective differential morphisms in $B$ and $GB$." ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K189 Morphism (degree -2): K112 -> K117]" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def t-cup-t (i-cmps (aprd gd) (tnsr-prdc cochain cochain) (cprd d)))" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K190 Morphism (degree -2): K112 -> K117]" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def dt (cmps (dffr gd) cochain))" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K191 Morphism (degree -2): K112 -> K117]" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def td (cmps cochain (dffr d)))" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K193 Morphism (degree -2): K112 -> K117]" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def zero-2 (i-add dt td t-cup-t))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero-2 3 15)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero-2 4 31)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero-2 5 63)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero-2 6 127)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So the user has easily verified the *cochain condition* for the twisting cochain $t$.\n", "\n", "## The essential contraction\n", "\n", "It is known that if $B$ is a reduced simplicial set, the space $B \\times_\\tau GB$ is contractible. So it is possible to build a reduction of this space over $\\mathbb{Z}$. This reduction depends of the important contraction\n", "$$\\chi_{\\times\\tau}: {{\\cal C}_*(B) \\times_\\tau {\\cal C}_*(GB)} \\longrightarrow \n", " {{\\cal C}_*(B) \\times_\\tau {\\cal C}_*(GB)}, $$\n", "which is a homotopy operator (degree: $+1$) satisfying the relation\n", "$$d \\circ \\chi_{\\times\\tau} + \\chi_{\\times\\tau} \\circ d =1.$$\n", "Now, from the reduction\n", "$$\n", "\\begin{aligned}\n", "{{\\cal C}_*(X \\times_\\tau GX)} \\quad& \\stackrel{h}{\\longrightarrow} & {}^s{{\\cal C}_*(X \\times_\\tau GX)} \\cr\n", " {\\scriptstyle f} \\downarrow \\uparrow {\\scriptstyle g} \\qquad \\cr\n", " {{\\cal C}_*(X) \\otimes_t {\\cal C}_*(GX)} \\cr\n", "\\end{aligned}\n", "$$\n", "there is also an induced contraction \n", "$$\\chi_{\\otimes t}: {{\\cal C}_*(B) \\otimes_t {\\cal C}_*(GB)} \\longrightarrow \n", " {{\\cal C}_*(B) \\otimes_t {\\cal C}_*(GB)}, $$\n", "defined by $\\chi_{\\otimes t}= f \\circ \\chi_{\\times\\tau} \\circ g$.\n", "This implies that the twisted tensor product is also contractible over $\\mathbb{Z}$.\n", "\n", "The two functions of `Kenzo` for this construction are:\n", "\n", "`crts-contraction` *space* *[Function]*\n", "> Return the homotopy morphism corresponding to the contraction $\\chi_{\\times\\tau}$. The lisp definition is:\n", "```commonlisp\n", " (defun CRTS-CONTRACTION \n", " (space\n", " &aux (twisted-crts-prdc (twisted-crts-prdc space)))\n", " (the morphism\n", " (build-mrph\n", " :sorc twisted-crts-prdc \n", " :trgt twisted-crts-prdc \n", " :degr +1\n", " :intr (crts-contraction-intr \n", " (cmpr space)\n", " (bspn space) \n", " (face space) \n", " (cmpr twisted-crts-prdc))\n", " :strt :gnrt\n", " :orgn `(crts-contraction ,space))))\n", "```\n", "At execution time, the work is essentialy done by the function put in the slot `:intr`.\n", "\n", "`tnpr-contraction` *space* *[Function]*\n", "> Return the induced morphism $\\chi_{\\otimes t}= f \\circ \\chi_{\\times\\tau} \\circ g$, as shown by the lisp definition:\n", "```commonlisp\n", " (defun TNPR-CONTRACTION \n", " (space\n", " &aux (szczarba (szczarba space))\n", " (f (f szczarba))\n", " (g (g szczarba))\n", " (crts-contraction (crts-contraction space)))\n", " (the morphism\n", " (i-cmps f crts-contraction g)))\n", "```\n", "\n", "### Examples\n", "\n", "Let us use again our familiar simplicial set $\\bar\\Delta$. First we apply the homotopy operator $\\chi_{\\times t}$ upon various generators. Note that the binary coding of the simplices allows normal arithmetic operators to generate them." ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K112 Simplicial-Set]" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def delta (deltab))" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K194 Morphism (degree 1): K134 -> K134]" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def chi-x (crts-contraction delta))" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 0 (crpr 0 1 0 +null-loop+))" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 0 (crpr 0 1 0 (loop3 0 96 1)))" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 0 (crpr 0 1 0 (loop3 0 96 1 0 (+ 256 128) 1)))" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 0 (crpr 0 1 0 (loop3 0 96 1 0 (+ 256 128) 1 0 (+ 512 1024) 1)))" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 0 (crpr 0 1 0 (loop3 0 96 2)))" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 1 (crpr 0 3 0 (loop3 0 (+ 32 64 128) 1)))" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 2 (crpr 0 7 0 (loop3 0 (+ 32 64 128 256) 1)))" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 2 7 1 (loop3 2 (+ 32 64 128) 2 4 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 2 7 4 (loop3 2 (+ 32 64 128) 2 1 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 2 7 1 (loop3 2 (+ 32 64 128) -2 4 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 2 7 4 (loop3 2 (+ 32 64 128) -2 1 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 1 7 2 (loop3 2 (+ 32 64 128) 2 4 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 4 7 2 (loop3 2 (+ 32 64 128) 2 1 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 1 7 2 (loop3 2 (+ 32 64 128) -2 4 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-x 3 (crpr 4 7 2 (loop3 2 (+ 32 64 128) -2 1 (+ 32 64 128) 2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, for testing $\\chi_{\\otimes t}$ we use the image of all those generators by the function `f` of the Brown reduction.\n", "$$\n", "\\begin{aligned}\n", " {{\\cal C}_*(X \\times_\\tau GX)} \\quad& \\stackrel{h}{\\longrightarrow} & {}^s{{\\cal C}_*(X \\times_\\tau GX)} \\cr\n", " {\\scriptstyle f} \\downarrow \\uparrow {\\scriptstyle g}\\qquad \\cr\n", " {{\\cal C}_*(X) \\otimes_t {\\cal C}_*(GX)} \\cr\n", "\\end{aligned}\n", "$$" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "T" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(setf *tnpr-with-degrees* t)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K196 Morphism (degree 1): K160 -> K160]" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def chi-t (tnpr-contraction delta))" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K162 Reduction K134 => K160]" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def reduc (szczarba delta))" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K152 Morphism (degree 0): K134 -> K160]" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def f (f reduc))" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 0 (crpr 0 1 0 +null-loop+))" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 0 (crpr 0 1 0 (loop3 0 96 1)))" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 0 (crpr 0 1 0 (loop3 0 96 1 0 (+ 256 128) 1)))" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 0 (crpr 0 1 0 (loop3 0 96 1 0 (+ 256 128) 1 0 (+ 512 1024) 1)))" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 0 (crpr 0 1 0 (loop3 0 96 2)))" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 1}\n", "<1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 1 (crpr 0 3 0 (loop3 0 (+ 32 64 128) 1)))" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<-1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 2}\n", "<-1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 2 (crpr 0 7 0 (loop3 0 (+ 32 64 128 256) 1)))" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 2 7 1 (loop3 2 (+ 32 64 128) 2 4 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 2 7 4 (loop3 2 (+ 32 64 128) 2 1 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 2 7 1 (loop3 2 (+ 32 64 128) -2 4 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 2 7 4 (loop3 2 (+ 32 64 128) -2 1 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 1 7 2 (loop3 2 (+ 32 64 128) 2 4 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 4 7 2 (loop3 2 (+ 32 64 128) 2 1 (+ 32 64 128) -2)))" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 1 7 2 (loop3 2 (+ 32 64 128) -2 4 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? f 3 (crpr 4 7 2 (loop3 2 (+ 32 64 128) -2 1 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? chi-t *)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We verify now the required property of the homotopy operator $\\chi_{\\times\\tau}$. As usual, we build by composition a morphism `zero`." ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K135 Morphism (degree -1): K134 -> K134]" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def dfr (bndr (twisted-crts-prdc delta)))" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K201 Morphism (degree 0): K134 -> K134]" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def zero (i-sbtr (idnt-mrph (sorc dfr)) (cmps dfr chi-x) \n", " (cmps chi-x dfr)))" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def simplx (crpr 4 7 2 (loop3 2 (+ 32 64 128) -2 1 (+ 32 64 128) 2)))" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 128, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero 3 simplx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, we do the same test for the homotopy operator $\\chi_{\\otimes t}$." ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K160 Chain-Complex]" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def tw (twisted-tnsr-prdc d))" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K206 Morphism (degree 0): K160 -> K160]" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def zero-2 (i-sbtr (idnt-mrph tw) (cmps tw chi-t) (cmps chi-t tw)))" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def simpx2 (tnpr 0 1 3 (loop3 0 (mask 5) 2 0 (* 32 (mask 5)) -1)))" ] }, { "cell_type": "code", "execution_count": 132, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(time (? zero-2 3 simpx2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note nevertheless that the relation is not satisfied for the base generator $*\\otimes *$, namely the tensor product of both base generators. This is due to the fact that both contractions, $\\chi_{\\times t}$ and $\\chi_{\\otimes t}$, correspond to reductions over $\\mathbb{Z}$ and not on 0." ] }, { "cell_type": "code", "execution_count": 133, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def gnrt-0 (tnpr 0 1 0 +null-loop+))" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? zero-2 0 gnrt-0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us build, for instance, the reduction of the twisted tensor product over $\\mathbb{Z}$ and check it. In that case, the two homomorphisms $f$ and $g$ are respectively the *augmentation* and *coaugmentation* morphisms.\n", "$$\n", "\\begin{aligned}\n", "{{\\cal C}_*(B) \\otimes_t {\\cal C}_*(GB)} & \\qquad\\stackrel{\\chi_{\\otimes t}}{\\longrightarrow} &\n", " {}^s{{\\cal C}_*(B) \\otimes_t {\\cal C}_*(GB)} \\cr\n", " {\\scriptstyle aug} \\downarrow \\uparrow {\\scriptstyle coaug}\\quad & & \\cr\n", " {{\\cal C}_*(\\mathbb{Z})} \\qquad& & \\cr\n", "\\end{aligned}\n", "$$\n", "We recall that, the unit chain complex corresponding to $\\mathbb{Z}$ is built by the function `z-chcm`. The unique generator in degree 0 is `:z-gnrt`." ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K209 Cohomology-Class on K160 of degree 0]" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def aug (build-mrph\n", " :sorc tw \n", " :trgt (z-chcm) \n", " :degr 0\n", " :intr #'(lambda (degr gnrt) (declare (ignore gnrt))\n", " (if (zerop degr)\n", " (term-cmbn 0 1 :z-gnrt)\n", " (zero-cmbn degr)))\n", " :strt :gnrt \n", " :orgn '(aug tw)))" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K210 Morphism (degree 0): K207 -> K160]" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def coaug (build-mrph\n", " :sorc (z-chcm) \n", " :trgt tw \n", " :degr 0\n", " :intr #'(lambda (degr gnrt) (declare (ignore gnrt))\n", " (if (zerop degr)\n", " (term-cmbn 0 1 (tnpr 0 1 0 +null-loop+))\n", " (zero-cmbn degr)))\n", " :strt :gnrt\n", " :orgn '(coaug tw)))" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K211 Reduction K160 => K207]" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def rdct (build-rdct :f aug \n", " :g coaug \n", " :h Chi-t \n", " :orgn '(reduction-tw-Z)))" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "---done---" ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(pre-check-rdct rdct)" ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(setf *tc* (cmbn 3 1 (tnpr 1 3 2 (loop3 0 15 2))))" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * Z-GNRT>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(setf *bc* (cmbn 0 1 :z-gnrt))" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "*TC* => \n", "----------------------------------------------------------------------{CMBN 3}\n", "<1 * >>>\n", "------------------------------------------------------------------------------\n", "\n", "*BC* => \n", "----------------------------------------------------------------------{CMBN 0}\n", "<1 * Z-GNRT>\n", "------------------------------------------------------------------------------\n", "\n", "Checking *TDD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *BDD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN -2}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *DF-FD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 2}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *DG-GD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN -1}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *ID-FG* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 0}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *ID-GF-DH-HD* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 3}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *HH* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 5}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *FH* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 4}\n", "------------------------------------------------------------------------------\n", "\n", "Checking *HG* = 0\n", "Result: \n", "----------------------------------------------------------------------{CMBN 1}\n", "------------------------------------------------------------------------------\n", "\n", "---done---" ] }, { "data": { "text/plain": [ "NIL" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(check-rdct-no-wait)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## An unproved property of the algebraic Kan contraction\n", "\n", "Since the early version of the software (1990), and through a host of examples, an amazing algebraic property of the Kan contraction $\\chi_{\\otimes t}$ has been experimentally discovered. Many computations have been done of $\\chi_{\\otimes t}(b \\otimes g)$, for various choices of $b \\otimes g$ and in all these cases, as soon as $degree(b) > 0$, then the result is null.\n", "In other words, $\\chi_{\\otimes t}$ *is null outside the base fiber.* Up to now, no actual proof of this result has yet been given.\n", "\n", "We show that, using the \"soft\" version of $\\bar{\\Delta}$." ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K1 Simplicial-Set]" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def db (soft-deltab))" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[K231 Morphism (degree 1): K88 -> K88]" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def tt (tnpr-contraction db))" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def gnrt1 (tnpr 3 (code '(0 1 2 3 4)) \n", " 4 (loop3 0 (code '(0 1 2 3 4 5)) 2)))" ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 8}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? tt 7 gnrt1)" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ">>" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(def gnrt2 (tnpr 4 (code '(2 4 6 8 10 12)) \n", " 5 (loop3 0 (code '(1 3 5 7 9 11 13)) 5)))" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 10}\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? tt 9 gnrt2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But if $degree(b) = 0$, then the result is non-null in general." ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 3}\n", "<-1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? tt 2 (tnpr 0 (code '(0)) 2 (loop3 0 (code '(0 1 2 3)) 1)))" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "----------------------------------------------------------------------{CMBN 5}\n", "<1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "<-1 * >>>\n", "<1 * >>>\n", "<1 * >>>\n", "<-1 * >>>\n", "... ...\n", "------------------------------------------------------------------------------\n" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(? tt 4 (tnpr 0 (code '(0)) 4 (loop3 0 (code '(1 2 3 4 5 6)) 3)))" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "535" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(length (cmbn-list *))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lisp file concerned in this chapter\n", "\n", "`ls-twisted-products.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": 1 }