This web page contains the listing of a small Kenzo demonstration.
The file is slightly arranged for a more convenient understanding, but
it comes from actual computations on the Linux PC **Isabelle** of
Ecole Polytechnique at Palaiseau
(GDR Medicis).

Three typical computations are shown:

- H
_{5}(\Omega^{3}(Moore(Z_{2},4))) = Z_{2}^{5}(2 minutes); - H
_{5}(\Omega(\Omega(S_{3}\cup_{2}D^{3}))) = Z + Z_{2}^{6}(40 seconds); - \pi
_{7}(P^{\infty}R/P^{2}R) = Z_{2}+ Z_{4}(20 hours).

Sometimes an end of line is replaced by ``...`' if not
really important. Frequently, too long parts of the listing are
removed and you see only the indication "`[... Lines deleted
...]`". In fact several computations are put together, so that
the prompt numbering can be non-sequential. The Kenzo display form of
many chain complex generators is <...>, but the Web browser then looks
for an html keyword and does not understand! You can see the actual
text by looking at the source file, but this does not really disturb
the demo.

The usual Lisp banner beginning a Lisp session appears. A text
`USER(...)` is the Lisp prompt. The `file-list` file
contains various indications about the structure of the Kenzo program,
mainly the list of file components.

Allegro CL 4.3 [Linux/X86; R1] (4/23/97 12:30) Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA. All R... ;; Optimization settings: safety 1, space 1, speed 1, debug 2. ;; For a complete description of all compiler switches given the ;; current optimization settings evaluate (EXPLAIN-COMPILER-SE... USER(1): (load "file-list") ; Loading ./file-list.lisp FILE 1: classes FILE 2: macros FILE 3: various FILE 4: combinations FILE 5: chain-complexes FILE 6: chcm-elementary-op FILE 7: effective-homology FILE 8: homology-groups FILE 9: searching-homology FILE 10: cones FILE 11: tensor-products FILE 12: coalgebras FILE 13: cobar FILE 14: algebras FILE 15: bar FILE 16: simplicial-sets FILE 17: simplicial-mrphs FILE 18: delta FILE 19: special-smsts FILE 20: suspensions FILE 21: disk-pasting FILE 22: cartesian-products FILE 23: eilenberg-zilber FILE 24: kan FILE 25: simplicial-groups FILE 26: fibrations FILE 27: loop-spaces FILE 28: ls-twisted-products FILE 29: lp-space-efhm FILE 30: classifying-spaces FILE 31: k-pi-n FILE 32: serre FILE 33: cs-twisted-products FILE 34: cl-space-efhm FILE 35: whitehead FILE 36: smith T

Then the compiled files can be loaded:

USER(2): (load-cfiles) ; Fast loading ./classes.fasl ; Fast loading ./macros.fasl ; Fast loading ./various.fasl ; Fast loading ./combinations.fasl ; Fast loading ./chain-complexes.fasl ; Fast loading ./chcm-elementary-op.fasl ; Fast loading ./effective-homology.fasl ; Fast loading ./homology-groups.fasl ; Fast loading ./searching-homology.fasl ; Fast loading ./cones.fasl ; Fast loading ./tensor-products.fasl ; Fast loading ./coalgebras.fasl ; Fast loading ./cobar.fasl ; Fast loading ./algebras.fasl ; Fast loading ./bar.fasl ; Fast loading ./simplicial-sets.fasl ; Fast loading ./simplicial-mrphs.fasl ; Fast loading ./delta.fasl ; Fast loading ./special-smsts.fasl ; Fast loading ./suspensions.fasl ; Fast loading ./disk-pasting.fasl ; Fast loading ./cartesian-products.fasl ; Fast loading ./eilenberg-zilber.fasl ; Fast loading ./kan.fasl ; Fast loading ./simplicial-groups.fasl ; Fast loading ./fibrations.fasl ; Fast loading ./loop-spaces.fasl ; Fast loading ./ls-twisted-products.fasl ; Fast loading ./lp-space-efhm.fasl ; Fast loading ./classifying-spaces.fasl ; Fast loading ./k-pi-n.fasl ; Fast loading ./serre.fasl ; Fast loading ./cs-twisted-products.fasl ; Fast loading ./cl-space-efhm.fasl ; Fast loading ./whitehead.fasl ; Fast loading ./smith.fasl ("classes" "macros" "various" "combinations" "chain-complexes"...

We intend to construct the Moore space where the homology is only
H_{4} = Z_{2}. The `moore` function is used and
the result is assigned to the symbol `m`:

USER(3): (setf m (moore 2 4)) [K1 Simplicial-Set]

The result is the Kenzo object #1 (`[K1...]`) and this
object is a simplicial set. The function `loop-space` is then
used to construct the third loop-space and the result is assigned to
the symbol `o3m`:

USER(4): (setf o3m (loop-space m 3)) [K30 Simplicial-Group]

The result is the Kenzo object #30 and it is a simplicial
**group**. We want to compute the H_{5}(... ; Z) of this
3-loop-space:

USER(5): (homology o3m 5) Computing boundary-matrix in dimension 5. Rank of the source-module : 23. ;; Clock -> 1998-12-28, 13h 25m 33s. Computing the boundary of the generator 1 (dimension 5) : <>]>>]>> End of computing. ;; Clock -> 1998-12-28, 13h 25m 33s. Computing the boundary of the generator 2 (dimension 5) : < >]>>]>> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 13h 25m 38s. Computing the boundary of the generator 23 (dimension 5) : < >]>>][1 < >]>>]... End of computing. Computing boundary-matrix in dimension 6. Rank of the source-module : 53. ;; Clock -> 1998-12-28, 13h 25m 38s. Computing the boundary of the generator 1 (dimension 6) : < >]>>]>> End of computing. [ ... Lines deleted ...] ;; Clock -> 1998-12-28, 13h 26m 43s. Computing the boundary of the generator 53 (dimension 6) : < >]>>][1 < >]>>]... End of computing. Homology in dimension 5 : Component Z/2Z Component Z/2Z Component Z/2Z Component Z/2Z Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 13h 26m 46s.

The result H_{5} = Z_{2}^{5} is obtained in
2 minutes.

Another Lisp session is started and we want now to construct the
space \Omega(\Omega(S^{3}) \cup_{2} D^{3}).
The 3-sphere is constructed and assigned to the symbol `s3`,
and the loop-space is assigned to the symbol `os3`:

USER(3): (setf s3 (sphere 3)) [K1 Simplicial-Set] USER(4): (setf os3 (loop-space s3)) [K6 Simplicial-Group]

We attach a 3-disk, that is a 3-simplex, to the loop-space. The
faces number 0 and 2 of the 3-simplex are identified with the
"fundamental" simplex of the loop space; on the contrary the faces
number 1 and 3 are collapsed to the base point. This is done as
follows; the resulting space, a simplicial **set**, is assigned to
the symbol `dos3`:

USER(7): (setf dos3 (disk-pasting os3 3 'new (list (loop3 0 's3 1) (absm 3 +null-loop+) (loop3 0 's3 1) (absm 3 +null-loop+)))) [K18 Simplicial-Set]

We verify the homology of `dos3` in dimension 2 is the right
one:

USER(8): (homology dos3 2) Computing boundary-matrix in dimension 2. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 40m 26s. Computing the boundary of the generator 1 (dimension 2) : <> End of computing. Computing boundary-matrix in dimension 3. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 40m 26s. Computing the boundary of the generator 1 (dimension 3) : NEW End of computing. Homology in dimension 2 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 14h 40m 26s.

The loop-space of `dos3` is constructed and we are
interested by its H_{5}:

USER(9): (setf odos3 (loop-space dos3)) [K137 Simplicial-Group] USER(10): (homology odos3 5) Computing boundary-matrix in dimension 5. Rank of the source-module : 14. ;; Clock -> 1998-12-28, 14h 41m 3s. Computing the boundary of the generator 1 (dimension 5) : <>]>> End of computing. [ ... Lines deleted ...] ;; Clock -> 1998-12-28, 14h 41m 4s. Computing the boundary of the generator 14 (dimension 5) : < >][1 < >][1 < >][1 < >][1 < >]>> End of computing. Computing boundary-matrix in dimension 6. Rank of the source-module : 26. ;; Clock -> 1998-12-28, 14h 41m 4s. Computing the boundary of the generator 1 (dimension 6) : < >][5 < >]>> End of computing. [ ... Lines deleted ... ] ;; Clock -> 1998-12-28, 14h 41m 6s. Computing the boundary of the generator 26 (dimension 6) : < >][1 < >][1 < >][1 < >][1 < >][1 < >]>> End of computing. Homology in dimension 5 : Component Z/2Z Component Z/2Z Component Z/2Z Component Z/2Z Component Z/2Z Component Z/2Z Component Z ---done--- ;; Clock -> 1998-12-28, 14h 41m 6s.

The result H_{5} = Z + Z_{2}^{6} is
obtained in 40 seconds.

Another Lisp session is started. The space P_{3} =
P^{\infty}R/P²R is constructed; the ordinary cellular
model of P^{\infty}R has one cell E^{n} for every
dimension n; each n-cell is attached to the (n-1)-skeletton
P^{n-1}R by the canonical map S^{n-1} ->
P^{n-1}R. Our space P_{3} is P^{\infty}R where
the 2-skeletton is collapsed to the base point.

The Z-homology of P_{3} is verified up to the dimension 9.

USER(3): (setf p3 (r-proj-space 3)) [K1 Simplicial-Set] USER(4): (homology p3 0 10) Computing boundary-matrix in dimension 0. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 0) : 0 End of computing. Computing boundary-matrix in dimension 1. Rank of the source-module : 0. Homology in dimension 0 : Component Z ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 1. Rank of the source-module : 0. Computing boundary-matrix in dimension 2. Rank of the source-module : 0. Homology in dimension 1 : ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 2. Rank of the source-module : 0. Computing boundary-matrix in dimension 3. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 3) : 3 End of computing. Homology in dimension 2 : ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 3. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 3) : 3 End of computing. Computing boundary-matrix in dimension 4. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 4) : 4 End of computing. Homology in dimension 3 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 4. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 4) : 4 End of computing. Computing boundary-matrix in dimension 5. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 5) : 5 End of computing. Homology in dimension 4 : ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 5. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 5) : 5 End of computing. Computing boundary-matrix in dimension 6. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 6) : 6 End of computing. Homology in dimension 5 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 6. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 6) : 6 End of computing. Computing boundary-matrix in dimension 7. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 7) : 7 End of computing. Homology in dimension 6 : ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 7. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 7) : 7 End of computing. Computing boundary-matrix in dimension 8. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 8) : 8 End of computing. Homology in dimension 7 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 8. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 8) : 8 End of computing. Computing boundary-matrix in dimension 9. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 9) : 9 End of computing. Homology in dimension 8 : ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s. Computing boundary-matrix in dimension 9. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 9) : 9 End of computing. Computing boundary-matrix in dimension 10. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 14h 59m 0s. Computing the boundary of the generator 1 (dimension 10) : 10 End of computing. Homology in dimension 9 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 14h 59m 0s.

We have H_{3}(P_{3}) =
\pi_{3}(P_{3}) = Z_{2}, and we want to
construct the first stage of the Whitehead tower. We must construct
the canonical fibration K(Z_{2},2) -> X_{4} ->
P_{3}, associated to the canonical Z_{2}-cohomology
class on P_{3}. The kenzo function `chml-clss`
constructs this cohomology class which is assigned to the symbol
`ch3`. Then the function `z2-whitehead`, using the
space `p3` and the cohomology class `ch3`, constructs
the desired Whitehead fibration `f3`. Finally the Kenzo
function `fibration-total` extracts from this fibration the
total space, assigned to the symbol `x4`. The \pi_{4}
of P_{3} is the H_{4} of `x4`, in fact null, so
that this fibration gives immediately the \pi_{5} of
P_{3}, certainly the H_{5} of `x4`, namely the
group Z_{2}.

USER(5): (setf ch3 (chml-clss p3 3)) [K12 Cohomology-Class (degree 3)] USER(6): (setf f3 (z2-whitehead p3 ch3)) [K37 Fibration] USER(7): (setf x4 (fibration-total f3)) [K43 Simplicial-Set] USER(8): (homology x4 0 6) Computing boundary-matrix in dimension 0. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 0) :>> End of computing. Computing boundary-matrix in dimension 1. Rank of the source-module : 0. Homology in dimension 0 : Component Z ---done--- ;; Clock -> 1998-12-28, 15h 0m 15s. Computing boundary-matrix in dimension 1. Rank of the source-module : 0. Computing boundary-matrix in dimension 2. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 2) : >> End of computing. Homology in dimension 1 : ---done--- ;; Clock -> 1998-12-28, 15h 0m 15s. Computing boundary-matrix in dimension 2. Rank of the source-module : 1. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 2) : >> End of computing. Computing boundary-matrix in dimension 3. Rank of the source-module : 2. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 3) : >> End of computing. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 2 (dimension 3) : >> End of computing. Homology in dimension 2 : ---done--- ;; Clock -> 1998-12-28, 15h 0m 15s. Computing boundary-matrix in dimension 3. Rank of the source-module : 2. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 3) : >> End of computing. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 2 (dimension 3) : >> End of computing. Computing boundary-matrix in dimension 4. Rank of the source-module : 3. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 4) : >> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 3 (dimension 4) : >> End of computing. Homology in dimension 3 : ---done--- ;; Clock -> 1998-12-28, 15h 0m 15s. Computing boundary-matrix in dimension 4. Rank of the source-module : 3. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 4) : >> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 3 (dimension 4) : >> End of computing. Computing boundary-matrix in dimension 5. Rank of the source-module : 5. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 5) : >> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 5 (dimension 5) : >> End of computing. Homology in dimension 4 : ---done--- ;; Clock -> 1998-12-28, 15h 0m 15s. Computing boundary-matrix in dimension 5. Rank of the source-module : 5. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 5) : >> End of computing. [... Lines deleted ...] Computing boundary-matrix in dimension 6. Rank of the source-module : 8. ;; Clock -> 1998-12-28, 15h 0m 15s. Computing the boundary of the generator 1 (dimension 6) : >> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 0m 16s. Computing the boundary of the generator 8 (dimension 6) : >> End of computing. Homology in dimension 5 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 15h 0m 16s.

The result is obtained in 1 second. The same work gives
\pi_{6}(P_{3}) = Z_{2} in 1 minute:

USER(11): (setf ch5 (chml-clss x4 5)) [K222 Cohomology-Class (degree 5)] USER(12): (setf f5 (z2-whitehead x4 ch5)) [K249 Fibration] USER(13): (setf x6 (fibration-total f5)) [K255 Simplicial-Set] USER(14): (homology x6 6) Computing boundary-matrix in dimension 6. Rank of the source-module : 11. ;; Clock -> 1998-12-28, 15h 1m 41s. Computing the boundary of the generator 1 (dimension 6) :>> < >]>>]>>> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 1m 43s. Computing the boundary of the generator 11 (dimension 6) : >> < >> End of computing. Computing boundary-matrix in dimension 7. Rank of the source-module : 20. ;; Clock -> 1998-12-28, 15h 1m 44s. Computing the boundary of the generator 1 (dimension 7) : >> < >]>>]>>> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 2m 13s. Computing the boundary of the generator 20 (dimension 7) : >> < >> 5020088 bytes have been tenured, next gc will be global. See the documentation for variable *GLOBAL-GC-BEHAVIOR* for more information. End of computing. Homology in dimension 6 : Component Z/2Z ---done--- ;; Clock -> 1998-12-28, 15h 2m 27s.

and continuing in the same way, the following result
\pi_{7}(P_{3}) = Z_{2} + Z_{4} is
obtained:

USER(15): (setf ch6 (chml-clss x6 6)) [K594 Cohomology-Class (degree 6)] USER(16): (setf f6 (z2-whitehead x6 ch6)) [K609 Fibration] USER(17): (setf x7 (fibration-total f6)) [K615 Simplicial-Set] USER(18): (homology x7 7) Computing boundary-matrix in dimension 7. Rank of the source-module : 23. ;; Clock -> 1998-12-28, 15h 6m 27s. Computing the boundary of the generator 1 (dimension 7) :>> < >> < >]>>]>>]>>> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-28, 15h 9m 10s. Computing the boundary of the generator 23 (dimension 7) : >> < >> < >> End of computing. Computing boundary-matrix in dimension 8. Rank of the source-module : 43. ;; Clock -> 1998-12-28, 15h 10m 54s. Computing the boundary of the generator 1 (dimension 8) : >> < >> < >]>>]>>]>>> End of computing. [... Lines deleted ...] ;; Clock -> 1998-12-29, 1h 6m 51s. Computing the boundary of the generator 43 (dimension 8) : >> < >> < >> End of computing. Homology in dimension 7 : Component Z/4Z Component Z/2Z ---done--- ;; Clock -> 1998-12-29, 10h 17m 32s.

but as you see, a little more time is necessary: about 20 hours; in particular 9 hours have been needed to compute the boundary of the last generator in dimension 8. These computations are done only with our effective versions of the Serre and Eilenberg-Moore spectral sequences; the next challenge consists in doing the same work with the Adams spectral sequence. A quite interesting challenge.