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

822 lines
20 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Overview"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this overview we try to show, without entering in detailed explanations, various possibilities of $\\texttt{Kenzo}$ in algebraic topology.\n",
"\n",
"The material is arranged in a sequence of cells. Cells marked with $\\texttt{In [*]}$ represent (editable) input expressions, which in a traditional REPL (Read-Evaluate-Print Loop) would be typed by the user. Cells marked with $\\texttt{Out [*]}$ represent the value of the correpsponding input expression. Note that if an input expression was not evaluated previously, the ouput cell might be missing. Finally, there might be additional, non-editable, diagnostic output printed between an input and output cell. This is a side-effect of the input form evaluation and can be ignored on first reading.\n",
"\n",
"### Getting off the Ground\n",
"\n",
"Load the $\\texttt{Kenzo}$ software by evaluating the follwing expression. When loaded successfully, the value of this form is a single string atom list $(\\texttt{\"kenzo\"})$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(ql:quickload \"kenzo\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The main functionality of the $\\texttt{Kenzo}$ software is defined in a Lisp package called $\\texttt{cat}$. Initialize the software by calling the $\\texttt{cat-init}$ function of the $\\texttt{cat}$ package. Upon successful initialization this form evaluates to $\\texttt{NIL}$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(in-package \"CAT\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(cat-init)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can print the $\\texttt{Kenzo}$ version by calling the $\\texttt{kenzo-version}$ function:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(kenzo-version)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{Kenzo}$ in Action\n",
"\n",
"Let us begin by the space $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}, 3)$ described as a simplicial set having only three non-degenerate simplices, namely in dimension $0$, $3$ and $4$. In the representation created by the software, the $0$-simplex (base point), the $3$-simplex and the $4$-simplex are respectively labelled $\\texttt{\"*\"}$, $\\texttt{M3}$ and $\\texttt{N4}$. Two faces of the $4$-simplex $\\texttt{N4}$ are identified with the $3$-simplex $\\texttt{M3}$, the others being contracted on the base point. To create the simplicial set one types simply: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def m23 (moore 2 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The system answers that a $\\texttt{Kenzo}$ object has been created, with number $1$ and type $\\texttt{SIMPLICIAL SET}$. This object may be referenced by the symbol $\\texttt{m23}$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"m23"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may compute the homology groups of this space, using the underlying chain complex induced by the simplicial set description. Here we compute the $H_i$ from $0$ to $4$ included. When in the answer the component part is void, it means that the corresponding homology group is null."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology m23 0 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As $\\texttt{m23}$ is a simplicial set, it is possible to create the cartesian product $\\texttt{m23}\\times\\texttt{m23}$ by the function $\\texttt{crts-prdc}$. This is a new simplicial set."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def m23xm23 (crts-prdc m23 m23))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Being a simplicial set, $\\texttt{m23xm23}$ is also a chain complex object and we may for instance ask for the basis in dimension $6$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(basis m23xm23 6)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(length *)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As shown by the last command, the number of elements of the basis is quite large (230). The user will note that the basis elements are formed by cartesian products of *degenerated simplices*. In the list, an element like $\\texttt{<CrPr 1-0 N4 5-3-2 M3>}$ means $\\eta_1\\eta_0\\mathrm{N4}\\times\\eta_5\\eta_3\\eta_2\\mathrm{M3}$.\n",
"\n",
"We may construct also the tensor product $\\mathrm{m23}\\otimes\\mathrm{m23}$ from the underlying chain complex of the simplicial set $\\texttt{m23}$. This tensor product is a new chain complex and we see that the basis in dimension $6$ has only one element:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def t2m23 (tnsr-prdc m23 m23))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(basis t2m23 6)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Eilenberg-Zilber theorem is used to compute the homology groups of the cartesian product space: as chain complexes, $\\texttt{m23xm23}$ and $\\texttt{t2m23}$ have the same homology groups, but the computations using the tensor product are considerably faster."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology m23xm23 0 8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us consider now the space $\\mathrm{K}(\\mathbb{Z}, 1)$. This is an Abelian simplicial group created in $\\texttt{Kenzo}$ by the function $\\texttt{k-z}$. In this simplicial group, a simplex in dimension $n$ is mathematically represented by a sequence of integers, known as a *bar* object: $$ [a_1 \\mid a_2 \\mid \\ldots \\mid a_n].$$\n",
"In $\\texttt{Kenzo}$, a non-degenerate simplex of $\\mathrm{K}(\\mathbb{Z}, 1)$ in dimension $n$ will be simply a list of $n$ non-null integers, for instance: $\\texttt{(2 3 4 5)}$. In dimension $0$, the only \n",
"simplex is $\\texttt{NIL}$ (the base point)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def kz1 (k-z 1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But this object is also a *coalgebra* and an *algebra*, and we may \n",
"see the effect of the respective induced *coproduct* and *product*: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(cprd kz1 4 '(2 3 4 5))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(aprd kz1 6 (tnpr 2 '(1 2) 4 '(3 4 5 6)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The printed results are the printed representation of *combinations*, i.e., integer linear combinations of generators resulting from the application of the morphisms. The degree of the combination is indicated by the information: $\\texttt{CMBN n}$. \n",
"\n",
"In the same way, we may create the Abelian simplicial groups $\\mathrm{K}(\\mathbb{Z}/2\\mathbb{Z}, n)$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def k-z2-2 (k-z2 2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology k-z2-2 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us play now with the sphere $S^3$ and its loop spaces. $S^3$ and $\\Omega^2 S^3$ are created by \n",
"respective calls to the functions $\\texttt{sphere}$ and $\\texttt{loop-space}$. Then we compute the $H_4$ and $H_5$ of $\\Omega^2 S^3$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def s3 (sphere 3))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def o2s3 (loop-space s3 2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology o2s3 4 6)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us take now the first loop space $\\Omega^1 S^3$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def os3 (loop-space s3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the following instruction, we locate in the symbol $\\texttt{L1}$ the canonical generator of $\\pi_2 (\\Omega^1S^3)$, that is the $2$-simplex coming from the original sphere. In fact, the object created by the command $\\texttt{(loop3 0 's3 1)}$ is the \"word\" $S3^1$ belonging to the Kan simplicial version $G(S^3)$ (a simplicial group) of the loop space $\\Omega S^3$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def L1 (loop3 0 's3 1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us consider also the $2$-degeneracy of the base point of the loop space. In the printed result, the user will recognize the degeneracy $\\eta_1\\eta_0$ of the null loop, base point of $\\Omega^1 S^3$: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def null-simp (absm 3 +null-loop+))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may build now a new space by pasting a disk $D3$ as indicated by the following call. It means that we \"paste\" to the space $\\texttt{os3}$ a $3$-simplex named $\\texttt{D3}$, the attaching map being described by the list of its faces in dimension $2$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def dos3 (disk-pasting os3 3 '<D3>\n",
" (list L1 null-simp L1 null-simp)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us compute a few homology groups of the new space $\\texttt{dos3}$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology dos3 2 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But more interesting, let us build the loop space of the object $\\texttt{dos3}$ and let us compute the homology in dimension $5$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def odos3 (loop-space dos3))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology odos3 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us continue with the Kan theory. First, we check that $S^3$ is not of type Kan and that $\\Omega S^3$ is indeed of type Kan and a non-Abelian simplicial group."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(typep s3 'kan)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(typep os3 'kan)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(typep os3 'simplicial-group)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(typep os3 'ab-simplicial-group)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us create the word $L2=(S3)^2$, i.e an object belonging to $\\Omega S^3$ and let us apply the product of the underlying algebra upon $L2 \\otimes L2$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def L2 (loop3 0 's3 2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def square (aprd os3 4 (tnpr 2 L2 2 L2)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the result is a linear combination of words composed from degeneracies of $\\texttt{L2}$. The following instruction selects the generator part of the \n",
"second element of the previous combination."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def L4 (gnrt (second (cmbn-list square))))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us use the lisp function $\\texttt{mapcar}$ (one among the various iteration functions of Lisp) to create the list of the faces 1, 2, 3 and 4 of the object $\\texttt{L4}$, this list is a \"Kan hat\"."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def hat (mapcar #'(lambda (i) (face os3 i 4 l4)) '(1 2 3 4)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The function $\\texttt{kfll}$ tries to find a filling of this \"Kan hat\", and we see that the face $2$ of the resulting simplex (which is very different from $\\texttt{L4}$) is the same as the face $2$ of $\\texttt{L4}$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def kan-simplex (kfll os3 0 4 hat))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(face os3 2 4 kan-simplex)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(second hat)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let ${\\cal G}$ be a simplicial group $0$-reduced. $\\Omega S^3$ is such a group. The software $\\texttt{Kenzo}$ allows the construction of the universal bundle $\\bar{\\cal W}{\\cal G}$, i.e. the classifying space of ${\\cal G}$. In our case, as $\\Omega S^3$ in non-Abelian, the result is not a simplicial group but only a simplicial set. We verify that the $H_4$ is null."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def cls-os3 (classifying-space os3))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(typep cls-os3 'simplicial-group)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology cls-os3 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us end this short overview with an example of computation of homotopy groups. The method used in $\\texttt{Kenzo}$ is the Whitehead tower. In this current version only the case where the first non-null homology group (in non-null dimension) is $\\mathbb{Z}$ or $\\mathbb{Z}/{2\\mathbb{Z}}$ can be processed; however if this homology group is a direct sum of several copies of $\\mathbb{Z}$ or $\\mathbb{Z}/{2 \\mathbb{Z}}$, then the corresponding stage of the Whitehead tower may also be constructed step by step.\n",
"\n",
"We take again $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}, 3)$ whose $H_3$ is $\\mathbb{Z}/2\\mathbb{Z}$. First the fundamental cohomology class is constructed:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def ch3 (chml-clss m23 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then the function $\\texttt{z2-whitehead}$ is called to build a fibration over the simplicial set $\\texttt{m23}$ canonically associated to the cohomology class $\\texttt{ch3}$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def f3 (z2-whitehead m23 ch3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then the total space of the fibration is built:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def x4 (fibration-total f3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The $H_4$ of this total space is the $\\pi_4$ of $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z})$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology x4 3 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may now iterate the process, to compute the $\\pi_5$ of $\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z})$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def ch4 (chml-clss x4 4))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def f4 (z2-whitehead x4 ch4))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(def x5 (fibration-total f4))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(homology x5 4 6)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So $\\pi_5(\\mathrm{Moore}(\\mathbb{Z}/2\\mathbb{Z}))$ is $\\mathbb{Z}/4\\mathbb{Z}$."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "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
}