kenzo/doc/doc_src/coaldoc.tex
2015-07-01 22:46:17 +01:00

657 lines
29 KiB
TeX

\chapter{Coalgebras and cobars}
\section{Introduction}
The implementation of coalgebras and cobars follows closely the section $6$ of the paper
{\em Effective Homology: a survey}\footnote{Available
at the web site {\bf http://www-fourier.ujf.grenoble.fr/\~\,sergerar/}}.
\section{Coalgebras}
A coalgebra is a pair $(C, \chi)$ where
\begin{enumerate}
\item $C$ is a chain complex.
\item $\chi$ (the {\em coproduct}) is a chain complex morphism
$$\chi: C \rightarrow C \otimes C.$$
\end{enumerate}
These components must satisfy the usual structural properties of the coalgebras\footnote
{{\bf Mac Lane}, Homology, section VI-9. Springer 1970.}.
\subsection {Implementation of a coalgebra}
A coalgebra\index{class!{\tt COALGEBRA}} is represented as an instance
of the CLOS class {\tt COALGEBRA}, subclass
of the {\tt CHAIN COMPLEX} class. The definition of this new class is simply:
{\footnotesize\begin{verbatim}
(DEFCLASS COALGEBRA (chain-complex)
((cprd :type morphism :initarg :cprd :reader cprd1))) ;; coproduct
\end{verbatim}}
So, this new class inherits the slots of the {\tt CHAIN COMPLEX} class and has a slot
of its own, namely {\tt cprd}, a morphism object representing the coproduct. The user will note
the important following fact that, {\bf once a coalgebra has been defined, one may use on it any
function or method applicable to a chain complex}.
\subsection {The function build-clgb}
To\index{function!{\tt build-clgb}} facilitate the construction of instances of the {\tt COALGEBRA} class, the
software provides the function {\tt build-clgb},
\vskip 0.40cm
{\tt build-clgb :cmpr} {\em cmpr} {\tt :basis} {\em basis} {\tt :bsgn} {\em bsgn} {\tt :intr-dffr} {\em intr-dffr} \par
\hspace*{22.5mm}{\tt :dffr-strt} {\em dffr-strt} {\tt :intr-cprd} {\em intr-cprd} \par
\hspace*{22.5mm}{\tt :cprd-strt} {\em cprd-strt} {\tt :orgn} {\em orgn}
\vskip 0.40cm
defined with keyword parameters. The returned value is an instance of type {\tt COALGEBRA}.
The keyword arguments are:
\begin{itemize}
\item[--] {\em cmpr}, a comparison function for generators.
\item[--] {\em basis}, the basis function for the underlying chain complex.
\item[--] {\em bsgn}, the base point, a generator of any type.
\item[--] {\em intr-dffr}, the differential lisp function for the chain complex.
\item[--] {\em dffr-strt}, the strategy ({\tt :gnrt} or {\tt :cmbn}) for the differential.
\item[--] {\em intr-cprd}, the lisp function for the coproduct of the coalgebra.
\item[--] {\em cprd-strt}, the strategy ({\tt :gnrt} or {\tt :cmbn}) for the coproduct.
\item[--] {\em orgn}, an adequate comment list.
\end{itemize}
The function {\tt build-clgb} calls the function {\tt build-chcm} and with the help of the function
{\tt build-mrph} builds the coproduct morphism of degree $0$, to settle the
slot {\tt crpd} of the instance. According to the definition, the
source slot of the coproduct morphism is the underlying chain complex and the target slot
is the tensor product of this chain complex with itself. As to the other objects,
an identification number $n$ (slot {\tt idnm}) is assigned to this Kenzo object and the
{\tt COALGEBRA} instance is pushed onto the list {\tt *clgb-list*}.
The associated printing method prints a string like
{\tt [K{\em n} Coalgebra]}.
\subsection {Miscellaneous functions and macros for coalgebras}
{\parindent=0mm
{\leftskip=5mm
{\tt cat-init} \hfill {\em [Function]} \par}
{\leftskip=15mm
Clear among others, the list {\tt *clgb-list*}, list of user created coalgebras and reset
the global counter to $1$. \par}
{\leftskip=5mm
{\tt clgb} {\em n}\hfill {\em [Function]} \par}
{\leftskip=15mm
Retrieve in the list {\tt *clgb-list*} the coalgebra instance whose identification is $n$.
If it does not exist, return {\tt NIL}. \par}
{\leftskip=5mm
{\tt cprd} {\em clgb} {\tt \&rest} \hfill {\em [Macro]} \par}
{\leftskip=15mm
Versatile macro relative to the coproduct of a coalgebra. The first argument is a {\tt COALGEBRA}
instance. With only one argument, this macro returns the coproduct morphism of the coalgebra.
With more arguments, it applies the coproduct morphism on a combination ({\tt (cprd {\em clgb cmbn})})
or on a pair {\em degree, generator} ({\tt (cprd {\em clgb degr gnrt})}). \par}
{\leftskip=5mm
{\tt change-chcm-to-clgb} {\em chcm} {\tt :intr-cprd} {\em intr-cprd} {\tt :cprd-strt} {\em cprd-strt} \par
\hspace* {10mm}{\tt :orgn} {\em orgn} \par}
{\leftskip=15mm
Build a coalgebra instance from the already created chain complex {\em chcm}. The user must give via key
parameters a lisp function for the coproduct, the strategy and a comment list. \par}
}
\section {Cobar of a coalgebra}
Let ${\cal A}$ be a coalgebra, ${\cal M}$ a right ${\cal A}$-comodule, ${\cal N}$ a left ${\cal A}$-comodule.
It means that there exist coproducts $\chi_{\cal M}$ and $\chi_{\cal N}$:
$$\chi_{\cal M}: {\cal M} \longrightarrow {\cal M}\otimes {\cal A},\quad
\chi_{\cal N}: {\cal N} \longrightarrow {\cal A}\otimes {\cal N}. $$
It is possible to build a chain complex denoted $Cobar^{\cal A}({\cal M}, {\cal N})$,
$$Cobar^{\cal A}({\cal M}, {\cal N}) = \bigoplus_p
{\cal M}\otimes {\bar{\cal A}}^{\otimes p} \otimes {\cal N}.$$
This section is devoted to the particular case ${\cal M}={\cal N}={\Z}$.
\par
So, let\index{cobar!of a coalgebra} ${\cal A}$ be a coalgebra , assumed $1$--connected,
i.e. ${\cal A}_1 = 0$ and ${\cal A}_0 \simeq {\Z}$,
we consider the chain complex, $Cobar^{{\cal A}}({\Z}, {\Z})$, noted more simply $Cobar({\cal A})$,
whose $n$-th component is:
$$ [Cobar({\cal A})]_n = \bigoplus ({\bar{\cal A}}_{i1} \otimes \cdots \otimes {\bar{\cal A}}_{ik}),\quad i_j >0, \quad
i1 + \cdots + ik= n+k.$$
A tensor product $g_1 \otimes \cdots \otimes g_k$, where
$g_i$ is a generator of ${\bar{\cal A}}_{i}$ is called, in the software {\tt Kenzo},
an\index{algebraic loop} {\bf algebraic loop}.
The reason is the following: if $X$ is a $1$--connected simplicial set, we shall see in a next
chapter that the program {\tt Kenzo} constructs
a homotopy equivalence between the chain complex of the loop space ${\cal C}_*(GX)$
and $Cobar({\cal C}_*(X)) = Cobar^{{\cal C}_*(X)}({\Z}, {\Z})$,
so that a generator of the last chain complex is a kind of ``algebraic'' version of a generator of a loop space.
The definition of differential of the Cobar is recalled hereafter.
\subsection {Representation of an algebraic loop}
An algebraic loop\index{algebraic loop!representation} is represented by a lisp object of the form:
\begin{center} {\tt (:ALLP ($i_1\,.\, g_1$) \ldots ($i_k\,.\, g_k$))} \end{center}
where the $i_j$ are the degrees {\bf in the cobar chain complex} of the generators $g_j$.
In the original coalgebra $\cal A$, the generators $g_j$ had the degree $i_j+1$.
The corresponding type is {\tt ALLP}.
The function to build such an object is also called {\tt allp}
\vskip 0.35cm
{\parindent=0mm
{\leftskip=5mm
{\tt allp} {\em degr1 gnr1 degr2 gnr2 ... degrk gnrk}\hfill {\em [Function]} \par}
{\leftskip=15mm
Construct an algebraic loop, i.e. a tensorial product of degree $\sum degr_i$. The sequence of pairs
$\lbrace degr_i,\, gnr_i \rbrace$ has an undefinite length and may be void. In this case, the algebraic loop
is the null algebraic loop, identified in the system by the constant {\tt +null-allp+}.
The function {\tt allp} accepts also as unique argument a list of the form
{\em {\tt (}degr1 gnr1 degr2 gnr2 ... degrk gnrk{\tt )}} \par}
{\leftskip=5mm
{\tt allp-p} {\em object}\hfill {\em [Function]} \par}
{\leftskip=15mm
Test if {\em object} is an algebraic loop. \par}
}
\vskip 0.35cm
The associated printing method prints the object under the form:
\begin{center}
{\tt <<AlLp [$i_1$ $g_1$] ... [$i_k$ $g_k$]>>}
\end{center}
The user will have noted that in the Cobar, each generator $g_i$ appears with its own degree in the
underlying chain complex, {\bf lowered by $1$}.
\subsection {Definition of the chain complex Cobar}
The\index{chain complex!cobar} definition of the differential\index{cobar!differential} in the Cobar,
will be done in three steps. This is better understood,
if we consider the following diagram. We recall that the elements of $({\bar{\cal A}}_*^{\otimes_p})_q$ are
by convention of degree $q-p$ in the Cobar.
\begin{itemize}
\item A chain complex called {\tt vertical-cobar} is defined with the {\em vertical differential} $d_v$.
In this case, only the underlying chain complex structure is used.
\item A horizontal differential $d_h$ is defined. This uses the co\-pro\-duct structure.
\item The final chain complex {\tt cobar} is created with differential $d_v+d_h$.
\end{itemize}
$$\diagram{
% & & \vdots & & \vdots \cr
& & \downarrow & & \downarrow \cr
\cdots & \rightarrow & ({\bar{\cal A}}_*^{\otimes p})_q & \buildrel {d_h} \over \longrightarrow
& ({\bar{\cal A}}_*^{\otimes {p+1}})_q & \rightarrow & \cdots \cr
% & & \vfl {\displaystyle {d_v}}{}
% & & \vfl {\displaystyle {d_v}}{} \cr
& & \downarrow {\scriptstyle d}_v & & \downarrow {\scriptstyle d}_v \cr
\cdots & \rightarrow &({\bar{\cal A}}_*^{\otimes p})_{q-1} & \buildrel {d_h} \over \longrightarrow
& ({\bar{\cal A}}_*^{\otimes {p+1}})_{q-1} & \rightarrow & \cdots \cr
& & \downarrow & & \downarrow \cr
% & & \vdots & & \vdots \cr
}$$
\subsubsection {Definition of the vertical cobar}
To\index{cobar!vertical} define the vertical cobar chain complex
from a chain complex ${\cal C}$, the following functions are provided:
\vskip 0.35cm
{\parindent=0mm
{\leftskip=5mm
{\tt cobar-cmpr} {\em cmpr}\hfill {\em [Function]} \par}
{\leftskip=15mm
From the comparison function {\em cmpr}, build a comparison function for objects
of algebraic loop type. \par}
{\leftskip=5mm
{\tt cobar-basis} {\em basis}\hfill {\em [Function]} \par}
{\leftskip=15mm
From the function {\em basis} of a chain complex ${\cal C}$, build a basis
function for the vertical cobar chain complex defined on ${\cal C}$. In dimension $0$, there
is only one basis element, namely the null algebraic loop. If ${\cal C}$ is locally effective,
this function returns the symbol {\tt :locally-effective}. \par}
{\leftskip=5mm
{\tt cobar-intr-vrtc-dffr} {\em dffr}\hfill {\em [Function]} \par}
{\leftskip=15mm
From the {\tt lisp} function {\em dffr} of a chain complex ${\cal C}$, build a
lisp function for the differential of the vertical cobar chain complex, according to the formula
$$d_v(g_1 \otimes \cdots \otimes g_n)=
\sum_{i=1}^n{(-1)^{n-i+1+{\sum_{j=1}^{i-1}{\mid g_j \mid}}}
g_1 \otimes \cdots \otimes g_{i-1} \otimes {\bf dg_i} \otimes g_{i+1} \otimes \cdots \otimes g_n},$$
where $dg_i$ is the differential of the generator $g_i$ in the original chain complex (function {\em dffr})
and $\mid g_i \mid$ is the degree of the generator $g_i$ {\em in the cobar chain complex}.
In general, the differential $dg_i$ is a sum of tensor products.
So, applying the distribution law, the right member is a sum of tensor products, represented by a combination. \par}
%}
%\newpage
%{\parindent=0mm
{\leftskip=5mm
{\tt vrtc-cobar} {\em chcm}\hfill {\em [Method]} \par}
{\leftskip=15mm
Build the vertical cobar chain complex with underlying chain complex {\em chcm}. This is simply done by the following
call to {\tt build-chcm}:
{\footnotesize\begin{verbatim}
(build-chcm
:cmpr (cobar-cmpr cmpr)
:basis (cobar-basis basis)
:bsgn +null-allp+
:intr-dffr (cobar-intr-vrtc-dffr dffr)
:strt :gnrt
:orgn `(vrtc-cobar ,chcm))
\end{verbatim}}
where, {\em cmpr}, {\em basis} and {\em dffr} are extracted from the chain complex {\em chcm}. Note that
the base generator is the null algebraic loop. \par}
}
\subsection* {Example}
We are going to build a coalgebra which will be reconsidered in a next chapter (Simplicial sets).
It is the coalgebra canonicaly associated to the simplicial set $\Delta_2^{\N}$. This simplicial set is the
quotient of $\Delta^{\N}$ -- the standard simplex spanned by the non--negative integers -- by the relation
identifying, firstly all the vertices with a unique one and then any $1$--simplex of $\Delta^{\N}$ with the
unique degeneracy of this unique vertex. In other words, $\Delta_2^{\N}$ is $1$--reduced: $1$ vertex, no edges. \par
Our implementation represents any non--degenerate $n$--simplex as an integer increasing list of length $n+1$.
In dimension $0$, for every non--negative $m$ and $n$, the vertices {\tt (m)} and {\tt (n)} are identified; in
dimension $1$, the list $(m\, n)$ is always an {\bf illegal} $1$--simplex.
This coalgebra will be located through the symbol {\tt smp-deltab2}. The lisp definition uses the function
{\tt build-smst} that will be described in the simplicial set chapter. For the moment, it is
sufficient to know, that the function {\tt build-smst} allows us to create a coalgebra
suitable for the tests. The definition of $\Delta_2^{\N}$ given here, is only for pedagogical
purpose, an efficient definition using another representation for the simplices
is provided in the software {\tt Kenzo}.
{\footnotesize\begin{verbatim}
(setf smp-deltab2
(build-smst
:cmpr #'(lambda(gsm1 gsm2)
(if(rest gsm1) (l-cmpr gsm1 gsm2) :equal))
:basis :locally-effective
:bspn '(0)
:face #'(lambda (i dmn gsm)
(case dmn
(0 (error ``No face in dimension 0''))
(1 (error ``No non-degenerate simplex in dimension 1''))
(2 (absm 1 '(0)))
(otherwise (absm 0 (append (subseq gsm 0 i)
(subseq gsm (1+ i))))) ))
:orgn '(simple-deltab2)))
\end{verbatim}}
The following statements show the identification of vertices and that the boundary
of a $2$--simplex is null.
{\footnotesize\begin{verbatim}
(cmpr smp-deltab2 '(5) '(0)) ==>
:EQUAL
(? smp-deltab2 2 '(0 1 2)) ==>
----------------------------------------------------------------------{CMBN 1}
------------------------------------------------------------------------------
(? smp-deltab2 3 '(0 1 2 3)) ==>
----------------------------------------------------------------------{CMBN 2}
<-1 * (0 1 2)>
<1 * (0 1 3)>
<-1 * (0 2 3)>
<1 * (1 2 3)>
------------------------------------------------------------------------------
\end{verbatim}}
Let us build the vertical cobar on the coalgebra {\tt smp-deltab2} and apply
the comparison function and the differential on some algebraic loops.
{\footnotesize\begin{verbatim}
(setf precobar (vrtc-cobar smp-deltab2)) ==>
[K6 Chain-Complex]
(bsgn precobar) ==>
(<<AlLp>>)
(setf loop-1 (allp 2 '(0 1 2 3))) ==>
<<AlLp[2 (0 1 2 3)]>>
(setf loop-2 (allp '(2 (1 2 3 4)))) ==>
<<AlLp[2 (1 2 3 4)]>>
(cmpr precobar loop-1 loop-2) ==>
:LESS
(? precobar 2 loop-1) ==>
----------------------------------------------------------------------{CMBN 1}
<1 * <<AlLp[1 (0 1 2)]>>>
<-1 * <<AlLp[1 (0 1 3)]>>>
<1 * <<AlLp[1 (0 2 3)]>>>
<-1 * <<AlLp[1 (1 2 3)]>>>
------------------------------------------------------------------------------
(? precobar *) ==>
----------------------------------------------------------------------{CMBN 0}
------------------------------------------------------------------------------
(setf loop-3 (allp 3 '(0 1 2 3 4) 3 '(1 3 5 7 9))) ==>
<<AlLp[3 (0 1 2 3 4)][3 (1 3 5 7 9)]>>
(? precobar 6 loop-3) ==>
----------------------------------------------------------------------{CMBN 5}
<1 * <<AlLp[2 (0 1 2 3)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[2 (0 1 2 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[2 (0 1 3 4)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[2 (0 2 3 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[2 (1 2 3 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 5 7)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 5 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 7 9)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][2 (1 5 7 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (3 5 7 9)]>>>
------------------------------------------------------------------------------
(? precobar *) ==>
----------------------------------------------------------------------{CMBN 4}
------------------------------------------------------------------------------
(setf loop-4 (allp 3 '(0 1 4 5 6) 4 '(2 3 4 5 6 8) 4 '(0 4 5 6 7 8))) ==>
<<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>
(? precobar 11 loop-4) ==>
----------------------------------------------------------------------{CMBN 10}
<-1 * <<AlLp[2 (0 1 4 5)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[2 (0 1 4 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[2 (0 1 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[2 (0 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[2 (1 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 5 6)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 5 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 6 7)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 6 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (4 5 6 7 8)]>>>
------------------------------------------------------------------------------
(? precobar *) ==>
----------------------------------------------------------------------{CMBN 9}
------------------------------------------------------------------------------
\end{verbatim}}
\newpage
\subsubsection {Definition of the horizontal differential}
So\index{differential!horizontal in cobar} far, the coalgebra structure has not been used
but now it will be the main ingredient.
If we make the convention that the elements of
$({\bar{\cal A}}_*^{\otimes_p})_q$ are of degree $q-p$,
we know that exists a canonical ``horizontal'' differential $d_h$,
$$d_h:({\bar{\cal A}}_*^{\otimes p})_q \longrightarrow ({\bar{\cal A}}_*^{\otimes {p+1}})_q,$$
\begin{eqnarray*}
d_h( g_1 \otimes \cdots \otimes g_p)& = & (-1)^p \Delta g_1 \otimes g_2 \otimes \cdots \otimes g_p \\
& & + (-1)^{p-1} g_1 \otimes \Delta g_2 \otimes \cdots \otimes g_p \\
& & \cdots \\
& & - g_1 \otimes g_2 \otimes \cdots \otimes g_{p-1} \otimes \Delta g_p,
\end{eqnarray*}
where $\Delta$ is the coproduct of the coalgebra. Two functions are designed for that:
\vskip 0.45cm
{\parindent=0mm
{\leftskip=5mm
{\tt cobar-intr-hrzn-dffr} {\em cprd}\hfill {\em [Function]} \par}
{\leftskip=15mm
From the coproduct morphism {\em cprd}, build the lisp function with 2 arguments:
a degree and an algebraic loop (i.e. a generator) implementing the algorithm for $d_h$. \par}
{\leftskip=5mm
{\tt cobar-hrzn-dffr} {\em clbg}\hfill {\em [Function]} \par}
{\leftskip=15mm
Build the horizontal differential morphism, using the slot co\-pro\-duct {\em cprd} of
the coalgebra {\em clbg} and the previous function.
Note that when called, this function creates, if not already created,
the vertical cobar chain complex on {\em clbg}:
{\footnotesize\begin{verbatim}
(build-mrph
:sorc (vrtc-cobar clgb)
:trgt (vrtc-cobar clgb)
:degr -1
:intr (cobar-intr-hrzn-dffr cprd)
:strt :gnrt
:orgn `(cobar-hrzn-dffr ,clgb))
\end{verbatim}}
\par}}
\subsection* {Example}
We still use our simple coalgebra {\tt smp-deltab2}. The horizontal differential uses the coproduct of the coalgebra.
The following examples show the application of the coproduct (note that there are no 1-simplices in the tensor
products). We verify also the property of the horizontal differential.
{\footnotesize\begin{verbatim}
(cprd smp-deltab2 2 '(0 1 2)) ==>
----------------------------------------------------------------------{CMBN 2}
<1 * <TnPr (0) (0 1 2)>>
<1 * <TnPr (0 1 2) (0)>>
------------------------------------------------------------------------------
(cprd smp-deltab2 3 '(1 2 3 4)) ==>
----------------------------------------------------------------------{CMBN 3}
<1 * <TnPr (0) (1 2 3 4)>>
<1 * <TnPr (1 2 3 4) (0)>>
------------------------------------------------------------------------------
(cprd smp-deltab2 4 '(0 1 2 3 4)) ==>
----------------------------------------------------------------------{CMBN 4}
<1 * <TnPr (0) (0 1 2 3 4)>>
<1 * <TnPr (0 1 2) (2 3 4)>>
<1 * <TnPr (0 1 2 3 4) (0)>>
------------------------------------------------------------------------------
(setf dh-mrph (cobar-hrzn-dffr smp-deltab2)) ==>
[K8 Morphism (degree -1)]
loop-1 ==>
<<AlLp[2 (0 1 2 3)]>>
(? dh-mrph 2 loop-1) ==>
----------------------------------------------------------------------{CMBN 1}
------------------------------------------------------------------------------
loop-3 ==>
<<AlLp[3 (0 1 2 3 4)][3 (1 3 5 7 9)]>>
(? dh-mrph 6 loop-3) ==>
----------------------------------------------------------------------{CMBN 5}
<1 * <<AlLp[1 (0 1 2)][1 (2 3 4)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][1 (1 3 5)][1 (5 7 9)]>>>
------------------------------------------------------------------------------
\end{verbatim}}
\newpage
{\footnotesize\begin{verbatim}
(? dh-mrph *) ==>
----------------------------------------------------------------------{CMBN 4}
------------------------------------------------------------------------------
loop-4 ==>
<<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>
(? dh-mrph 11 loop-4) ==>
----------------------------------------------------------------------{CMBN 10}
<-1 * <<AlLp[1 (0 1 4)][1 (4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][1 (2 3 4)][2 (4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][2 (2 3 4 5)][1 (5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][1 (0 4 5)][2 (5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][2 (0 4 5 6)][1 (6 7 8)]>>>
------------------------------------------------------------------------------
(? dh-mrph *) ==>
----------------------------------------------------------------------{CMBN 9}
------------------------------------------------------------------------------
\end{verbatim}}
\subsubsection {Final definition of the cobar of a coalgebra}
To define completely the cobar chain complex\index{cobar! of a coalgebra},
we have to provide the lisp function
for the differential $d_v + d_h$ and, once created the vertical cobar chain complex,
to call the building function {\tt build-chcm} with adequate arguments.
\vskip 0.45cm
{\parindent=0mm
{\leftskip=5mm
{\tt cobar-intr-dffr} {\em vrtc-dffr hrzn-dffr}\hfill {\em [Function]} \par}
{\leftskip=15mm
Define the lisp function for the differential $d_v+d_h$ from the two morphisms
{\em vrtc-dffr} and {\em hrzn-dffr}. For efficiency reasons, the implementor
has chosen to define this new function rather than to use simply
the addition of two morphisms.\par}
{\leftskip=5mm
{\tt cobar} {\em coalgebra}\hfill {\em [Method]} \par}
{\leftskip=15mm
Build first the vertical cobar chain complex on the coalgebra. Then return a chain complex
with the same slots as the vertical cobar chain complex but with new {\tt :intr-dffr}
and {\tt :orgn} slots, as shown in the following definition: \par}
}
\newpage
{\footnotesize\begin{verbatim}
(defmethod COBAR ((coalgebra coalgebra))
(let ((vrtc-cobar (vrtc-cobar coalgebra))
(cobar-hrzn-dffr (cobar-hrzn-dffr coalgebra)))
(declare (type chain-complex vrtc-coabr hrzn-cobar))
(the chain-complex
(build-chcm
:cmpr (cmpr vrtc-cobar)
:basis (basis vrtc-cobar)
:bsgn +null-allp+
:intr-dffr (cobar-intr-dffr (dffr vrtc-cobar)
cobar-hrzn-dffr)
:strt :gnrt
:orgn `(add ,vrtc-cobar ,cobar-hrzn-dffr)))))
\end{verbatim}}
\subsection* {Example}
We may now build the cobar of {\tt smp-deltab2} and test the differential.
{\footnotesize \begin{verbatim}
(setf cobar-deltab2 (cobar smp-deltab2)) ==>
[K9 Chain-Complex]
loop-3 ==>
<<AlLp[3 (0 1 2 3 4)][3 (1 3 5 7 9)]>>
(? cobar-deltab2 6 loop-3) ==>
----------------------------------------------------------------------{CMBN 5}
<1 * <<AlLp[2 (0 1 2 3)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[2 (0 1 2 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[2 (0 1 3 4)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[2 (0 2 3 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[2 (1 2 3 4)][3 (1 3 5 7 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 5 7)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 5 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (1 3 7 9)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][2 (1 5 7 9)]>>>
<1 * <<AlLp[3 (0 1 2 3 4)][2 (3 5 7 9)]>>>
<1 * <<AlLp[1 (0 1 2)][1 (2 3 4)][3 (1 3 5 7 9)]>>>
<-1 * <<AlLp[3 (0 1 2 3 4)][1 (1 3 5)][1 (5 7 9)]>>>
------------------------------------------------------------------------------
(? cobar-deltab2 *) ==>
----------------------------------------------------------------------{CMBN 4}
------------------------------------------------------------------------------
loop-4 ==>
<<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>
(? cobar-deltab2 11 loop-4) ==>
----------------------------------------------------------------------{CMBN 10}
<-1 * <<AlLp[2 (0 1 4 5)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[2 (0 1 4 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[2 (0 1 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[2 (0 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[2 (1 4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 5 6)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 5 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 4 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (2 3 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][3 (2 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][3 (3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 6 7)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 6 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 5 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 4 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (0 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][3 (4 5 6 7 8)]>>>
<-1 * <<AlLp[1 (0 1 4)][1 (4 5 6)][4 (2 3 4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][1 (2 3 4)][2 (4 5 6 8)][4 (0 4 5 6 7 8)]>>>
<1 * <<AlLp[3 (0 1 4 5 6)][2 (2 3 4 5)][1 (5 6 8)][4 (0 4 5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][1 (0 4 5)][2 (5 6 7 8)]>>>
<-1 * <<AlLp[3 (0 1 4 5 6)][4 (2 3 4 5 6 8)][2 (0 4 5 6)][1 (6 7 8)]>>>
------------------------------------------------------------------------------
(? cobar-deltab2 *) ==>
----------------------------------------------------------------------{CMBN 9}
------------------------------------------------------------------------------
\end{verbatim}}
\newpage
\section {Other functions for the cobar construction}
The\index{functor!vertical cobar} vertical cobar construction is
{\em natural} and therefore defines a functor.
Consequently, the {\tt Kenzo} program contains the following methods.
\vskip 0.45cm
{\parindent=0mm
{\leftskip=5mm
{\tt vrtc-cobar} {\em mrph}\hfill {\em [Method]} \par}
{\leftskip=15mm
From the morphism {\em mrph}, build a new morphism between the vertical-cobar of the source
of {\em mrph} and the vertical cobar of the target of {\em mrph}, the morphism itself being
induced in a natural way by the underlying morphism. \par}
{\leftskip=5mm
{\tt vrtc-cobar} {\em rdct}\hfill {\em [Method]} \par}
{\leftskip=15mm
From the reduction {\em rdct}, build a new reduction, by applying the vertical cobar
method to the functions $f$ and $g$. The new homotopy cannot be obtained so simply, being
a function of the $f$, $g$ and $h$ of {\em rdct}. Nevertheless, the source and target
of the new homotopy are the vertical cobar of the underlying homotopy. \par}
{\leftskip=5mm
{\tt vrtc-cobar} {\em hmeq}\hfill {\em [Method]} \par}
{\leftskip=15mm
Build a homotopy equivalence by applying the vertical cobar cons\-truc\-ti\-on
to the left and right reductions of the homotopy equivalence {\em hmeq}. \par}
{\leftskip=5mm
{\tt cobar} {\em hmeq}\hfill {\em [Method]} \par}
{\leftskip=15mm
Build a homotopy equivalence where the cobar construction is applied to the
underlying homotopy equivalence in the following way. First this construction is limited to the
case where the left bottom chain complex of {\em hmeq} is a {\bf coalgebra}. Then the vertical cobar
construction is applied to {\em hmeq} and the horizontal differential of the left bottom chain complex
is propagated upon the new homotopy equivalence with the help of the method {\tt add}. In other words,
starting from the left bottom chain complex, firstly the easy pertubation lemma is applied to
obtain a new differential on the top chain complex; then the basic perturbation lemma
is applied to the right reduction.
If {\em hmeq} is a
trivial homotopy equivalence, this function returns a trivial one, built on the cobar of
the left bottom chain complex of {\em hmeq}. \par}
}
\subsection* {Lisp files concerned in this chapter}
{\tt coalgebras.lisp}, {\tt cobar.lisp}.
\par
[{\tt classes.lisp}, {\tt macros.lisp}, {\tt various.lisp}].