Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)1\documentclass[a4paper,11pt]{report}23\usepackage{a4wide}4\sloppy5\pagestyle{myheadings}6\usepackage{amssymb}7\usepackage[latin1]{inputenc}8\usepackage{makeidx}9\makeindex10\usepackage{color}11\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}12\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}13\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}14\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}15\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}16\definecolor{Black}{rgb}{0.0,0.0,0.0}1718\definecolor{linkColor}{rgb}{0.0,0.0,0.554}19\definecolor{citeColor}{rgb}{0.0,0.0,0.554}20\definecolor{fileColor}{rgb}{0.0,0.0,0.554}21\definecolor{urlColor}{rgb}{0.0,0.0,0.554}22\definecolor{promptColor}{rgb}{0.0,0.0,0.589}23\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0}24\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0}25\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0}2627%% for a long time these were red and blue by default,28%% now black, but keep variables to overwrite29\definecolor{FuncColor}{rgb}{0.0,0.0,0.0}30%% strange name because of pdflatex bug:31\definecolor{Chapter }{rgb}{0.0,0.0,0.0}32\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}333435\usepackage{fancyvrb}3637\usepackage{mathptmx,helvet}38\usepackage[T1]{fontenc}39\usepackage{textcomp}404142\usepackage[43pdftex=true,44bookmarks=true,45a4paper=true,46pdftitle={Written with GAPDoc},47pdfcreator={LaTeX with hyperref package / GAPDoc},48colorlinks=true,49backref=page,50breaklinks=true,51linkcolor=linkColor,52citecolor=citeColor,53filecolor=fileColor,54urlcolor=urlColor,55pdfpagemode={UseNone},56]{hyperref}5758\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont}5960% write page numbers to a .pnr log file for online help61\newwrite\pagenrlog62\immediate\openout\pagenrlog =\jobname.pnr63\immediate\write\pagenrlog{PAGENRS := [}64\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}}65%% were never documented, give conflicts with some additional packages6667\newcommand{\GAP}{\textsf{GAP}}6869%% nicer description environments, allows long labels70\usepackage{enumitem}71\setdescription{style=nextline}7273%% depth of toc74\setcounter{tocdepth}{1}757677787980%% command for ColorPrompt style examples81\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}}82\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}}83\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}}848586\begin{document}8788\def\contentsname{Contents\logpage{[ 0, 0, 1 ]}}8990\tableofcontents91\newpage929394\chapter{\textcolor{Chapter }{Cellular complexes}}\logpage{[ 1, 0, 0 ]}95\hyperdef{L}{X81F2008E8232E877}{}96{97Data $\longrightarrow$ Cellular Complexes \\98\\99\\100\index{HenonOrbit}::::::::::::::::::::::::\\101102\begin{verbatim} RegularCWPolytope(L):: List --> RegCWComplex103\end{verbatim}104105\begin{verbatim} RegularCWPolytope(G,v):: PermGroup, List --> RegCWComplex106\end{verbatim}107108109110111Inputs a list $L$ of vectors in $\mathbb R^n$ and outputs their convex hull as a regular CW-complex.112113Inputs a permutation group G of degree $d$ and vector $v\in \mathbb R^d$, and outputs the convex hull of the orbit $\{v^g : g\in G\}$ as a regular CW-complex. \\114\\115\\116\\117\index{CubicalComplex}::::::::::::::::::::::::\\118119\begin{verbatim} CubicalComplex(A):: List --> CubicalComplex120\end{verbatim}121122123124125Inputs a binary array $A$ and returns the cubical complex represented by $A$. The array $A$ must of course be such that it represents a cubical complex. \\126\\127\\128\\129\index{PureCubicalComplex}::::::::::::::::::::::::\\130131\begin{verbatim} PureCubicalComplex(A):: List --> PureCubicalComplex132\end{verbatim}133134135136137Inputs a binary array $A$ and returns the pure cubical complex represented by $A$. \\138\\139\\140\\141\index{PureCubicalKnot}::::::::::::::::::::::::\\142143\begin{verbatim} PureCubicalKnot(n,k):: Int, Int --> PureCubicalComplex144\end{verbatim}145146\begin{verbatim} PureCubicalKnot(L):: List --> PureCubicalComplex147\end{verbatim}148149150151152Inputs integers $n, k$ and returns the $k$-th prime knot on $n$ crossings as a pure cubical complex (if this prime knot exists).153154Inputs a list $L$ describing an arc presentation for a knot or link and returns the knot or link155as a pure cubical complex. \\156\\157\\158\\159\index{PurePermutahedralKnot}::::::::::::::::::::::::\\160161\begin{verbatim} PurePermutahedralKnot(n,k):: Int, Int --> PurePermutahedralComplex162\end{verbatim}163164\begin{verbatim} PurePermutahedralKnot(L):: List --> PurePermutahedralComplex165\end{verbatim}166167168Inputs integers $n, k$ and returns the $k$-th prime knot on $n$ crossings as a pure permutahedral complex (if this prime knot exists).169170Inputs a list $L$ describing an arc presentation for a knot or link and returns the knot or link171as a pure permutahedral complex. \\172\\173\\174\\175\index{PurePermutahedralComplex}::::::::::::::::::::::::\\176177\begin{verbatim} PurePermutahedralComplex(A):: List --> PurePermComplex178\end{verbatim}179180181182183Inputs a binary array $A$ and returns the pure permutahedral complex represented by $A$. \\184\\185\\186\\187\index{CayleyGraphOfGroup}::::::::::::::::::::::::\\188189\begin{verbatim} CayleyGraphOfGroup(G,L):: Group, List --> Graph190\end{verbatim}191192193194195Inputs a finite group $G$ and a list $L$ of elements in $G$.It returns the Cayley graph of the group generated by $L$. \\196\\197\\198\\199\index{EquivariantEuclideanSpace}::::::::::::::::::::::::\\200201\begin{verbatim} EquivariantEuclideanSpace(G,v):: MatrixGroup, List --> EquivariantRegCWComplex202\end{verbatim}203204205206207Inputs a crystallographic group $G$ with left action on $\mathbb R^n$ together with a row vector $v \in \mathbb R^n$. It returns an equivariant regular CW-space corresponding to the208Dirichlet-Voronoi tessellation of $\mathbb R^n$ produced from the orbit of $v$ under the action. \\209\\210\\211\\212\index{EquivariantOrbitPolytope}::::::::::::::::::::::::\\213214\begin{verbatim} EquivariantOrbitPolytope(G,v):: PermGroup, List --> EquivariantRegCWComplex215\end{verbatim}216217218219220Inputs a permutation group $G$ of degree $n$ together with a row vector $v \in \mathbb R^n$. It returns, as an equivariant regular CW-space, the convex hull of the orbit221of $v$ under the canonical left action of $G$ on $\mathbb R^n$. \\222\\223\\224\\225\index{EquivariantTwoComplex}::::::::::::::::::::::::\\226227\begin{verbatim} EquivariantTwoComplex(G):: Group --> EquivariantRegCWComplex228\end{verbatim}229230231232233Inputs a suitable group $G$ and returns, as an equivariant regular CW-space, the $2$-complex associated to some presentation of $G$. \\234\\235\\236\\237\index{QuillenComplex}::::::::::::::::::::::::\\238239\begin{verbatim} QuillenComplex(G,p):: Group, Int --> SimplicialComplex240\end{verbatim}241242243244245Inputs a finite group $G$ and prime $p$, and returns the simplicial complex arising as the order complex of the poset246of elementary abelian $p$-subgroups of $G$. \\247\\248\\249\\250\index{RestrictedEquivariantCWComplex}::::::::::::::::::::::::\\251252\begin{verbatim} RestrictedEquivariantCWComplex(Y,H):: RegCWComplex, Group --> EquivariantRegCWComplex253\end{verbatim}254255256257258Inputs a $G$-equivariant regular CW-space Y and a subgroup $H \le G$ for which GAP can find a transversal. It returns the equivariant regular259CW-complex obtained by retricting the action to $H$. \\260\\261\\262\\263\index{RandomSimplicialGraph}::::::::::::::::::::::::\\264265\begin{verbatim} RandomSimplicialGraph(n,p):: Int, Int --> SimplicialComplex266\end{verbatim}267268269270271Inputs an integer $ n \ge 1 $ and positive prime $p$, and returns an Erd\texttt{\symbol{92}}"os-R\texttt{\symbol{92}}'enyi random272graph as a $1$-dimensional simplicial complex. The graph has $n$ vertices. Each pair of vertices is, with probability $p$, directly connected by an edge. \\273\\274\\275\\276\index{RandomSimplicialTwoComplex}::::::::::::::::::::::::\\277278\begin{verbatim} RandomSimplicialTwoComplex(n,p):: Int, Int --> SimplicialComplex279\end{verbatim}280281282283284Inputs an integer $ n \ge 1 $ and positive prime $p$, and returns a Linial-Meshulam random simplicial $2$-complex. The $1$-skeleton of this simplicial complex is the complete graph on $n$ vertices. Each triple of vertices lies, with probability $p$, in a common $2$-simplex of the complex. \\285\\286\\287\\288\index{ReadCSVfileAsPureCubicalKnot}::::::::::::::::::::::::\\289290\begin{verbatim} ReadCSVfileAsPureCubicalKnot(str):: String --> PureCubicalComplex291\end{verbatim}292293\begin{verbatim} ReadCSVfileAsPureCubicalKnot(str,r):: String, Int --> PureCubicalComplex294\end{verbatim}295296\begin{verbatim} ReadCSVfileAsPureCubicalKnot(L):: List --> PureCubicalComplex297\end{verbatim}298299\begin{verbatim} ReadCSVfileAsPureCubicalKnot(L,R):: List,List --> PureCubicalComplex300\end{verbatim}301302303304305Reads a CSV file identified by a string str such as "file.pdb" or306"path/file.pdb" and returns a $3$-dimensional pure cubical complex $K$. Each line of the file should contain the coordinates of a point in $\mathbb R^3$ and the complex $K$ should represent a knot determined by the sequence of points, though the307latter is not guaranteed. A useful check in this direction is to test that $K$ has the homotopy type of a circle.308309If the test fails then try the function again with an integer $r \ge 2$ entered as the optional second argument. The integer determines the resolution310with which the knot is constructed.311312The function can also read in a list $L$ of strings identifying CSV files for several knots. In this case a list $R$ of integer resolutions can also be entered. The lists $L$ and $R$ must be of equal length. \\313\\314\\315\\316\index{ReadImageAsPureCubicalComplex}::::::::::::::::::::::::\\317318\begin{verbatim} ReadImageAsPureCubicalComplex(str,t):: String, Int --> PureCubicalComplex319\end{verbatim}320321322323324Reads an image file identified by a string str such as "file.bmp", "file.eps",325"file.jpg", "path/file.png" etc., together with an integer $t$ between $0$ and $765$. It returns a $2$-dimensional pure cubical complex corresponding to a black/white version of326the image determined by the threshold $t$. The $2$-cells of the pure cubical complex correspond to pixels with RGB value $R+G+B \le t$. \\327\\328\\329\\330\index{ReadImageAsFilteredPureCubicalComplex}::::::::::::::::::::::::\\331332\begin{verbatim} ReadImageAsFilteredPureCubicalComplex(str,n):: String, Int --> FilteredPureCubicalComplex333\end{verbatim}334335336337338Reads an image file identified by a string str such as "file.bmp", "file.eps",339"file.jpg", "path/file.png" etc., together with a positive integer $n$. It returns a $2$-dimensional filtered pure cubical complex of filtration length $n$. The $k$th term in the filtration is a pure cubical complex corresponding to a340black/white version of the image determined by the threshold $t_k=k \times 765/n $. The $2$-cells of the $k$th term correspond to pixels with RGB value $R+G+B \le t_k$. \\341\\342\\343\\344\index{ReadImageAsWeightFunction}::::::::::::::::::::::::\\345346\begin{verbatim} ReadImageAsWeightFunction(str,t):: String, Int --> RegCWComplex, Function347\end{verbatim}348349350351352Reads an image file identified by a string str such as "file.bmp", "file.eps",353"file.jpg", "path/file.png" etc., together with an integer $t$. It constructs a $2$-dimensional regular CW-complex $Y$ from the image, together with a weight function $w\colon Y\rightarrow \mathbb Z$ corresponding to a filtration on $Y$ of filtration length $t$. The pair $[Y,w]$ is returned. \\354\\355\\356\\357\index{ReadPDBfileAsPureCubicalComplex}::::::::::::::::::::::::\\358359\begin{verbatim} ReadPDBfileAsPureCubicalComplex(str):: String --> PureCubicalComplex360\end{verbatim}361362\begin{verbatim} ReadPDBfileAsPureCubicalComplex(str,r):: String, Int --> PureCubicalComplex363\end{verbatim}364365366367368Reads a PDB (Protein Database) file identified by a string str such as369"file.pdb" or "path/file.pdb" and returns a $3$-dimensional pure cubical complex $K$. The complex $K$ should represent a (protein backbone) knot but this is not guaranteed. A370useful check in this direction is to test that $K$ has the homotopy type of a circle.371372If the test fails then try the function again with an integer $r \ge 2$ entered as the optional second argument. The integer determines the resolution373with which the knot is constructed. \\374\\375\\376\\377\index{ReadPDBfileAsPurePermutahedralComplex}::::::::::::::::::::::::\\378379\begin{verbatim} ReadPDBfileAsPurepermutahedralComplex(str):: String --> PurePermComplex380\end{verbatim}381382\begin{verbatim} ReadPDBfileAsPurePermutahedralComplex(str,r):: String, Int --> PurePermComplex383\end{verbatim}384385386387388Reads a PDB (Protein Database) file identified by a string str such as389"file.pdb" or "path/file.pdb" and returns a $3$-dimensional pure permutahedral complex $K$. The complex $K$ should represent a (protein backbone) knot but this is not guaranteed. A390useful check in this direction is to test that $K$ has the homotopy type of a circle.391392If the test fails then try the function again with an integer $r \ge 2$ entered as the optional second argument. The integer determines the resolution393with which the knot is constructed. \\394\\395\\396\\397\index{RegularCWPolytope}::::::::::::::::::::::::\\398399\begin{verbatim} RegularCWPolytope(L):: List --> RegCWComplex400\end{verbatim}401402\begin{verbatim} RegularCWPolytope(G,v):: PermGroup, List --> RegCWComplex403\end{verbatim}404405406407408Inputs a list $L$ of vectors in $\mathbb R^n$ and outputs their convex hull as a regular CW-complex.409410Inputs a permutation group G of degree $d$ and vector $v\in \mathbb R^d$, and outputs the convex hull of the orbit $\{v^g : g\in G\}$ as a regular CW-complex. \\411\\412\\413\\414\index{SimplicialComplex}::::::::::::::::::::::::\\415416\begin{verbatim} SimplicialComplex(L):: List --> SimplicialComplex417\end{verbatim}418419420421422Inputs a list $L$ whose entries are lists of vertices representing the maximal simplices of a423simplicial complex, and returns the simplicial complex. Here a "vertex" is a424GAP object such as an integer or a subgroup. The list $L$ can also contain non-maximal simplices. \\425\\426\\427\\428\index{SymmetricMatrixToFilteredGraph}::::::::::::::::::::::::\\429430\begin{verbatim} SymmetricMatrixToFilteredGraph(A,m,s):: Mat, Int, Rat --> FilteredGraph431\end{verbatim}432433\begin{verbatim} SymmetricMatrixToFilteredGraph(A,m):: Mat, Int --> FilteredGraph434\end{verbatim}435436437438439Inputs an $n \times n$ symmetric matrix $A$, a positive integer $m$ and a positive rational $s$. The function returns a filtered graph of filtration length $m$. The $t$-th term of the filtration is a graph with $n$ vertices and an edge between the $i$-th and $j$-th vertices if the $(i,j)$ entry of $A$ is less than or equal to $t \times s/m$.440441If the optional input $s$ is omitted then it is set equal to the largest entry in the matrix $A$. \\442\\443\\444\\445\index{SymmetricMatrixToGraph}::::::::::::::::::::::::\\446447\begin{verbatim} SymmetricMatrixToGraph(A,t):: Mat, Rat --> Graph448\end{verbatim}449450451452453Inputs an $n\times n$ symmetric matrix $A$ over the rationals and a rational number $t \ge 0$, and returns the graph on the vertices $1,2, \ldots, n$ with an edge between distinct vertices $i$ and $j$ precisely when the $(i,j)$ entry of $A$ is $\le t$. \\454\\455\\456Metric Spaces \\457\\458\\459\index{CayleyMetric}::::::::::::::::::::::::\\460461\begin{verbatim} CayleyMetric(g,h):: Permutation, Permutation --> Int462\end{verbatim}463464465466467Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the minimum number of468transpositions needed to express $g*h^{-1}$ as a product of transpositions. \\469\\470\\471\\472\index{EuclideanMetric}::::::::::::::::::::::::\\473474\begin{verbatim} EuclideanMetric(g,h):: List, List --> Rat475\end{verbatim}476477478479480Inputs two vectors $v,w \in \mathbb R^n$ and returns a rational number approximating the Euclidean distance between481them. \\482\\483\\484\\485\index{EuclideanSquaredMetric}::::::::::::::::::::::::\\486487\begin{verbatim} EuclideanSquaredMetric(g,h):: List, List --> Rat488\end{verbatim}489490491492493Inputs two vectors $v,w \in \mathbb R^n$ and returns the square of the Euclidean distance between them. \\494\\495\\496\\497\index{HammingMetric}::::::::::::::::::::::::\\498499\begin{verbatim} HammingMetric(g,h):: Permutation, Permutation --> Int500\end{verbatim}501502503504505Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the minimum number of506integers moved by the permutation $g*h^{-1}$. \\507\\508\\509\\510\index{KendallMetric}::::::::::::::::::::::::\\511512\begin{verbatim} KendallMetric(g,h):: Permutation, Permutation --> Int513\end{verbatim}514515516517518Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the minimum number of519adjacent transpositions needed to express $g*h^{-1}$ as a product of adjacent transpositions. An520\texttt{\symbol{123}}\texttt{\symbol{92}}em adjacent\texttt{\symbol{125}}521transposition is of the form $(i,i+1)$. \\522\\523\\524\\525\index{ManhattanMetric}::::::::::::::::::::::::\\526527\begin{verbatim} ManhattanMetric(g,h):: List, List --> Rat528\end{verbatim}529530531532533Inputs two vectors $v,w \in \mathbb R^n$ and returns the Manhattan distance between them. \\534\\535\\536\\537\index{VectorsToSymmetricMatrix}::::::::::::::::::::::::\\538539\begin{verbatim} VectorsToSymmetricMatrix(V):: List --> Matrix540\end{verbatim}541542\begin{verbatim} VectorsToSymmetricMatrix(V,d):: List, Function --> Matrix543\end{verbatim}544545546547548Inputs a list $V =\{ v_1, \ldots, v_k\} \in \mathbb R^n$ and returns the $k \times k$ symmetric matrix of Euclidean distances $d(v_i, v_j)$. When these distances are irrational they are approximated by a rational549number.550551As an optional second argument any rational valued function $d(x,y)$ can be entered. \\552\\553\\554Cellular Complexes $\longrightarrow$ Cellular Complexes \\555\\556\\557\index{BoundaryMap}::::::::::::::::::::::::\\558559\begin{verbatim} BoundaryMap(K):: RegCWComplex --> RegCWMap560\end{verbatim}561562563564565Inputs a pure regular CW-complex $K$ and returns the regular CW-inclusion map $\iota \colon \partial K \hookrightarrow K$ from the boundary $\partial K$ into the complex $K$. \\566\\567\\568\\569\index{CliqueComplex}::::::::::::::::::::::::\\570571\begin{verbatim} CliqueComplex(G,n):: Graph, Int --> SimplicialComplex572\end{verbatim}573574\begin{verbatim} CliqueComplex(F,n):: FilteredGraph, Int --> FilteredSimplicialComplex575\end{verbatim}576577\begin{verbatim} CliqueComplex(K,n):: SimplicialComplex, Int --> SimplicialComplex578\end{verbatim}579580581582583Inputs a graph $G$ and integer $n \ge 1$. It returns the $n$-skeleton of a simplicial complex $K$ with one $k$-simplex for each complete subgraph of $G$ on $k+1$ vertices.584585Inputs a fitered graph $F$ and integer $n \ge 1$. It returns the $n$-skeleton of a filtered simplicial complex $K$ whose $t$-term has one $k$-simplex for each complete subgraph of the $t$-th term of $G$ on $k+1$ vertices.586587Inputs a simplicial complex of dimension $d=1$ or $d=2$. If $d=1$ then the clique complex of a graph returned. If $d=2$ then the clique complex of a \$2\$-complex is returned. \\588\\589\\590\\591\index{ConcentricFiltration}::::::::::::::::::::::::\\592593\begin{verbatim} ConcentricFiltration(K,n):: PureCubicalComplex, Int --> FilteredPureCubicalComplex594\end{verbatim}595596597598599Inputs a pure cubical complex $K$ and integer $n \ge 1$, and returns a filtered pure cubical complex of filtration length $n$. The $t$-th term of the filtration is the intersection of $K$ with the ball of radius $r_t$ centred on the centre of gravity of $K$, where $0=r_1 \le r_2 \le r_3 \le \cdots \le r_n$ are equally spaced rational numbers. The complex $K$ is contained in the ball of radius $r_n$. (At present, this is implemented only for $2$- and $3$-dimensional complexes.) \\600\\601\\602\\603\index{DirectProduct}::::::::::::::::::::::::\\604605\begin{verbatim} DirectProduct(M,N):: RegCWComplex, RegCWComplex --> RegCWComplex606\end{verbatim}607608\begin{verbatim} DirectProduct(M,N):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex609\end{verbatim}610611612613614Inputs two or more regular CW-complexes or two or more pure cubical complexes615and returns their direct product. \\616\\617\\618\\619\index{FiltrationTerm}::::::::::::::::::::::::\\620621\begin{verbatim} FiltrationTerm(K,t):: FilteredPureCubicalComplex, Int --> PureCubicalComplex622\end{verbatim}623624\begin{verbatim} FiltrationTerm(K,t):: FilteredRegCWComplex, Int --> RegCWComplex625\end{verbatim}626627628629630Inputs a filtered regular CW-complex or a filtered pure cubical complex $K$ together with an integer $t \ge 1$. The $t$-th term of the filtration is returned. \\631\\632\\633\\634\index{Graph}::::::::::::::::::::::::\\635636\begin{verbatim} Graph(K):: RegCWComplex --> Graph637\end{verbatim}638639\begin{verbatim} Graph(K):: SimplicialComplex --> Graph640\end{verbatim}641642643644645Inputs a regular CW-complex or a simplicial complex $K$ and returns its \$1\$-skeleton as a graph. \\646\\647\\648\\649\index{HomotopyGraph}::::::::::::::::::::::::\\650651\begin{verbatim} HomotopyGraph(Y):: RegCWComplex --> Graph652\end{verbatim}653654655656657Inputs a regular CW-complex $Y$ and returns a subgraph $M \subset Y^1$ of the $1$-skeleton for which the induced homology homomorphisms $H_1(M,\mathbb Z) \rightarrow H_1(Y,\mathbb Z)$ and $H_1(Y^1,\mathbb Z) \rightarrow H_1(Y,\mathbb Z)$ have identical images. The construction tries to include as few edges in $M$ as possible, though a minimum is not guaranteed. \\658\\659\\660\\661\index{Nerve}::::::::::::::::::::::::\\662663\begin{verbatim} Nerve(M):: PureCubicalComplex --> SimplicialComplex664\end{verbatim}665666\begin{verbatim} Nerve(M):: PurePermComplex --> SimplicialComplex667\end{verbatim}668669\begin{verbatim} Nerve(M,n):: PureCubicalComplex, Int --> SimplicialComplex670\end{verbatim}671672\begin{verbatim} Nerve(M,n):: PurePermComplex, Int --> SimplicialComplex673\end{verbatim}674675676677678Inputs a pure cubical complex or pure permutahedral complex $M$ and returns the simplicial complex $K$ obtained by taking the nerve of an open cover of $|M|$, the open sets in the cover being sufficiently small neighbourhoods of the679top-dimensional cells of $|M|$. The spaces $|M|$ and $|K|$ are homotopy equivalent by the Nerve Theorem. If an integer $n \ge 0$ is supplied as the second argument then only the n-skeleton of $K$ is returned. \\680\\681\\682\\683\index{RegularCWComplex}::::::::::::::::::::::::\\684685\begin{verbatim} RegularCWComplex(K):: SimplicialComplex --> RegCWComplex686\end{verbatim}687688\begin{verbatim} RegularCWComplex(K):: PureCubicalComplex --> RegCWComplex689\end{verbatim}690691\begin{verbatim} RegularCWComplex(K):: CubicalComplex --> RegCWComplex692\end{verbatim}693694\begin{verbatim} RegularCWComplex(K):: PurePermComplex --> RegCWComplex695\end{verbatim}696697\begin{verbatim} RegularCWComplex(L):: List --> RegCWComplex698\end{verbatim}699700\begin{verbatim} RegularCWComplex(L,M):: List,List --> RegCWComplex701\end{verbatim}702703704705706Inputs a simplicial, pure cubical, cubical or pure permutahedral complex $K$ and returns the corresponding regular CW-complex. Inputs a list $L=Y!.boundaries$ of boundary incidences of a regular CW-complex $Y$ and returns $Y$. Inputs a list $L=Y!.boundaries$ of boundary incidences of a regular CW-complex $Y$ together with a list $M=Y!.orientation$ of incidence numbers and returns a regular CW-complex $Y$. The availability of precomputed incidence numbers saves recalculating them. \\707\\708\\709\\710\index{RegularCWMap}::::::::::::::::::::::::\\711712\begin{verbatim} RegularCWMap(M,A):: PureCubicalComplex, PureCubicalComplex --> RegCWMap713\end{verbatim}714715716717718Inputs a pure cubical complex $M$ and a subcomplex $A$ and returns the inclusion map $A \rightarrow M$ as a map of regular CW complexes. \\719\\720\\721\\722\index{ThickeningFiltration}::::::::::::::::::::::::\\723724\begin{verbatim} ThickeningFiltration(K,n):: PureCubicalComplex, Int --> FilteredPureCubicalComplex725\end{verbatim}726727\begin{verbatim} ThickeningFiltration(K,n,s):: PureCubicalComplex, Int, Int --> FilteredPureCubicalComplex728\end{verbatim}729730731732733Inputs a pure cubical complex $K$ and integer $n \ge 1$, and returns a filtered pure cubical complex of filtration length $n$. The $t$-th term of the filtration is the $t$-fold thickening of $K$. If an integer $s \ge 1$ is entered as the optional third argument then the $t$-th term of the filtration is the $ts$-fold thickening of $K$. \\734\\735\\736Cellular Complexes $\longrightarrow$ Cellular Complexes (Preserving Data Types) \\737\\738\\739\index{ContractedComplex}::::::::::::::::::::::::\\740741\begin{verbatim} ContractedComplex(K):: RegularCWComplex --> RegularCWComplex742\end{verbatim}743744\begin{verbatim} ContractedComplex(K):: FilteredRegularCWComplex --> FilteredRegularCWComplex745\end{verbatim}746747\begin{verbatim} ContractedComplex(K):: CubicalComplex --> CubicalComplex748\end{verbatim}749750\begin{verbatim} ContractedComplex(K):: PureCubicalComplex --> PureCubicalComplex751\end{verbatim}752753\begin{verbatim} ContractedComplex(K,S):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex754\end{verbatim}755756\begin{verbatim} ContractedComplex(K):: FilteredPureCubicalComplex --> FilteredPureCubicalComplex757\end{verbatim}758759\begin{verbatim} ContractedComplex(K):: PurePermComplex --> PurePermComplex760\end{verbatim}761762\begin{verbatim} ContractedComplex(K,S):: PurePermComplex, PurePermComplex --> PurePermComplex763\end{verbatim}764765\begin{verbatim} ContractedComplex(K):: SimplicialComplex --> SimplicialComplex766\end{verbatim}767768\begin{verbatim} ContractedComplex(G):: Graph --> Graph769\end{verbatim}770771772Inputs a complex (regular CW, Filtered regular CW, pure cubical etc.) and773returns a homotopy equivalent subcomplex.774775Inputs a pure cubical complex or pure permutahedral complex $K$ and a subcomplex $S$. It returns a homotopy equivalent subcomplex of $K$ that contains $S$.776777Inputs a graph $G$ and returns a subgraph $S$ such that the clique complexes of $G$ and $S$ are homotopy equivalent. \\778\\779\\780\\781\index{ContractibleSubcomplex}::::::::::::::::::::::::\\782783\begin{verbatim} ContractibleSubcomplex(K):: PureCubicalComplex --> PureCubicalComplex784\end{verbatim}785786\begin{verbatim} ContractibleSubcomplex(K):: PurePermComplex --> PurePermComplex787\end{verbatim}788789\begin{verbatim} ContractibleSubcomplex(K):: SimplicialComplex --> SimplicialComplex790\end{verbatim}791792793794795Inputs a non-empty pure cubical, pure permutahedral or simplicial complex $K$ and returns a contractible subcomplex. \\796\\797\\798\\799\index{KnotReflection}::::::::::::::::::::::::\\800801\begin{verbatim} KnotReflection(K):: PureCubicalComplex --> PureCubicalComplex802\end{verbatim}803804805806807Inputs a pure cubical knot and returns the reflected knot. \\808\\809\\810\\811\index{KnotSum}::::::::::::::::::::::::\\812813\begin{verbatim} KnotSum(K,L):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex814\end{verbatim}815816817818819Inputs two pure cubical knots and returns their sum. \\820\\821\\822\\823\index{OrientRegularCWComplex}::::::::::::::::::::::::\\824825\begin{verbatim} OrientRegularCWComplex(Y):: RegCWComplex --> Void826\end{verbatim}827828829830831Inputs a regular CW-complex $Y$ and computes and stores incidence numbers for $Y$. If $Y$ already has incidence numbers then the function does nothing. \\832\\833\\834\\835\index{PathComponent}::::::::::::::::::::::::\\836837\begin{verbatim} PathComponent(K,n):: SimplicialComplex, Int --> SimplicialComplex838\end{verbatim}839840\begin{verbatim} PathComponent(K,n):: PureCubicalComplex, Int --> PureCubicalComplex841\end{verbatim}842843\begin{verbatim} PathComponent(K,n):: PurePermComplex, Int --> PurePermComplex844\end{verbatim}845846847848849Inputs a simplicial, pure cubical or pure permutahedral complex $K$ together with an integer $1 \le n \le \beta_0(K)$. The $n$-th path component of $K$ is returned. \\850\\851\\852\\853\index{PureComplexBoundary}::::::::::::::::::::::::\\854855\begin{verbatim} PureComplexBoundary(M):: PureCubicalComplex --> PureCubicalComplex856\end{verbatim}857858\begin{verbatim} PureComplexBoundary(M):: PurePermComplex --> PurePermComplex859\end{verbatim}860861862863864Inputs a $d$-dimensional pure cubical or pure permutahedral complex $M$ and returns a $d$-dimensional complex consisting of the closure of those $d$-cells whose boundaries contains some cell with coboundary of size less than865the maximal possible size. \\866\\867\\868\\869\index{PureComplexComplement}::::::::::::::::::::::::\\870871\begin{verbatim} PureComplexComplement(M):: PureCubicalComplex --> PureCubicalComplex872\end{verbatim}873874\begin{verbatim} PureComplexComplement(M):: PurePermComplex --> PurePermComplex875\end{verbatim}876877878879880Inputs a pure cubical complex or a pure permutahedral complex and returns its881complement. \\882\\883\\884\\885\index{PureComplexDifference}::::::::::::::::::::::::\\886887\begin{verbatim} PureComplexDifference(M,N):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex888\end{verbatim}889890\begin{verbatim} PureComplexDifference(M,N):: PurePermComplex, PurePermComplex --> PurePermComplex891\end{verbatim}892893894895896Inputs two pure cubical complexes or two pure permutahedral complexes and897returns the difference $ M - N$. \\898\\899\\900\\901\index{PureComplexIntersection}::::::::::::::::::::::::\\902903\begin{verbatim} PureComplexInterstection(M,N):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex904\end{verbatim}905906\begin{verbatim} PureComplexIntersection(M,N):: PurePermComplex, PurePermComplex --> PurePermComplex907\end{verbatim}908909910911912Inputs two pure cubical complexes or two pure permutahedral complexes and913returns their intersection. \\914\\915\\916\\917\index{PureComplexThickened}::::::::::::::::::::::::\\918919\begin{verbatim} PureComplexThickened(M):: PureCubicalComplex --> PureCubicalComplex920\end{verbatim}921922\begin{verbatim} PureComplexThickened(M):: PurePermComplex --> PurePermComplex923\end{verbatim}924925926927928Inputs a pure cubical complex or a pure permutahedral complex and returns the929a thickened complex. \\930\\931\\932\\933\index{PureComplexUnion}::::::::::::::::::::::::\\934935\begin{verbatim} PureComplexUnion(M,N):: PureCubicalComplex, PureCubicalComplex --> PureCubicalComplex936\end{verbatim}937938\begin{verbatim} PureComplexUnion(M,N):: PurePermComplex, PurePermComplex --> PurePermComplex939\end{verbatim}940941942943944Inputs two pure cubical complexes or two pure permutahedral complexes and945returns their union. \\946\\947\\948\\949\index{SimplifiedComplex}::::::::::::::::::::::::\\950951\begin{verbatim} SimplifiedComplex(K):: RegularCWComplex --> RegularCWComplex952\end{verbatim}953954\begin{verbatim} SimplifiedComplex(K):: PurePermComplex --> PurePermComplex955\end{verbatim}956957\begin{verbatim} SimplifiedComplex(R):: FreeResolution --> FreeResolution958\end{verbatim}959960\begin{verbatim} SimplifiedComplex(C):: ChainComplex --> ChainComplex961\end{verbatim}962963964965966Inputs a regular CW-complex or a pure permutahedral complex $K$ and returns a homeomorphic complex with possibly fewer cells and certainly no967more cells.968969Inputs a free $\mathbb ZG$-resolution $R$ of $\mathbb Z$ and returns a $\mathbb ZG$-resolution $S$ with potentially fewer free generators.970971Inputs a chain complex $C$ of free abelian groups and returns a chain homotopic chain complex $D$ with potentially fewer free generators. \\972\\973\\974\\975\index{ZigZagContractedComplex}::::::::::::::::::::::::\\976977\begin{verbatim} ZigZagContractedComplex(K):: PureCubicalComplex --> PureCubicalComplex978\end{verbatim}979980\begin{verbatim} ZigZagContractedComplex(K):: FilteredPureCubicalComplex --> FilteredPureCubicalComplex981\end{verbatim}982983\begin{verbatim} ZigZagContractedComplex(K):: PurePermComplex --> PurePermComplex984\end{verbatim}985986987Inputs a pure cubical, filtered pure cubical or pure permutahedral complex and988returns a homotopy equivalent complex. In the filtered case, the $t$-th term of the output is homotopy equivalent to the $t$-th term of the input for all $t$. \\989\\990\\991Cellular Complexes $\longrightarrow$ Homotopy Invariants \\992\\993\\994\index{AlexanderPolynomial}::::::::::::::::::::::::\\995996\begin{verbatim} AlexanderPolynomial(K):: PureCubicalComplex --> Polynomial997\end{verbatim}998999\begin{verbatim} AlexanderPolynomial(K):: PurePermComplex --> Polynomial1000\end{verbatim}10011002\begin{verbatim} AlexanderPolynomial(G):: FpGroup --> Polynomial1003\end{verbatim}10041005100610071008Inputs a $3$-dimensional pure cubical or pure permutahdral complex $K$ representing a knot and returns the Alexander polynomial of the fundamental1009group $G = \pi_1(\mathbb R^3\setminus K)$.10101011Inputs a finitely presented group $G$ with infinite cyclic abelianization and returns its Alexander polynomial. \\1012\\1013\\1014\\1015\index{BettiNumber}::::::::::::::::::::::::\\10161017\begin{verbatim} BettiNumber(K,n):: SimplicialComplex, Int --> Int1018\end{verbatim}10191020\begin{verbatim} BettiNumber(K,n):: PureCubicalComplex, Int --> Int1021\end{verbatim}10221023\begin{verbatim} BettiNumber(K,n):: CubicalComplex, Int --> Int1024\end{verbatim}10251026\begin{verbatim} BettiNumber(K,n):: PurePermComplex, Int --> Int1027\end{verbatim}10281029\begin{verbatim} BettiNumber(K,n):: RegCWComplex, Int --> Int1030\end{verbatim}10311032\begin{verbatim} BettiNumber(K,n):: ChainComplex, Int --> Int1033\end{verbatim}10341035\begin{verbatim} BettiNumber(K,n):: SparseChainComplex, Int --> Int1036\end{verbatim}10371038\begin{verbatim} BettiNumber(K,n,p):: SimplicialComplex, Int, Int --> Int1039\end{verbatim}10401041\begin{verbatim} BettiNumber(K,n,p):: PureCubicalComplex, Int, Int --> Int1042\end{verbatim}10431044\begin{verbatim} BettiNumber(K,n,p):: CubicalComplex, Int, Int --> Int1045\end{verbatim}10461047\begin{verbatim} BettiNumber(K,n,p):: PurePermComplex, Int, Int --> Int1048\end{verbatim}10491050\begin{verbatim} BettiNumber(K,n,p):: RegCWComplex, Int, Int --> Int1051\end{verbatim}105210531054Inputs a simplicial, cubical, pure cubical, pure permutahedral, regular CW,1055chain or sparse chain complex $K$ together with an integer $n \ge 0$ and returns the $n$th Betti number of $K$.10561057Inputs a simplicial, cubical, pure cubical, pure permutahedral or regular1058CW-complex $K$ together with an integer $n \ge 0$ and a prime $p \ge 0$ or $p=0$. In this case the $n$th Betti number of $K$ over a field of characteristic $p$ is returned. \\1059\\1060\\1061\\1062\index{EulerCharacteristic}::::::::::::::::::::::::\\10631064\begin{verbatim} EulerCharacteristic(C):: ChainComplex --> Int1065\end{verbatim}10661067\begin{verbatim} EulerCharacteristic(K):: CubicalComplex --> Int1068\end{verbatim}10691070\begin{verbatim} EulerCharacteristic(K):: PureCubicalComplex --> Int1071\end{verbatim}10721073\begin{verbatim} EulerCharacteristic(K):: PurePermComplex --> Int1074\end{verbatim}10751076\begin{verbatim} EulerCharacteristic(K):: RegCWComplex --> Int1077\end{verbatim}10781079\begin{verbatim} EulerCharacteristic(K):: SimplicialComplex --> Int1080\end{verbatim}10811082108310841085Inputs a chain complex $C$ and returns its Euler characteristic.10861087Inputs a cubical, or pure cubical, or pure permutahedral or regular CW-, or1088simplicial complex $K$ and returns its Euler characteristic. \\1089\\1090\\1091\\1092\index{EulerIntegral}::::::::::::::::::::::::\\10931094\begin{verbatim} EulerIntegral(Y,w):: RegCWComplex, Int --> Int1095\end{verbatim}10961097109810991100Inputs a regular CW-complex $Y$ and a weight function $w\colon Y\rightarrow \mathbb Z$, and returns the Euler integral $ \int_Y w\, d\chi $. \\1101\\1102\\1103\\1104\index{FundamentalGroup}::::::::::::::::::::::::\\11051106\begin{verbatim} FundamentalGroup(K):: RegCWComplex --> FpGroup1107\end{verbatim}11081109\begin{verbatim} FundamentalGroup(K,n):: RegCWComplex, Int --> FpGroup1110\end{verbatim}11111112\begin{verbatim} FundamentalGroup(K):: SimplicialComplex --> FpGroup1113\end{verbatim}11141115\begin{verbatim} FundamentalGroup(K):: PureCubicalComplex --> FpGroup1116\end{verbatim}11171118\begin{verbatim} FundamentalGroup(K):: PurePermComplex --> FpGroup1119\end{verbatim}1120112111221123\begin{verbatim} FundamentalGroup(F):: RegCWMap --> GroupHomomorphism1124\end{verbatim}11251126\begin{verbatim} FundamentalGroup(F,n):: RegCWMap, Int --> GroupHomomorphism1127\end{verbatim}11281129113011311132Inputs a regular CW, simplicial, pure cubical or pure permutahedral complex $K$ and returns the fundamental group.11331134Inputs a regular CW complex $K$ and the number $n$ of some zero cell. It returns the fundamental group of $K$ based at the $n$-th zero cell.11351136Inputs a regular CW map $F$ and returns the induced homomorphism of fundamental groups. If the number of1137some zero cell in the domain of $F$ is entered as an optional second variable then the fundamental group is based1138at this zero cell. \\1139\\1140\\1141\\1142\index{FundamentalGroupOfQuotient}::::::::::::::::::::::::\\11431144\begin{verbatim} FundamentalGroupOfQuotient(Y):: EquivariantRegCWComplex --> Group1145\end{verbatim}11461147114811491150Inputs a $G$-equivariant regular CW complex $Y$ and returns the group $G$. \\1151\\1152\\1153\\1154\index{IsAspherical}::::::::::::::::::::::::\\11551156\begin{verbatim} IsAspherical(F,R):: FreeGroup, List --> Boolean1157\end{verbatim}11581159116011611162Inputs a free group $F$ and a list $R$ of words in $F$. The function attempts to test if the quotient group $G=F/\langle R \rangle^F$ is aspherical. If it succeeds it returns $true$. Otherwise the test is inconclusive and $fail$ is returned. \\1163\\1164\\1165\\1166\index{KnotGroup}::::::::::::::::::::::::\\11671168\begin{verbatim} KnotGroup(K):: PureCubicalComplex --> FpGroup1169\end{verbatim}11701171\begin{verbatim} KnotGroup(K):: PureCubicalComplex --> FpGroup1172\end{verbatim}11731174117511761177Inputs a pure cubical or pure permutahedral complex $K$ and returns the fundamental group of its complement. If the complement is1178path-connected then this fundamental group is unique up to isomorphism.1179Otherwise it will depend on the path-component in which the randomly chosen1180base-point lies. \\1181\\1182\\1183\\1184\index{PiZero}::::::::::::::::::::::::\\11851186\begin{verbatim} PiZero(Y):: RegCWComplex --> List1187\end{verbatim}11881189\begin{verbatim} PiZero(Y):: Graph --> List1190\end{verbatim}11911192\begin{verbatim} PiZero(Y):: SimplicialComplex --> List1193\end{verbatim}11941195119611971198Inputs a regular CW-complex $Y$, or graph $Y$, or simplicial complex $Y$ and returns a pair $[cells,r]$ where: $cells$ is a list of vertices of \$Y\$ representing the distinct path-components; $r(v)$ is a function which, for each vertex $v$ of $Y$ returns the representative vertex $r(v) \in cells$. \\1199\\1200\\1201\\1202\index{PersistentBettiNumbers}::::::::::::::::::::::::\\12031204\begin{verbatim} PersistentBettiNumbers(K,n):: FilteredSimplicialComplex, Int --> List1205\end{verbatim}12061207\begin{verbatim} PersistentBettiNumbers(K,n):: FilteredPureCubicalComplex, Int --> List1208\end{verbatim}12091210\begin{verbatim} PersistentBettiNumbers(K,n):: FilteredRegCWComplex, Int --> List1211\end{verbatim}12121213\begin{verbatim} PersistentBettiNumbers(K,n):: FilteredChainComplex, Int --> List1214\end{verbatim}12151216\begin{verbatim} PersistentBettiNumbers(K,n):: FilteredSparseChainComplex, Int --> List1217\end{verbatim}12181219\begin{verbatim} PersistentBettiNumbers(K,n,p):: FilteredSimplicialComplex, Int, Int --> List1220\end{verbatim}12211222\begin{verbatim} PersistentBettiNumbers(K,n,p):: FilteredPureCubicalComplex, Int, Int --> List1223\end{verbatim}12241225\begin{verbatim} PersistentBettiNumbers(K,n,p):: FilteredRegCWComplex, Int, Int --> List1226\end{verbatim}12271228\begin{verbatim} PersistentBettiNumbers(K,n,p):: FilteredChainComplex, Int, Int --> List1229\end{verbatim}12301231\begin{verbatim} PersistentBettiNumbers(K,n,p):: FilteredSparseChainComplex, Int, Int --> List1232\end{verbatim}123312341235Inputs a filtered simplicial, filtered pure cubical, filtered regular CW,1236filtered chain or filtered sparse chain complex $K$ together with an integer $n \ge 0$ and returns the $n$th PersistentBetti numbers of $K$ as a list of lists of integers.12371238Inputs a filtered simplicial, filtered pure cubical, filtered regular CW,1239filtered chain or filtered sparse chain complex $K$ together with an integer $n \ge 0$ and a prime $p \ge 0$ or $p=0$. In this case the $n$th PersistentBetti numbers of $K$ over a field of characteristic $p$ are returned. \\1240\\1241\\1242Data $\longrightarrow$ Homotopy Invariants \\1243\\1244\\1245\index{DendrogramMat}::::::::::::::::::::::::\\12461247\begin{verbatim} DendrogramMat(A,t,s):: Mat, Rat, Int --> List1248\end{verbatim}12491250125112521253Inputs an $n\times n$ symmetric matrix $A$ over the rationals, a rational $t \ge 0$ and an integer $s \ge 1$. A list $[v_1, \ldots, v_{t+1}]$ is returned with each $v_k$ a list of positive integers. Let $t_k = (k-1)s$. Let $G(A,t_k)$ denote the graph with vertices $1, \ldots, n$ and with distinct vertices $i$ and $j$ connected by an edge when the $(i,j)$ entry of $A$ is $\le t_k$. The $i$-th path component of $G(A,t_k)$ is included in the $v_k[i]$-th path component of $G(A,t_{k+1})$. This defines the integer vector $v_k$. The vector $v_k$ has length equal to the number of path components of $G(A,t_k)$. \\1254\\1255\\1256Cellular Complexes $\longrightarrow$ Non Homotopy Invariants \\1257\\1258\\1259\index{ChainComplex}::::::::::::::::::::::::\\12601261\begin{verbatim} ChainComplex(K):: CubicalComplex --> ChainComplex1262\end{verbatim}12631264\begin{verbatim} ChainComplex(K):: PureCubicalComplex --> ChainComplex1265\end{verbatim}12661267\begin{verbatim} ChainComplex(K):: PurePermComplex --> ChainComplex1268\end{verbatim}12691270\begin{verbatim} ChainComplex(Y):: RegCWComplex --> ChainComplex1271\end{verbatim}12721273\begin{verbatim} ChainComplex(K):: SimplicialComplex --> ChainComplex1274\end{verbatim}12751276127712781279Inputs a cubical, or pure cubical, or pure permutahedral or simplicial complex $K$ and returns its chain complex of free abelian groups. In degree $n$ this chain complex has one free generator for each $n$-dimensional cell of $K$.12801281Inputs a regular CW-complex $Y$ and returns a chain complex $C$ which is chain homotopy equivalent to the cellular chain complex of $Y$. In degree $n$ the free abelian chain group $C_n$ has one free generator for each critical $n$-dimensional cell of $Y$ with respect to some discrete vector field on $Y$. \\1282\\1283\\1284\\1285\index{ChainComplexEquivalence}::::::::::::::::::::::::\\12861287\begin{verbatim} ChainComplexEquivalence(X):: RegCWComplex --> List1288\end{verbatim}12891290129112921293Inputs a regular CW-complex $X$ and returns a pair $[f_\ast, g_\ast]$ of chain maps $f_\ast\colon C_\ast(X) \rightarrow D_\ast(X)$, $g_\ast\colon D_\ast(X) \rightarrow C_\ast(X)$. Here $C_\ast(X)$ is the standard cellular chain complex of $X$ with one free generator for each cell in $X$. The chain complex $D_\ast(X)$ is a typically smaller chain complex arising from a discrete vector field on $X$. The chain maps $f_\ast, g_\ast$ are chain homotopy equivalences. \\1294\\1295\\1296\\1297\index{ChainComplexOfQuotient}::::::::::::::::::::::::\\12981299\begin{verbatim} ChainComplexOfQuotient(Y):: EquivariantRegCWComplex --> ChainComplex1300\end{verbatim}13011302130313041305Inputs a $G$-equivariant regular CW-complex $Y$ and returns the cellular chain complex of the quotient space $Y/G$. \\1306\\1307\\1308\\1309\index{ChainMap}::::::::::::::::::::::::\\13101311\begin{verbatim} ChainMap(X,A,Y,B):: PureCubicalComplex, PureCubicalComplex, PureCubicalComplex, PureCubicalComplex --> ChainMap1312\end{verbatim}13131314\begin{verbatim} ChainMap(f):: RegCWMap --> ChainMap1315\end{verbatim}13161317\begin{verbatim} ChainMap(f):: SimplicialMap --> ChainComplex1318\end{verbatim}13191320132113221323Inputs a pure cubical complex $Y$ and pure cubical sucomplexes $X\subset Y$, $B\subset Y$,$A\subset B$. It returns the induced chain map $f_\ast\colon C_\ast(X/A) \rightarrow C_\ast(Y/B)$ of cellular chain complexes of pairs. (Typlically one takes $A$ and $B$ to be empty or contractible subspaces, in which case $C_\ast(X/A) \simeq C_\ast(X)$, $C_\ast(Y/B) \simeq C_\ast(Y)$.)13241325Inputs a map $f\colon X \rightarrow Y$ between two regular CW-complexes $X,Y$ and returns an induced chain map $f_\ast\colon C_\ast(X) \rightarrow C_\ast(Y)$ where $C_\ast(X)$, $C_\ast(Y)$ are chain homotopic to (but usually smaller than) the cellular chain complexes1326of $X$, $Y$.13271328Inputs a map $f\colon X \rightarrow Y$ between two simplicial complexes $X,Y$ and returns the induced chain map $f_\ast\colon C_\ast(X) \rightarrow C_\ast(Y)$ of cellular chain complexes. \\1329\\1330\\1331\\1332\index{CochainComplex}::::::::::::::::::::::::\\13331334\begin{verbatim} CochainComplex(K):: CubicalComplex --> CochainComplex1335\end{verbatim}13361337\begin{verbatim} CochainComplex(K):: PureCubicalComplex --> CochainComplex1338\end{verbatim}13391340\begin{verbatim} CochainComplex(K):: PurePermComplex --> CochainComplex1341\end{verbatim}13421343\begin{verbatim} CochainComplex(Y):: RegCWComplex --> CochainComplex1344\end{verbatim}13451346\begin{verbatim} CochainComplex(K):: SimplicialComplex --> CohainComplex1347\end{verbatim}13481349135013511352Inputs a cubical, or pure cubical, or pure permutahedral or simplicial complex $K$ and returns its cochain complex of free abelian groups. In degree $n$ this cochain complex has one free generator for each $n$-dimensional cell of $K$.13531354Inputs a regular CW-complex $Y$ and returns a cochain complex $C$ which is chain homotopy equivalent to the cellular cochain complex of $Y$. In degree $n$ the free abelian cochain group $C_n$ has one free generator for each critical $n$-dimensional cell of $Y$ with respect to some discrete vector field on $Y$. \\1355\\1356\\1357\\1358\index{CriticalCells}::::::::::::::::::::::::\\13591360\begin{verbatim} CriticalCells(K):: RegCWComplex --> List1361\end{verbatim}13621363136413651366Inputs a regular CW-complex $K$ and returns its critical cells with respect to some discrete vector field on $K$. If no discrete vector field on $K$ is available then one will be computed and stored. \\1367\\1368\\1369\\1370\index{DiagonalApproximation}::::::::::::::::::::::::\\13711372\begin{verbatim} DiagonalApproximation(X):: RegCWComplex --> RegCWMap, RegCWMap1373\end{verbatim}13741375137613771378Inputs a regular CW-complex $X$ and outputs a pair $[p,\iota]$ of maps of CW-complexes. The map $p\colon X^\Delta \rightarrow X$ will often be a homotopy equivalence. This is always the case if $X$ is the CW-space of any pure cubical complex. In general, one can test to see1379if the induced chain map $p_\ast \colon C_\ast(X^\Delta) \rightarrow C_\ast(X)$ is an isomorphism on integral homology. The second map $\iota \colon X^\Delta \hookrightarrow X\times X$ is an inclusion into the direct product. If $p_\ast$ induces an isomorphism on homology then the chain map $\iota_\ast\colon C_\ast(X^\Delta) \rightarrow C_\ast(X\times X)$ can be used to compute the cup product. \\1380\\1381\\1382\\1383\index{Size}::::::::::::::::::::::::\\13841385\begin{verbatim} Size(Y):: RegCWComplex --> Int1386\end{verbatim}13871388\begin{verbatim} Size(Y):: SimplicialComplex --> Int1389\end{verbatim}13901391\begin{verbatim} Size(K):: PureCubicalComplex --> Int1392\end{verbatim}13931394\begin{verbatim} Size(K):: PurePermComplex --> Int1395\end{verbatim}13961397139813991400Inputs a regular CW complex or a simplicial complex $Y$ and returns the number of cells in the complex.14011402Inputs a $d$-dimensional pure cubical or pure permutahedral complex $K$ and returns the number of $d$-dimensional cells in the complex. \\1403\\1404\\1405(Co)chain Complexes $\longrightarrow $ (Co)chain Complexes \\1406\\1407\\1408\index{FilteredTensorWithInteres}::::::::::::::::::::::::\\14091410\begin{verbatim} FilteredTensorWithIntegers(R):: FreeResolution, Int --> FilteredChainComplex1411\end{verbatim}141214131414Inputs a free $\mathbb ZG$-resolution $R$ for which $"filteredDimension"$ lies in \textsc{NamesOfComponents(R)}. (Such a resolution can be produced using \textsc{TwisterTensorProduct()}, \textsc{ResolutionNormalSubgroups()} or \textsc{FreeGResolution()}.) It returns the filtered chain complex obtained by tensoring with the1415trivial module \$\texttt{\symbol{92}}mathbb Z\$. \\1416\\1417\\1418\\1419\index{FilteredTensorWithInteresModP}::::::::::::::::::::::::\\14201421\begin{verbatim} FilteredTensorWithIntegersModP(R,p):: FreeResolution, Int --> FilteredChainComplex1422\end{verbatim}142314241425Inputs a free $\mathbb ZG$-resolution $R$ for which $"filteredDimension"$ lies in \textsc{NamesOfComponents(R)}, together with a prime $p$. (Such a resolution can be produced using \textsc{TwisterTensorProduct()}, \textsc{ResolutionNormalSubgroups()} or \textsc{FreeGResolution()}.) It returns the filtered chain complex obtained by tensoring with the1426trivial module \$\texttt{\symbol{92}}mathbb F\$, the field of $p$ elements. \\1427\\1428\\1429\\1430\index{HomToIntegers}::::::::::::::::::::::::\\14311432\begin{verbatim} HomToIntegers(C):: ChainComplex --> CochainComplex1433\end{verbatim}14341435\begin{verbatim} HomToIntegers(R):: FreeResolution --> CochainComplex1436\end{verbatim}14371438\begin{verbatim} HomToIntegers(F):: EquiChainMap --> CochainMap1439\end{verbatim}14401441144214431444Inputs a chain complex $C$ of free abelian groups and returns the cochain complex $Hom_{\mathbb Z}(C,\mathbb Z)$.14451446Inputs a free $\mathbb ZG$-resolution $R$ in characteristic $0$ and returns the cochain complex $Hom_{\mathbb ZG}(R,\mathbb Z)$.14471448Inputs an equivariant chain map $F\colon R\rightarrow S$ of resolutions and returns the induced cochain map $Hom_{\mathbb ZG}(S,\mathbb Z) \longrightarrow Hom_{\mathbb ZG}(R,\mathbb Z)$. \\1449\\1450\\1451\\1452\index{TensorWithIntegersModP}::::::::::::::::::::::::\\14531454\begin{verbatim} TensorWithIntegersModP(C,p):: ChainComplex, Int --> ChainComplex1455\end{verbatim}14561457\begin{verbatim} TensorWithIntegersModP(R,p):: FreeResolution, Int --> ChainComplex1458\end{verbatim}14591460\begin{verbatim} TensorWithIntegersModP(F,p):: EquiChainMap, Int --> ChainMap1461\end{verbatim}14621463146414651466Inputs a chain complex $C$ of characteristic $0$ and a prime integer $p$. It returns the chain complex $C \otimes_{\mathbb Z} {\mathbb Z}_p$ of characteristic $p$.14671468Inputs a free $\mathbb ZG$-resolution $R$ of characteristic $0$ and a prime integer $p$. It returns the chain complex $R \otimes_{\mathbb ZG} {\mathbb Z}_p$ of characteristic $p$.14691470Inputs an equivariant chain map $F\colon R \rightarrow S$ in characteristic $0$ a prime integer $p$. It returns the induced chain map $F\otimes_{\mathbb ZG}\mathbb Z_p \colon R \otimes_{\mathbb ZG} {\mathbb Z}_p1471\longrightarrow S \otimes_{\mathbb ZG} {\mathbb Z}_p$. \\1472\\1473\\1474(Co)chain Complexes $\longrightarrow $ Homotopy Invariants \\1475\\1476\\1477\index{Cohomology}::::::::::::::::::::::::\\14781479\begin{verbatim} Cohomology(C,n):: CochainComplex, Int --> List1480\end{verbatim}14811482\begin{verbatim} Cohomology(F,n):: CochainMap, Int --> GroupHomomorphism1483\end{verbatim}14841485\begin{verbatim} Cohomology(K,n):: CubicalComplex, Int --> List1486\end{verbatim}14871488\begin{verbatim} Cohomology(K,n):: PureCubicalComplex, Int --> List1489\end{verbatim}14901491\begin{verbatim} Cohomology(K,n):: PurePermComplex, Int --> List1492\end{verbatim}14931494\begin{verbatim} Cohomology(K,n):: RegCWComplex, Int --> List1495\end{verbatim}14961497\begin{verbatim} Cohomology(K,n):: SimplicialComplex, Int --> List1498\end{verbatim}14991500150115021503Inputs a cochain complex $C$ and integer $n \ge 0$ and returns the $n$-th cohomology group of $C$ as a list of its abelian invariants.15041505Inputs a chain map $F$ and integer $n \ge 0$. It returns the induced cohomology homomorphism $H_n(F)$ as a homomorphism of finitely presented groups.15061507Inputs a cubical, or pure cubical, or pure permutahedral or regular CW or1508simplicial complex $K$ together with an integer $n \ge 0$. It returns the $n$-th integral cohomology group of $K$ as a list of its abelian invariants. \\1509\\1510\\1511\\1512\index{CupProduct}::::::::::::::::::::::::\\15131514\begin{verbatim} CupProduct(Y):: RegCWComplex --> Function1515\end{verbatim}15161517\begin{verbatim} CupProduct(R,p,q,P,Q):: FreeRes, Int, Int, List, List --> List1518\end{verbatim}15191520152115221523Inputs a regular CW-complex $Y$ and returns a function $f(p,q,P,Q)$. This function $f$ inputs two integers $p,q \ge 0$ and two integer lists $P=[p_1, \ldots, p_m]$, $Q=[q_1, \ldots, q_n]$ representing elements $P\in H^p(Y,\mathbb Z)$ and $Q\in H^q(Y,\mathbb Z)$. The function $f$ returns a list $P \cup Q$ representing the cup product $P \cup Q \in H^{p+q}(Y,\mathbb Z)$.15241525Inputs a free $\mathbb ZG$ resolution $R$ of $\mathbb Z$ for some group $G$, together with integers $p,q \ge 0$ and integer lists $P, Q$ representing cohomology classes $P\in H^p(G,\mathbb Z)$, $Q\in H^q(G,\mathbb Z)$. An integer list representing the cup product $P\cup Q \in H^{p+q}(G,\mathbb Z)$ is returned. \\1526\\1527\\1528\\1529\index{Homology}::::::::::::::::::::::::\\15301531\begin{verbatim} Homology(C,n):: ChainComplex, Int --> List1532\end{verbatim}15331534\begin{verbatim} Homology(F,n):: ChainMap, Int --> GroupHomomorphism1535\end{verbatim}15361537\begin{verbatim} Homology(K,n):: CubicalComplex, Int --> List1538\end{verbatim}15391540\begin{verbatim} Homology(K,n):: PureCubicalComplex, Int --> List1541\end{verbatim}15421543\begin{verbatim} Homology(K,n):: PurePermComplex, Int --> List1544\end{verbatim}15451546\begin{verbatim} Homology(K,n):: RegCWComplex, Int --> List1547\end{verbatim}15481549\begin{verbatim} Homology(K,n):: SimplicialComplex, Int --> List1550\end{verbatim}15511552155315541555Inputs a chain complex $C$ and integer $n \ge 0$ and returns the $n$-th homology group of $C$ as a list of its abelian invariants.15561557Inputs a chain map $F$ and integer $n \ge 0$. It returns the induced homology homomorphism $H_n(F)$ as a homomorphism of finitely presented groups.15581559Inputs a cubical, or pure cubical, or pure permutahedral or regular CW or1560simplicial complex $K$ together with an integer $n \ge 0$. It returns the $n$-th integral homology group of $K$ as a list of its abelian invariants. \\1561\\1562\\1563Visualization \\1564\\1565\\1566\index{BarCodeDisplay}::::::::::::::::::::::::\\15671568\begin{verbatim} BarCodeDisplay(L) :: List --> void1569\end{verbatim}15701571157215731574Displays a barcode \textsc{L=PersitentBettiNumbers(X,n)}. \\1575\\1576\\1577\\1578\index{BarCodeCompactDisplay}::::::::::::::::::::::::\\15791580\begin{verbatim} BarCodeCompactDisplay(L) :: List --> void1581\end{verbatim}15821583158415851586Displays a barcode \textsc{L=PersitentBettiNumbers(X,n)} in compact form. \\1587\\1588\\1589\\1590\index{CayleyGraphOfGroupDisplay}::::::::::::::::::::::::\\15911592\begin{verbatim} CayleyGraphOfGroup(G,L):: Group, List --> Void1593\end{verbatim}15941595159615971598Inputs a finite group $G$ and a list $L$ of elements in $G$.It displays the Cayley graph of the group generated by $L$ where edge colours correspond to generators. \\1599\\1600\\1601\\1602\index{Display}::::::::::::::::::::::::\\16031604\begin{verbatim} Display(G) :: Graph --> void1605\end{verbatim}16061607\begin{verbatim} Display(M) :: PureCubicalComplex --> void1608\end{verbatim}16091610\begin{verbatim} Display(M) :: PurePermutahedralComplex --> void1611\end{verbatim}16121613161416151616Displays a graph $G$; a \$2\$- or \$3\$-dimensional pure cubical complex $M$; a \$3\$-dimensional pure permutahedral complex $M$. \\1617\\1618\\1619\\1620\index{DisplayArcPresentation}::::::::::::::::::::::::\\16211622\begin{verbatim} DisplayArcPresentation(K) :: PureCubicalComplex --> void1623\end{verbatim}16241625162616271628Displays a $3$-dimensional pure cubical knot \textsc{K=PureCubicalKnot(L)} in the form of an arc presentation. \\1629\\1630\\1631\\1632\index{DisplayCSVknotFile}::::::::::::::::::::::::\\16331634\begin{verbatim} DisplayCSVKnotFile(str) :: String --> void1635\end{verbatim}16361637163816391640Inputs a string $str$ that identifies a csv file containing the points on a piecewise linear knot in $\mathbb R^3$. It displays the knot. \\1641\\1642\\1643\\1644\index{DisplayDendrogram}::::::::::::::::::::::::\\16451646\begin{verbatim} DisplayDendrogram(L):: List --> Void1647\end{verbatim}16481649165016511652Displays the dendrogram \textsc{L:=DendrogramMat(A,t,s)}. \\1653\\1654\\1655\\1656\index{DisplayDendrogramMat}::::::::::::::::::::::::\\16571658\begin{verbatim} DisplayDendrogramMat(A,t,s):: Mat, Rat, Int --> Void1659\end{verbatim}16601661166216631664Inputs an $n\times n$ symmetric matrix $A$ over the rationals, a rational $t \ge 0$ and an integer $s \ge 1$. The dendrogram defined by \textsc{DendrogramMat(A,t,s)} is displayed. \\1665\\1666\\1667\\1668\index{DisplayPDBfile}::::::::::::::::::::::::\\16691670\begin{verbatim} DisplayPDBfile(str):: String --> Void1671\end{verbatim}16721673167416751676Displays the protein backone described in a PDB (Protein Database) file1677identified by a string str such as "file.pdb" or "path/file.pdb". \\1678\\1679\\1680\\1681\index{OrbitPolytope}::::::::::::::::::::::::\\16821683\begin{verbatim} OrbitPolytope(G,v,L) :: PermGroup, List, List --> void1684\end{verbatim}16851686168716881689Inputs a permutation group or finite matrix group $G$ of degree $d$ and a rational vector $v\in \mathbb R^d$. In both cases there is a natural action of $G$ on $\mathbb R^d$. Let $P(G,v)$ be the convex hull of the orbit of $v$ under the action of $G$. The function also inputs a sublist $L$ of the following list of strings:1690["dimension","vertex\texttt{\symbol{92}}{\textunderscore}degree",1691"visual\texttt{\symbol{92}}{\textunderscore}graph", "schlegel", "visual"]16921693Depending on $L$, the function displays the following1694information:\texttt{\symbol{92}}\texttt{\symbol{92}} the dimension of the1695orbit polytope $P(G,v)$;\texttt{\symbol{92}}\texttt{\symbol{92}} the degree of a vertex in the graph1696of $P(G,v)$;\texttt{\symbol{92}}\texttt{\symbol{92}} a visualization of the graph of $P(G,v)$;\texttt{\symbol{92}}\texttt{\symbol{92}} a visualization of the Schlegel1697diagram of $P(G,v)$;\texttt{\symbol{92}}\texttt{\symbol{92}} a visualization of the polytope $P(G,v)$ if $d=2,3$.16981699The function requires Polymake software. \\1700\\1701\\1702\\1703\index{ScatterPlot}::::::::::::::::::::::::\\17041705\begin{verbatim} ScatterPlot(L):: List --> Void1706\end{verbatim}17071708170917101711Inputs a list $L=[[x_1,y_1],\ldots, [x_n,y_n]]$ of pairs of rational numbers and displays a scatter plot of the points in the $x$-$y$-plane. \\1712\\1713\\1714}171517161717\chapter{\textcolor{Chapter }{$\mathbb ZG$-Resolutions and Group Cohomology}}\logpage{[ 2, 0, 0 ]}1718\hyperdef{L}{X7C391012839DB4C5}{}1719{1720Resolutions \begin{center}1721\begin{tabular}{|l|} \index{EquivariantChainMap}1722\begin{verbatim} EquivariantChainMap(R,S,f):: FreeResolution, FreeResolution, GroupHomomorphisms --> EquiChainMap1723\end{verbatim}172417251726Inputs a free $\mathbb ZG$-resolution $R$ of $\mathbb Z$, a free $\mathbb ZQ$-resolution $S$ of $\mathbb Z$, and a group homomorphism $f\colon G \rightarrow Q$. It returns the induced $f$-equivariant chain map $F\colon R \rightarrow S$. \\1727\index{FreeGResolution}1728\begin{verbatim} FreeGResolution(P,n):: NonFreeResolution, Int --> FreeResolution1729\end{verbatim}173017311732Inputs a non-free \$\texttt{\symbol{92}}mathbb ZG\$-resolution1733\$P{\textunderscore}\texttt{\symbol{92}}ast\$ and a positive integer $n$. It attempts to return $n$ terms of a free $\mathbb ZG$-resolution of $\mathbb Z$. However, the stabilizer groups in the non-free resolution must be such that1734HAP can construct free resolutions with contracting homotopies for them.17351736The contracting homotopy on the resolution was implemented by Bui Anh Tuan. \\1737\index{ResolutionBieberbachGroup}1738\begin{verbatim} ResolutionBieberbachGroup(G):: MatrixGroup --> FreeResolution1739\end{verbatim}17401741\begin{verbatim} ResolutionBieberbachGroup(G,v):: MatrixGroup, List --> FreeResolution1742\end{verbatim}17431744174517461747Inputs a torsion free crystallographic group $G$, also known as a Bieberbach group, represented using \textsc{AffineCrystGroupOnRight} as in the GAP package Cryst. It also optionally inputs a choice of vector $v$ in the Euclidean space $\mathbb R^n$ on which $G$ acts freely. The function returns $n+1$ terms of the free ZG-resolution of $\mathbb Z$ arising as the cellular chain complex of the tessellation of $\mathbb R^n$ by the Dirichlet-Voronoi fundamental domain determined by $v$. No contracting homotopy is returned with the resolution.17481749This function is part of the HAPcryst package written by Marc Roeder and thus1750requires the HAPcryst package to be loaded.17511752The function requires the use of Polymake software. \\1753\index{ResolutionCubicalCrystGroup}1754\begin{verbatim} ResolutionCubicalCrustGroup(G,k):: MatrixGroup, Int --> FreeResolution1755\end{verbatim}175617571758Inputs a crystallographic group $G$ represented using \textsc{AffineCrystGroupOnRight} as in the GAP package $Cryst$ together with an integer $k \ge 1$. The function tries to find a cubical fundamental domain in the Euclidean1759space $\mathbb R^n$ on which $G$ acts. If it succeeds it uses this domain to return $k+1$ terms of a free ZG-resolution of $\mathbb Z$.17601761This function was written by Bui Anh Tuan. \\1762\index{ResolutionFiniteGroup}1763\begin{verbatim} ResolutionFiniteGroup(G,k):: Group, Int --> FreeResolution1764\end{verbatim}17651766176717681769Inputs a finite group $G$ and an integer $k \ge 1$. It returns $k+1$ terms of a free ZG-resolution of $\mathbb Z$. \\1770\index{ResolutionNilpotentGroup}1771\begin{verbatim} ResolutionNilpotentGroup(G,k):: Group, Int --> FreeResolution1772\end{verbatim}17731774177517761777Inputs a nilpotent group $G$ (which can be infinite) and an integer $k \ge 1$. It returns $k+1$ terms of a free $\mathbb ZG$-resolution of $\mathbb Z$. \\1778\index{ResolutionNormalSeries}1779\begin{verbatim} ResolutionNormalSeries(L,k):: List, Int --> FreeResolution1780\end{verbatim}17811782178317841785Inputs a a list $L$ consisting of a chain \$$1=N_1 \le N_2 \le \cdots \le N_n =G$ of normal subgroups of $G$, together with an integer $k \ge 1$. It returns $k+1$ terms of a free ZG-resolution of $\mathbb Z$. \\1786\index{ResolutionPrimePowerGroup}1787\begin{verbatim} ResolutionPrimePowerGroup(G,k):: Group, Int --> FreeResolution1788\end{verbatim}17891790179117921793Inputs a finite $p$-group $G$ and an integer $k \ge 1$. It returns $k+1$ terms of a minimal free $\mathbb FG$-resolution of the field $\mathbb F$ of $p$ elements. \\1794\index{ResolutionSL2Z}1795\begin{verbatim} ResolutionSL2Z(m,k):: Int, Int --> FreeResolution1796\end{verbatim}1797Inputs positive integers $m, n$ and returns $n$ terms of a free $\mathbb ZG$-resolution of $\mathbb Z$ for the group $G=SL_2(\mathbb Z[1/m])$.17981799This function is joint work with Bui Anh Tuan. \\1800\index{ResolutionSmallGroup}1801\begin{verbatim} ResolutionSmallGroup(G,k):: Group, Int --> FreeResolution1802\end{verbatim}18031804\begin{verbatim} ResolutionSmallGroup(G,k):: FpGroup, Int --> FreeResolution1805\end{verbatim}180618071808Inputs a small group $G$ and an integer $k \ge 1$. It returns $k+1$ terms of a free ZG-resolution of $\mathbb Z$.18091810If $G$ is a finitely presented group then up to degree \$2\$ the resolution coincides1811with cellular chain complex of the universal cover of the $2$ complex associated to the presentation of $G$. Thus the boundaries of the generators in degree $3$ provide a generating set for the module of identities of the presentation.18121813This function was written by Irina Kholodna. \\1814\index{ResolutionSubgroup}1815\begin{verbatim} ResolutionSubgroup(R,H):: FreeResolution, Group --> FreeResolution1816\end{verbatim}18171818181918201821Inputs a free ZG-resolution of $\mathbb Z$ and a finite index subgroup $H \le G$. It returns a free ZH-resolution of $\mathbb Z$. \\1822\end{tabular}\\[2mm]1823\end{center}18241825Algebras $\longrightarrow $ (Co)chain Complexes \begin{center}1826\begin{tabular}{|l|} \index{LeibnizComplex}1827\begin{verbatim} LeibnizComplex(g,n):: LeibnizAlgebra, Int --> ChainComplex1828\end{verbatim}182918301831Inputs a Leibniz algebra, or Lie algebra, $\mathfrak{g}$ over a ring $\mathbb K$ together with an integer $n\ge 0$. It returns the first $n$ terms of the Leibniz chain complex over $\mathbb K$. The complex was implemented by Pablo Fernandez Ascariz. \\1832\end{tabular}\\[2mm]1833\end{center}18341835Resolutions $\longrightarrow $ (Co)chain Complexes \begin{center}1836\begin{tabular}{|l|} \index{HomToIntegers}1837\begin{verbatim} HomToIntegers(C):: ChainComplex --> CochainComplex1838\end{verbatim}18391840\begin{verbatim} HomToIntegers(R):: FreeResolution --> CochainComplex1841\end{verbatim}18421843\begin{verbatim} HomToIntegers(F):: EquiChainMap --> CochainMap1844\end{verbatim}18451846184718481849Inputs a chain complex $C$ of free abelian groups and returns the cochain complex $Hom_{\mathbb Z}(C,\mathbb Z)$.18501851Inputs a free $\mathbb ZG$-resolution $R$ in characteristic $0$ and returns the cochain complex $Hom_{\mathbb ZG}(R,\mathbb Z)$.18521853Inputs an equivariant chain map $F\colon R\rightarrow S$ of resolutions and returns the induced cochain map $Hom_{\mathbb ZG}(S,\mathbb Z) \longrightarrow Hom_{\mathbb ZG}(R,\mathbb Z)$. \\1854\index{HomToIntegralModule}1855\begin{verbatim} HomToIntegralModule(R,A):: FreeResolution, GroupHomomorphism --> CochainComplex1856\end{verbatim}18571858185918601861Inputs a free $\mathbb ZG$-resolution $R$ in characteristic $0$ and a group homomorphism $A\colon G \rightarrow {\rm GL}_n(\mathbb Z)$. The homomorphism $A$ can be viewed as the $\mathbb ZG$-module with underlying abelian group $\mathbb Z^n$ on which $G$ acts via the homomorphism $A$. It returns the cochain complex $Hom_{\mathbb ZG}(R,A)$. \\1862\index{TensorWithIntegers}1863\begin{verbatim} TensorWithIntegers(R):: FreeResolution --> ChainComplex1864\end{verbatim}18651866\begin{verbatim} TensorWithIntegers(F):: EquiChainMap --> ChainMap1867\end{verbatim}18681869187018711872Inputs a free $\mathbb ZG$-resolution $R$ of characteristic $0$ and returns the chain complex $R \otimes_{\mathbb ZG} {\mathbb Z}$.18731874Inputs an equivariant chain map $F\colon R \rightarrow S$ in characteristic $0$ and returns the induced chain map $F\otimes_{\mathbb ZG}\mathbb Z \colon R \otimes_{\mathbb ZG} {\mathbb Z}1875\longrightarrow S \otimes_{\mathbb ZG} {\mathbb Z}$. \\1876\index{TensorWithIntegersModP}1877\begin{verbatim} TensorWithIntegersModP(C,p):: ChainComplex, Int --> ChainComplex1878\end{verbatim}18791880\begin{verbatim} TensorWithIntegersModP(R,p):: FreeResolution, Int --> ChainComplex1881\end{verbatim}18821883\begin{verbatim} TensorWithIntegersModP(F,p):: EquiChainMap, Int --> ChainMap1884\end{verbatim}18851886188718881889Inputs a chain complex $C$ of characteristic $0$ and a prime integer $p$. It returns the chain complex $C \otimes_{\mathbb Z} {\mathbb Z}_p$ of characteristic $p$.18901891Inputs a free $\mathbb ZG$-resolution $R$ of characteristic $0$ and a prime integer $p$. It returns the chain complex $R \otimes_{\mathbb ZG} {\mathbb Z}_p$ of characteristic $p$.18921893Inputs an equivariant chain map $F\colon R \rightarrow S$ in characteristic $0$ a prime integer $p$. It returns the induced chain map $F\otimes_{\mathbb ZG}\mathbb Z_p \colon R \otimes_{\mathbb ZG} {\mathbb Z}_p1894\longrightarrow S \otimes_{\mathbb ZG} {\mathbb Z}_p$. \\1895\end{tabular}\\[2mm]1896\end{center}18971898Cohomology rings \begin{center}1899\begin{tabular}{|l|} \index{AreIsomorphicGradedAlgebras}1900\begin{verbatim} AreIsomorphicGradedAlgebras(A,B):: PresentedGradedAlgebra, PresentedGradedAlgebra --> Boolean1901\end{verbatim}190219031904Inputs two freely presented graded algebras $A=\mathbb F[x_1, \ldots, x_m]/I$ and $B=\mathbb F[y_1, \ldots, y_n]/J$ and returns \textsc{true} if they are isomorphic, and \textsc{false} otherwise. This function was implemented by Paul Smith. \\1905\index{HAPDerivation}1906\begin{verbatim} HAPDerivation(R,I,L):: PolynomialRing, List, List --> Derivation1907\end{verbatim}190819091910Inputs a polynomial ring $R=\mathbb F[x_1,\ldots,x_m]$ over a field $\mathbb F$ together with a list $I$ of generators for an ideal in $R$ and a list $L=[y_1,\ldots,y_m]\subset R$. It returns the derivation $d\colon E \rightarrow E$ for $E=R/I$ defined by $d(x_i)=y_i$. This function was written by Paul Smith. It uses the Singular commutative1911algebra package. \\1912\index{HilbertPoincareSeries}1913\begin{verbatim} HilbertPoincareSeries::PresentedGradedAlgebra --> RationalFunction1914\end{verbatim}1915Inputs a presentation $E=\mathbb F[x_1,\ldots,x_m]/I$ of a graded algebra and returns its Hilbert-Poincar\texttt{\symbol{92}}'e1916series. This function was written by Paul Smith and uses the Singular1917commutative algebra package. It is essentially a wrapper for Singular's1918Hilbert-Poincare series. \\1919\index{HomologyOfDerivation}1920\begin{verbatim} HomologyOfDerivation(d):: Derivation --> List1921\end{verbatim}192219231924Inputs a derivation $d\colon E \rightarrow E$ on a quotient $E=R/I$ of a polynomial ring $R=\mathbb F[x_1,\ldots,x_m]$ over a field $\mathbb F$. It returns a list $[S,J,h]$ where $S$ is a polynomial ring and $J$ is a list of generators for an ideal in \$S\$ such that there is an1925isomorphism $\alpha\colon S/J \rightarrow \ker d/{\rm im~} d$. This isomorphism lifts to the ring homomorphism $h\colon S \rightarrow \ker d$. This function was written by Paul Smith. It uses the Singular commutative1926algebra package. \\1927\index{IntegralCohomologyGenerators}1928\begin{verbatim} IntegralCohomologyGenerators(R,n):: FreeResolution, Int --> List1929\end{verbatim}193019311932Inputs at least $n+1$ terms of a free $\mathbb ZG$-resolution of $\mathbb Z$ and the integer $ n \ge 1$. It returns a minimal list of cohomology classes in $H^n(G,\mathbb Z)$ which, together with all cup products of lower degree classes, generate the1933group $H^n(G,\mathbb Z)$ . (Let $a_i$ be the $i$-th canonical generator of the $d$-generator abelian group $H^n(G,Z)$. The cohomology class $n_1a_1 + ... +n_da_d$ is represented by the integer vector $u=(n_1, ..., n_d)$. ) \\1934\index{LHSSpectralSequence}1935\begin{verbatim} LHSSpectralSequence(G,N,r):: Group, Int, Int --> List1936\end{verbatim}193719381939Inputs a finite $2$-group $G$, and normal subgroup $N$ and an integer $r$. It returns a list of length $r$ whose $i$-th term is a presentation for the $i$-th page of the Lyndon-Hochschild-Serre spectral sequence. This function was1940written by Paul Smith. It uses the Singular commutative algebra package. \\1941\index{LHSSpectralSequenceLastSheet}1942\begin{verbatim} LHSSpectralSequenceLastSheet(G,N):: Group, Int --> List1943\end{verbatim}194419451946Inputs a finite $2$-group $G$ and normal subgroup $N$. It returns presentation for the $E_\infty$ page of the Lyndon-Hochschild-Serre spectral sequence. This function was1947written by Paul Smith. It uses the Singular commutative algebra package. \\1948\index{ModPCohomologyGenerators}1949\begin{verbatim} ModPCohomologyGenerators(G,n):: Group, Int --> List1950\end{verbatim}19511952\begin{verbatim} ModPCohomologyGenerators(R):: FreeResolution --> List1953\end{verbatim}195419551956Inputs either a $p$-group $G$ and positive integer $n$, or else $n+1$ terms of a minimal $\mathbb FG$-resolution $R$ of the field $\mathbb F$ of $p$ elements. It returns a pair whose first entry is a minimal list of homogeneous1957generators for the cohomology ring $A=H^\ast(G,\mathbb F)$ modulo all elements in degree greater than $n$. The second entry of the pair is a function \textsc{deg} which, when applied to a minimal generator, yields its degree. WARNING: the1958following rule must be applied when multiplying generators $x_i$ together. Only products of the form $x_1*(x_2*(x_3*(x_4*...)))$ with $deg(x_i) \le deg(x_{i+1})$ should be computed (since the $x_i$ belong to a structure constant algebra with only a partially defined structure1959constants table). \\1960\index{ModPCohomologyRing}1961\begin{verbatim} ModPCohomologyRing(R):: FreeResolution --> SCAlgebra1962\end{verbatim}19631964\begin{verbatim} ModPCohomologyRing(R,level):: FreeResolution, String --> SCAlgebra1965\end{verbatim}19661967\begin{verbatim} ModPCohomologyRing(G,n):: Group, Int --> SCAlgebra1968\end{verbatim}19691970\begin{verbatim} ModPCohomologyRing(G,n,level):: Group, Int, String --> SCAlgebra1971\end{verbatim}197219731974Inputs either a $p$-group $G$ and positive integer $n$, or else $n$ terms of a minimal $\mathbb FG$-resolution $R$ of the field $\mathbb F$ of $p$ elements. It returns the cohomology ring $A=H^\ast(G,\mathbb F)$ modulo all elements in degree greater than $n$. The ring is returned as a structure constant algebra $A$. The ring $A$ is graded. It has a component \textsc{A!.degree(x)} which is a function returning the degree of each (homogeneous) element $x$ in \textsc{GeneratorsOfAlgebra(A)}. An optional input variable $"level"$ can be set to one of the strings $"medium"$ or $"high"$. These settings determine parameters in the algorithm. The default setting is $"medium"$. When $"level"$ is set to $"high"$ the ring $A$ is returned with a component \textsc{A!.niceBasis}. This component is a pair $[Coeff,Bas]$. Here $Bas$ is a list of integer lists; a "nice" basis for the vector space $A$ can be constructed using the command \textsc{List(Bas,x-{\textgreater}Product(List(x,i-{\textgreater}Basis(A)[i]))}. The coefficients of the canonical basis element \textsc{Basis(A)[i]} are stored as \textsc{Coeff[i]}. If the ring $A$ is computed using the setting $"level"="medium"$ then the component \textsc{A!.niceBasis} can be added to $A$ using the command \textsc{A:=ModPCohomologyRing\texttt{\symbol{92}}{\textunderscore}part\texttt{\symbol{92}}{\textunderscore}2(A)}. \\1975\index{Mod2CohomologyRingPresentation}1976\begin{verbatim} Mod2CohomologyRingPresentation(G):: Group --> PresentedGradedAlgebra1977\end{verbatim}19781979\begin{verbatim} Mod2CohomologyRingPresentation(G,n):: Group --> PresentedGradedAlgebra1980\end{verbatim}19811982\begin{verbatim} Mod2CohomologyRingPresentation(A):: Group --> PresentedGradedAlgebra1983\end{verbatim}19841985\begin{verbatim} Mod2CohomologyRingPresentation(R):: Group --> PresentedGradedAlgebra1986\end{verbatim}198719881989When applied to a finite $2$-group $G$ this function returns a presentation for the mod-$2$ cohomology ring $H^\ast(G,\mathbb F)$. The Lyndon-Hochschild-Serre spectral sequence is used to prove that the1990presentation is complete. When the function is applied to a $2$-group G and positive integer $n$ the function first constructs $n+1$ terms of a free $\mathbb FG$-resolution $R$, then constructs the finite-dimensional graded algebra $A=H^{(\ast \le n)}(G,\mathbb F)$, and finally uses $A$ to approximate a presentation for $H^*(G,\mathbb F)$. For "sufficiently large" $n$ the approximation will be a correct presentation for $H^\ast(G,\mathbb F)$. Alternatively, the function can be applied directly to either the resolution $R$ or graded algebra $A$. This function was written by Paul Smith. It uses the Singular commutative1991algebra package to handle the Lyndon-Hochschild-Serre spectral sequence. \\1992\end{tabular}\\[2mm]1993\end{center}19941995Group Invariants \begin{center}1996\begin{tabular}{|l|} \index{GroupCohomology}1997\begin{verbatim} GroupCohomology(G,k):: Group, Int --> List1998\end{verbatim}19992000\begin{verbatim} GroupCohomology(G,k,p):: Group, Int, Int --> List2001\end{verbatim}20022003200420052006Inputs a group $G$ and integer $k \ge 0$. The group $G$ should either be finite or else lie in one of a range of classes of infinite2007groups (such as nilpotent, crystallographic, Artin etc.). The function returns2008the list of abelian invariants of $H^k(G,\mathbb Z)$.20092010If a prime $p$ is given as an optional third input variable then the function returns the2011list of abelian invariants of $H^k(G,\mathbb Z_p)$. In this case each abelian invariant will be equal to $p$ and the length of the list will be the dimension of the vector space $H^k(G,\mathbb Z_p)$. \\2012\index{GroupHomology}2013\begin{verbatim} GroupHomology(G,k):: Group, Int --> List2014\end{verbatim}20152016\begin{verbatim} GroupHomology(G,k,p):: Group, Int, Int --> List2017\end{verbatim}20182019202020212022Inputs a group $G$ and integer $k \ge 0$. The group $G$ should either be finite or else lie in one of a range of classes of infinite2023groups (such as nilpotent, crystallographic, Artin etc.). The function returns2024the list of abelian invariants of $H_k(G,\mathbb Z)$.20252026If a prime $p$ is given as an optional third input variable then the function returns the2027list of abelian invariants of $H_k(G,\mathbb Z_p)$. In this case each abelian invariant will be equal to $p$ and the length of the list will be the dimension of the vector space $H_k(G,\mathbb Z_p)$. \\2028\index{PrimePartDerivedFunctor}2029\begin{verbatim} PrimePartDerivedFunctor(G,R,A,k):: Group, FreeResolution, Function, Int --> List2030\end{verbatim}20312032203320342035Inputs a group $G$, an integer $k \ge 0$, at least $k+1$ terms of a free $\mathbb ZP$-resolution of $\mathbb Z$ for $P$ a Sylow $p$-subgroup of $G$. A function such as \textsc{A=TensorWithIntegers} is also entered. The abelian invariants of the $p$-primary part $H_k(G,A)_{(p)}$ of the homology with coefficients in $A$ is returned. \\2036\index{PoincareSeries}2037\begin{verbatim} PoincareSeries(G,n):: Group, Int --> RationalFunction2038\end{verbatim}20392040\begin{verbatim} PoincareSeries(G):: Group --> RationalFunction2041\end{verbatim}20422043\begin{verbatim} PoincareSeries(R,n):: Group, Int --> RationalFunction2044\end{verbatim}20452046\begin{verbatim} PoincareSeries(L,n):: Group, Int --> RationalFunction2047\end{verbatim}20482049205020512052Inputs a finite $p$-group $G$ and a positive integer $n$. It returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose expansion has coefficient of $x^k$ equal to the rank of the vector space $H_k(G,\mathbb F_p)$ for all $k$ in the range $1 \le k \le n$. (The second input variable can be omitted, in which case the function tries2053to choose a `reasonable' value for $n$. For 2-groups the function \textsc{PoincareSeriesLHS(G)} can be used to produce an $f(x)$ that is correct in all degrees.) In place of the group $G$ the function can also input (at least $n$ terms of) a minimal mod-$p$ resolution $R$ for $G$. Alternatively, the first input variable can be a list $L$ of integers. In this case the coefficient of $x^k$ in $f(x)$ is equal to the $(k+1)$st term in the list. \\2054\index{PoincareSeries}2055\begin{verbatim} PoincareSeries(G,n):: Group, Int --> RationalFunction2056\end{verbatim}20572058\begin{verbatim} PoincareSeries(G):: Group --> RationalFunction2059\end{verbatim}20602061\begin{verbatim} PoincareSeries(R,n):: Group, Int --> RationalFunction2062\end{verbatim}20632064\begin{verbatim} PoincareSeries(L,n):: Group, Int --> RationalFunction2065\end{verbatim}20662067206820692070Inputs a finite $p$-group $G$ and a positive integer $n$. It returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose expansion has coefficient of $x^k$ equal to the rank of the vector space $H_k(G,\mathbb F_p)$ for all $k$ in the range $1 \le k \le n$. (The second input variable can be omitted, in which case the function tries2071to choose a `reasonable' value for $n$. For 2-groups the function \textsc{PoincareSeriesLHS(G)} can be used to produce an $f(x)$ that is correct in all degrees.) In place of the group $G$ the function can also input (at least $n$ terms of) a minimal mod-$p$ resolution $R$ for $G$. Alternatively, the first input variable can be a list $L$ of integers. In this case the coefficient of $x^k$ in $f(x)$ is equal to the $(k+1)$st term in the list. \\2072\index{RankHomologyPGroup}2073\begin{verbatim} RankHomologyPGroup(G,P,n):: Group, RationalFunction, Int --> Int2074\end{verbatim}207520762077Inputs a $p$-group $G$, a rational function $P$ representing the Poincar\texttt{\symbol{92}}'e series of the mod-$p$ cohomology of $G$ and a positive integer $n$. It returns the minimum number of generators for the finite abelian $p$-group $H_n{G,\mathbb Z)$. \\2078\end{tabular}\\[2mm]2079\end{center}20802081$\mathbb F_p$-modules \begin{center}2082\begin{tabular}{|l|} \index{GroupAlgebraAsFpGModule}2083\begin{verbatim} GroupAlgebraAsFpGModule:: Group --> FpGModule2084\end{verbatim}20852086208720882089Inputs a finite $p$-group $G$ and returns the modular group algebra $\mathbb F_pG$ in the form of an $\mathbb F_pG$-module. \\2090\index{Radical}2091\begin{verbatim} Radical:: FpGModule --> FpGModule2092\end{verbatim}20932094209520962097Inputs an $\mathbb F_pG$-module and returns its radical. \\2098\index{RadicalSeries}2099\begin{verbatim} RadicalSeries(M):: FpGModule --> List2100\end{verbatim}21012102\begin{verbatim} RadicalSeries(R):: Resolution --> FilteredSparseChainComplex2103\end{verbatim}21042105210621072108Inputs an $\mathbb F_pG$-module $M$ and returns its radical series as a list of $\mathbb F_pG$-modules.21092110Inputs a free $\mathbb F_pG$-resolution R and returns the filtered chain complex $\cdots Rad_2(\mathbb F_pG)R \le Rad_1(\mathbb F_pG)R \le R$. \\2111\end{tabular}\\[2mm]2112\end{center}21132114}211521162117\chapter{\textcolor{Chapter }{Homological Group Theory}}\logpage{[ 3, 0, 0 ]}2118\hyperdef{L}{X7D59694E84F10ABE}{}2119{2120Cocycles \begin{center}2121\begin{tabular}{|l|} \index{CcGroup}2122\begin{verbatim} CcGroup(N,f):: GOuterGroup, StandardCocycle --> CcGroup2123\end{verbatim}212421252126Inputs a $G$-outer group $N$ with nonabelian cocycle describing some extension $N \rightarrowtail E \twoheadrightarrow G$ together with standard 2-cocycle $f\colon G \times G \rightarrow A$ where $A=Z(N)$. It returns the extension group determined by the cocycle $f$. The group is returned as a cocyclic group.21272128This function is part of the HAPcocyclic package of functions implemented by2129Robert F. Morse. \\2130\index{CocycleCondition}2131\begin{verbatim} CocycleCondition(R,n):: FreeRes, Int --> IntMat2132\end{verbatim}213321342135Inputs a free $\mathbb ZG$-resolution $R$ of $\mathbb Z$ and an integer $n \ge 1$. It returns an integer matrix $M$ with the following property. Let $d$ be the $\mathbb ZG$-rank of $R_n$. An integer vector $f=[f_1, ... , f_d]$ then represents a $\mathbb ZG$-homomorphism $R_n \rightarrow \mathbb Z_q$ which sends the $i$th generator of $R_n$ to the integer $f_i$ in the trivial $\mathbb ZG$-module $\mathbb Z_q=\mathbb Z/q{\mathbb Z}$ (where possibly $q=0$). The homomorphism $f$ is a cocycle if and only if $M^tf=0$ mod $q$. \\2136\index{StandardCocycle}2137\begin{verbatim} StandardCocycle(R,f,n):: FreeRes, List, Int --> Function2138\end{verbatim}21392140\begin{verbatim} StandardCocycle(R,f,n,q):: FreeRes, List, Int --> Function2141\end{verbatim}214221432144Inputs a free $\mathbb ZG$-resolution $R$ (with contracting homotopy), a positive integer $n$ and an integer vector $f$ representing an $n$-cocycle $R_n \rightarrow \mathbb Z_q=\mathbb Z/q\mathbb Z$ where $G$ acts trivially on $\mathbb Z_q$. It is assumed $q=0$ unless a value for $q$ is entered. The command returns a function $F(g_1, ..., g_n)$ which is the standard cocycle $G^n \rightarrow \mathbb Z_q$ corresponding to $f$. At present the command is implemented only for $n=2$ or $3$. \\2145\end{tabular}\\[2mm]2146\end{center}21472148G-Outer Groups \begin{center}2149\begin{tabular}{|l|} \index{ActedGRoup}2150\begin{verbatim} ActedGroup(M):: GOuterGroup --> Group2151\end{verbatim}21522153215421552156Inputs a $G$-outer group $M$ corresponding to a homomorphism $\alpha\colon G\rightarrow {\rm Out}(N)$ and returns the group \$N\$. \\2157\index{ActingGRoup}2158\begin{verbatim} ActingGroup(M):: GOuterGroup --> Group2159\end{verbatim}21602161216221632164Inputs a $G$-outer group $M$ corresponding to a homomorphism $\alpha\colon G\rightarrow {\rm Out}(N)$ and returns the group \$G\$. \\2165\index{Centre}2166\begin{verbatim} Centre(M):: GOuterGroup --> GOuterGroup2167\end{verbatim}21682169217021712172Inputs a $G$-outer group $M$ and returns its group-theoretic centre as a $G$-outer group. \\2173\index{GOuterGroup}2174\begin{verbatim} GOuterGroup(E,N):: Group, Subgroup --> GOuterGroup2175\end{verbatim}21762177\begin{verbatim} GOuterGroup():: Group, Subgroup --> GOuterGroup2178\end{verbatim}21792180218121822183Inputs a group $E$ and normal subgroup $N$. It returns $N$ as a $G$-outer group where $G=E/N$. A nonabelian cocycle $f\colon G\times G\rightarrow N$ is attached as a component of the $G$-Outer group.21842185The function can be used without an argument. In this case an empty outer2186group $C$ is returned. The components must be set using \textsc{SetActingGroup(C,G)}, \textsc{SetActedGroup(C,N)} and \textsc{SetOuterAction(C,alpha)}. \\2187\end{tabular}\\[2mm]2188\end{center}21892190$G$-cocomplexes \begin{center}2191\begin{tabular}{|l|} \index{CohomologyModule}2192\begin{verbatim} CohomologyModule(C,n):: GCocomplex, Int --> GOuterGroup2193\end{verbatim}21942195219621972198Inputs a $G$-cocomplex $C$ together with a non-negative integer $n$. It returns the cohomology $H^n(C)$ as a $G$-outer group. If $C$ was constructed from a $\mathbb ZG$-resolution $R$ by homing to an abelian $G$-outer group $A$ then, for each $x$ in $H:=CohomologyModule(C,n)$, there is a function $f:=H!.representativeCocycle(x)$ which is a standard $n$-cocycle corresponding to the cohomology class $x$. (At present this is implemented only for $n=1,2,3$.) \\2199\index{HomToGModule}2200\begin{verbatim} HomToGModule(R,A):: FreeRes, GOuterGroup --> GCocomplex2201\end{verbatim}22022203220422052206Inputs a $\mathbb ZG$-resolution $R$ and an abelian $G$-outer group $A$. It returns the $G$-cocomplex obtained by applying $HomZG( \_ , A)$. (At present this function does not handle equivariant chain maps.) \\2207\end{tabular}\\[2mm]2208\end{center}22092210}221122122213\chapter{\textcolor{Chapter }{Parallel Computation}}\logpage{[ 4, 0, 0 ]}2214\hyperdef{L}{X7F571E8F7BBC7514}{}2215{2216Six Core Functions \begin{center}2217\begin{tabular}{|l|} \index{ChildCreate}2218\begin{verbatim} ChildCreate():: Void --> Child process2219\end{verbatim}22202221\begin{verbatim} ChildProcess("computer.address.ie"):: String --> Child process2222\end{verbatim}22232224\begin{verbatim} ChildProcess(["-m", "100000M", "-T"]):: List --> Child process2225\end{verbatim}22262227\begin{verbatim} ChildProcess("computer.ac.wales", ["-m", "100000M", "-T"]):: String, List --> Child process2228\end{verbatim}222922302231Starts a GAP session as a child process and returns a stream to the child2232process. If no argument is given then the child process is created on the2233local machine; otherwise the argument should be: (1) the address of a remote2234computer for which ssh has been configured to require no password from the2235user; (2) or a list of GAP command line options; (3) or the address of a2236computer followed by a list of command line options. \\2237\index{ChildKill}2238\begin{verbatim} ChildCreate():: Void --> Child process2239\end{verbatim}22402241\begin{verbatim} ChildProcess("computer.address.ie"):: String --> Child process2242\end{verbatim}22432244\begin{verbatim} ChildProcess(["-m", "100000M", "-T"]):: List --> Child process2245\end{verbatim}22462247\begin{verbatim} ChildProcess("computer.ac.wales", ["-m", "100000M", "-T"]):: String, List --> Child process2248\end{verbatim}224922502251Starts a GAP session as a child process and returns a stream to the child2252process. If no argument is given then the child process is created on the2253local machine; otherwise the argument should be: (1) the address of a remote2254computer for which ssh has been configured to require no password from the2255user; (2) or a list of GAP command line options; (3) or the address of a2256computer followed by a list of command line options. \\2257\end{tabular}\\[2mm]2258\end{center}22592260}226122622263\chapter{\textcolor{Chapter }{Resolutions of the ground ring}}\logpage{[ 5, 0, 0 ]}2264\hyperdef{L}{X8735FC5E7BB5CE3A}{}2265{2266\\2267\\2268\\2269\index{TietzeReducedResolution}::::::::::::::::::::::::\\2270\texttt{TietzeReducedResolution(R)}\\227122722273Inputs a $\mathbb ZG$-resolution $R$ and returns a $\mathbb ZG$-resolution $S$ which is obtained from $R$ by applying "Tietze like operations" in each dimension. The hope is that $S$ has fewer free generators than $R$. \\2274\\2275\\2276\\2277\index{ResolutionArithmeticGroup}::::::::::::::::::::::::\\2278\texttt{ResolutionArithmeticGroup("PSL(4,Z)",n)}\\227922802281Inputs a positive integer $n$ and one of the following strings: \\2282\\2283"SL(2,Z)" , "SL(3,Z)" , "PGL(3,Z[i])" ,2284"PGL(3,Eisenstein{\textunderscore}Integers)" , "PSL(4,Z)" ,2285"PSL(4,Z){\textunderscore}b" , "PSL(4,Z){\textunderscore}c" ,2286"PSL(4,Z){\textunderscore}d" , "Sp(4,Z)" \\2287\\2288or the string \\2289\\2290"GL(2,O(-d))" \\2291\\2292for d=1, 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 43 \\2293\\2294or the string \\2295\\2296"SL(2,O(-d))" \\2297\\2298for d=2, 3, 5, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 43, 67, 163 \\2299\\2300or the string \\2301\\2302"SL(2,O(-d)){\textunderscore}a" \\2303\\2304for d=2, 7, 11, 19. \\2305\\2306It returns $n$ terms of a free ZG-resolution for the group $G$ described by the string. Here O(-d) denotes the ring of integers of2307Q(sqrt(-d)) and subscripts {\textunderscore}a, {\textunderscore}b ,2308{\textunderscore}c , {\textunderscore}d denote alternative non-free2309ZG-resolutions for a given group G.\\2310\\2311Data for the first list of resolutions was provided provided by \textsc{Mathieu Dutour}. Data for GL(2,O(-d)) was provided by \textsc{Sebastian Schoenennbeck}. Data for SL(2,O(-d)) was provided by\textsc{Sebastian Schoennenbeck} for d {\textless}= 26 and by \textsc{Alexander Rahm} for d{\textgreater}26 and for the alternative complexes.\\2312\\2313\\2314\\2315\index{FreeGResolution}::::::::::::::::::::::::\\2316\texttt{FreeGResolution(P,n)}\\2317\texttt{FreeGResolution(P,n,p)}\\231823192320Inputs a non-free $ZG$-resolution $P$ with finite stabilizer groups, and a positive integer $n$. It returns a free $ZG$-resolution of length equal to the minimum of n and the length of $P$. If one requires only a mod $p$ resolution then the prime $p$ can be entered as an optional third argument.23212322The free resolution is returned without a contracting homotopy. \\2323\\2324\\2325\\2326\index{ResolutionGTree}::::::::::::::::::::::::\\2327\texttt{ResolutionGTree(P,n)}\\232823292330Inputs a non-free $ZG$-resolution $P$ of dimension 1 (i.e. a G-tree) with finite stabilizer groups, and a positive2331integer $n$. It returns a free $ZG$-resolution of length equal to n.23322333If $P$ has a contracting homotopy then the free resolution is returned with a2334contracting homotopy.23352336This function was written by \textsc{ Bui Anh Tuan}. \\2337\\2338\\2339\\2340\index{ResolutionSL2Z}::::::::::::::::::::::::\\2341\texttt{ResolutionSL2Z(p,n)}\\234223432344Inputs positive integers $m, n$ and returns $n$ terms of a $ZG$-resolution for the group $G=SL(2,Z[1/m])$ .2345234623472348This function is joint work with \textsc{Bui Anh Tuan}. \\2349\\2350\\2351\\2352\index{ResolutionAbelianGroup}::::::::::::::::::::::::\\2353\texttt{ResolutionAbelianGroup(L,n)}\\2354\texttt{ResolutionAbelianGroup(G,n)}\\235523562357Inputs a list $L:=[m_1,m_2, ..., m_d]$ of nonnegative integers, and a positive integer $n$. It returns $n$ terms of a ${\mathbb Z}G$-resolution for the abelian group $G=Z_{L[1]}+Z_{L[2]}+{\textperiodcentered}{\textperiodcentered}{\textperiodcentered}+{Z_L[d]}$ .23582359If $G$ is finite then the first argument can also be the abelian group $G$ itself. \\2360\\2361\\2362\\2363\index{ResolutionAlmostCrystalGroup}::::::::::::::::::::::::\\2364\texttt{ResolutionAlmostCrystalGroup(G,n)}\\236523662367Inputs a positive integer $n$ and an almost crystallographic pcp group $G$. It returns $n$ terms of a free $ZG$-resolution. (A group is almost crystallographic if it is nilpotent-by-finite2368and has no non-trivial finite normal subgroup. Such groups can be constructed2369using the ACLIB package.) \\2370\\2371\\2372\\2373\index{ResolutionAlmostCrystalQuotient}::::::::::::::::::::::::\\2374\texttt{ResolutionAlmostCrystalQuotient(G,n,c)}\\2375\texttt{ResolutionAlmostCrystalQuotient(G,n,c,false)}\\237623772378An almost crystallographic group $G$ is an extension of a finite group $P$ by a nilpotent group $T$, and has no non-trivial finite normal subgroup. We define the relative lower2379central series by setting $T_1=T$ and $T_{i+1}=[T_i,G]$.23802381This function inputs an almost crystallographic group $G$ together with positive integers $n$ and $c$. It returns $n$ terms of a free $ZQ$-resolution $R$ for the group $Q=G/T_c$ .23822383In addition to the usual components, the resolution $R$ has the component $R.quotientHomomorphism$ which gives the quotient homomorphism $G \longrightarrow Q $.23842385If a fourth optional variable is set equal to "false" then the function omits2386to test whether $Q$ is finite and a "more canonical" resolution is constructed. \\2387\\2388\\2389\\2390\index{ResolutionArtinGroup}::::::::::::::::::::::::\\2391\texttt{ResolutionArtinGroup(D,n)}\\239223932394Inputs a Coxeter diagram $D$ and an integer $n>1$. It returns $n$ terms of a free $ZG$-resolution $R$ where $G$ is the Artin monoid associated to $D$. It is conjectured that $R$ is also a free resolution for the Artin group $G$. The conjecture is known to hold in \href{../www/SideLinks/About/aboutArtinGroups.html} {certain cases}.23952396$G=R.group$ is infinite and returned as a finitely presented group. The list $R.elts$ is a partial listing of the elements of $G$ which grows as $R$ is used. Initially $R.elts$ is empty and then, any time the boundary of a resolution generator is called, $R.elts$ is updated to include elements of $G$ involved in the boundary.23972398The contracting homotopy on $R$ has not yet been implemented! Furthermore, the group $G$ is currently returned only as a finitely presented group (without any method2399for solving the word problem). \\2400\\2401\\2402\\2403\index{ResolutionAsphericalPresentation}::::::::::::::::::::::::\\2404\texttt{ResolutionAsphericalPresentation(F,R,n)}\\240524062407Inputs a free group $F$, a set $R$ of words in $F$ which constitute an aspherical presentation for a group $G$, and a positive integer $n$. (Asphericity can be a difficult property to verify. The function $IsAspherical(F,R)$ could be of help.)24082409The function returns n terms of a free $ZG$-resolution $R$ which has generators in dimensions {\textless} 3 only. No contracting homotopy2410on $R$ will be returned. \\2411\\2412\\2413\\2414\index{ResolutionBieberbachGroup (HAPcryst)}::::::::::::::::::::::::\\2415\texttt{ResolutionBieberbachGroup( G ) }\\2416\texttt{ResolutionBieberbachGroup( G, v ) }\\241724182419Inputs a torsion free crystallographic group $G$, also known as a Bieberbach group, represented using AffineCrystGroupOnRight2420as in the GAP package Cryst. It also optionally inputs a choice of vector $v$ in the euclidean space $R^n$ on which $G$ acts freely. The function returns $n+1$ terms of the free $ZG$-resolution of $Z$ arising as the cellular chain complex of the tesselation of $R^n$ by the Dirichlet-Voronoi fundamental domain determined by $v$.24212422This function is part of the HAPcryst package written by \textsc{Marc Roeder} and thus requires the HAPcryst package to be loaded.24232424The function requires the use of Polymake software. \\2425\\2426\\2427\\2428\index{ResolutionCoxeterGroup}::::::::::::::::::::::::\\2429\texttt{ResolutionCoxeterGroup(D,n)}\\243024312432Inputs a Coxeter diagram $D$ and an integer $n>1$. It returns $k$ terms of a free $ZG$-resolution $R$ where $G$ is the Coxeter group associated to $D$. Here $k$ is the maximum of n and the number of vertices in the Coxeter diagram. At2433present the implementation is only for finite Coxeter groups and the group $G$ is returned as a permutation group. The contracting homotopy on $R$ has not yet been implemented! \\2434\\2435\\2436\\2437\index{ResolutionDirectProduct}::::::::::::::::::::::::\\2438\texttt{ResolutionDirectProduct(R,S) }\\2439\texttt{ResolutionDirectProduct(R,S,"internal")}\\244024412442Inputs a $ZG$-resolution $R$ and $ZH$-resolution $S$. It outputs a $ZD$-resolution for the direct product $D=G x H$.24432444If $G$ and $H$ lie in a common group $K$, and if they commute and have trivial intersection, then an optional third2445variable "internal" can be used. This will force $D$ to be the subgroup $GH$ in $K$. \\2446\\2447\\2448\\2449\index{ResolutionExtension}::::::::::::::::::::::::\\2450\texttt{ResolutionExtension(g,R,S) }\\2451\texttt{ResolutionExtension(g,R, S,"TestFiniteness")}\\2452\texttt{ResolutionExtension(g,R,S,"NoTest",GmapE)}\\245324542455Inputs a surjective group homomorphism $g:E \longrightarrow G$ with kernel $N$. It also inputs a $ZN$-resolution $R$ and a $ZG$-resolution $S$. It returns a $ZE$-resolution. The groups $E$ and $G$ can be infinite.24562457If an optional fourth argument is set equal to "TestFiniteness" then the2458groups $N$ and $G$ will be tested to see if they are finite. If they are finite then some speed2459saving routines will be invoked.24602461If the homomorphism $g$ is such that the GAP function $PreImagesElement(g,x)$ doesn't work, then a function $GmapE()$ should be included as a fifth input. For any $x$ in $G$ this function should return an element $GmapE(x)$ in $E$ which gets mapped onto $x$ by $g$.24622463The contracting homotopy on the $ZE$-resolution has not yet been fully implemented for infinite groups! \\2464\\2465\\2466\\2467\index{ResolutionFiniteDirectProduct}::::::::::::::::::::::::\\2468\texttt{ResolutionFiniteDirectProduct(R,S) }\\2469\texttt{ResolutionFiniteDirectProduct(R,S, "internal")}\\247024712472Inputs a $ZG$-resolution $R$ and $ZH$-resolution $S$ where $G$ and $H$ are finite groups. It outputs a $ZD$-resolution for the direct product $D=G{\ensuremath{\times}}H$.24732474If $G$ and $H$ lie in a common group $K$, and if they commute and have trivial intersection, then an optional third2475variable "internal" can be used. This will force $D$ to be the subgroup $GH$ in $K$. \\2476\\2477\\2478\\2479\index{ResolutionFiniteExtension}::::::::::::::::::::::::\\2480\texttt{ResolutionFiniteExtension(gensE,gensG,R,n)}\\2481\texttt{ResolutionFiniteExtension(gensE,gensG,R,n,true) }\\2482\texttt{ResolutionFiniteExtension(gensE,gensG,R,n,false,S) }\\248324842485Inputs: a set $gensE$ of generators for a finite group $E$; a set $gensG$ equal to the image of $gensE$ in a quotient group $G$ of $E$; a $ZG$-resolution $R$ up to dimension at least $n$; a positive integer $n$. It uses the $TwistedTensorProduct()$ construction to return $n$ terms of a $ZE$-resolution.24862487The function has an optional fourth argument which, when set equal to "true",2488invokes tietze reductions in the construction of a resolution for the kernel2489of $E \longrightarrow G$.24902491If a $ZN$-resolution $S$ is available, where $N$ is the kernel of the quotient $E \longrightarrow G$, then this can be incorporated into the computations using an optional fifth2492argument. \\2493\\2494\\2495\\2496\index{ResolutionFiniteGroup}::::::::::::::::::::::::\\2497\texttt{ResolutionFiniteGroup(gens,n)}\\2498\texttt{ResolutionFiniteGroup(gens,n,true)}\\2499\texttt{ResolutionFiniteGroup(gens,n,false,p) }\\2500\texttt{ResolutionFiniteGroup(gens,n,false,0,"extendible") }\\250125022503Inputs a set $gens$ of generators for a finite group $G$ and a positive integer $n$. It outputs $n$ terms of a $ZG$-resolution.25042505The function has an optional third argument which, when set equal to $true$, invokes tietze reductions in the construction of the resolution.25062507The function has an optional fourth argument which, when set equal to a prime $p$, records the fact that the resolution will only be used for mod $p$ calculations. This could speed up subsequent constructions.25082509The function has an optional fifth argument which, when set equal to2510"extendible", returns a resolution whose length can be increased using the2511command R!.extend() . \\2512\\2513\\2514\\2515\index{ResolutionFiniteSubgroup}::::::::::::::::::::::::\\2516\texttt{ResolutionFiniteSubgroup(R,K)}\\2517\texttt{ResolutionFiniteSubgroup(R,gensG,gensK)}\\251825192520Inputs a $ZG$-resolution for a finite group $G$ and a subgroup $K$ of index $|G:K|$. It returns a free $ZK$-resolution whose $ZK$-rank is $|G:K|$ times the $ZG$-rank in each dimension.25212522Generating sets $gensG$, $gensK$ for $G$ and $K$ can also be input to the function (though the method does not depend on a2523choice of generators).25242525This $ZK$-resolution is not reduced. ie. it has more than one generator in dimension $0$. \\2526\\2527\\2528\\2529\index{ResolutionGraphOfGroups}::::::::::::::::::::::::\\2530\texttt{ResolutionGraphOfGroups(D,n) }\\2531\texttt{ResolutionGraphOfGroups(D,n,L) }\\253225332534Inputs a graph of groups $D$ and a positive integer $n$. It returns $n$ terms of a free $ZG$-resolution for the fundamental group $G$ of $D$.25352536An optional third argument $L=[R_1 , \ldots , R_t]$ can be used to list (in any order) free resolutions for some/all of the vertex2537and edge groups in $D$. If for some vertex or edge group no resolution is listed in $L$ then the function $ResolutionFiniteGroup()$ will be used to try to construct the resolution.25382539The $ZG$-resolution is usually not reduced. i.e. it has more than one generator in2540dimension 0.25412542The contracting homotopy on the $ZG$-resolution has not yet been implemented! Furthermore, the group $G$ is currently returned only as a finitely presented group (without any method2543for solving the word problem). \\2544\\2545\\2546\\2547\index{ResolutionNilpotentGroup}::::::::::::::::::::::::\\2548\texttt{ResolutionNilpotentGroup(G,n) }\\2549\texttt{ResolutionNilpotentGroup(G,n,"TestFiniteness")}\\255025512552Inputs a nilpotent group $G$ and positive integer $n$. It returns $n$ terms of a free $ZG$-resolution. The resolution is computed using a divide-and-conquer technique2553involving the lower central series.25542555This function can be applied to infinite groups $G$. For finite groups the function $ResolutionNormalSeries()$ probably gives better results.25562557If an optional third argument is set equal to "TestFiniteness" then the groups $N$ and $G$ will be tested to see if they are finite. If they are finite then some speed2558saving routines will be invoked.25592560The contracting homotopy on the $ZE$-resolution has not yet been fully implemented for infinite groups. \\2561\\2562\\2563\\2564\index{ResolutionNormalSeries}::::::::::::::::::::::::\\2565\texttt{ResolutionNormalSeries(L,n) }\\2566\texttt{ResolutionNormalSeries(L,n,true)}\\2567\texttt{ResolutionNormalSeries(L,n,false,p)}\\256825692570Inputs a positive integer $n$ and a list $L = [L_1 , ..., L_k]$ of normal subgroups $L_i$ of a finite group $G$ satisfying $G = L_1$ {\textgreater} $L2$ {\textgreater}$ \ldots $ {\textgreater}$ L_k$. Alternatively, $L = [gensL_1, ... gensL_k]$ can be a list of generating sets for the $L_i$ (and these particular generators will be used in the construction of2571resolutions). It returns a $ZG$-resolution by repeatedly using the function $ResolutionFiniteExtension()$.25722573The function has an optional third argument which, if set equal to true,2574invokes tietze reductions in the construction of resolutions.25752576The function has an optional fourth argument which, if set equal to p2577{\textgreater} 0, produces a resolution which is only valid for mod $p$ calculations. \\2578\\2579\\2580\\2581\index{ResolutionPrimePowerGroup}::::::::::::::::::::::::\\2582\texttt{ResolutionPrimePowerGroup(P,n) }\\2583\texttt{ResolutionPrimePowerGroup(G,n,p)}\\258425852586Inputs a $p$-group $P$ and integer $n${\textgreater}$0$. It uses GAP's standard linear algebra functions over the field $F$ of p elements to construct a free $FP$-resolution for mod $p$ calculations only. The resolution is minimal - meaning that the number of2587generators of $R_n$ equals the rank of $H_n(P,F)$.25882589The function can also be used to obtain a free non-minimal $FG$-resolution of a small group $G$ of non-prime-power order. In this case the prime $p$ must be entered as the third input variable. (In the non-prime-power case the2590algorithm is naive and not very good.) \\2591\\2592\\2593\\2594\index{ResolutionSmallFpGroup}::::::::::::::::::::::::\\2595\texttt{ResolutionSmallFpGroup(G,n) }\\2596\texttt{ResolutionSmallFpGroup(G,n,p) }\\259725982599Inputs a small finitely presented group $G$ and an integer $n${\textgreater}$0$. It returns $n$ terms of a $ZG$-resolution which, in dimensions 1 and 2, corresponds to the given2600presentation for $G$. The method returns no contracting homotopy for the resolution.26012602The function has an optional fourth argument which, when set equal to a prime $p$, records the fact that the resolution will only be used for mod $p$ calculations. This could speed up subsequent constructions.26032604This function was written by Irina Kholodna. \\2605\\2606\\2607\\2608\index{ResolutionSubgroup}::::::::::::::::::::::::\\2609\texttt{ResolutionSubgroup(R,K)}\\261026112612Inputs a $ZG$-resolution for an (infinite) group $G$ and a subgroup $K$ of finite index $|G:K|$. It returns a free $ZK$-resolution whose $ZK$-rank is $|G:K|$ times the $ZG$-rank in each dimension.26132614If $G$ is finite then the function $ResolutionFiniteSubgroup(R,G,K)$ will probably work better. In particular, resolutions from this function2615probably won't work with the function $EquivariantChainMap()$. This $ZK$-resolution is not reduced. i.e. it has more than one generator in dimension26160. \\2617\\2618\\2619\\2620\index{ResolutionSubnormalSeries}::::::::::::::::::::::::\\2621\texttt{ResolutionSubnormalSeries(L,n) }\\262226232624Inputs a positive integer n and a list $L = [L_1 , \ldots , L_k]$ of subgroups $L_i$ of a finite group $G=L_1$ such that $L_1$ {\textgreater} $L2 \ldots $ {\textgreater} $L_k$ is a subnormal series in $G$ (meaning that each $L_{i+1}$ must be normal in $L_i$). It returns a $ZG$-resolution by repeatedly using the function $ResolutionFiniteExtension()$.26252626If $L$ is a series of normal subgroups in $G$ then the function $ResolutionNormalSeries(L,n)$ will possibly work more efficiently. \\2627\\2628\\2629\\2630\index{TwistedTensorProduct}::::::::::::::::::::::::\\2631\texttt{TwistedTensorProduct(R,S,EhomG,GmapE,NhomE,NEhomN,EltsE,Mult,InvE)}\\263226332634Inputs a $ZG$-resolution $R$, a $ZN$-resolution $S$, and other data relating to a short exact sequence $1 \longrightarrow N \longrightarrow E \longrightarrow G \longrightarrow 1$. It uses a perturbation technique of CTC Wall to construct a $ZE$-resolution $F$. Both $G$ and $N$ could be infinite. The "length" of $F$ is equal to the minimum of the "length"s of $R$ and $S$. The resolution $R$ needs no contracting homotopy if no such homotopy is requied for $F$. \\2635\\2636\\2637\\2638\index{ConjugatedResolution}::::::::::::::::::::::::\\2639\texttt{ConjugatedResolution(R,x)}\\264026412642Inputs a ZG-resoluton $R$ and an element $x$ from some group containing $G$. It returns a $ZG^x$-resolution $S$ where the group $G^x$ is the conjugate of $G$ by $x$. (The component $S!.elts$ will be a pseudolist rather than a list.) \\2643\\2644\\2645\\2646\index{RecalculateIncidenceNumbers}::::::::::::::::::::::::\\2647\texttt{RecalculateIncidenceNumbers(R)}\\264826492650Inputs a ZG-resoluton $R$ which arises as the cellular chain complex of a regular CW-complex. (Thus the2651boundary of any cell is a list of distinct cells.) It recalculates the2652incidence numbers for $R$. If it is applied to a resolution that is not regular then a wrong answer may2653be returned. \\2654\\2655\\2656}265726582659\chapter{\textcolor{Chapter }{ Resolutions of modules}}\logpage{[ 6, 0, 0 ]}2660\hyperdef{L}{X841673BA782D0D1D}{}2661{2662\\2663\\2664\\2665\index{ResolutionFpGModule}::::::::::::::::::::::::\\2666\texttt{ResolutionFpGModule(M,n)}\\266726682669Inputs an $FpG$-module $M$ and a positive integer $n$. It returns $n$ terms of a minimal free $FG$-resolution of the module $M$ (where $G$ is a finite group and $F$ the field of $p$ elements). \\2670\\2671\\2672}267326742675\chapter{\textcolor{Chapter }{ Induced equivariant chain maps}}\logpage{[ 7, 0, 0 ]}2676\hyperdef{L}{X7E91068780486C3A}{}2677{2678\\2679\\2680\\2681\index{EquivariantChainMap}::::::::::::::::::::::::\\2682\texttt{EquivariantChainMap(R,S,f)}\\268326842685Inputs a $ZG$-resolution $R$, a $ZG'$-resolution $S$, and a group homomorphism $f : G \longrightarrow G'$. It outputs a component object $M$ with the following components.26862687\\2688\\2689$M!.source$ is the resolution $R$.\\2690\\2691$M!.target$ is the resolution $S$.\\2692\\2693$M!.mapping(w,n)$ is a function which gives the image in $S_n$, under a chain map induced by $f$, of a word $w$ in $R_n$. (Here $R_n$ and $S_n$ are the $n$-th modules in the resolutions $R$ and $S$.)\\2694\\2695$F!.properties$ is a list of pairs such as ["type", "equivariantChainMap"].\\2696\\269726982699The resolution $S$ must have a contracting homotopy. \\2700\\2701\\2702}270327042705\chapter{\textcolor{Chapter }{ Functors}}\logpage{[ 8, 0, 0 ]}2706\hyperdef{L}{X78D1062D78BE08C1}{}2707{2708\\2709\\2710\\2711\index{ExtendScalars}::::::::::::::::::::::::\\2712\texttt{ExtendScalars(R,G,EltsG)}\\271327142715Inputs a $ZH$-resolution $R$, a group $G$ containing $H$ as a subgroup, and a list $EltsG$ of elements of $G$. It returns the free $ZG$-resolution $(R \otimes_{ZH} ZG)$. The returned resolution $S$ has S!.elts:=EltsG. This is a resolution of the $ZG$-module $(Z \otimes_{ZH} ZG)$. (Here $\otimes_{ZH}$ means tensor over $ZH$.) \\2716\\2717\\2718\\2719\index{HomToIntegers}::::::::::::::::::::::::\\2720\texttt{HomToIntegers(X) }\\272127222723Inputs either a $ZG$-resolution $X=R$, or an equivariant chain map $X = (F:R \longrightarrow S)$. It returns the cochain complex or cochain map obtained by applying $HomZG( _ , Z)$ where $Z$ is the trivial module of integers (characteristic 0). \\2724\\2725\\2726\\2727\index{HomToIntegersModP}::::::::::::::::::::::::\\2728\texttt{HomToIntegersModP(R) }\\272927302731Inputs a $ZG$-resolution $R$ and returns the cochain complex obtained by applying $HomZG( _ , Z_p)$ where $Z_p$ is the trivial module of integers mod $p$. (At present this functor does not handle equivariant chain maps.) \\2732\\2733\\2734\\2735\index{HomToIntegralModule}::::::::::::::::::::::::\\2736\texttt{HomToIntegralModule(R,f) }\\273727382739Inputs a $ZG$-resolution $R$ and a group homomorphism $f:G \longrightarrow GL_n(Z)$ to the group of $n{\ensuremath{\times}}n$ invertible integer matrices. Here $Z$ must have characteristic 0. It returns the cochain complex obtained by2740applying $HomZG( _ , A)$ where $A$ is the $ZG$-module $Z^n$ with $G$ action via $f$. (At present this function does not handle equivariant chain maps.) \\2741\\2742\\2743\\2744\index{TensorWithIntegralModule}::::::::::::::::::::::::\\2745\texttt{TensorWithIntegralModule(R,f) }\\274627472748Inputs a $ZG$-resolution $R$ and a group homomorphism $f:G \longrightarrow GL_n(Z)$ to the group of $n{\ensuremath{\times}}n$ invertible integer matrices. Here $Z$ must have characteristic 0. It returns the chain complex obtained by tensoring2749over $ZG$ with the $ZG$-module $A=Z^n$ with $G$ action via $f$. (At present this function does not handle equivariant chain maps.) \\2750\\2751\\2752\\2753\index{HomToGModule}::::::::::::::::::::::::\\2754\texttt{HomToGModule(R,A) }\\275527562757Inputs a $ZG$-resolution $R$ and an abelian G-outer group A. It returns the G-cocomplex obtained by2758applying $HomZG( _ , A)$. (At present this function does not handle equivariant chain maps.) \\2759\\2760\\2761\\2762\index{InduceScalars}::::::::::::::::::::::::\\2763\texttt{InduceScalars(R,hom) }\\276427652766Inputs a $ZQ$-resolution $R$ and a surjective group homomorphism $hom:G\rightarrow Q$. It returns the unduced non-free $ZG$-resolution. \\2767\\2768\\2769\\2770\index{LowerCentralSeriesLieAlgebra}::::::::::::::::::::::::\\2771\texttt{LowerCentralSeriesLieAlgebra(G) }\\2772\texttt{LowerCentralSeriesLieAlgebra(f) }\\277327742775Inputs a pcp group $G$. If each quotient $G_c/G_{c+1}$ of the lower central series is free abelian or p-elementary abelian (for fixed2776prime p) then a Lie algebra $L(G)$ is returned. The abelian group underlying $L(G)$ is the direct sum of the quotients $G_c/G_{c+1}$ . The Lie bracket on $L(G)$ is induced by the commutator in $G$. (Here $G_1=G$, $G_{c+1}=[G_c,G]$ .)27772778The function can also be applied to a group homomorphism $f: G \longrightarrow G'$ . In this case the induced homomorphism of Lie algebras $L(f):L(G) \longrightarrow L(G')$ is returned.27792780If the quotients of the lower central series are not all free or p-elementary2781abelian then the function returns fail.27822783This function was written by Pablo Fernandez Ascariz \\2784\\2785\\2786\\2787\index{TensorWithIntegers}::::::::::::::::::::::::\\2788\texttt{TensorWithIntegers(X) }\\278927902791Inputs either a $ZG$-resolution $X=R$, or an equivariant chain map $X = (F:R \longrightarrow S)$. It returns the chain complex or chain map obtained by tensoring with the2792trivial module of integers (characteristic 0). \\2793\\2794\\2795\\2796\index{FilteredTensorWithIntegers}::::::::::::::::::::::::\\2797\texttt{FilteredTensorWithIntegers(R) }\\279827992800Inputs a $ZG$-resolution $R$ for which "filteredDimension" lies in NamesOfComponents(R). (Such a resolution2801can be produced using TwisterTensorProduct(), ResolutionNormalSubgroups() or2802FreeGResolution().) It returns the filtered chain complex obtained by2803tensoring with the trivial module of integers (characteristic 0). \\2804\\2805\\2806\\2807\index{TensorWithTwistedIntegers}::::::::::::::::::::::::\\2808\texttt{TensorWithTwistedIntegers(X,rho) }\\280928102811Inputs either a $ZG$-resolution $X=R$, or an equivariant chain map $X = (F:R \longrightarrow S)$. It also inputs a function $rho\colon G\rightarrow \mathbb Z$ where the action of $g \in G$ on $\mathbb Z$ is such that $g.1 = rho(g)$. It returns the chain complex or chain map obtained by tensoring with the2812(twisted) module of integers (characteristic 0). \\2813\\2814\\2815\\2816\index{TensorWithIntegersModP}::::::::::::::::::::::::\\2817\texttt{TensorWithIntegersModP(X,p) }\\281828192820Inputs either a $ZG$-resolution $X=R$, or a characteristics 0 chain complex, or an equivariant chain map $X = (F:R \longrightarrow S)$, or a chain map between characteristic 0 chain complexes, together with a2821prime $p$. It returns the chain complex or chain map obtained by tensoring with the2822trivial module of integers modulo $p$. \\2823\\2824\\2825\\2826\index{TensorWithTwistedIntegersModP}::::::::::::::::::::::::\\2827\texttt{TensorWithTwistedIntegersModP(X,p,rho)}\\282828292830Inputs either a $ZG$-resolution $X=R$, or an equivariant chain map $X = (F:R \longrightarrow S)$, and a prime $p$. It also inputs a function $rho\colon G\rightarrow \mathbb Z$ where the action of $g \in G$ on $\mathbb Z$ is such that $g.1 = rho(g)$. It returns the chain complex or chain map obtained by tensoring with the2831trivial module of integers modulo $p$. \\2832\\2833\\2834\\2835\index{TensorWithRationals}::::::::::::::::::::::::\\2836\texttt{TensorWithRationals(R)}\\283728382839Inputs a $ZG$-resolution $R$ and returns the chain complex obtained by tensoring with the trivial module of2840rational numbers. \\2841\\2842\\2843}284428452846\chapter{\textcolor{Chapter }{ Chain complexes}}\logpage{[ 9, 0, 0 ]}2847\hyperdef{L}{X7A06103979B92808}{}2848{2849\\2850\\2851\\2852\index{ChainComplex}::::::::::::::::::::::::\\2853\texttt{ChainComplex(T)}\\285428552856Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and returns the (often very large) cellular chain complex of $T$. \\2857\\2858\\2859\\2860\index{ChainComplexOfPair}::::::::::::::::::::::::\\2861\texttt{ChainComplexOfPair(T,S)}\\286228632864Inputs a pure cubical complex or cubical complex $T$ and contractible subcomplex $S$. It returns the quotient $C(T)/C(S)$ of cellular chain complexes. \\2865\\2866\\2867\\2868\index{ChevalleyEilenbergComplex}::::::::::::::::::::::::\\2869\texttt{ ChevalleyEilenbergComplex(X,n) }\\287028712872Inputs either a Lie algebra $X=A$ (over the ring of integers $Z$ or over a field $K$) or a homomorphism of Lie algebras $X=(f:A \longrightarrow B)$, together with a positive integer $n$. It returns either the first $n$ terms of the Chevalley-Eilenberg chain complex $C(A)$, or the induced map of Chevalley-Eilenberg complexes $C(f):C(A) \longrightarrow C(B)$.28732874(The homology of the Chevalley-Eilenberg complex $C(A)$ is by definition the homology of the Lie algebra $A$ with trivial coefficients in $Z$ or $K$).28752876This function was written by \textsc{Pablo Fernandez Ascariz} \\2877\\2878\\2879\\2880\index{LeibnizComplex}::::::::::::::::::::::::\\2881\texttt{ LeibnizComplex(X,n) }\\288228832884Inputs either a Lie or Leibniz algebra $X=A$ (over the ring of integers $Z$ or over a field $K$) or a homomorphism of Lie or Leibniz algebras $X=(f:A \longrightarrow B)$, together with a positive integer $n$. It returns either the first $n$ terms of the Leibniz chain complex $C(A)$, or the induced map of Leibniz complexes $C(f):C(A) \longrightarrow C(B)$.28852886(The Leibniz complex $C(A)$ was defined by J.-L.Loday. Its homology is by definition the Leibniz homology2887of the algebra $A$).28882889This function was written by \textsc{Pablo Fernandez Ascariz} \\2890\\2891\\2892\\2893\index{SuspendedChainComplex}::::::::::::::::::::::::\\2894\texttt{SuspendedChainComplex(C)}\\289528962897Inputs a chain complex $C$ and returns the chain complex $S$ defined by applying the degree shift $S_n = C_{n-1}$ to chain groups and boundary homomorphisms. \\2898\\2899\\2900\\2901\index{ReducedSuspendedChainComplex}::::::::::::::::::::::::\\2902\texttt{ReducedSuspendedChainComplex(C)}\\290329042905Inputs a chain complex $C$ and returns the chain complex $S$ defined by applying the degree shift $S_n = C_{n-1}$ to chain groups and boundary homomorphisms for all $n > 0$. The chain complex $S$ has trivial homology in degree $0$ and $S_0=\mathbb Z$. \\2906\\2907\\2908\\2909\index{CoreducedChainComplex}::::::::::::::::::::::::\\2910\texttt{CoreducedChainComplex(C)}\\2911\texttt{CoreducedChainComplex(C,2)}\\291229132914Inputs a chain complex $C$ and returns a quasi-isomorphic chain complex $D$. In many cases the complex $D$ should be smaller than $C$. If an optional second input argument is set equal to 2 then an alternative2915method is used for reducing the size of the chain complex. \\2916\\2917\\2918\\2919\index{TensorProductOfChainComplexes}::::::::::::::::::::::::\\2920\texttt{TensorProductOfChainComplexes(C,D)}\\292129222923Inputs two chain complexes $C$ and $D$ of the same characteristic and returns their tensor product as a chain2924complex.29252926This function was written by \textsc{ Le Van Luyen}. \\2927\\2928\\2929\\2930\index{LefschetzNumber}::::::::::::::::::::::::\\2931\texttt{LefschetzNumber(F)}\\293229332934Inputs a chain map $F\colon C\rightarrow C$ with common source and target. It returns the Lefschetz number of the map2935(that is, the alternating sum of the traces of the homology maps in each2936degree). \\2937\\2938\\2939}294029412942\chapter{\textcolor{Chapter }{ Sparse Chain complexes}}\logpage{[ 10, 0, 0 ]}2943\hyperdef{L}{X856F202D823280F8}{}2944{2945\\2946\\2947\\2948\index{SparseMat}::::::::::::::::::::::::\\2949\texttt{SparseMat(A)}\\295029512952Inputs a matrix $A$ and returns the matrix in sparse format. \\2953\\2954\\2955\\2956\index{TransposeOfSparseMat}::::::::::::::::::::::::\\2957\texttt{TransposeOfSparseMat(A)}\\295829592960Inputs a sparse matrix $A$ and returns its transpose sparse format. \\2961\\2962\\2963\\2964\index{ReverseSparseMat}::::::::::::::::::::::::\\2965\texttt{ReverseSparseMat(A)}\\296629672968Inputs a sparse matrix $A$ and modifies it by reversing the order of the columns. This function modifies $A$ and returns no value. \\2969\\2970\\2971\\2972\index{SparseRowMult}::::::::::::::::::::::::\\2973\texttt{SparseRowMult(A,i,k)}\\297429752976Multiplies the i-th row of a sparse matrix $A$ by $k$. The sparse matrix $A$ is modified but nothing is returned. \\2977\\2978\\2979\\2980\index{SparseRowInterchange}::::::::::::::::::::::::\\2981\texttt{SparseRowInterchange(A,i,k)}\\298229832984Interchanges the i-th and j-th rows of a sparse matrix $A$ by $k$. The sparse matrix $A$ is modified but nothing is returned. \\2985\\2986\\2987\\2988\index{SparseRowAdd}::::::::::::::::::::::::\\2989\texttt{SparseRowAdd(A,i,j,k)}\\299029912992Adds $k$ times the j-th row to the i-th row of a sparse matrix $A$. The sparse matrix $A$ is modified but nothing is returned. \\2993\\2994\\2995\\2996\index{SparseSemiEchelon}::::::::::::::::::::::::\\2997\texttt{SparseSemiEchelon(A)}\\299829993000Converts a sparse matrix $A$ to semi-echelon form (which means echelon form up to a permutation of rows).3001The sparse matrix $A$ is modified but nothing is returned. \\3002\\3003\\3004\\3005\index{RankMatDestructive}::::::::::::::::::::::::\\3006\texttt{RankMatDestructive(A)}\\300730083009Returns the rank of a sparse matrix $A$. The sparse matrix $A$ is modified during the calculation. \\3010\\3011\\3012\\3013\index{RankMat}::::::::::::::::::::::::\\3014\texttt{RankMat(A)}\\301530163017Returns the rank of a sparse matrix $A$. \\3018\\3019\\3020\\3021\index{SparseChainComplex}::::::::::::::::::::::::\\3022\texttt{SparseChainComplex(Y)}\\302330243025Inputs a regular CW-complex $Y$ and returns a sparse chain complex which is chain homotopy equivalent to the3026cellular chain complex of $Y$. The function uses discrete vector fields to calculate a smallish chain3027complex. \\3028\\3029\\3030\\3031\index{SparseChainComplexOfRegularCWComplex}::::::::::::::::::::::::\\3032\texttt{SparseChainComplexOfRegularCWComplex(Y)}\\303330343035Inputs a regular CW-complex $Y$ and returns its cellular chain complex as a sparse chain complex. The function3036SparseChainComplex(Y) will usually return a smaller chain complex. \\3037\\3038\\3039\\3040\index{SparseBoundaryMatrix}::::::::::::::::::::::::\\3041\texttt{SparseBoundaryMatrix(C,n)}\\304230433044Inputs a sparse chain complex $C$ and integer $n$. Returns the n-th boundary matrix of the chain complex in sparse format. \\3045\\3046\\3047\\3048\index{Bettinumbers}::::::::::::::::::::::::\\3049\texttt{Bettinumbers(C,n)}\\305030513052Inputs a sparse chain complex $C$ and integer $n$. Returns the n-th Netti number of the chain complex. \\3053\\3054\\3055}305630573058\chapter{\textcolor{Chapter }{ Homology and cohomology groups}}\logpage{[ 11, 0, 0 ]}3059\hyperdef{L}{X782177107A5D6D19}{}3060{3061\\3062\\3063\\3064\index{Cohomology}::::::::::::::::::::::::\\3065\texttt{Cohomology(X,n) }\\306630673068Inputs either a cochain complex $X=C$ (or G-cocomplex C) or a cochain map $X=(C \longrightarrow D)$ in characteristic $p$ together with a non-negative intereg $n$. \\3069\\3070If $X=C$ and $p=0$ then the torsion coefficients of $H^n(C)$ are retuned. If $X=C$ and $p$ is prime then the dimension of $H^n(C)$ are retuned. \\3071\\3072If $X=(C \longrightarrow D)$ then the induced homomorphism $H^n(C)\longrightarrow H^n(D)$ is returned as a homomorphism of finitely presented groups. \\3073\\3074A $G$-cocomplex $C$ can also be input. The cohomology groups of such a complex may not be abelian. \textsc{Warning:} in this case Cohomology(C,n) returns the abelian invariants of the $n$-th cohomology group of $C$. \\3075\\3076\\3077\\3078\index{CohomologyModule}::::::::::::::::::::::::\\3079\texttt{CohomologyModule(C,n) }\\308030813082Inputs a $G$-cocomplex $C$ together with a non-negative integer $n$. It returns the cohomology $H^n(C)$ as a $G$-outer group. If $C$ was constructed from a resolution $R$ by homing to an abelian $G$-outer group $A$ then, for each x in H:=CohomologyModule(C,n), there is a function3083f:=H!.representativeCocycle(x) which is a standard n-cocycle corresponding to3084the cohomology class x. (At present this works only for n=1,2,3.) \\3085\\3086\\3087\\3088\index{CohomologyPrimePart}::::::::::::::::::::::::\\3089\texttt{CohomologyPrimePart(C,n,p)}\\309030913092Inputs a cochain complex $C$ in characteristic 0, a positive integer $n$, and a prime $p$. It returns a list of those torsion coefficients of $H^n(C)$ that are positive powers of $p$. The function uses the EDIM package by Frank Luebeck. \\3093\\3094\\3095\\3096\index{GroupCohomology}::::::::::::::::::::::::\\3097\texttt{GroupCohomology(X,n) }\\3098\texttt{GroupCohomology(X,n,p)}\\309931003101Inputs a positive integer $n$ and either \\3102\\3103a finite group $X=G$ \\3104\\3105or a nilpotent Pcp-group $X=G$ \\3106\\3107or a space group $X=G$ \\3108\\3109or a list $X=D$ representing a graph of groups\\3110\\3111or a pair $X=["Artin",D]$ where $D$ is a Coxeter diagram representing an infinite Artin group $G$.\\3112\\3113or a pair $X=["Coxeter",D]$ where $D$ is a Coxeter diagram representing a finite Coxeter group $G$.\\3114\\3115It returns the torsion coefficients of the integral cohomology $H^n(G,Z)$.31163117There is an optional third argument which, when set equal to a prime $p$, causes the function to return the the mod $p$ cohomology $H^n(G,Z_p)$ as a list of length equal to its rank.31183119This function is a composite of more basic functions, and makes choices for a3120number of parameters. For a particular group you would almost certainly be3121better using the more basic functions and making the choices yourself! \\3122\\3123\\3124\\3125\index{GroupHomology}::::::::::::::::::::::::\\3126\texttt{GroupHomology(X,n)}\\3127\texttt{GroupHomology(X,n,p)}\\312831293130Inputs a positive integer $n$ and either \\3131\\3132a finite group $X=G$ \\3133\\3134or a nilpotent Pcp-group $X=G$ \\3135\\3136or a space group $X=G$ \\3137\\3138or a list $X=D$ representing a graph of groups\\3139\\3140or a pair $X=["Artin",D]$ where $D$ is a Coxeter diagram representing an infinite Artin group $G$.\\3141\\3142or a pair $X=["Coxeter",D]$ where $D$ is a Coxeter diagram representing a finite Coxeter group $G$.\\3143\\3144It returns the torsion coefficients of the integral homology $H_n(G,Z)$.31453146There is an optional third argument which, when set equal to a prime $p$, causes the function to return the mod $p$ homology $H_n(G,Z_p)$ as a list of lenth equal to its rank.31473148This function is a composite of more basic functions, and makes choices for a3149number of parameters. For a particular group you would almost certainly be3150better using the more basic functions and making the choices yourself! \\3151\\3152\\3153\\3154\index{PersistentHomologyOfQuotientGroupSeries}::::::::::::::::::::::::\\3155\texttt{PersistentHomologyOfQuotientGroupSeries(S,n)}\\3156\texttt{PersistentHomologyOfQuotientGroupSeries(S,n,p,Resolution{\textunderscore}Algorithm)}\\315731583159Inputs a positive integer $n$ and a decreasing chain $S=[S_1, S_2, ..., S_k]$ of normal subgroups in a finite $p$-group $G=S_1$. It returns the bar code of the persistent mod $p$ homology in degree $n$ of the sequence of quotient homomorphisms $G \rightarrow G/S_k \rightarrow G/S_{k-1} \rightarrow ... \rightarrow G/S_2 $. The bar code is returned as a matrix containing the dimensions of the images3160of the induced homology maps.31613162If one sets $p=0$ then the integral persitent homology bar code is returned. This is a matrix3163whose entries are pairs of the lists: the list of abelian invariants of the3164images of the induced homology maps and the cokernels of the induced homology3165maps. (The matrix probably does not uniquely determine the induced homology3166maps.)31673168Non prime-power (and possibly infinite) groups $G$ can also be handled; in this case the prime must be entered as a third3169argument, and the resolution algorithm (e.g. ResolutionNilpotentGroup) can be3170entered as a fourth argument. (The default algorithm is ResolutionFiniteGroup,3171so this must be changed for infinite groups.) \\3172\\3173\\3174\\3175\index{PersistentCohomologyOfQuotientGroupSeries}::::::::::::::::::::::::\\3176\texttt{PersistentCohomologyOfQuotientGroupSeries(S,n)}\\3177\texttt{PersistentCohomologyOfQuotientGroupSeries(S,n,p,Resolution{\textunderscore}Algorithm)}\\317831793180Inputs a positive integer $n$ and a decreasing chain $S=[S_1, S_2, ..., S_k]$ of normal subgroups in a finite $p$-group $G=S_1$. It returns the bar code of the persistent mod $p$ cohomology in degree $n$ of the sequence of quotient homomorphisms $G \rightarrow G/S_k \rightarrow G/S_{k-1} \rightarrow ... \rightarrow G/S_2 $. The bar code is returned as a matrix containing the dimensions of the images3181of the induced homology maps.31823183If one sets $p=0$ then the integral persitent cohomology bar code is returned. This is a matrix3184whose entries are pairs of the lists: the list of abelian invariants of the3185images of the induced cohomology maps and the cokernels of the induced3186cohomology maps. (The matrix probably does not uniquely determine the induced3187homology maps.)31883189Non prime-power (and possibly infinite) groups $G$ can also be handled; in this case the prime must be entered as a third3190argument, and the resolution algorithm (e.g. ResolutionNilpotentGroup) can be3191entered as a fourth argument. (The default algorithm is ResolutionFiniteGroup,3192so this must be changed for infinite groups.)31933194(The implementation is possibly a little less efficient than that of the3195corresponding persistent homology function.) \\3196\\3197\\3198\\3199\index{UniversalBarCode}::::::::::::::::::::::::\\3200\texttt{UniversalBarCode("UpperCentralSeries",n,d)}\\3201\texttt{UniversalBarCode("UpperCentralSeries",n,d,k)}\\320232033204Inputs integers $n,d$ that identify a prime power group G=SmallGroup(n,d), together with one of the3205strings "UpperCentralSeries", LowerCentralSeries", "DerivedSeries",3206"UpperPCentralSeries", "LowerPCentralSeries". The function returns a matrix of3207rational functions; the coefficients of $x^k$ in their expansions yield the persistence matrix for the degree $k$ homology with trivial mod p coefficients associated to the quotients of $G$ by the terms of the given series.32083209If the additional integer argument $k$ is supplied then the function returns the degree k homology persistence3210matrix. \\3211\\3212\\3213\\3214\index{PersistentHomologyOfSubGroupSeries}::::::::::::::::::::::::\\3215\texttt{PersistentHomologyOfSubGroupSeries(S,n)}\\3216\texttt{PersistentHomologyOfSubGroupSeries(S,n,p,Resolution{\textunderscore}Algorithm)}\\321732183219Inputs a positive integer $n$ and a decreasing chain $S=[S_1, S_2, ..., S_k]$ of subgroups in a finite $p$-group $G=S_1$. It returns the bar code of the persistent mod $p$ homology in degree $n$ of the sequence of inclusion homomorphisms $S_k \rightarrow S_{k-1} \rightarrow ... \rightarrow S_1=G $. The bar code is returned as a binary matrix.32203221Non prime-power (and possibly infinite) groups $G$ can also be handled; in this case the prime must be entered as a third3222argument, and the resolution algorithm (e.g. ResolutionNilpotentGroup) must be3223entered as a fourth argument. \\3224\\3225\\3226\\3227\index{PersistentHomologyOfFilteredChainComplex}::::::::::::::::::::::::\\3228\texttt{PersistentHomologyOfFilteredChainComplex(C,n,p) }\\322932303231Inputs a filtered chain complex $C$ (of characteristic $0$ or $p$) together with a positive integer $n$ and prime $p$. It returns the bar code of the persistent mod $p$ homology in degree $n$ of the filtered chain complex $C$. (This function needs a more efficient implementation. Its fine as it stands3232for investigation in group homology, but not sufficiently efficient for the3233homology of large complexes arising in applied topology.) \\3234\\3235\\3236\\3237\texttt{PersistentHomologyOfCommutativeDiagramOfPGroups(D,n) }\\323832393240Inputs a commutative diagram $D$ of finite $p$-groups and a positive integer $n$. It returns a list containing, for each homomorphism in the nerve of $D$, a triple $[k,l,m]$ where $k$ is the dimension of the source of the induced mod $p$ homology map in degree $n$, $l$ is the dimension of the image, and $m$ is the dimension of the cokernel. \\3241\\3242\\3243\\3244\index{PersistentHomologyOfFilteredPureCubicalComplex}::::::::::::::::::::::::\\3245\texttt{PersistentHomologyOfFilteredPureCubicalComplex(M,n)}\\324632473248Inputs a filtered pure cubical complex $M$ and a non-negative integer $n$. It returns the degree $n$ persistent homology of $ M$ with rational coefficients. \\3249\\3250\\3251\\3252\index{PersistentHomologyOfPureCubicalComplex}::::::::::::::::::::::::\\3253\texttt{PersistentHomologyOfPureCubicalComplex(L,n,p)}\\325432553256Inputs a positive integer $n$, a prime $p$ and an increasing chain $L=[L_1, L_2, ..., L_k]$ of subcomplexes in a pure cubical complex $L_k$. It returns the bar code of the persistent mod $p$ homology in degree $n$ of the sequence of inclusion maps. The bar code is returned as a matrix. (This3257function is extremely inefficient and it is better to use3258PersistentHomologyOFilteredfPureCubicalComplex.32593260\\3261\\3262\\3263\\3264\index{ZZPersistentHomologyOfPureCubicalComplex}::::::::::::::::::::::::\\3265\texttt{ZZPersistentHomologyOfPureCubicalComplex(L,n,p)}\\326632673268Inputs a positive integer $n$, a prime $p$ and any sequence $L=[L_1, L_2, ..., L_k]$ of subcomplexes of some pure cubical complex. It returns the bar code of the3269zig-zag persistent mod $p$ homology in degree $n$ of the sequence of maps $L_1 \rightarrow L_1 \cup L_2 \leftarrow L_2 \rightarrow L_2 \cup L_33270\leftarrow L_4 \rightarrow ... \leftarrow L_k$. The bar code is returned as a matrix.32713272\\3273\\3274\\3275\\3276\index{RipsHomology}::::::::::::::::::::::::\\3277\texttt{RipsHomology(G,n)}\\3278\texttt{RipsHomology(G,n,p)}\\327932803281Inputs a graph $G$, a non-negative integer $n$ (and optionally a prime number $p$). It returns the integral homology (or mod p homology) in degree $n$ of the Rips complex of $G$. \\3282\\3283\\3284\\3285\index{BarCode}::::::::::::::::::::::::\\3286\texttt{BarCode(P)}\\328732883289Inputs an integer persistence matrix P and returns the same information in the3290form of a binary matrix (corresponding to the usual bar code). \\3291\\3292\\3293\\3294\index{BarCodeDisplay}::::::::::::::::::::::::\\3295\index{BarCodeCompactDisplay}::::::::::::::::::::::::\\3296\texttt{BarCodeDisplay(P)}\\3297\texttt{BarCodeDisplay(P,"mozilla")}\\3298\texttt{BarCodeCompactDisplay(P)}\\3299\texttt{BarCodeCompactDisplay(P,"mozilla")}\\330033013302Inputs an integer persistence matrix P, and an optional string specifying a3303viewer/browser. It displays a picture of the bar code (using GraphViz3304software). The compact display is better for large bar codes. \\3305\\3306\\3307\\3308\index{Homology}::::::::::::::::::::::::\\3309\texttt{Homology(X,n)}\\331033113312Inputs either a chain complex $X=C$ or a chain map $X=(C \longrightarrow D)$. \\3313\\3314If $X=C$ then the torsion coefficients of $H_n(C)$ are retuned.\\3315\\3316If $X=(C \longrightarrow D)$ then the induced homomorphism $H_n(C) \longrightarrow H_n(D)$ is returned as a homomorphism of finitely presented groups. \\3317\\3318A $G$-complex $C$ can also be input. The homology groups of such a complex may not be abelian. \textsc{Warning:} in this case Homology(C,n) returns the abelian invariants of the $n$-th homology group of $C$. \\3319\\3320\\3321\\3322\index{HomologyPb}::::::::::::::::::::::::\\3323\texttt{HomologyPb(C,n)}\\332433253326This is a back-up function which might work in some instances where $Homology(C,n)$ fails. It is most useful for chain complexes whose boundary homomorphisms are3327sparse.33283329It inputs a chain complex $C$ in characteristic $0$ and returns the torsion coefficients of $H_n(C)$ . There is a small probability that an incorrect answer could be returned. The3330computation relies on probabilistic Smith Normal Form algorithms implemented3331in the Simplicial Homology GAP package. This package therefore needs to be3332loaded. The computation is stored as a component of $C$ so, when called a second time for a given $C$ and $n$, the calculation is recalled without rerunning the algorithm.33333334The choice of probabalistic algorithm can be changed using the command33353336SetHomologyAlgorithm(HomologyAlgorithm[i]);33373338where i = 1,2,3 or 4. The upper limit for the probability of an incorrect3339answer can be set to any rational number $0${\textless}$e${\textless}= $1$ using the following command.33403341SetUncertaintyTolerence(e);33423343See the Simplicial Homology package manual for further details. \\3344\\3345\\3346\\3347\index{HomologyVectorSpace}::::::::::::::::::::::::\\3348\texttt{HomologyVectorSpace(X,n)}\\334933503351Inputs either a chain complex $X=C$ or a chain map $X=(C \longrightarrow D)$ in prime characteristic. \\3352\\3353If $X=C$ then $H_n(C)$ is retuned as a vector space.\\3354\\3355If $X=(C \longrightarrow D)$ then the induced homomorphism $H_n(C) \longrightarrow H_n(D)$ is returned as a homomorphism of vector spaces. \\3356\\3357\\3358\\3359\\3360\\3361\index{HomologyPrimePart}::::::::::::::::::::::::\\3362\texttt{HomologyPrimePart(C,n,p)}\\336333643365Inputs a chain complex $C$ in characteristic 0, a positive integer $n$, and a prime $p$. It returns a list of those torsion coefficients of $H_n(C)$ that are positive powers of $p$. The function uses the EDIM GAP package by Frank Luebeck. \\3366\\3367\\3368\\3369\index{LeibnizAlgebraHomology}::::::::::::::::::::::::\\3370\texttt{LeibnizAlgebraHomology(A,n)}\\337133723373Inputs a Lie or Leibniz algebra $X=A$ (over the ring of integers $Z$ or over a field $K$), together with a positive integer $n$. It returns the $n$-dimensional Leibniz homology of $A$. \\3374\\3375\\3376\\3377\index{LieAlgebraHomology}::::::::::::::::::::::::\\3378\texttt{LieAlgebraHomology(A,n)}\\337933803381Inputs a Lie algebra $A$ (over the integers or a field) and a positive integer $n$. It returns the homology $H_n(A,k)$ where $k$ denotes the ground ring. \\3382\\3383\\3384\\3385\index{PrimePartDerivedFunctor}::::::::::::::::::::::::\\3386\texttt{PrimePartDerivedFunctor(G,R,F,n)}\\338733883389Inputs a finite group $G$, a positive integer $n$, at least $n+1$ terms of a $ZP$-resolution for a Sylow subgroup $P${\textless}$G$ and a "mathematically suitable" covariant additive functor $F$ such as TensorWithIntegers . It returns the abelian invariants of the $p$-component of the homology $H_n(F(R))$ .33903391Warning: All calculations are assumed to be in characteristic 0. The function3392should not be used if the coefficient module is over the field of $p$ elements.33933394"Mathematically suitable" means that the Cartan-Eilenberg double coset formula3395must hold. \\3396\\3397\\3398\\3399\index{RankHomologyPGroup}::::::::::::::::::::::::\\3400\texttt{RankHomologyPGroup(G,n)}\\3401\texttt{RankHomologyPGroup(R,n)}\\3402\texttt{RankHomologyPGroup(G,n,"empirical")}\\340334043405Inputs a (smallish) $p$-group $G$, or $n$ terms of a minimal $Z_pG$-resolution $R$ of $Z_p$ , together with a positive integer $n$. It returns the minimal number of generators of the integral homology group $H_n(G,Z)$.34063407If an option third string argument "empirical" is included then an empirical3408algorithm will be used. This is one which always seems to yield the right3409answer but which we can't prove yields the correct answer. \\3410\\3411\\3412\\3413\index{RankPrimeHomology}::::::::::::::::::::::::\\3414\texttt{RankPrimeHomology(G,n)}\\341534163417Inputs a (smallish) $p$-group $G$ together with a positive integer $n$. It returns a function $dim(k)$ which gives the rank of the vector space $H_k(G,Z_p)$ for all $0$ {\textless}= $k$ {\textless}= $n$. \\3418\\3419\\3420}342134223423\chapter{\textcolor{Chapter }{ Poincare series}}\logpage{[ 12, 0, 0 ]}3424\hyperdef{L}{X850CDAFE801E2B2A}{}3425{3426\\3427\\3428\\3429\texttt{EfficientNormalSubgroups(G)}\\3430\texttt{EfficientNormalSubgroups(G,k)}\\343134323433Inputs a prime-power group $G$ and, optionally, a positive integer $k$. The default is $k=4$. The function returns a list of normal subgroups $N$ in $G$ such that the Poincare series for $G$ equals the Poincare series for the direct product $(N \times (G/N))$ up to degree $k$. \\3434\\3435\\3436\\3437\index{ExpansionOfRationalFunction}::::::::::::::::::::::::\\3438\texttt{ExpansionOfRationalFunction(f,n)}\\343934403441Inputs a positive integer $n$ and a rational function $f(x)=p(x)/q(x)$ where the degree of the polynomial $p(x)$ is less than that of $q(x)$. It returns a list $[a_0 , a_1 , a_2 , a_3 , \ldots ,a_n]$ of the first $n+1$ coefficients of the infinite expansion34423443$f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + \ldots $ . \\3444\\3445\\3446\\3447\index{PoincareSeries}::::::::::::::::::::::::\\3448\texttt{PoincareSeries(G,n) }\\3449\texttt{ PoincareSeries(R,n) }\\3450\texttt{ PoincareSeries(L,n) }\\3451\texttt{ PoincareSeries(G) }\\345234533454Inputs a finite $p$-group $G$ and a positive integer $n$. It returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose coefficient of $x^k$ equals the rank of the vector space $H_k(G,Z_p)$ for all $k$ in the range $k=1$ to $k=n$. (The second input variable can be omitted, in which case the function tries3455to choose a "reasonable" value for $n$. For $2$-groups the function PoincareSeriesLHS(G) can be used to produce an $f(x)$ that is correct in all degrees.)34563457In place of the group $G$ the function can also input (at least $n$ terms of) a minimal mod $p$ resolution $R$ for $G$.34583459Alternatively, the first input variable can be a list $L$ of integers. In this case the coefficient of $x^k$ in $f(x)$ is equal to the $(k+1)$st term in the list. \\3460\\3461\\3462\\3463\index{PoincareSeriesPrimePart}::::::::::::::::::::::::\\3464\texttt{PoincareSeriesPrimePart(G,p,n) }\\346534663467Inputs a finite group $G$, a prime $p$, and a positive integer $n$. It returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose coefficient of $x^k$ equals the rank of the vector space $H_k(G,Z_p)$ for all $k$ in the range $k=1$ to $k=n$.34683469The efficiency of this function needs to be improved. \\3470\\3471\\3472\\3473\texttt{PoincareSeriesLHS(G) }\\347434753476Inputs a finite $2$-group $G$ and returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose coefficient of $x^k$ equals the rank of the vector space $H_k(G,Z_2)$ for all $k$.34773478This function was written by \textsc{Paul Smith}. It use the Singular system for commutative algebra. \\3479\\3480\\3481\\3482\index{Prank}::::::::::::::::::::::::\\3483\texttt{Prank(G) }\\348434853486Inputs a $p$-group $G$ and returns the rank of the largest elementary abelian subgroup. \\3487\\3488\\3489}349034913492\chapter{\textcolor{Chapter }{ Cohomology ring structure}}\logpage{[ 13, 0, 0 ]}3493\hyperdef{L}{X7A9561E47A4994F5}{}3494{3495\\3496\\3497\\3498\index{IntegralCupProduct}::::::::::::::::::::::::\\3499\texttt{IntegralCupProduct(R,u,v,p,q) }\\3500\texttt{ IntegralCupProduct(R,u,v,p,q,P,Q,N) }\\350135023503(Various functions used to construct the cup product are also \href{ CR_functions.html} {available}.)35043505Inputs a $ZG$-resolution $R$, a vector $u$ representing an element in $H^p(G,Z)$, a vector $v$ representing an element in $H^q(G,Z)$ and the two integers $p,q$ {\textgreater}$ 0$. It returns a vector $w$ representing the cup product $u\cdot v$ in $H^{p+q}(G,Z)$. This product is associative and $u\cdot v = (-1)pqv\cdot u$ . It provides $H^\ast(G,Z)$ with the structure of an anti-commutative graded ring. This function3506implements the cup product for characteristic 0 only.35073508The resolution $R$ needs a contracting homotopy.35093510To save the function from having to calculate the abelian groups $H^n(G,Z)$ additional input variables can be used in the form $IntegralCupProduct(R,u,v,p,q,P,Q,N)$ , where \\3511\\3512$P$ is the output of the command $CR_CocyclesAndCoboundaries(R,p,true)$ \\3513\\3514$Q$ is the output of the command $CR_CocyclesAndCoboundaries(R,q,true)$\\3515\\3516$N$ is the output of the command $CR_CocyclesAndCoboundaries(R,p+q,true)$ . \\3517\\3518\\3519\\3520\\3521\\3522\index{IntegralRingGenerators}::::::::::::::::::::::::\\3523\texttt{IntegralRingGenerators(R,n) }\\352435253526Inputs at least $n+1$ terms of a $ZG$-resolution and integer $n${\textgreater} $0$. It returns a minimal list of cohomology classes in $H^n(G,Z)$ which, together with all cup products of lower degree classes, generate the3527group $H^n(G,Z)$ .35283529(Let $a_i$ be the $i$-th canonical generator of the $d$-generator abelian group $H^n(G,Z)$. The cohomology class $n_1a_1 + ... +n_da_d$ is represented by the integer vector $u=(n_1, ..., n_d)$. ) \\3530\\3531\\3532\\3533\index{ModPCohomologyGenerators}::::::::::::::::::::::::\\3534\texttt{ModPCohomologyGenerators(G,n) }\\3535\texttt{ModPCohomologyGenerators(R) }\\353635373538Inputs either a $p$-group $G$ and positive integer $n$, or else $n$ terms of a minimal $Z_pG$-resolution $R$ of $Z_p$. It returns a pair whose first entry is a minimal set of homogeneous3539generators for the cohomology ring $A=H^*(G,Z_p)$ modulo all elements in degree greater than $n$. The second entry of the pair is a function $deg$ which, when applied to a minimal generator, yields its degree.35403541WARNING: the following rule must be applied when multiplying generators $x_i$ together. Only products of the form $x_1*(x_2*(x_3*(x_4*...)))$ with $deg(x_i) \le deg(x_{i+1})$ should be computed (since the $x_i$ belong to a structure constant algebra with only a partially defined structure3542constants table). \\3543\\3544\\3545\\3546\index{ModPCohomologyRing}::::::::::::::::::::::::\\3547\texttt{ModPCohomologyRing(G,n) }\\3548\texttt{ModPCohomologyRing(G,n,level) }\\3549\texttt{ModPCohomologyRing(R) }\\3550\texttt{ModPCohomologyRing(R,level)}\\355135523553Inputs either a $p$-group $G$ and positive integer $n$, or else $n$ terms of a minimal $Z_pG$-resolution $R$ of $Z_p$. It returns the cohomology ring $A=H^*(G,Z_p)$ modulo all elements in degree greater than $n$.35543555The ring is returned as a structure constant algebra $A$.35563557The ring $A$ is graded. It has a component $A!.degree(x)$ which is a function returning the degree of each (homogeneous) element $x$ in $GeneratorsOfAlgebra(A)$.35583559An optional input variable "level" can be set to one of the strings "medium"3560or "high". These settings determine parameters in the algorithm. The default3561setting is "medium".35623563When "level" is set to "high" the ring $A$ is returned with a component $A!.niceBasis$. This component is a pair $[Coeff,Bas]$. Here $Bas$ is a list of integer lists; a "nice" basis for the vector space $A$ can be constructed using the command $List(Bas,x->Product(List(x,i->Basis(A)[i]))$. The coefficients of the canonical basis element $Basis(A)[i]$ are stored as $Coeff[i]$.35643565If the ring $A$ is computed using the setting "level"="medium" then the component $A!.niceBasis$ can be added to $A$ using the command $ A:=ModPCohomologyRing_part_2(A) $. \\3566\\3567\\3568\\3569\index{ModPRingGenerators}::::::::::::::::::::::::\\3570\texttt{ModPRingGenerators(A) }\\357135723573Inputs a mod $p$ cohomology ring $A$ (created using the preceeding function). It returns a minimal generating set3574for the ring $A$. Each generator is homogeneous. \\3575\\3576\\3577\\3578\texttt{Mod2CohomologyRingPresentation(G) }\\3579\texttt{Mod2CohomologyRingPresentation(G,n) }\\3580\texttt{Mod2CohomologyRingPresentation(A) }\\3581\texttt{Mod2CohomologyRingPresentation(R)}\\358235833584When applied to a finite $2$-group $G$ this function returns a presentation for the mod 2 cohomology ring $H^*(G,Z_2)$. The Lyndon-Hochschild-Serre spectral sequence is used to prove that the3585presentation is correct.35863587When the function is applied to a $2$-group $G$ and positive integer $n$ the function first constructs $n$ terms of a free $Z_2G$-resolution $R$, then constructs the finite-dimensional graded algebra $A=H^(*\le n)(G,Z_2)$, and finally uses $A$ to approximate a presentation for $H^*(G,Z_2)$. For "sufficiently large" the approximation will be a correct presentation3588for $H^*(G,Z_2)$.35893590Alternatively, the function can be applied directly to either the resolution $R$ or graded algebra $A$.35913592This function was written by \textsc{Paul Smith}. It uses the Singular commutative algebra package to handle the3593Lyndon-Hochschild-Serre spectral sequence. \\3594\\3595\\3596}359735983599\chapter{\textcolor{Chapter }{ Cohomology rings of $p$-groups (mainly $p=2)$}}\logpage{[ 14, 0, 0 ]}3600\hyperdef{L}{X84A36BFC7E73C2BF}{}3601{3602The functions on this page were written by \textsc{Paul Smith}. (They are included in HAP but they are also independently included in Paul3603Smiths HAPprime package.) \\3604\\3605\\3606\index{Mod2CohomologyRingPresentation (HAPprime)}::::::::::::::::::::::::\\3607\texttt{Mod2CohomologyRingPresentation(G) }\\3608\texttt{Mod2CohomologyRingPresentation(G,n) }\\3609\texttt{Mod2CohomologyRingPresentation(A) }\\3610\texttt{Mod2CohomologyRingPresentation(R) }\\361136123613When applied to a finite $2$-group $G$ this function returns a presentation for the mod 2 cohomology ring $H^*(G,Z_2)$. The Lyndon-Hochschild-Serre spectral sequence is used to prove that the3614presentation is correct.36153616When the function is applied to a $2$-group $G$ and positive integer $n$ the function first constructs $n$ terms of a free $Z_2G$-resolution $R$, then constructs the finite-dimensional graded algebra $A=H^(*\le n)(G,Z_2)$, and finally uses $A$ to approximate a presentation for $H^*(G,Z_2)$. For "sufficiently large" the approximation will be a correct presentation3617for $H^*(G,Z_2)$.36183619Alternatively, the function can be applied directly to either the resolution $R$ or graded algebra $A$.36203621This function was written by \textsc{Paul Smith}. It uses the Singular commutative algebra package to handle the3622Lyndon-Hochschild-Serre spectral sequence. \\3623\\3624\\3625\\3626\index{PoincareSeriesLHS (HAPprime)}::::::::::::::::::::::::\\3627\texttt{PoincareSeriesLHS(G) }\\362836293630Inputs a finite $2$-group $G$ and returns a quotient of polynomials $f(x)=P(x)/Q(x)$ whose coefficient of $x^k$ equals the rank of the vector space $H_k(G,Z_2)$ for all $k$.36313632This function was written by \textsc{Paul Smith}. It use the Singular system for commutative algebra. \\3633\\3634\\3635}363636373638\chapter{\textcolor{Chapter }{ Commutator and nonabelian tensor computations}}\logpage{[ 15, 0, 0 ]}3639\hyperdef{L}{X86DE968B7B20BD48}{}3640{3641\\3642\\3643\\3644\index{BaerInvariant}::::::::::::::::::::::::\\3645\texttt{BaerInvariant(G,c) }\\364636473648Inputs a nilpotent group $G$ and integer $c${\textgreater}$0$. It returns the Baer invariant $M^(c)(G)$ defined as follows. For an arbitrary group $G$ let $L^*_{c+1}(G)$ be the $(c+1)$-st term of the upper central series of the group $U=F/[[[R,F],F]...]$ (with $c$ copies of $F$ in the denominator) where $F/R$ is any free presentation of $G$. This is an invariant of $G$ and we define $M^{(c)}(G)$ to be the kernel of the canonical homomorphism $M^{(c)}(G) \longrightarrow G$. For $c=1$ the Baer invariant $M^(1)(G)$ is isomorphic to the second integral homology $H_2(G,Z)$.36493650This function requires the NQ package. \\3651\\3652\\3653\\3654\index{BogomolovMultiplier}::::::::::::::::::::::::\\3655\texttt{BogomolovMultiplier(G) }\\3656\\3657\texttt{BogomolovMultiplier(G, "standard") }\\3658\texttt{BogomolovMultiplier(G, "homology") }\\3659\texttt{BogomolovMultiplier(G, "tensor") }\\366036613662Inputs a finite group $G$ and returns the quotient $H_2(G,Z)/K(G)$ of the second integral homology of $G$ where $K(G)$ is the subgroup of $H_2(G,Z)$ generated by the images of all homomorphisms $H_2(A,Z) \rightarrow H_2(G,Z)$ induced from abelian subgroups of $G$.36633664Three slight variants of the implementation are available. The defaults3665"standard" implementation seems to work best on average. But for some groups3666the "homology" implementation or the "tensor" implementation will be faster.3667The variants are called by including the appropriate string as the second3668argument. \\3669\\3670\\3671\\3672\index{Bogomology}::::::::::::::::::::::::\\3673\texttt{Bogomology(G,n) }\\367436753676Inputs a finite group $G$ and positive integer $n$, and returns the quotient $H_n(G,Z)/K(G)$ of the degree $n$ integral homology of $G$ where $K(G)$ is the subgroup of $H_n(G,Z)$ generated by the images of all homomorphisms $H_n(A,Z) \rightarrow H_n(G,Z)$ induced from abelian subgroups of $G$. \\3677\\3678\\3679\\3680\index{Coclass}::::::::::::::::::::::::\\3681\texttt{Coclass(G) }\\368236833684Inputs a group $G$ of prime-power order $p^n$ and nilpotency class $c$ say. It returns the integer $r=n-c$ . \\3685\\3686\\3687\\3688\index{EpiCentre}::::::::::::::::::::::::\\3689\texttt{EpiCentre(G,N) }\\3690\texttt{EpiCentre(G)}\\369136923693Inputs a finite group $G$ and normal subgroup $N$ and returns a subgroup $Z^\ast(G,N)$ of the centre of $N$. The group $Z^\ast(G,N)$ is trivial if and only if there is a crossed module $d:E \longrightarrow G$ with $N=Image(d)$ and with $Ker(d)$ equal to the subgroup of $E$ consisting of those elements on which $G$ acts trivially.36943695If no value for $N$ is entered then it is assumed that $N=G$. In this case the group $Z^\ast(G,G)$ is trivial if and only if $G$ is isomorphic to a quotient $G=E/Z(E)$ of some group $E$ by the centre of $E$. (See also the command $UpperEpicentralSeries(G,c)$. ) \\3696\\3697\\3698\\3699\index{NonabelianExteriorProduct}::::::::::::::::::::::::\\3700\texttt{NonabelianExteriorProduct(G,N) }\\370137023703Inputs a finite group $G$ and normal subgroup $N$. It returns a record $E$ with the following components. \\3704\\3705$E.homomorphism$ is a group homomorphism ${\ensuremath{\mu}} : (G \wedge N) \longrightarrow G$ from the nonabelian exterior product $(G \wedge N)$ to $G$. The kernel of ${\ensuremath{\mu}}$ is the relative Schur multiplier. \\3706\\3707$E.pairing(x,y)$ is a function which inputs an element $x$ in $G$ and an element $y$ in $N$ and returns $(x \wedge y)$ in the exterior product $(G \wedge N)$ . \\3708\\3709This function should work for reasonably small nilpotent groups or extremely3710small non-nilpotent groups. \\3711\\3712\\3713\\3714\index{NonabelianSymmetricKernel}::::::::::::::::::::::::\\3715\texttt{NonabelianSymmetricKernel(G) }\\3716\texttt{NonabelianSymmetricKernel(G,m) }\\371737183719Inputs a finite or nilpotent infinite group $G$ and returns the abelian invariants of the Fourth homotopy group $SG$ of the double suspension $SSK(G,1)$ of the Eilenberg-Mac Lane space $K(G,1)$.37203721For non-nilpotent groups the implementation of the function $NonabelianSymmetricKernel(G)$ is far from optimal and will soon be improved. As a temporary solution to this3722problem, an optional second variable $m$ can be set equal to $0$, and then the function efficiently returns the abelian invariants of groups $A$ and $B$ such that there is an exact sequence $0 \longrightarrow B \longrightarrow SG \longrightarrow A \longrightarrow 0$.37233724Alternatively, the optional second varible $m$ can be set equal to a positive multiple of the order of the symmetric square $(G \tilde\otimes G)$. In this case the function returns the abelian invariants of $SG$. This might help when $G$ is solvable but not nilpotent (especially if the estimated upper bound $m$ is reasonable accurate). \\3725\\3726\\3727\\3728\index{NonabelianSymmetricSquare}::::::::::::::::::::::::\\3729\texttt{NonabelianSymmetricSquare(G) }\\3730\texttt{NonabelianSymmetricSquare(G,m) }\\373137323733Inputs a finite or nilpotent infinite group $G$ and returns a record $T$ with the following components. \\3734\\3735$T.homomorphism$ is a group homomorphism ${\ensuremath{\mu}} : (G \tilde\otimes G) \longrightarrow G$ from the nonabelian symmetric square of $G$ to $G$. The kernel of ${\ensuremath{\mu}}$ is isomorphic to the fourth homotopy group of the double suspension $SSK(G,1)$ of an Eilenberg-Mac Lane space. \\3736\\3737$T.pairing(x,y)$ is a function which inputs two elements $x, y$ in $G$ and returns the tensor $(x \otimes y)$ in the symmetric square $(G \otimes G)$ . \\3738\\3739An optional second varible $m$ can be set equal to a multiple of the order of the symmetric square $(G \tilde\otimes G)$. This might help when $G$ is solvable but not nilpotent (especially if the estimated upper bound $m$ is reasonable accurate) as the bound is used in the solvable quotient3740algorithm.37413742The optional second variable $m$ can also be set equal to $0$. In this case the Todd-Coxeter procedure will be used to enumerate the3743symmetric square even when $G$ is solvable.37443745This function should work for reasonably small solvable groups or extremely3746small non-solvable groups. \\3747\\3748\\3749\\3750\index{NonabelianTensorProduct}::::::::::::::::::::::::\\3751\texttt{NonabelianTensorProduct(G,N) }\\375237533754Inputs a finite group $G$ and normal subgroup $N$. It returns a record $E$ with the following components. \\3755\\3756$E.homomorphism$ is a group homomorphism ${\ensuremath{\mu}} : (G \otimes N ) \longrightarrow G$ from the nonabelian exterior product $(G \otimes N)$ to $G$. \\3757\\3758$E.pairing(x,y)$ is a function which inputs an element $x$ in $G$ and an element $y$ in $N$ and returns $(x \otimes y)$ in the tensor product $(G \otimes N)$ . \\3759\\3760This function should work for reasonably small nilpotent groups or extremely3761small non-nilpotent groups. \\3762\\3763\\3764\\3765\index{NonabelianTensorSquare}::::::::::::::::::::::::\\3766\texttt{NonabelianTensorSquare(G) }\\3767\texttt{NonabelianTensorSquare(G,m) }\\376837693770Inputs a finite or nilpotent infinite group $G$ and returns a record $T$ with the following components. \\3771\\3772$T.homomorphism$ is a group homomorphism ${\ensuremath{\mu}} : (G \otimes G) \longrightarrow G$ from the nonabelian tensor square of $G$ to $G$. The kernel of ${\ensuremath{\mu}}$ is isomorphic to the third homotopy group of the suspension $SK(G,1)$ of an Eilenberg-Mac Lane space. \\3773\\3774$T.pairing(x,y)$ is a function which inputs two elements $x, y$ in $G$ and returns the tensor $(x \otimes y)$ in the tensor square $(G \otimes G)$ . \\3775\\3776An optional second varible $m$ can be set equal to a multiple of the order of the tensor square $(G \otimes G)$. This might help when $G$ is solvable but not nilpotent (especially if the estimated upper bound $m$ is reasonable accurate) as the bound is used in the solvable quotient3777algorithm.37783779The optional second variable $m$ can also be set equal to $0$. In this case the Todd-Coxeter procedure will be used to enumerate the tensor3780square even when $G$ is solvable.37813782This function should work for reasonably small solvable groups or extremely3783small non-solvable groups. \\3784\\3785\\3786\\3787\index{RelativeSchurMultiplier}::::::::::::::::::::::::\\3788\texttt{RelativeSchurMultiplier(G,N) }\\378937903791Inputs a finite group $G$ and normal subgroup $N$. It returns the homology group $H_2(G,N,Z)$ that fits into the exact sequence37923793$\ldots\longrightarrow H_3(G,Z) \longrightarrow H_3(G/N,Z) \longrightarrow3794H_2(G,N,Z) \longrightarrow H_3(G,Z) \longrightarrow H_3(G/N,Z) \longrightarrow3795\ldots. $37963797This function should work for reasonably small nilpotent groups $G$ or extremely small non-nilpotent groups. \\3798\\3799\\3800\\3801\index{TensorCentre}::::::::::::::::::::::::\\3802\texttt{TensorCentre(G) }\\380338043805Inputs a group $G$ and returns the largest central subgroup $N$ such that the induced homomorphism of nonabelian tensor squares $(G \otimes G) \longrightarrow (G/N \otimes G/N)$ is an isomorphism. Equivalently, $N$ is the largest central subgroup such that $\pi_3(SK(G,1)) \longrightarrow \pi_3(SK(G/N,1))$ is injective. \\3806\\3807\\3808\\3809\index{ThirdHomotopyGroupOfSuspensionB}::::::::::::::::::::::::\\3810\texttt{ThirdHomotopyGroupOfSuspensionB(G) }\\3811\texttt{ThirdHomotopyGroupOfSuspensionB(G,m) }\\381238133814Inputs a finite or nilpotent infinite group $G$ and returns the abelian invariants of the third homotopy group $JG$ of the suspension $SK(G,1)$ of the Eilenberg-Mac Lane space $K(G,1)$.38153816For non-nilpotent groups the implementation of the function $ThirdHomotopyGroupOfSuspensionB(G)$ is far from optimal and will soon be improved. As a temporary solution to this3817problem, an optional second variable $m$ can be set equal to $0$, and then the function efficiently returns the abelian invariants of groups $A$ and $B$ such that there is an exact sequence $0 \longrightarrow B \longrightarrow JG \longrightarrow A \longrightarrow 0$.38183819Alternatively, the optional second varible $m$ can be set equal to a positive multiple of the order of the tensor square $(G \otimes G)$. In this case the function returns the abelian invariants of $JG$. This might help when $G$ is solvable but not nilpotent (especially if the estimated upper bound $m$ is reasonable accurate). \\3820\\3821\\3822\\3823\index{UpperEpicentralSeries}::::::::::::::::::::::::\\3824\texttt{UpperEpicentralSeries(G,c) }\\382538263827Inputs a nilpotent group $G$ and an integer $c$. It returns the $c$-th term of the upper epicentral series $1$ {\textless} $ Z_1^\ast(G)$ {\textless} $Z_2^\ast(G)$ {\textless} $ \ldots $.38283829The upper epicentral series is defined for an arbitrary group $G$. The group $Z_c^\ast (G)$ is the image in $G$ of the $c$-th term $Z_c(U)$ of the upper central series of the group $U=F/[[[R,F],F] \ldots ]$ (with $c$ copies of $F$ in the denominator) where $F/R$ is any free presentation of $G$.38303831This functions requires the NQ package. \\3832\\3833\\3834}383538363837\chapter{\textcolor{Chapter }{ Lie commutators and nonabelian Lie tensors}}\logpage{[ 16, 0, 0 ]}3838\hyperdef{L}{X7A3DC9327EE1BE6C}{}3839{3840\\3841\\3842\\3843Functions on this page are joint work with \textsc{Hamid Mohammadzadeh}, and implemented by him. \\3844\\3845\\3846\\3847\index{LieCoveringHomomorphism}::::::::::::::::::::::::\\3848\texttt{LieCoveringHomomorphism(L)}\\384938503851Inputs a finite dimensional Lie algebra $L$ over a field, and returns a surjective Lie homomorphism $phi : C\rightarrow L$ where: \\3852\\3853the kernel of $phi$ lies in both the centre of $C$ and the derived subalgebra of $C$, \\3854\\3855the kernel of $phi$ is a vector space of rank equal to the rank of the second Chevalley-Eilenberg3856homology of $L$. \\3857\\3858\\3859\\3860\\3861\\3862\index{LeibnizQuasiCoveringHomomorphism}::::::::::::::::::::::::\\3863\texttt{LeibnizQuasiCoveringHomomorphism(L)}\\386438653866Inputs a finite dimensional Lie algebra $L$ over a field, and returns a surjective homomorphism $phi : C\rightarrow L$ of Leibniz algebras where: \\3867\\3868the kernel of $phi$ lies in both the centre of $C$ and the derived subalgebra of $C$, \\3869\\3870the kernel of $phi$ is a vector space of rank equal to the rank of the kernel $J$ of the homomorphism $L \otimes L \rightarrow L$ from the tensor square to $L$. (We note that, in general, $J$ is NOT equal to the second Leibniz homology of $L$.) \\3871\\3872\\3873\\3874\\3875\\3876\index{LieEpiCentre}::::::::::::::::::::::::\\3877\texttt{LieEpiCentre(L)}\\387838793880Inputs a finite dimensional Lie algebra $L$ over a field, and returns an ideal $Z^\ast(L)$ of the centre of $L$. The ideal $Z^\ast(L)$ is trivial if and only if $L$ is isomorphic to a quotient $L=E/Z(E)$ of some Lie algebra $E$ by the centre of $E$. \\3881\\3882\\3883\\3884\index{LieExteriorSquare}::::::::::::::::::::::::\\3885\texttt{LieExteriorSquare(L) }\\388638873888Inputs a finite dimensional Lie algebra $L$ over a field. It returns a record $E$ with the following components. \\3889\\3890$E.homomorphism$ is a Lie homomorphism ${\ensuremath{\mu}} : (L \wedge L) \longrightarrow L$ from the nonabelian exterior square $(L \wedge L)$ to $L$. The kernel of ${\ensuremath{\mu}}$ is the Lie multiplier. \\3891\\3892$E.pairing(x,y)$ is a function which inputs elements $x, y$ in $L$ and returns $(x \wedge y)$ in the exterior square $(L \wedge L)$ . \\3893\\3894\\3895\\3896\\3897\\3898\index{LieTensorSquare}::::::::::::::::::::::::\\3899\texttt{LieTensorSquare(L) }\\390039013902Inputs a finite dimensional Lie algebra $L$ over a field and returns a record $T$ with the following components. \\3903\\3904$T.homomorphism$ is a Lie homomorphism ${\ensuremath{\mu}} : (L \otimes L) \longrightarrow L$ from the nonabelian tensor square of $L$ to $L$. \\3905\\3906$T.pairing(x,y)$ is a function which inputs two elements $x, y$ in $L$ and returns the tensor $(x \otimes y)$ in the tensor square $(L \otimes L)$ . \\3907\\3908\\3909\\3910\\3911\\3912\index{LieTensorCentre}::::::::::::::::::::::::\\3913\texttt{LieTensorCentre(L) }\\391439153916Inputs a finite dimensional Lie algebra $L$ over a field and returns the largest ideal $N$ such that the induced homomorphism of nonabelian tensor squares $(L \otimes L) \longrightarrow (L/N \otimes L/N)$ is an isomorphism. \\3917\\3918\\3919}392039213922\chapter{\textcolor{Chapter }{ Generators and relators of groups}}\logpage{[ 17, 0, 0 ]}3923\hyperdef{L}{X7A2144518112F830}{}3924{3925\\3926\\3927\\3928\index{CayleyGraphOfGroupDisplay}::::::::::::::::::::::::\\3929\texttt{CayleyGraphOfGroupDisplay(G,X) }\\3930\texttt{CayleyGraphOfGroupDisplay(G,X,"mozilla") }\\393139323933Inputs a finite group $G$ together with a subset $X$ of $G$. It displays the corresponding Cayley graph as a .gif file. It uses the3934Mozilla web browser as a default to view the diagram. An alternative browser3935can be set using a second argument.39363937The argument $G$ can also be a finite set of elements in a (possibly infinite) group containing $X$. The edges of the graph are coloured according to which element of $X$ they are labelled by. The list $X$ corresponds to the list of colours [blue, red, green, yellow, brown, black] in3938that order.39393940This function requires Graphviz software. \\3941\\3942\\3943\\3944\index{IdentityAmongRelatorsDisplay}::::::::::::::::::::::::\\3945\texttt{IdentityAmongRelatorsDisplay(R,n) }\\3946\texttt{IdentityAmongRelatorsDisplay(R,n,"mozilla") }\\394739483949Inputs a free $ZG$-resolution $R$ and an integer $n$. It displays the boundary R!.boundary(3,n) as a tessellation of a sphere. It3950displays the tessellation as a .gif file and uses the Mozilla web browser as a3951default display mechanism. An alternative browser can be set using a second3952argument. (The resolution $R$ should be reduced and, preferably, in dimension 1 it should correspond to a3953Cayley graph for $G$. )39543955This function uses GraphViz software. \\3956\\3957\\3958\\3959\index{IsAspherical}::::::::::::::::::::::::\\3960\texttt{IsAspherical(F,R) }\\396139623963Inputs a free group $F$ and a set $R$ of words in $F$. It performs a test on the 2-dimensional CW-space $K$ associated to this presentation for the group $G=F/${\textless}$R${\textgreater}$^F$.39643965The function returns "true" if $K$ has trivial second homotopy group. In this case it prints: Presentation is3966aspherical.39673968Otherwise it returns "fail" and prints: Presentation is NOT piece-wise3969Euclidean non-positively curved. (In this case $K$ may or may not have trivial second homotopy group. But it is NOT possible to3970impose a metric on K which restricts to a Euclidean metric on each 2-cell.)39713972The function uses Polymake software. \\3973\\3974\\3975\\3976\index{PresentationOfResolution}::::::::::::::::::::::::\\3977\texttt{PresentationOfResolution(R) }\\397839793980Inputs at least two terms of a reduced $ZG$-resolution $R$ and returns a record $P$ with components \\3981\\3982$P.freeGroup$ is a free group $F$, \\3983\\3984$P.relators$ is a list $S$ of words in $F$, \\3985\\3986$P.gens$ is a list of positive integers such that the $i$-th generator of the presentation corresponds to the group element3987R!.elts[P[i]] . \\3988\\3989where $G$ is isomorphic to $F$ modulo the normal closure of $S$. This presentation for $G$ corresponds to the 2-skeleton of the classifying CW-space from which $R$ was constructed. The resolution $R$ requires no contracting homotopy. \\3990\\3991\\3992\\3993\index{TorsionGeneratorsAbelianGroup}::::::::::::::::::::::::\\3994\texttt{TorsionGeneratorsAbelianGroup(G) }\\399539963997Inputs an abelian group $G$ and returns a generating set $[x_1, \ldots ,x_n]$ where no pair of generators have coprime orders. \\3998\\3999\\4000}400140024003\chapter{\textcolor{Chapter }{ Orbit polytopes and fundamental domains}}\logpage{[ 18, 0, 0 ]}4004\hyperdef{L}{X7CD67FEA7A1B6345}{}4005{4006\\4007\\4008\\4009\index{CoxeterComplex}::::::::::::::::::::::::\\4010\texttt{CoxeterComplex(D)}\\4011\texttt{CoxeterComplex(D,n)}\\401240134014Inputs a Coxeter diagram $D$ of finite type. It returns a non-free ZW-resolution for the associated Coxeter4015group $W$. The non-free resolution is obtained from the permutahedron of type $W$. A positive integer $n$ can be entered as an optional second variable; just the first $n$ terms of the non-free resolution are then returned. \\4016\\4017\\4018\\4019\index{ContractibleGcomplex}::::::::::::::::::::::::\\4020\texttt{ContractibleGcomplex("PSL(4,Z)")}\\402140224023Inputs one of the following strings: \\4024\\4025"SL(2,Z)" , "SL(3,Z)" , "PGL(3,Z[i])" ,4026"PGL(3,Eisenstein{\textunderscore}Integers)" , "PSL(4,Z)" ,4027"PSL(4,Z){\textunderscore}b" , "PSL(4,Z){\textunderscore}c" ,4028"PSL(4,Z){\textunderscore}d" , "Sp(4,Z)" \\4029\\4030or one of the following strings \\4031\\4032"SL(2,O-2)" , "SL(2,O-7)" , "SL(2,O-11)" , "SL(2,O-19)" , "SL(2,O-43)" ,4033"SL(2,O-67)" , "SL(2,O-163)" \\4034\\4035It returns a non-free ZG-resolution for the group $G$ described by the string. The stabilizer groups of cells are finite.4036(Subscripts {\textunderscore}b , {\textunderscore}c , {\textunderscore}d4037denote alternative non-free ZG-resolutions for a given group G.)\\4038\\4039Data for the first list of non-free resolutions was provided provided by \textsc{Mathieu Dutour}. Data for the second list was provided by \textsc{Alexander Rahm}. \\4040\\4041\\4042\\4043\index{QuotientOfContractibleGcomplex}::::::::::::::::::::::::\\4044\texttt{QuotientOfContractibleGcomplex(C,D)}\\404540464047Inputs a non-free $ZG$-resolution $C$ and a finite subgroup $D$ of $G$ which is a subgroup of each cell stabilizer group for $C$. Each element of $D$ must preserves the orientation of any cell stabilized by it. It returns the4048corresponding non-free $Z(G/D)$-resolution. (So, for instance, from the $SL(2,O)$ complex $C=ContractibleGcomplex("SL(2,O-2)");$ we can construct a $PSL(2,O)$-complex using this function.) \\4049\\4050\\4051\\4052\index{TruncatedGComplex}::::::::::::::::::::::::\\4053\texttt{TruncatedGComplex(R,m,n)}\\405440554056Inputs a non-free $ZG$-resolution $R$ and two positive integers $m $ and $ n $. It returns the non-free $ZG$-resolution consisting of those modules in $R$ of degree at least $m$ and at most $n$. \\4057\\4058\\4059\\4060\index{FundamentalDomainStandardSpaceGroup (HAPcryst)}::::::::::::::::::::::::\\4061\texttt{FundamentalDomainStandardSpaceGroup(v,G)}\\406240634064Inputs a crystallographic group G (represented using AffineCrystGroupOnRight4065as in the GAP package Cryst). It also inputs a choice of vector v in the4066euclidean space $R^n$ on which $G$ acts. It returns the Dirichlet-Voronoi fundamental cell for the action of $G$ on euclidean space corresponding to the vector $v$. The fundamental cell is a fundamental domain if $G$ is Bieberbach. The fundamental cell/domain is returned as a ``Polymake object''. Currently the function only applies to certain crystallographic groups. See4067the manuals to HAPcryst and HAPpolymake for full details.40684069This function is part of the HAPcryst package written by \textsc{Marc Roeder} and is thus only available if HAPcryst is loaded.40704071The function requires the use of Polymake software. \\4072\\4073\\4074\\4075\index{OrbitPolytope}::::::::::::::::::::::::\\4076\texttt{OrbitPolytope(G,v,L) }\\407740784079Inputs a permutation group or matrix group $G$ of degree $n$ and a rational vector $v$ of length $n$. In both cases there is a natural action of $G$ on $v$. Let $P(G,v)$ be the convex polytope arising as the convex hull of the Euclidean points in4080the orbit of $v$ under the action of $G$. The function also inputs a sublist $L$ of the following list of strings:40814082["dimension","vertex{\textunderscore}degree", "visual{\textunderscore}graph",4083"schlegel","visual"]40844085Depending on the sublist, the function: \\4086\\4087prints the dimension of the orbit polytope $P(G,v)$;\\4088\\4089prints the degree of a vertex in the graph of $P(G,v)$;\\4090\\4091visualizes the graph of $P(G,v)$;\\4092\\4093visualizes the Schlegel diagram of $P(G,v)$;\\4094\\4095visualizes $P(G,v)$ if the polytope is of dimension 2 or 3.\\4096\\4097The function uses Polymake software. \\4098\\4099\\4100\\4101\index{PolytopalComplex}::::::::::::::::::::::::\\4102\texttt{PolytopalComplex(G,v) }\\4103\texttt{PolytopalComplex(G,v,n) }\\410441054106Inputs a permutation group or matrix group $G$ of degree $n$ and a rational vector $v$ of length $n$. In both cases there is a natural action of $G$ on $v$. Let $P(G,v)$ be the convex polytope arising as the convex hull of the Euclidean points in4107the orbit of $v$ under the action of $G$. The cellular chain complex $C_*=C_*(P(G,v))$ is an exact sequence of (not necessarily free) $ZG$-modules. The function returns a component object $R$ with components: \\4108\\4109$R!.dimension(k)$ is a function which returns the number of $G$-orbits of the $k$-dimensional faces in $P(G,v)$. If each $k$-face has trivial stabilizer subgroup in $G$ then $C_k$ is a free $ZG$-module of rank $R.dimension(k)$. \\4110\\4111$R!.stabilizer(k,n)$ is a function which returns the stabilizer subgroup for a face in the $n$-th orbit of $k$-faces. \\4112\\4113If all faces of dimension {\textless}$k+1$ have trivial stabilizer group then the first $k$ terms of $C_*$ constitute part of a free $ZG$-resolution. The boundary map is described by the function $boundary(k,n)$ . (If some faces have non-trivial stabilizer group then $C_*$ is not free and no attempt is made to determine signs for the boundary map.) \\4114\\4115$R!.elements$, $R!.group$, $R!.properties$ are as in a $ZG$-resolution. \\4116\\4117If an optional third input variable $n$ is used, then only the first $n$ terms of the resolution $C_*$ will be computed.41184119The function uses Polymake software. \\4120\\4121\\4122\\4123\index{PolytopalGenerators}::::::::::::::::::::::::\\4124\texttt{PolytopalGenerators(G,v) }\\412541264127Inputs a permutation group or matrix group $G$ of degree $n$ and a rational vector $v$ of length $n$. In both cases there is a natural action of $G$ on $v$, and the vector $v$ must be chosen so that it has trivial stabilizer subgroup in $G$. Let $P(G,v)$ be the convex polytope arising as the convex hull of the Euclidean points in4128the orbit of $v$ under the action of $G$. The function returns a record $P$ with components: \\4129\\4130$P.generators$ is a list of all those elements $g$ in $G$ such that $g\cdot v$ has an edge in common with $v$. The list is a generating set for $G$.\\4131\\4132$P.vector$ is the vector $v$.\\4133\\4134$P.hasseDiagram$ is the Hasse diagram of the cone at $v$. \\4135\\4136The function uses Polymake software. The function is joint work with Seamus4137Kelly. \\4138\\4139\\4140\\4141\index{VectorStabilizer}::::::::::::::::::::::::\\4142\texttt{VectorStabilizer(G,v) }\\414341444145Inputs a permutation group or matrix group $G$ of degree $n$ and a rational vector of degree $n$. In both cases there is a natural action of $G$ on $v$ and the function returns the group of elements in $G$ that fix $v$. \\4146\\4147\\4148}414941504151\chapter{\textcolor{Chapter }{ Cocycles}}\logpage{[ 19, 0, 0 ]}4152\hyperdef{L}{X85A9B66278AF63D9}{}4153{4154\\4155\\4156\\4157\index{CcGroup (HAPcocyclic)}::::::::::::::::::::::::\\4158\texttt{CcGroup(A,f) }\\415941604161Inputs a $G$-module $A$ (i.e. an abelian $G$-outer group) and a standard 2-cocycle f $G x G ---> A$. It returns the extension group determined by the cocycle. The group is4162returned as a CcGroup.41634164This is a HAPcocyclic function and thus only works when HAPcocyclic is loaded. \\4165\\4166\\4167\\4168\index{CocycleCondition}::::::::::::::::::::::::\\4169\texttt{CocycleCondition(R,n) }\\417041714172Inputs a resolution $R$ and an integer $n${\textgreater}$0$. It returns an integer matrix $M$ with the following property. Suppose $d=R.dimension(n)$. An integer vector $f=[f_1, \ldots , f_d]$ then represents a $ZG$-homomorphism $R_n \longrightarrow Z_q$ which sends the $i$th generator of $R_n$ to the integer $f_i$ in the trivial $ZG$-module $Z_q$ (where possibly $q=0$ ). The homomorphism $f$ is a cocycle if and only if $M^tf=0$ mod $q$. \\4173\\4174\\4175\\4176\index{StandardCocycle}::::::::::::::::::::::::\\4177\texttt{StandardCocycle(R,f,n) }\\4178\\4179\texttt{StandardCocycle(R,f,n,q) }\\418041814182Inputs a $ZG$-resolution $R$ (with contracting homotopy), a positive integer $n$ and an integer vector $f$ representing an $n$-cocycle $R_n \longrightarrow Z_q$ where $G$ acts trivially on $Z_q$. It is assumed $q=0$ unless a value for $q$ is entered. The command returns a function $F(g_1, ..., g_n)$ which is the standard cocycle $G_n \longrightarrow Z_q$ corresponding to $f$. At present the command is implemented only for $n=2$ or $3$. \\4183\\4184\\4185\\4186\index{Syzygy}::::::::::::::::::::::::\\4187\texttt{Syzygy(R,g) }\\418841894190Inputs a $ZG$-resolution $R$ (with contracting homotopy) and a list $g = [g[1], ..., g[n]]$ of elements in $G$. It returns a word $w$ in $R_n$. The word $w$ is the image of the $n$-simplex in the standard bar resolution corresponding to the $n$-tuple $g$. This function can be used to construct explicit standard $n$-cocycles. (Currently implemented only for n{\textless}4.) \\4191\\4192\\4193}419441954196\chapter{\textcolor{Chapter }{ Words in free $ZG$-modules }}\logpage{[ 20, 0, 0 ]}4197\hyperdef{L}{X78CFBBCC85F3EE32}{}4198{4199\\4200\\4201\\4202\index{AddFreeWords}::::::::::::::::::::::::\\4203\texttt{AddFreeWords(v,w) }\\420442054206Inputs two words $v,w$ in a free $ZG$-module and returns their sum $v+w$. If the characteristic of $Z$ is greater than $0$ then the next function might be more efficient. \\4207\\4208\\4209\\4210\index{AddFreeWordsModP}::::::::::::::::::::::::\\4211\texttt{AddFreeWordsModP(v,w,p) }\\421242134214Inputs two words $v,w$ in a free $ZG$-module and the characteristic $p$ of $Z$. It returns the sum $v+w$. If $p=0$ the previous function might be fractionally quicker. \\4215\\4216\\4217\\4218\index{AlgebraicReduction}::::::::::::::::::::::::\\4219\texttt{AlgebraicReduction(w) }\\4220\\4221\texttt{AlgebraicReduction(w,p) }\\422242234224Inputs a word $w$ in a free $ZG$-module and returns a reduced version of the word in which all pairs of4225mutually inverse letters have been cancelled. The reduction is performed in a4226free abelian group unless the characteristic $p$ of $Z$ is entered. \\4227\\4228\\4229\\4230\index{MultiplyWord}::::::::::::::::::::::::\\4231\texttt{Multiply Word(n,w) }\\423242334234Inputs a word $w$ and integer $n$. It returns the scalar multiple $n\cdot w$. \\4235\\4236\\4237\\4238\index{Negate}::::::::::::::::::::::::\\4239\texttt{Negate([i,j]) }\\424042414242Inputs a pair $[i,j]$ of integers and returns $[-i,j]$. \\4243\\4244\\4245\\4246\index{NegateWord}::::::::::::::::::::::::\\4247\texttt{NegateWord(w) }\\424842494250Inputs a word $w$ in a free $ZG$-module and returns the negated word $-w$. \\4251\\4252\\4253\\4254\index{PrintZGword}::::::::::::::::::::::::\\4255\texttt{PrintZGword(w,elts) }\\425642574258Inputs a word $w$ in a free $ZG$-module and a (possibly partial but sufficient) listing elts of the elements4259of $G$. The function prints the word $w$ to the screen in the form42604261$r_1E_1 + \ldots + r_nE_n$42624263where $r_i$ are elements in the group ring $ZG$, and $E_i$ denotes the $i$-th free generator of the module. \\4264\\4265\\4266\\4267\index{TietzeReduction}::::::::::::::::::::::::\\4268\texttt{TietzeReduction(S,w) }\\426942704271Inputs a set $S$ of words in a free $ZG$-module, and a word $w$ in the module. The function returns a word $w'$ such that \texttt{\symbol{123}}$S,w'$\texttt{\symbol{125}} generates the same abelian group as4272\texttt{\symbol{123}}$S,w$\texttt{\symbol{125}}. The word $w'$ is possibly shorter (and certainly no longer) than $w$. This function needs to be improved! \\4273\\4274\\4275\\4276\index{ResolutionBoundaryOfWord}::::::::::::::::::::::::\\4277\texttt{ResolutionBoundaryOfWord(R,n,w)}\\427842794280Inputs a resolution $R$, a positive integer $n$ and a list $w$ representing a word in the free module $R_n$. It returns the image of $w$ under the $n$-th boundary homomorphism. \\4281\\4282\\4283}428442854286\chapter{\textcolor{Chapter }{ $FpG$-modules}}\logpage{[ 21, 0, 0 ]}4287\hyperdef{L}{X7A7916087F55765C}{}4288{4289\\4290\\4291\\4292\index{CompositionSeriesOfFpGModules}::::::::::::::::::::::::\\4293\texttt{CompositionSeriesOfFpGModules(M) }\\429442954296Inputs an $FpG$-module $M$ and returns a list of $FpG$-modules that constitute a composition series for $M$. \\4297\\4298\\4299\\4300\index{DirectSumOfFpGModules}::::::::::::::::::::::::\\4301\texttt{DirectSumOfFpGModules(M,N) }\\4302\texttt{DirectSumOfFpGModules([ M[1], M[2], ..., M[k] ])) }\\430343044305Inputs two $FpG$-modules $M$ and $N$ with common group and characteristic. It returns the direct sum of $M$ and $N$ as an $FpG$-Module.43064307Alternatively, the function can input a list of $FpG$-modules with common group $G$. It returns the direct sum of the list. \\4308\\4309\\4310\\4311\index{FpGModule}::::::::::::::::::::::::\\4312\texttt{FpGModule(A,P) }\\4313\texttt{FpGModule(A,G,p) }\\431443154316Inputs a $p$-group $P$ and a matrix $A$ whose rows have length a multiple of the order of $G$. It returns the ``canonical'' $FpG$-module generated by the rows of $A$.43174318A small non-prime-power group $G$ can also be input, provided the characteristic $p$ is entered as a third input variable. \\4319\\4320\\4321\\4322\index{FpGModuleDualBasis}::::::::::::::::::::::::\\4323\texttt{FpGModuleDualBasis(M) }\\432443254326Inputs an $FpG$-module $M$. It returns a record $R$ with two components: \\4327\\4328$R.freeModule$ is the free module $FG$ of rank one.\\4329\\4330$R.basis$ is a list representing an $F$-basis for the module $Hom_{FG}(M,FG)$. Each term in the list is a matrix $A$ whose rows are vectors in $FG$ such that $M!.generators[i] \longrightarrow A[i]$ extends to a module homomorphism $M \longrightarrow FG$. \\4331\\4332\\4333\\4334\\4335\\4336\index{FpGModuleHomomorphism}::::::::::::::::::::::::\\4337\texttt{FpGModuleHomomorphism(M,N,A) }\\4338\texttt{FpGModuleHomomorphismNC(M,N,A) }\\433943404341Inputs $FpG$-modules $M$ and $N$ over a common $p$-group $G$. Also inputs a list $A$ of vectors in the vector space spanned by $N!.matrix$. It tests that the function43424343$ M!.generators[i] \longrightarrow A[i]$43444345extends to a homomorphism of $FpG$-modules and, if the test is passed, returns the corresponding $FpG$-module homomorphism. If the test is failed it returns fail.43464347The "NC" version of the function assumes that the input defines a homomorphism4348and simply returns the $FpG$-module homomorphism. \\4349\\4350\\4351\\4352\index{DesuspensionFpGModule}::::::::::::::::::::::::\\4353\texttt{ DesuspensionFpGModule(M,n)}\\4354\texttt{DesuspensionFpGModule(R,n) }\\435543564357Inputs a positive integer $n$ and and FpG-module $M$. It returns an FpG-module $D^nM$ which is mathematically related to $M$ via an exact sequence $ 0 \longrightarrow D^nM \longrightarrow R_n \longrightarrow \ldots4358\longrightarrow R_0 \longrightarrow M \longrightarrow 0$ where $R_\ast$ is a free resolution. (If $G=Group(M)$ is of prime-power order then the resolution is minimal.)43594360Alternatively, the function can input a positive integer $n$ and at least $n$ terms of a free resolution $R$ of $M$. \\4361\\4362\\4363\\4364\index{RadicalOfFpGModule}::::::::::::::::::::::::\\4365\texttt{RadicalOfFpGModule(M) }\\436643674368Inputs an $FpG$-module $M$ with $G$ a $p$-group, and returns the Radical of $M$ as an $FpG$-module. (Ig $G$ is not a $p$-group then a submodule of the radical is returned. \\4369\\4370\\4371\\4372\index{RadicalSeriesOfFpGModule}::::::::::::::::::::::::\\4373\texttt{RadicalSeriesOfFpGModule(M) }\\437443754376Inputs an $FpG$-module $M$ and returns a list of $FpG$-modules that constitute the radical series for $M$. \\4377\\4378\\4379\\4380\index{GeneratorsOfFpGModule}::::::::::::::::::::::::\\4381\texttt{GeneratorsOfFpGModule(M) }\\438243834384Inputs an $FpG$-module $M$ and returns a matrix whose rows correspond to a minimal generating set for $M$. \\4385\\4386\\4387\\4388\index{ImageOfFpGModuleHomomorphism}::::::::::::::::::::::::\\4389\texttt{ImageOfFpGModuleHomomorphism(f) }\\439043914392Inputs an $FpG$-module homomorphism $f:M \longrightarrow N$ and returns its image $f(M)$ as an $FpG$-module. \\4393\\4394\\4395\\4396\index{GroupAlgebraAsFpGModule}::::::::::::::::::::::::\\4397\texttt{GroupAlgebraAsFpGModule(G) }\\439843994400Inputs a $p$-group $G$ and returns its mod $p$ group algebra as an $FpG$-module. \\4401\\4402\\4403\\4404\index{IntersectionOfFpGModules}::::::::::::::::::::::::\\4405\texttt{IntersectionOfFpGModules(M,N) }\\440644074408Inputs two $FpG$-modules $M, N$ arising as submodules in a common free module $(FG)^n$ where $G$ is a finite group and $F$ the field of $p$-elements. It returns the $FpG$-module arising as the intersection of $M$ and $N$. \\4409\\4410\\4411\\4412\index{IsFpGModuleHomomorphismData}::::::::::::::::::::::::\\4413\texttt{IsFpGModuleHomomorphismData(M,N,A) }\\441444154416Inputs $FpG$-modules $M$ and $N$ over a common $p$-group $G$. Also inputs a list $A$ of vectors in the vector space spanned by $N!.matrix$. It returns true if the function44174418$ M!.generators[i] \longrightarrow A[i]$44194420extends to a homomorphism of $FpG$-modules. Otherwise it returns false. \\4421\\4422\\4423\\4424\index{MaximalSubmoduleOfFpGModule}::::::::::::::::::::::::\\4425\texttt{MaximalSubmoduleOfFpGModule(M) }\\442644274428Inputs an $FpG$-module $M$ and returns one maximal $FpG$-submodule of $M$. \\4429\\4430\\4431\\4432\index{MaximalSubmodulesOfFpGModule}::::::::::::::::::::::::\\4433\texttt{MaximalSubmodulesOfFpGModule(M) }\\443444354436Inputs an $FpG$-module $M$ and returns the list of maximal $FpG$-submodules of $M$. \\4437\\4438\\4439\\4440\index{MultipleOfFpGModule}::::::::::::::::::::::::\\4441\texttt{MultipleOfFpGModule(w,M) }\\444244434444Inputs an $FpG$-module $M$ and a list $w:=[g_1 , ..., g_t]$ of elements in the group $G=M!.group$. The list $w$ can be thought of as representing the element $w=g_1 + \ldots + g_t$ in the group algebra $FG$, and the function returns a semi-echelon matrix $B$ which is a basis for the vector subspace $wM$ . \\4445\\4446\\4447\\4448\index{ProjectedFpGModule}::::::::::::::::::::::::\\4449\texttt{ProjectedFpGModule(M,k) }\\445044514452Inputs an $FpG$-module $M$ of ambient dimension $n|G|$, and an integer $k$ between $1$ and $n$. The module $M$ is a submodule of the free module $(FG)^n$ . Let $M_k$ denote the intersection of $M$ with the last $k$ summands of $(FG)^n$ . The function returns the image of the projection of $M_k$ onto the $k$-th summand of $(FG)^n$ . This image is returned an $FpG$-module with ambient dimension $|G|$. \\4453\\4454\\4455\\4456\index{RandomHomomorphismOfFpGModules}::::::::::::::::::::::::\\4457\texttt{RandomHomomorphismOfFpGModules(M,N) }\\445844594460Inputs two $FpG$-modules $M$ and $N$ over a common group $G$. It returns a random matrix $A$ whose rows are vectors in $N$ such that the function44614462$ M!.generators[i] \longrightarrow A[i]$44634464extends to a homomorphism $M \longrightarrow N$ of $FpG$-modules. (There is a problem with this function at present.) \\4465\\4466\\4467\\4468\index{Rank}::::::::::::::::::::::::\\4469\texttt{Rank(f) }\\447044714472Inputs an $FpG$-module homomorphism $f:M \longrightarrow N$ and returns the dimension of the image of $f$ as a vector space over the field $F$ of $p$ elements. \\4473\\4474\\4475\\4476\index{SumOfFpGModules}::::::::::::::::::::::::\\4477\texttt{SumOfFpGModules(M,N) }\\447844794480Inputs two $FpG$-modules $M, N$ arising as submodules in a common free module $(FG)^n$ where $G$ is a finite group and $F$ the field of $p$-elements. It returns the $FpG$-Module arising as the sum of $M$ and $N$. \\4481\\4482\\4483\\4484\index{SumOp}::::::::::::::::::::::::\\4485\texttt{SumOp(f,g) }\\448644874488Inputs two $FpG$-module homomorphisms $f,g:M \longrightarrow N$ with common sorce and common target. It returns the sum $f+g:M \longrightarrow N$ . (This operation is also available using "+". \\4489\\4490\\4491\\4492\index{VectorsToFpGModuleWords}::::::::::::::::::::::::\\4493\texttt{VectorsToFpGModuleWords(M,L) }\\449444954496Inputs an $FpG$-module $M$ and a list $L=[v_1,\ldots ,v_k]$ of vectors in $M$. It returns a list $L'= [x_1,...,x_k]$ . Each $x_j=[[W_1,G_1],...,[W_t,G_t]]$ is a list of integer pairs corresponding to an expression of $v_j$ as a word44974498$ v_j = g_1*w_1 + g_2*w_1 + ... + g_t*w_t $44994500where45014502$g_i=Elements(M!.group)[G_i]$45034504$w_i=GeneratorsOfFpGModule(M)[W_i]$ . \\4505\\4506\\4507}450845094510\chapter{\textcolor{Chapter }{ Meataxe modules}}\logpage{[ 22, 0, 0 ]}4511\hyperdef{L}{X85B05BBA78ED7BE2}{}4512{4513\\4514\\4515\\4516\index{DesuspensionMtxModule}::::::::::::::::::::::::\\4517\texttt{DesuspensionMtxModule(M)}\\451845194520Inputs a meataxe module $M$ over the field of $p$ elements and returns an FpG-module DM. The two modules are related4521mathematically by the existence of a short exact sequence $DM \longrightarrow FM \longrightarrow M$ with $FM$ a free module. Thus the homological properties of $DM$ are equal to those of $M$ with a dimension shift.45224523(If $G:=Group(M.generators)$ is a $p$-group then $FM$ is a projective cover of $M$ in the sense that the homomorphism $FM \longrightarrow M$ does not factor as $FM \longrightarrow P \longrightarrow M$ for any projective module $P$.) \\4524\\4525\\4526\\4527\index{FpG{\textunderscore}to{\textunderscore}MtxModule}::::::::::::::::::::::::\\4528\texttt{FpG{\textunderscore}to{\textunderscore}MtxModule(M)}\\452945304531Inputs an FpG-module $M$ and returns an isomorphic meataxe module. \\4532\\4533\\4534\\4535\index{GeneratorsOfMtxModule}::::::::::::::::::::::::\\4536\texttt{GeneratorsOfMtxModule(M)}\\453745384539Inputs a meataxe module $M$ acting on, say, the vector space $V$. The function returns a minimal list of row vectors in $V$ which generate $V$ as a $G$-module (where G=Group(M.generators) ). \\4540\\4541\\4542}454345444545\chapter{\textcolor{Chapter }{ G-Outer Groups}}\logpage{[ 23, 0, 0 ]}4546\hyperdef{L}{X7D02CE0A83211FB7}{}4547{4548\\4549\\4550\\4551\index{GOuterGroup}::::::::::::::::::::::::\\4552\texttt{GOuterGroup(E,N)}\\4553\texttt{GOuterGroup()}\\455445554556Inputs a group $E$ and normal subgroup $N$. It returns $N$ as a $G$-outer group where $G=E/N$.45574558The function can be used without an argument. In this case an empty outer4559group $C$ is returned. The components must be set using SetActingGroup(C,G),4560SetActedGroup(C,N) and SetOuterAction(C,alpha). \\4561\\4562\\4563\\4564\index{GOuterGroupHomomorphismNC}::::::::::::::::::::::::\\4565\texttt{GOuterGroupHomomorphismNC(A,B,phi)}\\4566\texttt{GOuterGroupHomomorphismNC()}\\456745684569Inputs G-outer groups $A$ and $B$ with common acting group, and a group homomorphism phi:ActedGroup(A)4570--{\textgreater} ActedGroup(B). It returns the corresponding G-outer4571homomorphism PHI:A--{\textgreater} B. No check is made to verify that phi is4572actually a group homomorphism which preserves the G-action.45734574The function can be used without an argument. In this case an empty outer4575group homomorphism $PHI$ is returned. The components must then be set. \\4576\\4577\\4578\\4579\index{GOuterHomomorphismTester}::::::::::::::::::::::::\\4580\texttt{GOuterHomomorphismTester(A,B,phi)}\\458145824583Inputs G-outer groups $A$ and $B$ with common acting group, and a group homomorphism phi:ActedGroup(A)4584--{\textgreater} ActedGroup(B). It tests whether phi is a group homomorphism4585which preserves the G-action.45864587The function can be used without an argument. In this case an empty outer4588group homomorphism $PHI$ is returned. The components must then be set. \\4589\\4590\\4591\\4592\index{Centre}::::::::::::::::::::::::\\4593\texttt{Centre(A)}\\459445954596Inputs G-outer group $A$ and returns the group theoretic centre of ActedGroup(A) as a G-outer group. \\4597\\4598\\4599\\4600\index{DirectProductGog}::::::::::::::::::::::::\\4601\texttt{DirectProductGog(A,B)}\\4602\texttt{DirectProductGog(Lst)}\\460346044605Inputs G-outer groups $A$ and $B$ with common acting group, and returns their group-theoretic direct product as4606a G-outer group. The outer action on the direct product is the diagonal one.46074608The function also applies to a list Lst of G-outer groups with common acting4609group.46104611For a direct product D constructed using this function, the embeddings and4612projections can be obtained (as G-outer group homomorphisms) using the4613functions Embedding(D,i) and Projection(D,i). \\4614\\4615\\4616}461746184619\chapter{\textcolor{Chapter }{ Cat-1-groups}}\logpage{[ 24, 0, 0 ]}4620\hyperdef{L}{X7B54B8CA841C517B}{}4621{4622\\4623\\4624\\4625\index{AutomorphismGroupAsCatOneGroup}::::::::::::::::::::::::\\4626\texttt{AutomorphismGroupAsCatOneGroup(G)}\\462746284629Inputs a group $G$ and returns the Cat-1-group $C$ corresponding to the crossed module $G\rightarrow Aut(G)$. \\4630\\4631\\4632\\4633\index{HomotopyGroup}::::::::::::::::::::::::\\4634\texttt{HomotopyGroup(C,n)}\\463546364637Inputs a cat-1-group $C$ and an integer n. It returns the $n$th homotopy group of $C$. \\4638\\4639\\4640\\4641\index{HomotopyModule}::::::::::::::::::::::::\\4642\texttt{HomotopyModule(C,2)}\\464346444645Inputs a cat-1-group $C$ and an integer n=2. It returns the second homotopy group of $C$ as a G-module (i.e. abelian G-outer group) where G is the fundamental group of4646C. \\4647\\4648\\4649\\4650\index{QuasiIsomorph}::::::::::::::::::::::::\\4651\texttt{QuasiIsomorph(C)}\\465246534654Inputs a cat-1-group $C$ and returns a cat-1-group $D$ for which there exists some homomorphism $C\rightarrow D$ that induces isomorphisms on homotopy groups.46554656This function was implemented by \textsc{Le Van Luyen}. \\4657\\4658\\4659\\4660\index{ModuleAsCatOneGroup}::::::::::::::::::::::::\\4661\texttt{ModuleAsCatOneGroup(G,alpha,M)}\\466246634664Inputs a group $G$, an abelian group $M$ and a homomorphism $\alpha\colon G\rightarrow Aut(M)$. It returns the Cat-1-group $C$ corresponding th the zero crossed module $0\colon M\rightarrow G$. \\4665\\4666\\4667\\4668\index{MooreComplex}::::::::::::::::::::::::\\4669\texttt{MooreComplex(C)}\\467046714672Inputs a cat-1-group $C$ and returns its Moore complex as a G-complex (i.e. as a complex of groups4673considered as 1-outer groups). \\4674\\4675\\4676\\4677\index{NormalSubgroupAsCatOneGroup}::::::::::::::::::::::::\\4678\texttt{NormalSubgroupAsCatOneGroup(G,N)}\\467946804681Inputs a group $G$ with normal subgroup $N$. It returns the Cat-1-group $C$ corresponding th the inclusion crossed module $ N\rightarrow G$. \\4682\\4683\\4684\\4685\index{XmodToHAP}::::::::::::::::::::::::\\4686\texttt{XmodToHAP(C)}\\468746884689Inputs a cat-1-group $C$ obtained from the Xmod package and returns a cat-1-group $D$ for which IsHapCatOneGroup(D) returns true.46904691It returns "fail" id $C$ has not been produced by the Xmod package. \\4692\\4693\\4694}469546964697\chapter{\textcolor{Chapter }{ Simplicial groups}}\logpage{[ 25, 0, 0 ]}4698\hyperdef{L}{X7D818E5F80F4CF63}{}4699{4700\\4701\\4702\\4703\index{NerveOfCatOneGroup}::::::::::::::::::::::::\\4704\texttt{NerveOfCatOneGroup(G,n)}\\470547064707Inputs a cat-1-group $G$ and a positive integer $n$. It returns the low-dimensional part of the nerve of $G$ as a simplicial group of length $n$. \\4708\\4709This function applies both to cat-1-groups for which IsHapCatOneGroup(G) is4710true, and to cat-1-groups produced using the Xmod package. \\4711\\4712This function was implemented by \textsc{Van Luyen Le}. \\4713\\4714\\4715\\4716\index{EilenbergMacLaneSimplicialGroup}::::::::::::::::::::::::\\4717\texttt{EilenbergMacLaneSimplicialGroup(G,n,dim)}\\471847194720Inputs a group $G$, a positive integer $n$, and a positive integer $dim $. The function returns the first $1+dim$ terms of a simplicial group with $n-1$st homotopy group equal to $G$ and all other homotopy groups equal to zero. \\4721\\4722This function was implemented by \textsc{Van Luyen Le}. \\4723\\4724\\4725\\4726\index{EilenbergMacLaneSimplicialGroupMap}::::::::::::::::::::::::\\4727\texttt{EilenbergMacLaneSimplicialGroupMap(f,n,dim)}\\472847294730Inputs a group homomorphism $f:G\rightarrow Q$, a positive integer $n$, and a positive integer $dim $. The function returns the first $1+dim$ terms of a simplicial group homomorphism $f:K(G,n) \rightarrow K(Q,n)$ of Eilenberg-MacLane simplicial groups. \\4731\\4732This function was implemented by \textsc{Van Luyen Le}. \\4733\\4734\\4735\\4736\index{MooreComplex}::::::::::::::::::::::::\\4737\texttt{MooreComplex(G)}\\473847394740Inputs a simplicial group $G$ and returns its Moore complex as a $G$-complex. \\4741\\4742This function was implemented by \textsc{Van Luyen Le}. \\4743\\4744\\4745\\4746\index{ChainComplexOfSimplicialGroup}::::::::::::::::::::::::\\4747\texttt{ChainComplexOfSimplicialGroup(G)}\\474847494750Inputs a simplicial group $G$ and returns the cellular chain complex $C$ of a CW-space $X$ represented by the homotopy type of the simplicial group. Thus the homology4751groups of $C$ are the integral homology groups of $X$. \\4752\\4753This function was implemented by \textsc{Van Luyen Le}. \\4754\\4755\\4756\\4757\index{SimplicialGroupMap}::::::::::::::::::::::::\\4758\texttt{SimplicialGroupMap(f)}\\475947604761Inputs a homomorphism $f:G\rightarrow Q$ of simplicial groups. The function returns an induced map $f:C(G) \rightarrow C(Q)$ of chain complexes whose homology is the integral homology of the simplicial4762group G and Q respectively. \\4763\\4764This function was implemented by \textsc{Van Luyen Le}. \\4765\\4766\\4767\\4768\index{HomotopyGroup}::::::::::::::::::::::::\\4769\texttt{HomotopyGroup(G,n)}\\477047714772Inputs a simplicial group $G$ and a positive integer $n$. The integer $n$ must be less than the length of $G$. It returns, as a group, the (n)-th homology group of its Moore complex. Thus4773HomotopyGroup(G,0) returns the "fundamental group" of $G$. \\4774\\4775\\4776\\4777\index{Bar Resolution}::::::::::::::::::::::::\\4778\texttt{Representation of elements in the bar resolution}\\477947804781For a group G we denote by $B_n(G)$ the free $\mathbb ZG$-module with basis the lists $[g_1 | g_2 | ... | g_n]$ where the $g_i$ range over $G$. \\4782\\4783We represent a word \\4784\\4785$w = h_1.[g_{11} | g_{12} | ... | g_{1n}] - h_2.[g_{21} | g_{22} | ... |4786g_{2n}] + ... + h_k.[g_{k1} | g_{k2} | ... | g_{kn}] $ \\4787\\4788in $B_n(G)$ as a list of lists: \\4789\\4790$ [ [+1,h_1,g_{11} , g_{12} , ... , g_{1n}] , [-1, h_2,g_{21} , g_{22} , ... |4791g_{2n}] + ... + [+1, h_k,g_{k1} , g_{k2} , ... , g_{kn}] $. \\4792\\4793\\4794\\4795\index{BarResolutionBoundary}::::::::::::::::::::::::\\4796\texttt{BarResolutionBoundary(w)}\\479747984799This function inputs a word $w$ in the bar resolution module $B_n(G)$ and returns its image under the boundary homomorphism $d_n\colon B_n(G) \rightarrow B_{n-1}(G)$ in the bar resolution. \\4800\\4801This function was implemented by \textsc{Van Luyen Le}. \\4802\\4803\\4804\\4805\index{BarResolutionHomotopy}::::::::::::::::::::::::\\4806\texttt{BarResolutionHomotopy(w)}\\480748084809This function inputs a word $w$ in the bar resolution module $B_n(G)$ and returns its image under the contracting homotopy $h_n\colon B_n(G) \rightarrow B_{n+1}(G)$ in the bar resolution. \\4810\\4811This function is currently being implemented by \textsc{Van Luyen Le}. \\4812\\4813\\4814\\4815\index{Bar Complex}::::::::::::::::::::::::\\4816\texttt{Representation of elements in the bar complex}\\481748184819For a group G we denote by $BC_n(G)$ the free abelian group with basis the lists $[g_1 | g_2 | ... | g_n]$ where the $g_i$ range over $G$. \\4820\\4821We represent a word \\4822\\4823$w = [g_{11} | g_{12} | ... | g_{1n}] - [g_{21} | g_{22} | ... | g_{2n}] + ...4824+ [g_{k1} | g_{k2} | ... | g_{kn}] $ \\4825\\4826in $BC_n(G)$ as a list of lists: \\4827\\4828$ [ [+1,g_{11} , g_{12} , ... , g_{1n}] , [-1, g_{21} , g_{22} , ... | g_{2n}] +4829... + [+1, g_{k1} , g_{k2} , ... , g_{kn}] $. \\4830\\4831\\4832\\4833\index{BarComplexBoundary}::::::::::::::::::::::::\\4834\texttt{BarComplexBoundary(w)}\\483548364837This function inputs a word $w$ in the n-th term of the bar complex $BC_n(G)$ and returns its image under the boundary homomorphism $d_n\colon BC_n(G) \rightarrow BC_{n-1}(G)$ in the bar complex. \\4838\\4839This function was implemented by \textsc{Van Luyen Le}. \\4840\\4841\\4842\\4843\index{BarResolutionEquivalence}::::::::::::::::::::::::\\4844\texttt{BarResolutionEquivalence(R)}\\484548464847This function inputs a free $ZG$-resolution $R$. It returns a component object HE with components \\4848\\4849HE!.phi(n,w) is a function which inputs a non-negative integer $n$ and a word $w$ in $B_n(G)$. It returns the image of $w$ in $R_n$ under a chain equivalence $\phi\colon B_n(G) \rightarrow R_n$.\\4850\\4851HE!.psi(n,w) is a function which inputs a non-negative integer $n$ and a word $w$ in $R_n$. It returns the image of $w$ in $B_n(G)$ under a chain equivalence $\psi\colon R_n \rightarrow B_n(G)$.\\4852\\4853HE!.equiv(n,w) is a function which inputs a non-negative integer $n$ and a word $w$ in $B_n(G)$. It returns the image of $w$ in $B_{n+1}(G)$ under a $ZG$-equivariant homomorphism \\4854\\4855$equiv(n,-) \colon B_n(G) \rightarrow B_{n+1}(G)$ \\4856\\4857satisfying4858\[w - \psi ( \phi (w)) = d(n+1, equiv(n,w)) + equiv(n-1,d(n,w)) . \]4859where $d(n,-)\colon B_n(G) \rightarrow B_{n-1}(G)$ is the boundary homomorphism in the bar resolution. \\4860\\4861This function was implemented by \textsc{Van Luyen Le}. \\4862\\4863\\4864\\4865\index{BarComplexEquivalence}::::::::::::::::::::::::\\4866\texttt{BarComplexEquivalence(R)}\\486748684869This function inputs a free $ZG$-resolution $R$. It first constructs the chain complex $T=TensorWithIntegerts(R)$. The function returns a component object HE with components \\4870\\4871HE!.phi(n,w) is a function which inputs a non-negative integer $n$ and a word $w$ in $BC_n(G)$. It returns the image of $w$ in $T_n$ under a chain equivalence $\phi\colon BC_n(G) \rightarrow T_n$.\\4872\\4873HE!.psi(n,w) is a function which inputs a non-negative integer $n$ and an element $w$ in $T_n$. It returns the image of $w$ in $BC_n(G)$ under a chain equivalence $\psi\colon T_n \rightarrow BC_n(G)$.\\4874\\4875HE!.equiv(n,w) is a function which inputs a non-negative integer $n$ and a word $w$ in $BC_n(G)$. It returns the image of $w$ in $BC_{n+1}(G)$ under a homomorphism \\4876\\4877$equiv(n,-) \colon BC_n(G) \rightarrow BC_{n+1}(G)$ \\4878\\4879satisfying4880\[w - \psi ( \phi (w)) = d(n+1, equiv(n,w)) + equiv(n-1,d(n,w)) . \]4881where $d(n,-)\colon BC_n(G) \rightarrow BC_{n-1}(G)$ is the boundary homomorphism in the bar complex. \\4882\\4883This function was implemented by \textsc{Van Luyen Le}. \\4884\\4885\\4886\\4887\index{Bar Cocomplex}::::::::::::::::::::::::\\4888\texttt{Representation of elements in the bar cocomplex}\\488948904891For a group G we denote by $BC^n(G)$ the free abelian group with basis the lists $[g_1 | g_2 | ... | g_n]$ where the $g_i$ range over $G$. \\4892\\4893We represent a word \\4894\\4895$w = [g_{11} | g_{12} | ... | g_{1n}] - [g_{21} | g_{22} | ... | g_{2n}] + ...4896+ [g_{k1} | g_{k2} | ... | g_{kn}] $ \\4897\\4898in $BC^n(G)$ as a list of lists: \\4899\\4900$ [ [+1,g_{11} , g_{12} , ... , g_{1n}] , [-1, g_{21} , g_{22} , ... | g_{2n}] +4901... + [+1, g_{k1} , g_{k2} , ... , g_{kn}] $. \\4902\\4903\\4904\\4905\index{BarCocomplexCoboundary}::::::::::::::::::::::::\\4906\texttt{BarCocomplexCoboundary(w)}\\490749084909This function inputs a word $w$ in the n-th term of the bar cocomplex $BC^n(G)$ and returns its image under the coboundary homomorphism $d^n\colon BC^n(G) \rightarrow BC^{n+1}(G)$ in the bar cocomplex. \\4910\\4911This function was implemented by \textsc{Van Luyen Le}. \\4912\\4913\\4914}491549164917\chapter{\textcolor{Chapter }{ Coxeter diagrams and graphs of groups}}\logpage{[ 26, 0, 0 ]}4918\hyperdef{L}{X79D0502085B6734A}{}4919{4920\\4921\\4922\\4923\index{CoxeterDiagramComponents}::::::::::::::::::::::::\\4924\texttt{CoxeterDiagramComponents(D) }\\492549264927Inputs a Coxeter diagram $D$ and returns a list $[D_1, ..., D_d]$ of the maximal connected subgraphs $D_i$. \\4928\\4929\\4930\\4931\index{CoxeterDiagramDegree}::::::::::::::::::::::::\\4932\texttt{CoxeterDiagramDegree(D,v) }\\493349344935Inputs a Coxeter diagram $D$ and vertex $v$. It returns the degree of $v$ (i.e. the number of edges incident with $v$). \\4936\\4937\\4938\\4939\index{CoxeterDiagramDisplay}::::::::::::::::::::::::\\4940\texttt{CoxeterDiagramDisplay(D) }\\4941\texttt{CoxeterDiagramDisplay(D,"web browser") }\\494249434944Inputs a Coxeter diagram $D$ and displays it as a .gif file. It uses the Mozilla web browser as a default4945to view the diagram. An alternative browser can be set using a second4946argument.49474948This function requires Graphviz software. \\4949\\4950\\4951\\4952\index{CoxeterDiagramFpArtinGroup}::::::::::::::::::::::::\\4953\texttt{CoxeterDiagramFpArtinGroup(D) }\\495449554956Inputs a Coxeter diagram $D$ and returns the corresponding finitely presented Artin group. \\4957\\4958\\4959\\4960\index{CoxeterDiagramFpCoxeterGroup}::::::::::::::::::::::::\\4961\texttt{CoxeterDiagramFpCoxeterGroup(D) }\\496249634964Inputs a Coxeter diagram $D$ and returns the corresponding finitely presented Coxeter group. \\4965\\4966\\4967\\4968\index{CoxeterDiagramIsSpherical}::::::::::::::::::::::::\\4969\texttt{CoxeterDiagramIsSpherical(D) }\\497049714972Inputs a Coxeter diagram $D$ and returns "true" if the associated Coxeter groups is finite, and returns4973"false" otherwise. \\4974\\4975\\4976\\4977\index{CoxeterDiagramMatrix}::::::::::::::::::::::::\\4978\texttt{CoxeterDiagramMatrix(D) }\\497949804981Inputs a Coxeter diagram $D$ and returns a matrix representation of it. The matrix is given as a function $DiagramMatrix(D)(i,j)$ where $i,j$ can range over the vertices. \\4982\\4983\\4984\\4985\index{CoxeterSubDiagram}::::::::::::::::::::::::\\4986\texttt{CoxeterSubDiagram(D,V) }\\498749884989Inputs a Coxeter diagram $D$ and a subset $V$ of its vertices. It returns the full sub-diagram of $D$ with vertex set $V$. \\4990\\4991\\4992\\4993\index{CoxeterDiagramVertices}::::::::::::::::::::::::\\4994\texttt{CoxeterDiagramVertices(D) }\\499549964997Inputs a Coxeter diagram $D$ and returns its set of vertices. \\4998\\4999\\5000\\5001\index{EvenSubgroup}::::::::::::::::::::::::\\5002\texttt{EvenSubgroup(G) }\\500350045005Inputs a group $G$ and returns a subgroup $G^+$. The subgroup is that generated by all products $xy$ where $x$ and $y$ range over the generating set for $G$ stored by GAP. The subgroup is probably only meaningful when $G$ is an Artin or Coxeter group. \\5006\\5007\\5008\\5009\index{GraphOfGroupsDisplay}::::::::::::::::::::::::\\5010\texttt{ GraphOfGroupsDisplay(D) }\\5011\texttt{GraphOfGroupsDisplay(D,"web browser") }\\501250135014Inputs a graph of groups $D$ and displays it as a .gif file. It uses the Mozilla web browser as a default5015to view the diagram. An alternative browser can be set using a second5016argument.50175018This function requires Graphviz software. \\5019\\5020\\5021\\5022\index{GraphOfResolutions}::::::::::::::::::::::::\\5023\texttt{ GraphOfResolutions(D,n) }\\502450255026Inputs a graph of groups $D$ and a positive integer $n$. It returns a graph of resolutions, each resolution being of length $n$. It uses the function ResolutionGenericGroup() to produce the resolutions. \\5027\\5028\\5029\\5030\index{GraphOfGroups}::::::::::::::::::::::::\\5031\texttt{ GraphOfGroups(D) }\\503250335034Inputs a graph of resolutions $D$ and returns the corresponding graph of groups. \\5035\\5036\\5037\\5038\index{GraphOfResolutionsDisplay}::::::::::::::::::::::::\\5039\texttt{ GraphOfResolutionsDisplay(D) }\\504050415042Inputs a graph of resolutions $D$ and displays it as a .gif file. It uses the Mozilla web browser as a default5043to view the diagram.50445045This function requires Graphviz software. \\5046\\5047\\5048\\5049\index{GraphOfGroupsTest}::::::::::::::::::::::::\\5050\texttt{GraphOfGroupsTest(D) }\\505150525053Inputs an object $D$ and itries to test whether it is a Graph of Groups. However, it DOES NOT test5054the injectivity of any homomorphisms. It returns true if $D$ passes the test, and false otherwise.50555056Note that there is no function $IsHapGraphOfGroups()$ because no special data type has been created for these graphs. \\5057\\5058\\5059\\5060\index{TreeOfGroupsToContractibleGcomplex}::::::::::::::::::::::::\\5061\texttt{TreeOfGroupsToContractibleGcomplex(D,G) }\\506250635064Inputs a graph of groups $D$ which is a tree, and also inputs the fundamental group $G$ of the tree in a form which contains each of the groups in the graph as5065subgroups. It returns a corresponding contractible G-complex. \\5066\\5067\\5068\\5069\index{TreeOfResolutionsToContractibleGcomplex}::::::::::::::::::::::::\\5070\texttt{TreeOfResolutionsToContractibleGcomplex(D,G) }\\507150725073Inputs a graph of resolutions $D$ which is a tree, and also inputs the fundamental group $G$ of the tree in a form which contains each of the groups in the graph as5074subgroups. It returns a corresponding contractible G-complex. The resolutions5075are stored as a component of the contractible $G$-complex. \\5076\\5077\\5078}50795080\#5081\chapter{\textcolor{Chapter }{Torsion Subcomplexes}}\logpage{[ 27, 0, 0 ]}5082\hyperdef{L}{X8213E6467969C33F}{}5083{5084\begin{center}5085\begin{tabular}{|l|} The Torsion Subcomplex subpackage has been conceived and implemented by \textsc{Bui Anh Tuan} and \textsc{ Alexander D. Rahm}\\5086\index{RigidFacetsSubdivision} \texttt{RigidFacetsSubdivision( X )}50875088It inputs an $n$-dimensional $G$-equivariant CW-complex $X$ on which all the cell stabilizer subgroups in $G$ are finite. It returns an $n$-dimensional $G$-equivariant CW-complex $Y$ which is topologically the same as $X$, but equipped with a $G$-CW-structure which is rigid. \\5089\index{IsPNormal} \texttt{ IsPNormal( G, p)}50905091Inputs a finite group $G$ and a prime $p$. Checks if the group G is p-normal for the prime p. Zassenhaus defines a5092finite group to be p-normal if the center of one of its Sylow p-groups is the5093center of every Sylow p-group in which it is contained. \\5094\index{TorsionSubcomplex} \texttt{TorsionSubcomplex( C, p)}50955096Inputs either a cell complex with action of a group as a variable or a group5097name. In HAP, presently the following cell complexes with stabilisers fixing5098their cells pointwise are available, specified by the following "groupName"5099strings: \\5100\\5101"SL(2,O-2)" , "SL(2,O-7)" , "SL(2,O-11)" , "SL(2,O-19)" , "SL(2,O-43)" ,5102"SL(2,O-67)" , "SL(2,O-163)", \\5103\\5104where the symbol O[-m] stands for the ring of integers in the imaginary5105quadratic number field Q(sqrt(-m)), the latter being the extension of the5106field of rational numbers by the square root of minus the square-free positive5107integer m. The additive structure of this ring O[-m] is given as the module5108Z[omega] over the natural integers Z with basis \texttt{\symbol{123}}1,5109omega\texttt{\symbol{125}}, and omega being the square root of minus m if m is5110congruent to 1 or 2 modulo four; else, in the case m congruent 3 modulo 4, the5111element omega is the arithmetic mean with 1, namely $(1+sqrt(-m))/2$. \\5112\\5113The function TorsionSubcomplex prints the cells with p-torsion in their5114stabilizer on the screen and returns the incidence matrix of the 1-skeleton of5115this cellular subcomplex, as well as a Boolean value on whether the cell5116complex has its cell stabilisers fixing their cells pointwise. \\5117\\5118It is also possible to input the cell complexes \\5119\\5120"SL(2,Z)" , "SL(3,Z)" , "PGL(3,Z[i])" ,5121"PGL(3,Eisenstein{\textunderscore}Integers)" , "PSL(4,Z)" ,5122"PSL(4,Z){\textunderscore}b" , "PSL(4,Z){\textunderscore}c" ,5123"PSL(4,Z){\textunderscore}d" , "Sp(4,Z)" \\5124\\5125provided by \textsc{Mathieu Dutour}. \\5126\index{DisplayAvailableCellComplexes} \texttt{DisplayAvailableCellComplexes();}51275128Displays the cell complexes that are available in HAP. \\5129\index{VisualizeTorsionSkeleton} \texttt{VisualizeTorsionSkeleton( groupName, p)}51305131Executes the function TorsionSubcomplex( groupName, p) and visualizes its5132output, namely the incidence matrix of the 1-skeleton of the p-torsion5133subcomplex, as a graph. \\5134\index{ReduceTorsionSubcomplex} \texttt{ReduceTorsionSubcomplex( C, p)}51355136This function start with the same operations as the function5137TorsionSubcomplex( C, p), and if the cell stabilisers are fixing their cells5138pointwise, it continues as follows. \\5139\\5140It prints on the screen which cells to merge and which edges to cut off in5141order to reduce the p-torsion subcomplex without changing the equivariant5142Farrell cohomology. Finally, it prints the representative cells, their5143stabilizers and the Abelianization of the latter. \\5144\index{EquivariantEulerCharacteristic} \texttt{EquivariantEulerCharacteristic( X )}51455146It inputs an $n$-dimensional $\Gamma$-equivariant CW-complex $X$ all the cell stabilizer subgroups in $\Gamma$ are finite. It returns the equivariant euler characteristic obtained by using5147mass formula $\sum_{\sigma}(-1)^{dim\sigma}\frac{1}{card(\Gamma_{\sigma})}$ \\5148\index{CountingCellsOfACellComplex} \texttt{CountingCellsOfACellComplex( X )}51495150It inputs an $n$-dimensional $\Gamma$-equivariant CW-complex $X$ on which all the cell stabilizer subgroups in $\Gamma$ are finite. It returns the number of cells in $X$ \\5151\index{CountingControlledSubdividedCells} \texttt{CountingControlledSubdividedCells( X )}51525153It inputs an $n$-dimensional $\Gamma$-equivariant CW-complex $X$ on which all the cell stabilizer subgroups in $\Gamma$ are finite. It returns the number of cells in $X$ appear during the subdivision process using the RigidFacetsSubdivision. \\5154\index{CountingBaryCentricSubdividedCells} \texttt{CountingBaryCentricSubdividedCells( X )}51555156It inputs an $n$-dimensional $\Gamma$-equivariant CW-complex $X$ on which all the cell stabilizer subgroups in $\Gamma$ are finite. It returns the number of cells in $X$ appear during the subdivision process using the barycentric subdivision. \\5157\index{EquivariantSpectralSequencePage} \texttt{EquivariantSpectralSequencePage( C, m, n)}51585159It inputs a triple (C,m,n) where C is either a groupName explained as in5160TorsionSubcomplex, m is the dimension of the reduced torsion subcomplex, and n5161is the highest vertical degree in the spectral sequence page. At the moment,5162the function works only when m=1,i.e, after reduction the torsion subcomplex5163has degree 1. It returns a component object R consists of the first page of5164spectral sequence, and i-th cohomology groups for i less than n. \\5165\index{ExportHapCellcomplexToDisk} \texttt{ExportHapCellcomplexToDisk( C, groupName)}51665167It inputs a cell complex $C$ which is stored as a variable in the memory, together with a user's desire5168name. In case, the input is a torsion cell complex then the user's desire name5169should be in the form "group{\textunderscore}ptorsion" in order to use the5170function EquivariantSpectralSequencePage. The function will export C to the5171hard disk. \\5172\end{tabular}\\[2mm]5173\end{center}51745175}517651775178\chapter{\textcolor{Chapter }{ Simplicial Complexes}}\logpage{[ 28, 0, 0 ]}5179\hyperdef{L}{X7AC76D657C578FEE}{}5180{5181\\5182\\5183\\5184\texttt{Homology(T,n)}\\5185\texttt{Homology(T)}\\518651875188Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and a non-negative integer $n$. It returns the n-th integral homology of $T$ as a list of torsion integers. If no value of $n$ is input then the list of all homologies of $T$ in dimensions 0 to Dimension(T) is returned . \\5189\\5190\\5191\\5192\texttt{RipsHomology(G,n)}\\5193\texttt{RipsHomology(G,n,p)}\\519451955196Inputs a graph $G$, a non-negative integer $n$ (and optionally a prime number $p$). It returns the integral homology (or mod p homology) in degree $n$ of the Rips complex of $G$. \\5197\\5198\\5199\\5200\index{Bettinumbers}::::::::::::::::::::::::\\5201\texttt{ Bettinumbers(T,n)}\\5202\texttt{ Bettinumbers(T)}\\520352045205Inputs a pure cubical complex, or cubical complex, simplicial complex or chain5206complex $T$ and a non-negative integer $n$. The rank of the n-th rational homology group $H_n(T,\mathbb Q)$ is returned. If no value for n is input then the list of Betti numbers in5207dimensions 0 to Dimension(T) is returned . \\5208\\5209\\5210\\5211\texttt{ChainComplex(T)}\\521252135214Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and returns the (often very large) cellular chain complex of $T$. \\5215\\5216\\5217\\5218\index{CechComplexOfPureCubicalComplex}::::::::::::::::::::::::\\5219\texttt{CechComplexOfPureCubicalComplex(T)}\\522052215222Inputs a d-dimensional pure cubical complex $T$ and returns a simplicial complex $S$. The simplicial complex $S$ has one vertex for each d-cube in $T$, and an n-simplex for each collection of n+1 d-cubes with non-trivial common5223intersection. The homotopy types of $T$ and $S$ are equal. \\5224\\5225\\5226\\5227\index{PureComplexToSimplicialComplex}::::::::::::::::::::::::\\5228\texttt{PureComplexToSimplicialComplex(T,k)}\\522952305231Inputs either a d-dimensional pure cubical complex $T$ or a d-dimensional pure permutahedral complex $T$ together with a non-negative integer $k$. It returns the first $k$ dimensions of a simplicial complex $S$. The simplicial complex $S$ has one vertex for each d-cell in $T$, and an n-simplex for each collection of n+1 d-cells with non-trivial common5232intersection. The homotopy types of $T$ and $S$ are equal.52335234For a pure cubical complex $T$ this uses a slightly different algorithm to the function5235CechComplexOfPureCubicalComplex(T) but constructs the same simplicial complex. \\5236\\5237\\5238\\5239\index{RipsChainComplex}::::::::::::::::::::::::\\5240\texttt{RipsChainComplex(G,n)}\\524152425243Inputs a graph $G$ and a non-negative integer $n$. It returns $n+1$ terms of a chain complex whose homology is that of the nerve (or Rips complex)5244of the graph in degrees up to $n$. \\5245\\5246\\5247\\5248\index{VectorsToSymmetricMatrix}::::::::::::::::::::::::\\5249\texttt{VectorsToSymmetricMatrix(M)}\\5250\texttt{VectorsToSymmetricMatrix(M,distance)}\\525152525253Inputs a matrix $M$ of rational numbers and returns a symmetric matrix $S$ whose $(i,j)$ entry is the distance between the $i$-th row and $j$-th rows of $M$ where distance is given by the sum of the absolute values of the coordinate5254differences.52555256Optionally, a function distance(v,w) can be entered as a second argument. This5257function has to return a rational number for each pair of rational vectors $v,w$ of length Length(M[1]). \\5258\\5259\\5260\\5261\index{EulerCharacteristic}::::::::::::::::::::::::\\5262\texttt{EulerCharacteristic(T)}\\526352645265Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and returns its Euler characteristic. \\5266\\5267\\5268\\5269\index{MaximalSimplicesToSimplicialComplex}::::::::::::::::::::::::\\5270\texttt{MaximalSimplicesToSimplicialComplex(L)}\\527152725273Inputs a list L whose entries are lists of vertices representing the maximal5274simplices of a simplicial complex. The simplicial complex is returned. Here a5275"vertex" is a GAP object such as an integer or a subgroup. \\5276\\5277\\5278\\5279\index{SkeletonOfSimplicialComplex}::::::::::::::::::::::::\\5280\texttt{SkeletonOfSimplicialComplex(S,k)}\\528152825283Inputs a simplicial complex $S$ and a positive integer $k$ less than or equal to the dimension of $S$. It returns the truncated $k$-dimensional simplicial complex $S^k$ (and leaves $S$ unchanged). \\5284\\5285\\5286\\5287\index{GraphOfSimplicialComplex}::::::::::::::::::::::::\\5288\texttt{GraphOfSimplicialComplex(S)}\\528952905291Inputs a simplicial complex $S$ and returns the graph of $S$. \\5292\\5293\\5294\\5295\index{ContractibleSubcomplexOfSimplicialComplex}::::::::::::::::::::::::\\5296\texttt{ContractibleSubcomplexOfSimplicialComplex(S)}\\529752985299Inputs a simplicial complex $S$ and returns a (probably maximal) contractible subcomplex of $S$. \\5300\\5301\\5302\\5303\index{PathComponentsOfSimplicialComplex}::::::::::::::::::::::::\\5304\texttt{PathComponentsOfSimplicialComplex(S,n)}\\530553065307Inputs a simplicial complex $S$ and a nonnegative integer $n$. If $n=0$ the number of path components of $S$ is returned. Otherwise the n-th path component is returned (as a simplicial5308complex). \\5309\\5310\\5311\\5312\index{QuillenComplex}::::::::::::::::::::::::\\5313\texttt{QuillenComplex(G)}\\531453155316Inputs a finite group $G$ and returns, as a simplicial complex, the order complex of the poset of5317non-trivial elementary abelian subgroups of $G$. \\5318\\5319\\5320\\5321\index{SymmetricMatrixToIncidenceMatrix}::::::::::::::::::::::::\\5322\texttt{SymmetricMatrixToIncidenceMatrix(S,t)}\\5323\texttt{SymmetricMatrixToIncidenceMatrix(S,t,d)}\\532453255326Inputs a symmetric integer matrix S and an integer t. It returns the matrix $M$ with $M_{ij}=1$ if $I_{ij}$ is less than $ t$ and $I_{ij}=1$ otherwise.53275328An optional integer $d$ can be given as a third argument. In this case the incidence matrix should5329have roughly at most $d$ entries in each row (corresponding to the \$d\$ smallest entries in each row5330of $S$). \\5331\\5332\\5333\\5334\index{IncidenceMatrixToGraph}::::::::::::::::::::::::\\5335\texttt{IncidenceMatrixToGraph(M)}\\533653375338Inputs a symmetric 0/1 matrix M. It returns the graph with one vertex for each5339row of $M$ and an edges between vertices $i$ and $j$ if the $(i,j)$ entry in $M$ equals 1. \\5340\\5341\\5342\\5343\index{CayleyGraphOfGroup}::::::::::::::::::::::::\\5344\texttt{CayleyGraphOfGroup(G,A)}\\534553465347Inputs a group $G$ and a set $A$ of generators. It returns the Cayley graph. \\5348\\5349\\5350\\5351\index{PathComponentsOfGraph}::::::::::::::::::::::::\\5352\texttt{PathComponentsOfGraph(G,n)}\\535353545355Inputs a graph $G$ and a nonnegative integer $n$. If $n=0$ the number of path components is returned. Otherwise the n-th path component5356is returned (as a graph). \\5357\\5358\\5359\\5360\index{ContractGraph}::::::::::::::::::::::::\\5361\texttt{ContractGraph(G)}\\536253635364Inputs a graph $G$ and tries to remove vertices and edges to produce a smaller graph $G'$ such that the indlusion $G' \rightarrow G$ induces a homotopy equivalence $RG \rightarrow RG'$ of Rips complexes. If the graph $G$ is modified the function returns true, and otherwise returns false. \\5365\\5366\\5367\\5368\index{GraphDisplay}::::::::::::::::::::::::\\5369\texttt{GraphDisplay(G)}\\537053715372This function uses GraphViz software to display a graph $G$. \\5373\\5374\\5375\\5376\index{SimplicialMap}::::::::::::::::::::::::\\5377\index{SimplicialMapNC}::::::::::::::::::::::::\\5378\texttt{SimplicialMap(K,L,f)}\\5379\texttt{SimplicialMapNC(K,L,f)}\\538053815382Inputs simplicial complexes $K$ , $L$ and a function $f\colon K!.vertices \rightarrow L!.vertices$ representing a simplicial map. It returns a simplicial map $K \rightarrow L$. If $f$ does not happen to represent a simplicial map then SimplicialMap(K,L,f) will5383return fail; SimplicialMapNC(K,L,f) will not do any check and always return5384something of the data type "simplicial map". \\5385\\5386\\5387\\5388\index{ChainMapOfSimplicialMap}::::::::::::::::::::::::\\5389\texttt{ChainMapOfSimplicialMap(f)}\\539053915392Inputs a simplicial map $f\colon K \rightarrow L$ and returns the corresponding chain map $C_\ast(f) \colon C_\ast(K) \rightarrow C_\ast(L)$ of the simplicial chain complexes.. \\5393\\5394\\5395\\5396\index{SimplicialNerveOfGraph}::::::::::::::::::::::::\\5397\texttt{SimplicialNerveOfGraph(G,d)}\\539853995400Inputs a graph $G$ and returns a $d$-dimensional simplicial complex $K$ whose 1-skeleton is equal to $G$. There is a simplicial inclusion $K \rightarrow RG$ where: (i) the inclusion induces isomorphisms on homotopy groups in dimensions5401less than $d$; (ii) the complex $RG$ is the Rips complex (with one $n$-simplex for each complete subgraph of $G$ on $n+1$ vertices). \\5402\\5403\\5404}540554065407\chapter{\textcolor{Chapter }{Cubical Complexes}}\logpage{[ 29, 0, 0 ]}5408\hyperdef{L}{X7D67D5F3820637AD}{}5409{5410\\5411\\5412\\5413\index{ArrayToPureCubicalComplex}::::::::::::::::::::::::\\5414\texttt{ArrayToPureCubicalComplexA,n)}\\541554165417Inputs an integer array $A$ of dimension $d$ and an integer $n$. It returns a d-dimensional pure cubical complex corresponding to the5418black/white "image" determined by the threshold $n$ and the values of the entries in $A$. (Integers below the threshold correspond to a black pixel, and higher5419integers correspond to a white pixel.) \\5420\\5421\\5422\\5423\index{PureCubicalComplex}::::::::::::::::::::::::\\5424\texttt{PureCubicalComplexA,n)}\\542554265427Inputs a binary array $A$ of dimension $d$. It returns the corresponding d-dimensional pure cubical complex. \\5428\\5429\\5430\\5431\index{FramedPureCubicalComplex}::::::::::::::::::::::::\\5432\texttt{FramedPureCubicalComplex(M)}\\543354345435Inputs a pure cubical complex $M$ and returns the pure cubical complex with a border of zeros attached the each5436face of the boundary array M!.boundaryArray. This function just adds a bit of5437space for performing operations such as thickenings to $M$. \\5438\\5439\\5440\\5441\index{RandomCubeOfPureCubicalComplex}::::::::::::::::::::::::\\5442\texttt{RandomCubeOfPureCubicalComplex(M)}\\544354445445Inputs a pure cubical complex $M$ and returns a pure cubical complex $R$ with precisely the same dimensions as $M$. The complex $R$ consist of one cube selected at random from $M$. \\5446\\5447\\5448\\5449\index{PureCubicalComplexIntersection}::::::::::::::::::::::::\\5450\texttt{PureCubicalComplexIntersection(S,T)}\\545154525453Inputs two pure cubical complexes with common dimension and array size. It5454returns the intersection of the two complexes. (An entry in the binary array5455of the intersection has value 1 if and only if the corresponding entries in5456the binary arrays of S and T both have value 1.) \\5457\\5458\\5459\\5460\index{PureCubicalComplexUnion}::::::::::::::::::::::::\\5461\texttt{PureCubicalComplexUnion(S,T)}\\546254635464Inputs two pure cubical complexes with common dimension and array size. It5465returns the union of the two complexes. (An entry in the binary array of the5466union has value 1 if and only if at least one of the corresponding entries in5467the binary arrays of S and T has value 1.) \\5468\\5469\\5470\\5471\index{PureCubicalComplexDifference}::::::::::::::::::::::::\\5472\texttt{PureCubicalComplexDifference(S,T)}\\547354745475Inputs two pure cubical complexes with common dimension and array size. It5476returns the difference S-T. (An entry in the binary array of the difference5477has value 1 if and only if the corresponding entry in the binary array of S is54781 and the corresponding entry in the binary array of T is 0.) \\5479\\5480\\5481\\5482\index{ReadImageAsPureCubicalComplex}::::::::::::::::::::::::\\5483\texttt{ ReadImageAsPureCubicalComplex("file.png",n)}\\548454855486Reads an image file ("file.png", "file.eps", "file.bmp" etc) and an integer $n$ between 0 and 765. It returns a 2-dimensional pure cubical complex based on5487the black/white version of the image determined by the threshold $n$. \\5488\\5489\\5490\\5491\index{ReadLinkImageAsPureCubicalComplex}::::::::::::::::::::::::\\5492\texttt{ ReadLinkImageAsPureCubicalComplex("file.png")}\\5493\texttt{ ReadLinkImageAsPureCubicalComplex("file.png",n)}\\549454955496Reads an image file ("file.png", "file.eps", "file.bmp" etc) containing a knot5497or link diagram, and optionally a positive integer $n$. The integer $n$ should be a little larger than the line thickness in the link diagram, and if5498not provided then $n$ is set equal to 10. The function tries to output the corresponding knot or5499link as a 3-dimensional pure cubical complex. Ideally the link diagram should5500be produced with line thickness 6 in Xfig, and the under-crossing spaces5501should not be too large or too small or too near one another. The function5502does not always succeed: it applies several checks, and if one of these checks5503fails then the function returns "fail". \\5504\\5505\\5506\\5507\index{ReadImageSequenceAsPureCubicalComplex}::::::::::::::::::::::::\\5508\texttt{ReadImageSequenceAsPureCubicalComplex("directory",n)}\\550955105511Reads the name of a directory containing a sequence of image files (ordered5512alphanumerically), and an integer $n$ between 0 and 765. It returns a 3-dimensional pure cubical complex based on5513the black/white version of the images determined by the threshold $n$. \\5514\\5515\\5516\\5517\texttt{Size(T)}\\551855195520This returns the number of non-zero entries in the binary array of the cubical5521complex, or pure cubical complex T. \\5522\\5523\\5524\\5525\texttt{Dimension(T)}\\552655275528This returns the dimension of the cubical complex, or pure cubical complex T. \\5529\\5530\\5531\\5532\index{WritePureCubicalComplexAsImage}::::::::::::::::::::::::\\5533\texttt{WritePureCubicalComplexAsImage(T,"filename","ext")}\\553455355536Inputs a 2-dimensional pure cubical complex T, and a filename followed by its5537extension (e.g. "myfile" followed by "png"). A black/white image is saved to5538the file. \\5539\\5540\\5541\\5542\index{ViewPureCubicalComplex}::::::::::::::::::::::::\\5543\texttt{ViewPureCubicalComplex(T)}\\5544\texttt{ViewPureCubicalComplex(T,"mozilla")}\\554555465547Inputs a 2-dimensional pure cubical complex T, and optionally a command such5548as "mozilla" for viewing image files. A black/white image is displayed. \\5549\\5550\\5551\\5552\index{Homology}::::::::::::::::::::::::\\5553\texttt{Homology(T,n)}\\5554\texttt{Homology(T)}\\555555565557Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and a non-negative integer $n$. It returns the n-th integral homology of $T$ as a list of torsion integers. If no value of $n$ is input then the list of all homologies of $T$ in dimensions 0 to Dimension(T) is returned . \\5558\\5559\\5560\\5561\index{Bettinumbers}::::::::::::::::::::::::\\5562\texttt{Bettinumbers(T,n)}\\5563\texttt{Bettinumbers(T)}\\556455655566Inputs a pure cubical complex, or cubical complex, simplicial complex or chain5567complex $T$ and a non-negative integer $n$. The rank of the n-th rational homology group $H_n(T,\mathbb Q)$ is returned. If no value for n is input then the list of Betti numbers in5568dimensions 0 to Dimension(T) is returned . \\5569\\5570\\5571\\5572\index{DirectProductOfPureCubicalComplexes}::::::::::::::::::::::::\\5573\texttt{DirectProductOfPureCubicalComplexes(M,N)}\\557455755576Inputs two pure cubical complexes $M,N$ and returns their direct product $D$ as a pure cubical complex. The dimension of $D$ is the sum of the dimensions of $M$ and $N$. \\5577\\5578\\5579\\5580\index{SuspensionOfPureCubicalComplex}::::::::::::::::::::::::\\5581\texttt{SuspensionOfPureCubicalComplex(M)}\\558255835584Inputs a pure cubical complex $M$ and returns a pure cubical complex with the homotopy type of the suspension of $M$. \\5585\\5586\\5587\\5588\texttt{EulerCharacteristic(T)}\\558955905591Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and returns its Euler characteristic. \\5592\\5593\\5594\\5595\index{PathComponentOfPureCubicalComplex}::::::::::::::::::::::::\\5596\texttt{PathComponentOfPureCubicalComplex(T,n)}\\559755985599Inputs a pure cubical complex $T$ and an integer $n$ in the rane 1, ..., Bettinumbers(T)[1] . It returns the n-th path component of $T$ as a pure cubical complex. The value $n=0$ is also allowed, in which case the number of path components is returned. \\5600\\5601\\5602\\5603\texttt{ChainComplex(T)}\\560456055606Inputs a pure cubical complex, or cubical complex, or simplicial complex $T$ and returns the (often very large) cellular chain complex of $T$. \\5607\\5608\\5609\\5610\texttt{ChainComplexOfPair(T,S)}\\561156125613Inputs a pure cubical complex or cubical complex $T$ and subcomplex $S$. It returns the quotient $C(T)/C(S)$ of cellular chain complexes. \\5614\\5615\\5616\\5617\texttt{ExcisedPureCubicalPair(T,S)}\\561856195620Inputs a pure cubical complex $T$ and subcomplex $S$. It returns the pair $[T\setminus intS, S\setminus intS])$ of pure cubical complexes where $intS$ is the pure cubical complex obtained from $S$ by removing its boundary. \\5621\\5622\\5623\\5624\index{ChainInclusionOfPureCubicalPair}::::::::::::::::::::::::\\5625\texttt{ChainInclusionOfPureCubicalPair(S,T)}\\562656275628Inputs a pure cubical complex $T$ and subcomplex $S$. It returns the chain inclusion $C(S) \rightarrow C(T)$ of cellular chain complexes. \\5629\\5630\\5631\\5632\index{ChainMapOfPureCubicalPairs}::::::::::::::::::::::::\\5633\texttt{ChainMapOfPureCubicalPairs(M,S,N,T)}\\563456355636Inputs a pure cubical complex $N$ and subcomplexes $M$, $T$ and $S$ in $T$. It returns the chain map $C(M/S) \rightarrow C(N/T)$ of quotient cellular chain complexes. \\5637\\5638\\5639\\5640\index{ContractPureCubicalComplex}::::::::::::::::::::::::\\5641\texttt{ContractPureCubicalComplex(T)}\\564256435644Inputs a pure cubical complex $T$ of dimension $d$ and removes $d$-dimensional cells from $T$ without changing the homotopy type of $T$. When the function has been applied, no further $d$-cells can be removed from $T$ without changing its homotopy type. This function modifies $T$. \\5645\\5646\\5647\\5648\index{ContractedComplex}::::::::::::::::::::::::\\5649\texttt{ContractedComplex(T)}\\565056515652Inputs a pure cubical complex $T$ and returns a structural copy of the complex obtained from $T$ by applying the function ContractPureCubicalComplex(T). \\5653\\5654\\5655\\5656\index{ZigZagContractedPureCubicalComplex}::::::::::::::::::::::::\\5657\texttt{ZigZagContractedPureCubicalComplex(T)}\\565856595660Inputs a pure cubical complex $T$ and returns a homotopy equivalent pure cubical complex $S$. The aim is for $S$ to involve fewer cells than $T$ and certainly to involve no more cells than $T$. \\5661\\5662\\5663\\5664\index{ContractCubicalComplex}::::::::::::::::::::::::\\5665\texttt{ContractCubicalComplex(T)}\\566656675668Inputs a cubical complex $T$ and removes cells without changing the homotopy type of $T$. It changes $T$. In particular, it adds the components T.vectors and T.rewrite of a discrete5669vector field.56705671At present this function only works for cubical complexes of dimension 2 or 3. \\5672\\5673\\5674\\5675\index{DVFReducedCubicalComplex}::::::::::::::::::::::::\\5676\texttt{DVFReducedCubicalComplex(T)}\\567756785679Inputs a cubical complex $T$ and returns a non-regular cubical complex $R$ by constructing a discrete vector field. The vector field is designed to5680minimize the number of critical cells in $R$ at the cost of allowing cell attaching maps that are not homeomorphisms on5681boundaries.56825683At present this function works only for 2- and 3-dimensional cubical5684complexes.56855686The function ChainComplex(R) can be used to obtain the cellular chain complex5687of $R$. \\5688\\5689\\5690\\5691\index{SkeletonOfCubicalComplex}::::::::::::::::::::::::\\5692\texttt{SkeletonOfCubicalComplex(T,n)}\\569356945695Inputs a cubical complex, or pure cubical complex $T$ and positive integer $n$. It returns the $n$-skeleton of $T$ as a cubical complex. \\5696\\5697\\5698\\5699\index{ContractibleSubomplexOfPureCubicalComplex}::::::::::::::::::::::::\\5700\texttt{ContractibleSubomplexOfPureCubicalComplex(T)}\\570157025703Inputs a pure cubical complex $T$ and returns a maximal contractible pure cubical subcomplex. \\5704\\5705\\5706\\5707\index{AcyclicSubomplexOfPureCubicalComplex}::::::::::::::::::::::::\\5708\texttt{AcyclicSubomplexOfPureCubicalComplex(T)}\\570957105711Inputs a pure cubical complex $T$ and returns a (not necessarily connected) pure cubical subcomplex having5712trivial homology in all degrees greater than $0$. \\5713\\5714\\5715\\5716\index{HomotopyEquivalentMaximalPureCubicalSubcomplex}::::::::::::::::::::::::\\5717\texttt{HomotopyEquivalentMaximalPureCubicalSubcomplex(T,S)}\\571857195720Inputs a pure cubical complex $T$ together with a pure cubical subcomplex $S$. It returns a pure cubical subcomplex $H$ of $T$ which contains $S$ and is maximal with respect to the property that it is homotopy equivalent to $S$. \\5721\\5722\\5723\\5724\index{HomotopyEquivalentMinimalPureCubicalSubcomplex}::::::::::::::::::::::::\\5725\texttt{HomotopyEquivalentMinimalPureCubicalSubcomplex(T,S)}\\572657275728Inputs a pure cubical complex $T$ together with a pure cubical subcomplex $S$. It returns a pure cubical subcomplex $H$ of $T$ which contains $S$ and is minimal with respect to the property that it is homotopy equivalent to $T$. \\5729\\5730\\5731\\5732\index{BoundaryOfPureCubicalComplex}::::::::::::::::::::::::\\5733\texttt{BoundaryOfPureCubicalComplex(T)}\\573457355736Inputs a pure cubical complex $T$ and returns its boundary as a pure cubical complex. The boundary consists of5737all cubes which have one or more facets that lie in just the one cube. \\5738\\5739\\5740\\5741\index{SingularitiesOfPureCubicalComplex}::::::::::::::::::::::::\\5742\texttt{SingularitiesOfPureCubicalComplex(T,radius,tolerance)}\\574357445745Inputs a pure cubical complex $T$ together with a positive integer "radius" and an integer "tolerance" in the5746range 1..100. It returns the pure cubical subcomplex of those cells in the5747boundary where the boundary is not differentiable. (The method for deciding5748differentiability at a point is crude/discrete, prone to errors and depends on5749the radius and tolerance.) \\5750\\5751\\5752\\5753\index{ThickenedPureCubicalComplex}::::::::::::::::::::::::\\5754\texttt{ThickenedPureCubicalComplex(T)}\\575557565757Inputs a pure cubical complex $T$ and returns a pure cubical complex $S$. If a euclidean cube is in $T$ then this cube and all its neighbouring cubes are included in $S$. \\5758\\5759\\5760\\5761\index{CropPureCubicalComplex}::::::::::::::::::::::::\\5762\texttt{CropPureCubicalComplex(T)}\\576357645765Inputs a pure cubical complex $T$ and returns a pure cubical complex $S$ obtained from $T$ by removing any "zero boundary sheets" of the binary array. Thus $S$ and $T$ are isometric as euclidean spaces but there may be fewer zero entries in the5766binary array for $S$. \\5767\\5768\\5769\\5770\index{BoundingPureCubicalComplex}::::::::::::::::::::::::\\5771\texttt{BoundingPureCubicalComplex(T)}\\577257735774Inputs a pure cubical complex $T$ and returns a contractible pure cubical complex $S$ containing $T$. \\5775\\5776\\5777\\5778\index{MorseFiltration}::::::::::::::::::::::::\\5779\texttt{MorseFiltration(M,i,t,bool)}\\5780\texttt{MorseFiltration(M,i,t)}\\578157825783Inputs a pure cubical complex $M$ of dimension $d$, an integer $i$ between $1$ and $d$, a positive integer $t$ and a boolean value True or False. The function returns a list $[M_1, M_2, ..., M_t]$ of pure cubical complexes with $M_k$ a subcomplex of $M_{k+1}$. The list is constructed by setting all slices of $M$ perpendicular to the $i$-th axis equal to zero if they meet the $i$th axis at a sufficiently high coordinate (if bool=True) or sufficiently low5784coordinate (if bool=False).57855786If the variable bool is not specified then it is assumed to have the value5787True. \\5788\\5789\\5790\\5791\index{ComplementOfPureCubicalComplex}::::::::::::::::::::::::\\5792\texttt{ComplementOfPureCubicalComplex(T)}\\579357945795Inputs a pure cubical complex $T$ and returns a pure cubical complex $S$. A euclidean cube is in $S$ precisely when the cube is not in $T$. \\5796\\5797\\5798\\5799\index{PureCubicalComplexToTextFile}::::::::::::::::::::::::\\5800\texttt{PureCubicalComplexToTextFile(file,M)}\\580158025803Inputs a pure cubical complex $M$ and a string containing the address of a file. A representation of this5804complex is written to the file in a format that can be read by the CAPD5805(Computer Assisted Proofs in Dynamics) software developed by Marian Mrozek and5806others. \\5807\\5808\\5809\\5810\index{ThickeningFiltration}::::::::::::::::::::::::\\5811\texttt{ThickeningFiltration(M,n)}\\5812\texttt{ThickeningFiltration(M,n,k)}\\581358145815Inputs a pure cubical complex $M$ and a positive integer $n$. It returns a filtered pure cubical complex constructed frim $n$ thickenings of $M$. If a positive integer $k$ is supplied as an optional third argument, then each step of the filtration is5816obtained from a $k$-fold thickening. \\5817\\5818\\5819\\5820\index{Dendrogram}::::::::::::::::::::::::\\5821\texttt{Dendrogram(M)}\\582258235824Inputs a filtered pure cubical complex $M$ and returns data that specifies the dendrogram (or phylogenetic tree)5825describing how path components are born and then merge during the filtration. \\5826\\5827\\5828\\5829\index{DendrogramDisplay}::::::::::::::::::::::::\\5830\texttt{DendrogramDisplay(M)}\\583158325833Inputs a filtered pure cubical complex $M$, or alternatively inputs the out from the command Dendrogram(M), and then5834uses GraphViz software to display the path component dendrogram of $M$. \\5835\\5836\\5837\\5838\index{DendrogramToPersistenceMat}::::::::::::::::::::::::\\5839\texttt{DendrogramToPersistenceMat(D)}\\584058415842Inputs the output of the function Dendrogram(M) and returns the corresponding5843degree 0 Betti bar code. \\5844\\5845\\5846\\5847\index{ReadImageAsFilteredPureCubicalComplex}::::::::::::::::::::::::\\5848\texttt{ReadImageAsFilteredPureCubicalComplex(file,n)}\\584958505851Inputs a string containing the path to an image file, together with a positive5852integer n. It returns a filtered pure cubical complex of filtration length $n$. \\5853\\5854\\5855\\5856\index{ComplementOfFilteredPureCubicalComplex}::::::::::::::::::::::::\\5857\texttt{ComplementOfFilteredPureCubicalComplex(M)}\\585858595860Inputs a filtered pure cubical complex $M$ and returns the complement as a filtered pure cubical complex. \\5861\\5862\\5863\\5864\index{PersistentHomologyOfFilteredPureCubicalComplex}::::::::::::::::::::::::\\5865\texttt{PersistentHomologyOfFilteredPureCubicalComplex(M,n)}\\586658675868Inputs a filtered pure cubical complex $M$ and a non-negative integer $n$. It returns the degree $n$ persistent homology of $ M$ with rational coefficients. \\5869\\5870\\5871}587258735874\chapter{\textcolor{Chapter }{Regular CW-Complexes}}\logpage{[ 30, 0, 0 ]}5875\hyperdef{L}{X855CD0808058727D}{}5876{5877\begin{center}5878\begin{tabular}{|l|} \index{SimplicialComplexToRegularCWComplex} \texttt{SimplicialComplexToRegularCWComplex(K)}58795880Inputs a simplicial complex $K$ and returns the corresponding regular CW-complex. \\5881\index{CubicalComplexToRegularCWComplex} \texttt{CubicalComplexToRegularCWComplex(K)} \texttt{CubicalComplexToRegularCWComplex(K,n)}58825883Inputs a pure cubical complex (or cubical complex) $K$ and returns the corresponding regular CW-complex. If a positive integer $n$ is entered as an optional second argument, then just the $n$-skeleton of $K$ is returned. \\5884\index{CriticalCellsOfRegularCWComplex} \texttt{CriticalCellsOfRegularCWComplex(Y)} \texttt{CriticalCellsOfRegularCWComplex(Y,n)}58855886Inputs a regular CW-complex $Y$ and returns the critical cells of $Y$ with respect to some discrete vector field. If $Y$ does not initially have a discrete vector field then one is constructed.58875888If a positive integer $n$ is given as a second optional input, then just the critical cells in5889dimensions up to and including $n$ are returned.58905891The function $CriticalCellsOfRegularCWComplex(Y)$ works by homotopy reducing cells starting at the top dimension. The function $CriticalCellsOfRegularCWComplex(Y,n)$ works by homotopy coreducing cells starting at dimension 0. The two methods5892may well return different numbers of cells. \\5893\index{ChainComplex} \texttt{ChainComplex(Y)}58945895Inputs a regular CW-complex $Y$ and returns the cellular chain complex of a CW-complex W whose cells5896correspond to the critical cells of $Y$ with respect to some discrete vector field. If $Y$ does not initially have a discrete vector field then one is constructed. \\5897\index{ChainComplexOfRegularCWComplex} \texttt{ChainComplexOfRegularCWComplex(Y)}58985899Inputs a regular CW-complex $Y$ and returns the cellular chain complex of $Y$. \\5900\index{FundamentalGroup} \index{FundamentalGroupOfRegularCWComplex} \texttt{FundamentalGroup(Y)} \texttt{FundamentalGroup(Y,n)}59015902Inputs a regular CW-complex $Y$ and, optionally, the number of some 0-cell. It returns the fundamental group5903of $Y$ based at the 0-cell $n$. The group is returned as a finitely presented group. If $n$ is not specified then it is set $n=1$. The algorithm requires a discrete vector field on $Y$. If $Y$ does not initially have a discrete vector field then one is constructed. \\5904\end{tabular}\\[2mm]5905\end{center}59065907}590859095910\chapter{\textcolor{Chapter }{ Knots and Links}}\logpage{[ 31, 0, 0 ]}5911\hyperdef{L}{X82DADC508677F1EE}{}5912{5913\begin{center}5914\begin{tabular}{|l|} \index{PureCubicalKnot} \texttt{PureCubicalKnot(L)} \texttt{PureCubicalKnot(n,i)}59155916Inputs a list $L=[[m1,n1], [m2,n2], ..., [mk,nk]]$ of pairs of integers describing a cubical arc presentation of a link with all5917vertical lines at the front and all horizontal lines at the back. The bottom5918horizontal line extends from the m1-th column to the n1-th column. The second5919to bottom horizontal line extends from the m2-th column to the n2-th column.5920And so on. The link is returned as a 3-dimensional pure cubical complex.59215922Alternatively the function inputs two integers $n$, $i$ and returns the $i$-th prime knot on $n$ crossings. \\5923\index{ViewPureCubicalKnot} \texttt{ViewPureCubicalKnot(L)}59245925Inputs a pure cubical link $L$ and displays it.59265927\\5928\index{KnotSum} \texttt{KnotSum(K,L)}59295930Inputs two pure cubical knots $K$, $L$ and returns their sum as a pure cubical knot. This function is not defined for5931links with more than one component.59325933\\5934\index{KnotGroup} \texttt{KnotGroup(K)}59355936Inputs a pure cubical link $K$ and returns the fundamental group of its complement. The group is returned as5937a finitely presented group.59385939\\5940\index{AlexanderMatrix} \texttt{AlexanderMatrix(G)}59415942Inputs a finitely presented group $G$ whose abelianization is infinite cyclic. It returns the Alexander matrix of5943the presentation.59445945\\5946\index{AlexanderPolynomial} \texttt{AlexanderPolynomial(K)} \texttt{AlexanderPolynomial(G)}59475948Inputs either a pure cubical knot $K$ or a finitely presented group $G$ whose abelianization is infinite cyclic. The Alexander Polynomial is returned.59495950\\5951\index{ProjectionOfPureCubicalComplex} \texttt{ProjectionOfPureCubicalComplex(K)}59525953Inputs an \$n\$-dimensional pure cubical complex $K$ and returns an n-1-dimensional pure cubical complex K'. The returned complex5954is obtained by projecting Euclidean n-space onto Euclidean n-1-space.59555956\\5957\index{ReadPDBfileAsPureCubicalComplex} \texttt{ReadPDBfileAsPureCubicalComplex(file)} \texttt{ReadPDBfileAsPureCubicalComplex(file,m ,c)}59585959Inputs a protein database file describing a protein, and optionally inputs a5960positive integer m and character string c. The default values for the optional5961inputs are m=5 and c="A". It loads the chain of amino acids labelled by c in5962the file as a 3-dimensional pure cubical complex of the homotopy type of a5963circle.59645965It might happen that the function fails to construct a pure cubical complex of5966the homotopy type of a circle. In this case retry with a larger integer m. \\5967\end{tabular}\\[2mm]5968\end{center}59695970}597159725973\chapter{\textcolor{Chapter }{ Knots and Quandles }}\logpage{[ 32, 0, 0 ]}5974\hyperdef{L}{X83856E7178651841}{}5975{5976\begin{center}5977\begin{tabular}{|l|} Knots \\5978\index{PresentationKnotQuandle} \texttt{PresentationKnotQuandle(gaussCode) }59795980Inputs a Gauss Code of a knot (with the orientations; see $GaussCodeOfPureCubicalKnot$ in HAP package) and outputs the generators and relators of the knot quandle5981associated (in the form of a record). \\5982\index{PD2GC} \texttt{PD2GC(PD) }59835984Inputs a Planar Diagram of a knot; outputs the Gauss Code associated (with the5985orientations). \\5986\index{PlanarDiagramKnot} \texttt{PlanarDiagramKnot(n,k) }59875988Returns a Planar Diagram for the $k$-th knot with $n$ crossings ($n$UNKNOWNEntity(le)$12$) if it exists; fail otherwise. \\5989\index{GaussCodeKnot} \texttt{GaussCodeKnot(n,k) }59905991Returns a Gauss Code (with orientations) for the $k$-th knot with $n$ crossings ($n$UNKNOWNEntity(le)$12$) if it exists; fail otherwise. \\5992\index{PresentationKnotQuandleKnot} \texttt{PresentationKnotQuandleKnot(n,k) }59935994Returns generators and relators (in the form of a record) for the $k$-th knot with $n$ crossings ($n$UNKNOWNEntity(le)$12$) if it exists; fail otherwise. \\5995\index{NumberOfHomomorphisms} \texttt{NumberOfHomomorphisms(genRelQ,finiteQ) }59965997Inputs generators and relators $genRelQ$ of a knot quandle (in the form of a record, see above) and a finite quandle $finiteQ$; outputs the number of homomorphisms from the former to the latter. \\5998\index{PartitionedNumberOfHomomorphisms} \texttt{PartitionedNumberOfHomomorphisms(genRelQ,finiteQ) }59996000Inputs generators and relators $genRelQ$ of a knot quandle (in the form of a record, see above) and a finite connected6001quandle $finiteQ$; outputs a partition of the number of homomorphisms from the former to the6002latter. \\6003Quandles \\6004\index{ConjugationQuandle} \texttt{ConjugationQuandle(G,n) }60056006Inputs a finite group $G$ and an integer $n$; outputs the associated $n$-fold conjugation quandle. \\6007\index{QuandleAxiomIsSatisfied} \texttt{FirstQuandleAxiomIsSatisfied(M) } \\6008\texttt{SecondQuandleAxiomIsSatisfied(M) } \\6009\texttt{ThirdQuandleAxiomIsSatisfied(M) }60106011Inputs a finite magma $M$; returns true if $M$ satisfy the first/second/third axiom of a quandle, false otherwise. \\6012\index{IsQuandle} \texttt{ IsQuandle(M) }60136014Inputs a finite magma $M$; returns true if $M$ is a quandle, false otherwise. \\6015\index{Quandles} \texttt{Quandles(n) }60166017Returns a list of all quandles of size $n$, $n$UNKNOWNEntity(le)$6$. If $n$UNKNOWNEntity(ge)$7$, it returns fail. \\6018\index{Quandle} \texttt{ Quandle(n,k) }60196020Returns the $k$-th quandle of size $n$ ($n$UNKNOWNEntity(le)$6$) if such a quandle exists, fail otherwise. \\6021\index{IdQuandle} \texttt{IdQuandle(Q) }60226023Inputs a quandle $Q$; and outputs a list of integers [$n$,$k$] such that $Q$ is isomorphic to \texttt{Quandle(n,k)}. If $n$UNKNOWNEntity(ge)$7$, then it returns [$n$,fail] (where $n$ is the size of $Q$). \\6024\index{IsLatin} \texttt{IsLatin(Q) }60256026Inputs a finite quandle $Q$; returns true if $Q$ is latin, false otherwise. \\6027\index{IsConnectedQuandle} \texttt{IsConnectedQuandle(Q) }60286029Inputs a finite quandle $Q$; returns true if $Q$ is connected, false otherwise. \\6030\index{ConnectedQuandles} \texttt{ConnectedQuandles(n) }60316032Returns a list of all connected quandles of size $n$. \\6033\index{ConnectedQuandle} \texttt{ConnectedQuandle(n,k) }60346035Returns the $k$-th quandle of size $n$ if such a quandle exists, fail otherwise. \\6036\index{IdConnectedQuandle} \texttt{IdConnectedQuandle(Q) }60376038Inputs a connected quandle $Q$; and outputs a list of integers [$n$,$k$] such that $Q$ is isomorphic to \texttt{ConnectedQuandle(n,k)}. \\6039\index{IsQuandleEnvelope} \texttt{IsQuandleEnvelope(Q,G,e,stigma) }60406041Inputs a set $Q$, a permutation group $G$, an element $e$ UNKNOWNEntity(isin) $Q$ and an element $stigma $ UNKNOWNEntity(isin) $G$; returns true if this structure describes a quandle envelope, false6042otherwise. \\6043\index{QuandleQuandleEnveloppe} \texttt{ QuandleQuandleEnveloppe(Q,G,e,stigma) }60446045Inputs a set $Q$, a permutation group $G$, an element $e$ UNKNOWNEntity(isin) $Q$ and an element $stigma$ UNKNOWNEntity(isin) $G$. If this structure describes a quandle envelope, the function returns the6046quandle from this quandle envelope; and fail otherwise. Nb: this quandle is a6047connected quandle. \\6048\index{KnotInvariantCedric} \texttt{ KnotInvariantCedric(genRelQ,n,m) }60496050Inputs generators and relators of a knot quandle (in the form of a record, see6051above) and two integers $n$ and $m$; outputs a list [$n$1,$n$2,...,$n$k] where $n$j is a partition of the number of homomorphisms from the considered knot6052quandle to the $j$-th connected quandle of size $n$UNKNOWNEntity(le)$i$UNKNOWNEntity(le)$m$. \\6053\index{RightMultiplicationGroupAsPerm} \texttt{RightMultiplicationGroupAsPerm(Q) }60546055Inputs a connected quandle $Q$; output its right multiplication group whose elements are permutations. \\6056\index{RightMultiplicationGroup} \texttt{RightMultiplicationGroup(Q) }60576058Inputs a connected quandle $Q$; output its right multiplication group whose elements are mappings from $Q$ to $Q$. \\6059\index{AutomorphismGroupQuandleAsPerm} \texttt{AutomorphismGroupQuandleAsPerm(Q) }60606061Inputs a connected quandle $Q$; outputs its automorphism group whose elements are permutations. \\6062\index{AutomorphismGroupQuandle} \texttt{AutomorphismGroupQuandle(Q)}60636064Inputs a connected quandle $Q$; outputs its automorphism group whose elements are mappings from $Q$ to $Q$. \\6065\end{tabular}\\[2mm]6066\end{center}60676068}606960706071\chapter{\textcolor{Chapter }{ Finite metric spaces and their filtered complexes }}\logpage{[ 33, 0, 0 ]}6072\hyperdef{L}{X7988ECB7803BA915}{}6073{6074\begin{center}6075\begin{tabular}{|l|} \index{CayleyMetric} \texttt{CayleyMetric(g,h,N) } \texttt{CayleyMetric(g,h) }60766077Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the minimum number of6078transpositions needed to express $g*h^-1$ as a product of transpositions. \\6079\index{HammingMetric} \texttt{HammingMetric(g,h,N) } \texttt{HammingMetric(g,h) }60806081Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the number of integers moved6082by the permutation $g*h^-1$. \\6083\index{KendallMetric} \texttt{KendallMetric(g,h,N) } \texttt{KendallMetric(g,h) }60846085Inputs two permutations $g,h$ and optionally the degree $N$ of a symmetric group containing them. It returns the minimum number of6086adjacent transpositions needed to express $g*h^-1$ as a product of adjacent transpositions. An adjacent transposition has the for $(i,i+1)$. \\6087\index{EuclideanSquaredMetric} \texttt{EuclideanSquaredMetric(v,w) }60886089Inputs two vectors $v,w$ of equal length and returns the sum of the squares of the components of $v-w$. In other words, it returns the square of the Euclidean distance between $v$ and $w$. \\6090\index{EuclideanApproximatedMetric} \texttt{EuclideanApproximatedMetric(v,w) }60916092Inputs two vectors $v,w$ of equal length and returns a rational approximation to the square root of the6093sum of the squares of the components of $v-w$. In other words, it returns an approximation to the Euclidean distance6094between $v$ and $w$. \\6095\index{ManhattanMetric} \texttt{ManhattanMetric(v,w) }60966097Inputs two vectors $v,w$ of equal length and returns the sum of the absolute values of the components6098of $v-w$. This is often referred to as the taxi-cab distance between $v$ and $w$. \\6099\index{VectorsToSymmetricMatrix} \texttt{VectorsToSymmetricMatrix(L) } \texttt{VectorsToSymmetricMatrix(L,D) }61006101Inputs a list $L$ of vectors and optionally a metric $D$. The default is $D=ManhattanMetric$. It returns the symmetric matrix whose i-j-entry is $S[i][j]=D(L[i],L[j])$. \\6102\index{SymmetricMatDisplay} \texttt{SymmetricMatDisplay(S) } \texttt{SymmetricMatDisplay(L,V) }61036104Inputs an $n \times n$ symmetric matrix $S$ of non-negative integers and an integer $t$ in $[0 .. 100]$. Optionally it inputs a list $V=[V_1, ... , V_k]$ of disjoint subsets of $[1 .. n]$. It displays the graph with vertex set $[1 .. n]$ and with an edge between $i$ and $j$ if $S[i][j] < t$. If the optional list $V$ is input then the vertices in $V_i$ will be given a common colour distinct from other vertices. \\6105\index{SymmetricMatrixToFilteredGraph} \texttt{SymmetricMatrixToFilteredGraph(S,t,m) }61066107Inputs an integer symmetric matrix $S$, a positive integer $t$ and a positive integer $m$. The function returns a filtered graph of filtration length $t$. The $k$-th term of the filtration is a graph with one vertex for each row of $S$. There is an edge in this graph between the $i$-th and $j$-th vertices if the entry $S[i][j]$ is less than or equal to $k*m/t$. \\6108\index{PermGroupToFilteredGraph} \texttt{PermGroupToFilteredGraph(S,D) }61096110Inputs a permutation group $G$ and a metric $D$ defined on permutations. The function returns a filtered graph. The $k$-th term of the filtration is a graph with one vertex for each element of the6111group $G$. There is an edge in this graph between vertices $g$ and $h$ if $D(g,h)$ is less than some integer threshold $t_k$. The thresholds $t_1 < t_2 < ... < t_N$ are chosen to form as long a sequence as possible subject to each term of the6112filtration being a distinct graph. \\6113\end{tabular}\\[2mm]6114\end{center}61156116}611761186119\chapter{\textcolor{Chapter }{ Commutative diagrams and abstract categories}}\logpage{[ 34, 0, 0 ]}6120\hyperdef{L}{X83AAC8367CC7686F}{}6121{6122\\6123\textsc{COMMUTATIVE DIAGRAMS} \\6124\\6125\\6126\\6127\\6128\index{HomomorphismChainToCommutativeDiagram}::::::::::::::::::::::::\\6129\texttt{HomomorphismChainToCommutativeDiagram(H) }\\613061316132Inputs a list $H=[h_1,h_2,...,h_n]$ of mappings such that the composite $h_1h_2...h_n$ is defined. It returns the list of composable homomorphism as a commutative6133diagram. \\6134\\6135\\6136\\6137\index{NormalSeriesToQuotientDiagram}::::::::::::::::::::::::\\6138\texttt{NormalSeriesToQuotientDiagram(L) }\\6139\texttt{NormalSeriesToQuotientDiagram(L,M)}\\614061416142Inputs an increasing (or decreasing) list $L=[L_1,L_2,...,L_n]$ of normal subgroups of a group $G$ with $G=L_n$. It returns the chain of quotient homomorphisms $G/L_i \rightarrow G/L_{i+1}$ as a commutative diagram.61436144Optionally a subseries $M$ of $L$ can be entered as a second variable. Then the resulting diagram of quotient6145groups has two rows of horizontal arrows and one row of vertical arrows. \\6146\\6147\\6148\\6149\index{NerveOfCommutativeDiagram}::::::::::::::::::::::::\\6150\texttt{NerveOfCommutativeDiagram(D) }\\615161526153Inputs a commutative diagram $D$ and returns the commutative diagram $ND$ consisting of all possible composites of the arrows in $D$. \\6154\\6155\\6156\\6157\index{GroupHomologyOfCommutativeDiagram}::::::::::::::::::::::::\\6158\texttt{GroupHomologyOfCommutativeDiagram(D,n) }\\6159\texttt{GroupHomologyOfCommutativeDiagram(D,n,prime) }\\6160\texttt{GroupHomologyOfCommutativeDiagram(D,n,prime,Resolution{\textunderscore}Algorithm) }\\616161626163Inputs a commutative diagram $D$ of $p$-groups and positive integer $n$. It returns the commutative diagram of vector spaces obtained by applying mod6164p homology.61656166Non-prime power groups can also be handled if a prime $p$ is entered as the third argument. Integral homology can be obtained by setting $p=0$. For $p=0$ the result is a diagram of groups.61676168A particular resolution algorithm, such as ResolutionNilpotentGroup, can be6169entered as a fourth argument. For positive $p$ the default is ResolutionPrimePowerGroup. For $p=0$ the default is ResolutionFiniteGroup. \\6170\\6171\\6172\\6173\index{PersistentHomologyOfCommutativeDiagramOfPGroups}::::::::::::::::::::::::\\6174\texttt{PersistentHomologyOfCommutativeDiagramOfPGroups(D,n) }\\617561766177Inputs a commutative diagram $D$ of finite $p$-groups and a positive integer $n$. It returns a list containing, for each homomorphism in the nerve of $D$, a triple $[k,l,m]$ where $k$ is the dimension of the source of the induced mod $p$ homology map in degree $n$, $l$ is the dimension of the image, and $m$ is the dimension of the cokernel. \\6178\\6179\\6180\textsc{ABSTRACT CATEGORIES} \\6181\\6182\\6183\\6184\\6185\index{CategoricalEnrichment}::::::::::::::::::::::::\\6186\texttt{CategoricalEnrichment(X,Name) }\\618761886189Inputs a structure $X$ such as a group or group homomorphism, together with the name of some existing6190category such as Name:=Category{\textunderscore}of{\textunderscore}Groups or6191Category{\textunderscore}of{\textunderscore}Abelian{\textunderscore}Groups. It6192returns, as appropriate, an object or arrow in the named category. \\6193\\6194\\6195\\6196\index{IdentityArrow}::::::::::::::::::::::::\\6197\texttt{IdentityArrow(X) }\\619861996200Inputs an object $X$ in some category, and returns the identity arrow on the object $X$. \\6201\\6202\\6203\\6204\index{InitialArrow}::::::::::::::::::::::::\\6205\texttt{InitialArrow(X) }\\620662076208Inputs an object $X$ in some category, and returns the arrow from the initial object in the6209category to $X$. \\6210\\6211\\6212\\6213\index{TerminalArrow}::::::::::::::::::::::::\\6214\texttt{TerminalArrow(X) }\\621562166217Inputs an object $X$ in some category, and returns the arrow from $X$ to the terminal object in the category. \\6218\\6219\\6220\\6221\index{HasInitialObject}::::::::::::::::::::::::\\6222\texttt{HasInitialObject(Name) }\\622362246225Inputs the name of a category and returns true or false depending on whether6226the category has an initial object. \\6227\\6228\\6229\\6230\index{HasTerminalObject}::::::::::::::::::::::::\\6231\texttt{HasTerminalObject(Name) }\\623262336234Inputs the name of a category and returns true or false depending on whether6235the category has a terminal object. \\6236\\6237\\6238\\6239\index{Source}::::::::::::::::::::::::\\6240\texttt{Source(f) }\\624162426243Inputs an arrow $f$ in some category, and returns its source. \\6244\\6245\\6246\\6247\index{Target}::::::::::::::::::::::::\\6248\texttt{Target(f) }\\624962506251Inputs an arrow $f$ in some category, and returns its target. \\6252\\6253\\6254\\6255\index{CategoryName}::::::::::::::::::::::::\\6256\texttt{CategoryName(X) }\\625762586259Inputs an object or arrow $X$ in some category, and returns the name of the category. \\6260\\6261\\6262\\6263\texttt{"*", "=", "+", "-" }\\626462656266Composition of suitable arrows $f,g$ is given by $f*g$ when the source of $f$ equals the target of $g$. (Warning: this differes to the standard GAP convention.)62676268Equality is tested using $f=g$.62696270In an additive category the sum and difference of suitable arrows is given by $f+g$ and $f-g$. \\6271\\6272\\6273\\6274\index{Object}::::::::::::::::::::::::\\6275\texttt{Object(X) }\\627662776278Inputs an object $X$ in some category, and returns the GAP structure $Y$ such that $X=CategoricalEnrichment(Y,CategoryName(X))$. \\6279\\6280\\6281\\6282\index{Mapping}::::::::::::::::::::::::\\6283\texttt{Mapping(X) }\\628462856286Inputs an arrow $f$ in some category, and returns the GAP structure $Y$ such that $f=CategoricalEnrichment(Y,CategoryName(X))$. \\6287\\6288\\6289\\6290\index{IsCategoryObject}::::::::::::::::::::::::\\6291\texttt{IsCategoryObject(X) }\\629262936294Inputs $X$ and returns true if $X$ is an object in some category. \\6295\\6296\\6297\\6298\index{IsCategoryArrow}::::::::::::::::::::::::\\6299\texttt{IsCategoryArrow(X) }\\630063016302Inputs $X$ and returns true if $X$ is an arrow in some category. \\6303\\6304\\6305}630663076308\chapter{\textcolor{Chapter }{ Arrays and Pseudo lists}}\logpage{[ 35, 0, 0 ]}6309\hyperdef{L}{X7B71D3EA7B30ADAB}{}6310{6311\\6312\\6313\\6314\index{Array}::::::::::::::::::::::::\\6315\texttt{Array(A,f)}\\631663176318Inputs an array $A$ and a function $f$. It returns the the array obtained by applying $f$ to each entry of $A$ (and leaves $A$ unchanged). \\6319\\6320\\6321\\6322\index{PermuteArray}::::::::::::::::::::::::\\6323\texttt{PermuteArray(A,f)}\\632463256326Inputs an array $A$ of dimension $d$ and a permutation $f$ of degree at most $d$. It returns the array $B$ defined by $B[i1][i2]...[id] = A[f(i1)][f(i2)]...A[f(id)]$ (and leaves $A$ unchanged). \\6327\\6328\\6329\\6330\index{ArrayDimension}::::::::::::::::::::::::\\6331\texttt{ArrayDimension(A)}\\633263336334Inputs an array $A$ and returns its dimension. \\6335\\6336\\6337\\6338\index{ArrayDimensions}::::::::::::::::::::::::\\6339\texttt{ArrayDimensions(A)}\\634063416342Inputs an array $A$ and returns its dimensions. \\6343\\6344\\6345\\6346\index{ArraySum}::::::::::::::::::::::::\\6347\texttt{ArraySum(A)}\\634863496350Inputs an array $A$ and returns the sum of its entries. \\6351\\6352\\6353\\6354\index{ArrayValue}::::::::::::::::::::::::\\6355\texttt{ArrayValue(A,x)}\\635663576358Inputs an array $A$ and a coordinate vector $x$. It returns the value of the entry in $A$ with coordinate $x$. \\6359\\6360\\6361\\6362\index{ArrayValueFunctions}::::::::::::::::::::::::\\6363\texttt{ArrayValueFunctions(d)}\\636463656366Inputs a positive integer $d$ and returns an efficient version of the function ArrayValue for arrays of6367dimension $d$. \\6368\\6369\\6370\\6371\index{ArrayAssign}::::::::::::::::::::::::\\6372\texttt{ArrayAssign(A,x,n)}\\637363746375Inputs an array $A$ and a coordinate vector $x$ and an integer $n$. It sets the entry of $A$ with coordinate $x$ equal to $n$. \\6376\\6377\\6378\\6379\index{ArrayAssignFunctions}::::::::::::::::::::::::\\6380\texttt{ArrayAssignFunctions(d)}\\638163826383Inputs a positive integer $d$ and returns an efficient version of the function ArrayAssign for arrays of6384dimension $d$. \\6385\\6386\\6387\\6388\index{ArrayIterate}::::::::::::::::::::::::\\6389\texttt{ArrayIterate(d)}\\639063916392Inputs a positive integer $d$ and returns a function ArrayIt(Dimensions,f). This function inputs a list6393Dimensions of $d$ positive integers and also a function $f(x)$. It applies the function $f(x)$ to each integer list $x$ of length $d$ with entries $x[i]$ in the range [1..Dimension[i]]. \\6394\\6395\\6396\\6397\index{BinaryArrayToTextFile}::::::::::::::::::::::::\\6398\texttt{BinaryArrayToTextFile(file,A)}\\639964006401Inputs a string containing the address of a file, and an array $A$ of 0s and 1s. The array represents a pure cubical complex. A representation of6402this complex is written to the file in a format that can be read by the CAPD6403(Computer Assisted Proofs in Dynamics) software developed by Marian Mrozek and6404others.64056406The second input $A$ can also be a pure cubical complex. \\6407\\6408\\6409\\6410\index{FrameArray}::::::::::::::::::::::::\\6411\texttt{FrameArray(A)}\\641264136414Inputs an array $A$ and returns the array obtained by appending a 0 to the beginning and end of6415each "row" of the array. \\6416\\6417\\6418\\6419\index{UnframeArray}::::::::::::::::::::::::\\6420\texttt{UnframeArray(A)}\\642164226423Inputs an array $A$ and returns the array obtained by removing the first and last entry in each6424"row" of the array. \\6425\\6426\\6427\\6428\index{Add}::::::::::::::::::::::::\\6429\texttt{Add(L,x)}\\643064316432Let $L$ be a pseudo list of length $n$, and $x$ an object compatible with the entries in $L$. If $x$ is not in $L$ then this operation converts $L$ into a pseudo list of length n+1 by adding $x$ as the final entry. If $x$ is in $L$ the operation has no effect on $L$. \\6433\\6434\\6435\\6436\index{Append}::::::::::::::::::::::::\\6437\texttt{Append(L,K)}\\643864396440Let $L$ be a pseudo list and $K$ a list whose objects are compatible with those in $L$. This operation applies Add(L,x) for each x in $K$. \\6441\\6442\\6443\\6444\index{ListToPseudoList}::::::::::::::::::::::::\\6445\texttt{ListToPseudoList(L)}\\644664476448Inputs a list $L$ and returns the pseudo list representation of $L$. \\6449\\6450\\6451}645264536454\chapter{\textcolor{Chapter }{ Parallel Computation - Core Functions}}\logpage{[ 36, 0, 0 ]}6455\hyperdef{L}{X85F9DF1985B88C37}{}6456{6457\\6458\\6459\\6460\index{ChildProcess}::::::::::::::::::::::::\\6461\texttt{ChildProcess()}\\6462\texttt{ChildProcess("computer.ac.wales")}\\6463\texttt{ChildProcess(["-m", "100000M", "-T"])}\\6464\texttt{ChildProcess("computer.ac.wales", ["-m", "100000M", "-T"])}\\646564666467This starts a GAP session as a child process and returns a stream to the child6468process. If no argument is given then the child process is created on the6469local machine; otherwise the argument should be: 1) the address of a remote6470computer for which ssh has been configured to require no password from the6471user; (2) or a list of GAP command line options; (3) or the address of a6472computer followed by a list of command line options.64736474(To configure ssh so that the user can login without a password prompt from6475"thishost" to "remotehost" either consult "man ssh" or \\6476\\6477- open a shell on thishost\\6478- cd .ssh\\6479- ls\\6480-{\textgreater} if id{\textunderscore}dsa, id{\textunderscore}rsa etc exists,6481skip the next two steps!\\6482- ssh-keygen -t rsa\\6483- ssh-keygen -t dsa\\6484- scp *.pub user@remotehost:\texttt{\symbol{126}}/\\6485- ssh remotehost -l user\\6486- cat id{\textunderscore}rsa.pub {\textgreater}{\textgreater}6487.ssh/authorized{\textunderscore}keys\\6488- cat id{\textunderscore}dsa.pub {\textgreater}{\textgreater}6489.ssh/authorized{\textunderscore}keys\\6490- rm id{\textunderscore}rsa.pub id{\textunderscore}dsa.pub\\6491- exit\\6492\\6493You should now be able to connect from "thishost" to "remotehost" without a6494password prompt.) \\6495\\6496\\6497\\6498\index{ChildClose}::::::::::::::::::::::::\\6499\texttt{ChildClose(s)}\\650065016502This closes the stream s to a child GAP process. \\6503\\6504\\6505\\6506\index{ChildCommand}::::::::::::::::::::::::\\6507\texttt{ChildCommand("cmd;",s)}\\650865096510This runs a GAP command "cmd;" on the child process accessed by the stream s.6511Here "cmd;" is a string representing the command. \\6512\\6513\\6514\\6515\index{NextAvailableChild}::::::::::::::::::::::::\\6516\texttt{NextAvailableChild(L)}\\651765186519Inputs a list $L$ of child processes and returns a child in $L$ which is ready for computation (as soon as such a child is available). \\6520\\6521\\6522\\6523\index{IsAvailableChild}::::::::::::::::::::::::\\6524\texttt{IsAvailableChild(s)}\\652565266527Inputs a child process $s$ and returns true if s is currently available for computations, and false6528otherwise. \\6529\\6530\\6531\\6532\index{ChildPut}::::::::::::::::::::::::\\6533\texttt{ChildPut(A,"B",s)}\\653465356536This copies a GAP object A on the parent process to an object B on the child6537process s. (The copying relies on the function PrintObj(A); ) \\6538\\6539\\6540\\6541\index{ChildGet}::::::::::::::::::::::::\\6542\texttt{ChildGet("A",s)}\\654365446545This functions copies a GAP object A on the child process s and returns it on6546the parent process. (The copying relies on the function PrintObj(A); ) \\6547\\6548\\6549\\6550\index{HAPPrintTo}::::::::::::::::::::::::\\6551\texttt{HAPPrintTo("file",R)}\\655265536554Inputs a name "file" of a new text file and a HAP object R. It writes the6555object R to "file". Currently this is only implemented for R equal to a6556resolution. \\6557\\6558\\6559\\6560\index{HAPRead}::::::::::::::::::::::::\\6561\texttt{HAPRead("file",R)}\\656265636564Inputs a name "file" containing a HAP object R and returns the object.6565Currently this is only implemented for R equal to a resolution. \\6566\\6567\\6568}656965706571\chapter{\textcolor{Chapter }{ Parallel Computation - Extra Functions}}\logpage{[ 37, 0, 0 ]}6572\hyperdef{L}{X85B21D56816A1B39}{}6573{6574\\6575\\6576\\6577\index{ChildFunction}::::::::::::::::::::::::\\6578\texttt{ChildFunction("function(arg);",s)}\\657965806581This runs the GAP function "function(arg);" on a child process accessed by the6582stream s. The output from "func;" can be accessed via the stream. \\6583\\6584\\6585\\6586\index{ChildRead}::::::::::::::::::::::::\\6587\texttt{ChildRead(s)}\\658865896590This returns, as a string, the output of the last application of $ChildFunction("function(arg);",s)$. \\6591\\6592\\6593\\6594\index{ChildReadEval}::::::::::::::::::::::::\\6595\texttt{ChildReadEval(s)}\\659665976598This returns, as an evaluated string, the output of the last application of $ChildFunction("function(arg);",s)$. \\6599\\6600\\6601\\6602\index{ParallelList}::::::::::::::::::::::::\\6603\texttt{ParallelList(I,fn,L)}\\660466056606Inputs a list $I$, a function $fn$ such that $fn(x)$ is defined for all $x$ in $I$, and a list of children $L$. It uses the children in $L$ to compute $List(I,x->fn(x))$. (Obviously the function $fn$ must be defined on all child processes in $L$.) \\6607\\6608\\6609}661066116612\chapter{\textcolor{Chapter }{ Some functions for accessing basic data}}\logpage{[ 38, 0, 0 ]}6613\hyperdef{L}{X7AE3B902812A10B0}{}6614{6615\\6616\\6617\\6618\index{BoundaryMap}::::::::::::::::::::::::\\6619\texttt{BoundaryMap(C)}\\662066216622Inputs a resolution, chain complex or cochain complex $C$ and returns the function $C!.boundary$. \\6623\\6624\\6625\\6626\index{BoundaryMatrix}::::::::::::::::::::::::\\6627\texttt{BoundaryMatrix(C,n)}\\662866296630Inputs a chain or cochain complex $C$ and integer $n${\textgreater}$0$. It returns the $n$-th boundary map of $C$ as a matrix. \\6631\\6632\\6633\\6634\index{Dimension}::::::::::::::::::::::::\\6635\texttt{Dimension(C) }\\6636\\6637\texttt{Dimension(M) }\\663866396640Inputs a resolution, chain complex or cochain complex $C$ and returns the function $C!.dimension$ .66416642Alternatively, inputs an $FpG$-module $M$ and returns its dimension as a vector space over the field of $p$ elements. \\6643\\6644\\6645\\6646\index{EvaluateProperty}::::::::::::::::::::::::\\6647\texttt{EvaluateProperty(X,"name") }\\664866496650Inputs a component object $X$ (such as a $ZG$-resolution or chain map) and a string "name" (such as "characteristic" or6651"type"). It searches $X.property$ for the pair ["name",value] and returns value. If $X.property$ does not exist, or if ["name",value] does not exist, it returns fail. \\6652\\6653\\6654\\6655\index{GroupOfResolution}::::::::::::::::::::::::\\6656\texttt{GroupOfResolution(R)}\\665766586659Inputs a $ZG$-resolution $R$ and returns the group $G$. \\6660\\6661\\6662\\6663\index{Length}::::::::::::::::::::::::\\6664\texttt{Length(R)}\\666566666667Inputs a resolution $R$ and returns its length (i.e. the number of terms of $R$ that HAP has computed). \\6668\\6669\\6670\\6671\index{Map}::::::::::::::::::::::::\\6672\texttt{Map(f)}\\667366746675Inputs a chain map, or cochain map or equivariant chain map $f$ and returns the mapping function (as opposed to the target or the source of $f$) . \\6676\\6677\\6678\\6679\index{Source}::::::::::::::::::::::::\\6680\texttt{Source(f)}\\668166826683Inputs a chain map, or cochain map, or equivariant chain map, or $FpG$-module homomorphism $f$ and returns it source. \\6684\\6685\\6686\\6687\index{Target}::::::::::::::::::::::::\\6688\texttt{Target(f)}\\668966906691Inputs a chain map, or cochain map, or equivariant chain map, or $FpG$-module homomorphism $f$ and returns its target. \\6692\\6693\\6694}669566966697\chapter{\textcolor{Chapter }{ Miscellaneous}}\logpage{[ 39, 0, 0 ]}6698\hyperdef{L}{X7C5563A37D566DA5}{}6699{6700\\6701\\6702\\6703\index{SL2Z}::::::::::::::::::::::::\\6704\texttt{SL2Z(p) }\\6705\texttt{SL2Z(1/m) }\\670667076708Inputs a prime $p$ or the reciprocal $1/m$ of a square free integer $m$. In the first case the function returns the conjugate $SL(2,Z)^P$ of the special linear group $SL(2,Z)$ by the matrix $P=[[1,0],[0,p]]$. In the second case it returns the group $SL(2,Z[1/m])$. \\6709\\6710\\6711\\6712\index{BigStepLCS}::::::::::::::::::::::::\\6713\texttt{BigStepLCS(G,n) }\\671467156716Inputs a group $G$ and a positive integer $n$. It returns a subseries $G=L_1${\textgreater}$L_2${\textgreater}$ \ldots L_k=1$ of the lower central series of $G$ such that $L_i/L_{i+1}$ has order greater than $n$. \\6717\\6718\\6719\\6720\index{Classify}::::::::::::::::::::::::\\6721\texttt{Classify(L,Inv) }\\672267236724Inputs a list of objects $L$ and a function $Inv$ which computes an invariant of each object. It returns a list of lists which6725classifies the objects of $L$ according to the invariant.. \\6726\\6727\\6728\\6729\index{RefineClassification}::::::::::::::::::::::::\\6730\texttt{RefineClassification(C,Inv) }\\673167326733Inputs a list $C:=Classify(L,OldInv)$ and returns a refined classification according to the invariant $Inv$. \\6734\\6735\\6736\\6737\index{Compose(f,g)}::::::::::::::::::::::::\\6738\texttt{Compose(f,g) }\\673967406741Inputs two $FpG$-module homomorphisms $ f:M \longrightarrow N$ and $g:L \longrightarrow M$ with $Source(f)=Target(g)$ . It returns the composite homomorphism $fg:L \longrightarrow N$ .67426743This also applies to group homomorphisms $f,g$. \\6744\\6745\\6746\\6747\index{HAPcopyright}::::::::::::::::::::::::\\6748\texttt{HAPcopyright() }\\674967506751This function provides details of HAP'S GNU public copyright licence. \\6752\\6753\\6754\\6755\index{IsLieAlgebraHomomorphism}::::::::::::::::::::::::\\6756\texttt{IsLieAlgebraHomomorphism(f) }\\675767586759Inputs an object $f$ and returns true if $f$ is a homomorphism $f:A \longrightarrow B$ of Lie algebras (preserving the Lie bracket). \\6760\\6761\\6762\\6763\index{IsSuperperfect}::::::::::::::::::::::::\\6764\texttt{IsSuperperfect(G) }\\676567666767Inputs a group $G$ and returns "true" if both the first and second integral homology of $G$ is trivial. Otherwise, it returns "false". \\6768\\6769\\6770\\6771\index{MakeHAPManual}::::::::::::::::::::::::\\6772\texttt{MakeHAPManual()}\\677367746775This function creates the manual for HAP from an XML file. \\6776\\6777\\6778\\6779\index{PermToMatrixGroup}::::::::::::::::::::::::\\6780\texttt{PermToMatrixGroup(G,n) }\\678167826783Inputs a permutation group $G$ and its degree $n$. Returns a bijective homomorphism $f:G \longrightarrow M$ where $M$ is a group of permutation matrices. \\6784\\6785\\6786\\6787\index{SolutionsMatDestructive}::::::::::::::::::::::::\\6788\texttt{SolutionsMatDestructive(M,B) }\\678967906791Inputs an $m{\ensuremath{\times}}n$ matrix $M$ and a $k{\ensuremath{\times}}n$ matrix $B$ over a field. It returns a k{\ensuremath{\times}}m matrix $S$ satisfying $SM=B$.67926793The function will leave matrix $M$ unchanged but will probably change matrix $B$.67946795(This is a trivial rewrite of the standard GAP function $SolutionMatDestructive(${\textless}$mat${\textgreater},{\textless}$vec${\textgreater}) .) \\6796\\6797\\6798\\6799\index{LinearHomomorphismsPersistenceMat}::::::::::::::::::::::::\\6800\texttt{LinearHomomorphismsPersistenceMat(L) }\\680168026803Inputs a composable sequence $L$ of vector space homomorphisms. It returns an integer matrix containing the6804dimensions of the images of the various composites. The sequence $L$ is determined up to isomorphism by this matrix. \\6805\\6806\\6807\\6808\index{NormalSeriesToQuotientHomomorphisms}::::::::::::::::::::::::\\6809\texttt{NormalSeriesToQuotientHomomorphisms(L) }\\681068116812Inputs an (increasing or decreasing) chain $L$ of normal subgroups in some group $G$. This $G$ is the largest group in the chain. It returns the sequence of composable group6813homomorphisms $G/L[i] \rightarrow G/L[i+/-1]$. \\6814\\6815\\6816\\6817\index{TestHap}::::::::::::::::::::::::\\6818\texttt{TestHap() }\\681968206821This runs a representative sample of HAP functions and checks to see that they6822produce the correct output. \\6823\\6824\\6825}68266827\def\indexname{Index\logpage{[ "Ind", 0, 0 ]}6828\hyperdef{L}{X83A0356F839C696F}{}6829}68306831\cleardoublepage6832\phantomsection6833\addcontentsline{toc}{chapter}{Index}683468356836\printindex68376838\newpage6839\immediate\write\pagenrlog{["End"], \arabic{page}];}6840\immediate\closeout\pagenrlog6841\end{document}684268436844