From 78110ace2ef9097e36d719bcfd4c32d870b5ab6a Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Sat, 30 Dec 2017 18:04:17 -0600 Subject: [PATCH] Ongoing Org experiment. --- doc/org/00_Overview.org | 135 +++++++++++++------------- doc/org/01_Chain_Complexes.org | 168 +++++++++++++++++++++++++++++++++ doc/org/Handbook.org | 6 +- doc/org/diabolo.pdf | Bin 0 -> 5166 bytes 4 files changed, 239 insertions(+), 70 deletions(-) create mode 100644 doc/org/01_Chain_Complexes.org create mode 100644 doc/org/diabolo.pdf diff --git a/doc/org/00_Overview.org b/doc/org/00_Overview.org index 10e16fb..fcb5fbd 100644 --- a/doc/org/00_Overview.org +++ b/doc/org/00_Overview.org @@ -1,3 +1,8 @@ +#+BEGIN_SRC lisp :session 00 :exports none :results silent +(ql:quickload "kenzo") +(use-package :cat) +#+END_SRC + * Overview @@ -9,11 +14,11 @@ labelled =*=, =M3= and =N4=. The faces 0 and 2 of the 4-simplex =N4= are identified with (pasted to) the 3-simplex =M3=, the others being contracted on the base point. To create the simplicial set one types simply: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar m23) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf m23 (moore 2 3)) #+END_SRC @@ -23,7 +28,7 @@ the base point. To create the simplicial set one types simply: The system answers that a Kenzo object has been created, with number 1 and type =SIMPLICIAL SET=. This object may be referenced by the symbol =m23=. -#+BEGIN_SRC lisp :session cat +#+BEGIN_SRC lisp :session 00 m23 #+END_SRC @@ -35,7 +40,7 @@ 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. -#+BEGIN_SRC lisp :session cat :results output +#+BEGIN_SRC lisp :session 00 :results output (homology m23 0 5) #+END_SRC @@ -180,11 +185,11 @@ As =m23= is a simplicial set, it is possible to create the cartesian product =m23xm23= by the function =crts-prdc= (= CaRTeSian PRoDuCt). This is a new simplicial set. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar m23xm23) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf m23xm23 (crts-prdc m23 m23)) #+END_SRC @@ -194,14 +199,14 @@ simplicial set. Being a simplicial set, =m23xm23= is also a chain complex object and we may for instance ask for the basis in dimension 6. -#+BEGIN_SRC lisp :session cat :exports both :results verbatim +#+BEGIN_SRC lisp :session 00 :exports both :results verbatim (basis m23xm23 6) #+END_SRC #+RESULTS: : ( ...) -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (length (basis m23xm23 6)) #+END_SRC @@ -220,18 +225,18 @@ two simplicial sets do not make sense, and Kenzo understands to work on the underlying chain complex =m23=. This tensor product is a new chain complex and we see that the basis in dimension 6 has only one element: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar t2m23) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf t2m23 (tnsr-prdc m23 m23)) #+END_SRC #+RESULTS: : [K3 Chain-Complex] -#+BEGIN_SRC lisp :session cat :exports both :results verbatim +#+BEGIN_SRC lisp :session 00 :exports both :results verbatim (basis t2m23 6) #+END_SRC @@ -243,7 +248,7 @@ cartesian product space: as chain complexes, =m23xm23= and =t2m23= have the same homology groups, but the computations using the tensor product are considerably faster. The user can check Künneth's theorem. -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology m23xm23 0 8) #+END_SRC @@ -518,11 +523,11 @@ In =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: =(2 3 4 5)=. In dimension 0, the only simplex is =NIL= (the base point). -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar kz1) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf kz1 (k-z 1)) #+END_SRC @@ -532,7 +537,7 @@ dimension $n$ will be simply a list of $n$ non-null integers, for instance: But this object is also a /coalgebra/ and an /algebra/, and we may see the effect of the respective induced /coproduct/ and /product/: -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (cprd kz1 4 '(2 3 4 5))) #+END_SRC @@ -546,7 +551,7 @@ effect of the respective induced /coproduct/ and /product/: : <1 * > : ------------------------------------------------------------------------------ -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (aprd kz1 6 (tnpr 2 '(1 2) 4 '(3 4 5 6)))) #+END_SRC @@ -576,11 +581,11 @@ morphisms. The degree of the combination is indicated by the information: In the same way, we may create the Abelian simplicial groups $\mathrm{K}(\mathbb{Z}/2\mathbb{Z}, n)$: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar k-z2-2) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf k-z2-2 (k-z2 2)) #+END_SRC @@ -650,7 +655,7 @@ Let us play now with the sphere $S^3$ and its loop spaces. $S^3$ and $\Omega^2 S^3$ are created by respective calls to the functions =sphere= and =loop-space=. Then we compute the $H_4$ and $H_5$ of $\Omega^2 S^3$: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar s3) #+END_SRC @@ -661,18 +666,18 @@ $\Omega^2 S^3$ are created by respective calls to the functions =sphere= and #+RESULTS: : [K174 Simplicial-Set] -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar o2s3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf o2s3 (loop-space s3 2)) #+END_SRC #+RESULTS: : [K191 Simplicial-Group] -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology o2s3 4 6) #+END_SRC @@ -854,11 +859,11 @@ Component Z/2Z Let us take now the first loop space $\Omega^1 S^3$ -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar os3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf os3 (loop-space s3)) #+END_SRC @@ -871,11 +876,11 @@ 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$. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar L1) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf L1 (loop3 0 's3 1))) #+END_SRC @@ -886,11 +891,11 @@ 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$: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar null-simp) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf null-simp (absm 3 +null-loop+))) #+END_SRC @@ -905,11 +910,11 @@ following call. It means that we "paste" to the space =os3= a 3-simplex named collapsed on the base point; in this way the attaching map $(S^2 \rightarrow \Omega S^3)$ has degree 2. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar dos3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf dos3 (disk-pasting os3 3 ' (list L1 null-simp L1 null-simp))) #+END_SRC @@ -918,7 +923,7 @@ $(S^2 \rightarrow \Omega S^3)$ has degree 2. Let us compute a few homology groups of the new space =dos3=: -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology dos3 2 4) #+END_SRC @@ -993,18 +998,18 @@ Homology in dimension 3 : But more interesting, let us build the loop space of the object =dos3= and let us compute the homology in dimension 5: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar odos3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf odos3 (loop-space dos3)) #+END_SRC #+RESULTS: : [K471 Simplicial-Group] -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology odos3 5) #+END_SRC @@ -1289,21 +1294,21 @@ 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. -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (typep s3 'kan) #+END_SRC #+RESULTS: : NIL -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (typep os3 'kan) #+END_SRC #+RESULTS: : T -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (typep os3 'simplicial-group) #+END_SRC @@ -1320,22 +1325,22 @@ group. 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$: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar L2) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf L2 (loop3 0 's3 2))) #+END_SRC #+RESULTS: : <> -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar square) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf square (aprd os3 4 (tnpr 2 L2 2 L2)))) #+END_SRC @@ -1354,11 +1359,11 @@ We see that the result is a linear combination of words composed from degeneracies of =L2=. The following instruction selects the generator part of the second element of the previous combination. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar L4) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf L4 (gnrt (second (cmbn-list square))))) #+END_SRC @@ -1370,11 +1375,11 @@ Let us use the lisp function =mapcar= (one among the various iteration functions of Lisp) to create the list of the faces 1, 2, 3 and 4 of the object =L4=, this list is a "Kan horn". -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar horn) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf horn (mapcar #'(lambda (i) (face os3 i 4 l4)) '(1 2 3 4)))) #+END_SRC @@ -1386,11 +1391,11 @@ The function =kfll= tries to find a filling of this "Kan horn", and we see that the face 2 of the resulting simplex (which is very different from =L4=) is the same as the face 2 of =L4=. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar kan-simplex) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (setf kan-simplex (kfll os3 0 4 horn))) #+END_SRC @@ -1398,7 +1403,7 @@ same as the face 2 of =L4=. : : >> -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (face os3 2 4 kan-simplex)) #+END_SRC @@ -1406,7 +1411,7 @@ same as the face 2 of =L4=. : : >> -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (princ (second horn)) #+END_SRC @@ -1422,25 +1427,25 @@ ${\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$, which in principle should be isomorphic to $H_4 S^3 = 0$, is really null. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar cls-os3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf cls-os3 (classifying-space os3)) #+END_SRC #+RESULTS: : [K938 Simplicial-Set] -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (typep cls-os3 'simplicial-group) #+END_SRC #+RESULTS: : NIL -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology cls-os3 4) #+END_SRC @@ -1486,11 +1491,11 @@ 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: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar ch3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf ch3 (chml-clss m23 3)) #+END_SRC @@ -1500,11 +1505,11 @@ constructed: Then the function =z2-whitehead= is called to build a fibration over the simplicial set =m23= canonically associated to the cohomology class =ch3=. -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar f3) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf f3 (z2-whitehead m23 ch3)) #+END_SRC @@ -1513,11 +1518,11 @@ simplicial set =m23= canonically associated to the cohomology class =ch3=. Then the total space of the fibration is built: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar x4) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf x4 (fibration-total f3)) #+END_SRC @@ -1527,7 +1532,7 @@ Then the total space of the fibration is built: The $H_4$ of this total space is the $\pi_4$ of $\mathrm{Moore}(\mathbb{Z}/2\mathbb{Z})$: -#+BEGIN_SRC lisp :session cat :exports both :results output +#+BEGIN_SRC lisp :session 00 :exports both :results output (homology x4 3 5) #+END_SRC @@ -1650,29 +1655,29 @@ Component Z/2Z We may now iterate the process, to compute the $\pi_5$ of $\mathrm{Moore}(\mathbb{Z}/2\mathbb{Z})$: -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar ch4) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf ch4 (chml-clss x4 4)) #+END_SRC #+RESULTS: : [K1318 Cohomology-Class on K1303 of degree 4] -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar f4) #+END_SRC -#+BEGIN_SRC lisp :session cat :exports both +#+BEGIN_SRC lisp :session 00 :exports both (setf f4 (z2-whitehead x4 ch4)) #+END_SRC #+RESULTS: : [K1333 Fibration K1237 -> K1319] -#+BEGIN_SRC lisp :session cat :exports none +#+BEGIN_SRC lisp :session 00 :exports none (defvar x5) #+END_SRC diff --git a/doc/org/01_Chain_Complexes.org b/doc/org/01_Chain_Complexes.org new file mode 100644 index 0000000..ccec767 --- /dev/null +++ b/doc/org/01_Chain_Complexes.org @@ -0,0 +1,168 @@ +#+BEGIN_SRC lisp :session 01 :exports none :results silent +(ql:quickload "kenzo") +(use-package :cat) +#+END_SRC + +* Chain Complexes + +** Introduction + +In the Kenzo program, a /chain complex/[fn:1]$(C_p, d_p)$ is a collection of free +\(\mathbb{Z}\)-modules $(C_p)$, one for each \(p\in\mathbb{Z}\), together with +a homomorphism $d_p : C_p \rightarrow C_{p-1}$, such that, for all +$p$, $d_{p-1} \circ d_p = 0$. + +*In the Kenzo program*, a /morphism/ $f=(f_p)$, of degree $k$, from a chain +complex $(C_p, d_p)$ to another $(C'_p, d'_p)$ is a collection of homomorphisms + +$$f_p : C_p \rightarrow C'_{p+k}.$$ + +This is expressed by the following diagram, generally not assumed commutative. + +#+BEGIN_EXPORT latex +\[ +\begin{aligned} +\cdots & \leftarrow & C_{p-1} & \quad\xleftarrow{d_p} & C_p & \quad\xleftarrow{d_{p+1}} & C_{p+1} & \quad\leftarrow & \cdots \\ + & & f_{p-1} \Bigg\downarrow & & f_p \Bigg\downarrow & & f_{p+1} \Bigg\downarrow \\ +\cdots & \leftarrow & C'_{p+k-1} & \quad\xleftarrow{d'_{p+k}} & C'_{p+k} & + \quad\xleftarrow{d'_{p+k+1}} & C'_{p+k+1} & \quad\leftarrow & \cdots +\end{aligned} +\] + +#+END_EXPORT + +Three types of morphisms are most generally considered. + +1. $k=0$. If the commutativity relation $d'_p\circ f_p=f_{p-1}\circ d_p$ holds + for every $p$, then the morphism $f$ is an ordinary chain complex morphism + or /chain map/. +2. $k=-1$. If $(C_p,d_p)=(C'_p,d'_p)$ and $f_p=d_p$, then $f$ is the + /differential/ of the chain complex $(C_p,d_p)$ and, in fact, this + differential is implemented in the =Kenzo= program as a morphism of + degree $-1$. Also, if $d_p \neq f_p$ and $(d_{p-1}+f_{p-1})(d_p+f_p) = 0$ + for every $p$, then $f_\ast$ is a perturbation of the differential $d_\ast$. +3. $k=+1$. In this case, $f$ is usually a /homotopy operator/, that is, some + relation $$d'_{p+1}\circ f_p+f_{p-1}\circ d_p=g_p-g'_p$$ is satisfied for + two (ordinary) chain complex morphisms $g_\ast$ and $g'_\ast$, and $f_\ast$ + is a homotopy between $g_\ast$ and $g'_\ast$. + +For technical reasons, these three types of morphisms have been implemented in +the =Kenzo= program in a unique type. + +[fn:1] *P.J. Giblin* in /Graph, Surface and Homology/, Chapman and Hall Math. +series, 1981. + +** Generators, terms, and combinations + +To become familiar with the Lisp functions implementing the chain complexes, +the best is to begin with an example. /Simplicial complexes/ are good +candidates for this purpose, and we shall take as a typical example the +following simplicial complex. + +[[./diabolo.pdf]] + +In this simplicial complex, called here /diabolo/, there are 3 non-null chain +groups. + +- $C_0$, the free \(\mathbb{Z}\)-module on the set of vertices + $\{s_0,s_1,s_2,s_3,s_4,s_5\}$ +- $C_1$, the free \(\mathbb{Z}\)-module on the set of edges + $\{s_{01},s_{02},s_{12},s_{23},s_{34},s_{35}, s_{45}\}$ +- $C_2$, the free \(\mathbb{Z}\)-module on the set of triangles (here a + singleton) $\{s_{345}\}$ + +The elements of either of those groups $C_p$ are linear integer combinations of +the corresponding basis $\beta_p$, i.e. elements of the form: +$$ +\sum_{b \in \beta_p} \lambda_b b. +$$ +For example $2 s_{02} - 3 s_{34} \in C_1$. An element $b$ of the basis +$\beta_p$ of $C_p$ is called a /generator/ of $C_p$ and in our specific case +this generator will be represented by a Lisp symbol. For instance, $s_{45}$ +will be translated into =s45=. However, the user should be aware that in more +realistic usage of the software, generators may be of any type. A product such +as $\lambda_i\sigma_i$ is called a /term/ and a sum of terms, a /combination/. + + +*** Representation of a combination + +A combination is represented internally in the system by a structure having the +following general form: + +$$\#\texttt{S(CMBN}\quad\texttt{DEGREE P}\quad\texttt{LIST (}\texttt{(} +\lambda_1\cdot\sigma_1\texttt{)}\dots\texttt{(}\lambda_k\cdot\sigma_k +\texttt{)))}$$ + +and containing + +1. The degree of the combination corresponding to the index \(p\in\mathbb{Z}\) + of the group $C_p$ to which this combination belongs. +2. The list of the internal representation of the terms, namely the list of + pairs $(\lambda_i\cdot\sigma_i)$. + +This choice of representation implies that only homogeneous combinations will +be considered. The type =CMBN= and a printing method are provided with this +internal representation. The external form of a combination is shown in the +examples. + +*** Ordering the generators + +In order to speed up the execution of algorithms involving combinations, the +list of pairs $(\lambda_i.\sigma_i)$ is ordered by an adequate ordering +function (e.g., the lexicographical ordering on the symbols). For programming +convenience, an enumerated type =CMPR= has been defined: + +#+BEGIN_EXAMPLE +(deftype cmpr() '(member :less :equal :greater)) +#+END_EXAMPLE + +A number of macros, functions and methods have been defined on usual sets +(symbols, numbers, lists, etc.) taking their value in the set +=[:less, :equal, :greater]=. Of course, the user may define its own function +for a particular case. There exists functions to compare various couples of +usual items: + +=f-cmpr= /n1 n2/ | /[Function]/ ++ Return =:less=, =:equal=, =:greater=, according to the result of the + canonical comparison of both integers /n1/ and /n2/. + +=s-cmpr= /symbol1 symbol2/ | /[Function]/ ++ Return =:less=, =:equal=, =:greater=, according to the result of the Lisp + comparison functions on the strings =(symbol-name= /symbol1/ =)= and + =(symbol-name= /symbol2/ =)= + +=l-cmpr= /list1 list2/ | /[Function]/ ++ Return =:less=, =:equal=, =:greater=, according to the lexicographical + ordering of the two lists /list1/ and /list2/, making sense only if /list1/ + and /list2/ are lists made of integers, symbols and/or lists; in the last + case, the qualifier /list/ is to be understood recursively. + +**** Examples + +#+BEGIN_SRC lisp :session 01 :exports both +(f-cmpr 123 789) +#+END_SRC + +#+RESULTS: +: :LESS + +#+BEGIN_SRC lisp :session 01 :exports both +(s-cmpr 'circulation 'circular) +#+END_SRC + +#+RESULTS: +: :GREATER + +#+BEGIN_SRC lisp :session 02 :exports both +(s-cmpr 'qwerty 'qwerty) +#+END_SRC + +#+RESULTS: +: :EQUAL + +#+BEGIN_SRC lisp :session 02 :exports both +(l-cmpr '(1 a b) '(1 a)) +#+END_SRC + +#+RESULTS: +: :GREATER diff --git a/doc/org/Handbook.org b/doc/org/Handbook.org index 9420d1c..dab414e 100644 --- a/doc/org/Handbook.org +++ b/doc/org/Handbook.org @@ -2,10 +2,6 @@ #+AUTHOR: Julio Rubio Garcia, Francis Sergeraert, Yvon Siret #+DATE: April 26, 1999 -#+BEGIN_SRC lisp :session cat :exports none :results silent -(ql:quickload "kenzo") -(use-package :cat) -#+END_SRC - #+INCLUDE: "Foreword.org" #+INCLUDE: "00_Overview.org" +#+INCLUDE: "01_Chain_Complexes.org" diff --git a/doc/org/diabolo.pdf b/doc/org/diabolo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cc5cc76b6fb39260ceff98609c050d39ec1ba09e GIT binary patch literal 5166 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 x2l%pibRLt#Vlp@ZEGApv?