% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
\documentclass[a4paper,11pt]{report}
\usepackage{a4wide}
\sloppy
\pagestyle{myheadings}
\usepackage{amssymb}
\usepackage[latin1]{inputenc}
\usepackage{makeidx}
\makeindex
\usepackage{color}
\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}
\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}
\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}
\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}
\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}
\definecolor{Black}{rgb}{0.0,0.0,0.0}
\definecolor{FuncColor}{rgb}{1.0,0.0,0.0}
%% strange name because of pdflatex bug:
\definecolor{Chapter }{rgb}{0.0,0.0,1.0}

\usepackage{fancyvrb}

\usepackage{pslatex}

\usepackage[pdftex=true,
        a4paper=true,bookmarks=false,pdftitle={Written with GAPDoc},
        pdfcreator={LaTeX with hyperref package / GAPDoc},
        colorlinks=true,backref=page,breaklinks=true,linkcolor=RoyalBlue,
        citecolor=RoyalGreen,filecolor=RoyalRed,
        urlcolor=RoyalRed,pagecolor=RoyalBlue]{hyperref}

% write page numbers to a .pnr log file for online help
\newwrite\pagenrlog
\immediate\openout\pagenrlog =\jobname.pnr
\immediate\write\pagenrlog{PAGENRS := [}
\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}}
%% were never documented, give conflicts with some additional packages


\newcommand{\GAP}{\textsf{GAP}}

\begin{document}

\logpage{[ 0, 0, 0 ]}
\begin{titlepage}
\begin{center}{\Huge \textbf{\textsf{Hap Programming} {\textendash} An experimental framework for objectifying the data structures
of Hap\mbox{}}}\\[1cm]
\hypersetup{pdftitle=\textsf{Hap Programming} {\textendash} An experimental framework for objectifying the data structures
of Hap}
\markright{\scriptsize \mbox{}\hfill \textsf{Hap Programming} {\textendash} An experimental framework for objectifying the data structures
of Hap \hfill\mbox{}}
{( development version of 27.10.2013 ) \mbox{}}\\[1cm]
\mbox{}\\[2cm]
{\large \textbf{Marc R{\"o}der  \mbox{}}}\\
\hypersetup{pdfauthor=Marc R{\"o}der  }
\end{center}\vfill

\mbox{}\\
{\mbox{}\\
\small \noindent \textbf{Marc R{\"o}der  } --- Email: \href{mailto://marc.roeder(at)nuigalway.ie} {\texttt{marc.roeder(at)nuigalway.ie}}}\\

\noindent \textbf{Address: }\begin{minipage}[t]{8cm}\noindent
 Marc R{\"o}der, Department of Mathematics, NUI Galway, Irleland \end{minipage}
\end{titlepage}

\newpage\setcounter{page}{2}
{\small 
\section*{Abstract}
\logpage{[ 0, 0, 1 ]}
 This extension does not change the behaviour of Hap and is fully
backwards-compatible. It is not a part of Hap and there is no guarantee that
it will at any point be supported by Hap. Use at your own risk. \mbox{}}\\[1cm]
{\small 
\section*{Copyright}
\logpage{[ 0, 0, 3 ]}
{\copyright} 2007 Marc R{\"o}der. 

 This package is distributed under the terms of the GNU General Public License
version 2 or later (at your convenience). See the file \texttt{LICENSE.txt} or \href{http://www.gnu.org/copyleft/gpl.html} {\texttt{http://www.gnu.org/copyleft/gpl.html}} \mbox{}}\\[1cm]
{\small 
\section*{Acknowledgements}
\logpage{[ 0, 0, 2 ]}
 This work was supported by Marie Curie Grant No. MTKD-CT-2006-042685 \mbox{}}\\[1cm]
\newpage

\def\contentsname{Contents\logpage{[ 0, 0, 4 ]}}

\tableofcontents
\newpage

 
\chapter{\textcolor{Chapter }{Resolutions in Hap}}\label{hapresolution}
\logpage{[ 1, 0, 0 ]}
\hyperdef{L}{X7C6DD73E7BB931AB}{}
{
 This document is only concerned with the representation of resolutions in Hap.
Note that it is not a part of Hap. The framework provided here is just an
extension of Hap data types used in HAPcryst and HAPprime. 

 From now on, let $G$ be a group and $\dots \to M_n\to M_{n-1}\to\dots\to M_1\to M_0\to Z$ be a resolution with free $ZG$ modules $M_i$. 

 The elements of the modules $M_i$ can be represented in different ways. This is what makes different
representations for resolutions desirable. First, we will look at the standard
representation (\texttt{HapResolutionRep}) as it is defined in Hap. After that, we will present another representation
for infinite groups. Note that all non-standard representations must be
sub-representations of the standard representation to ensure compatibility
with Hap. 
\section{\textcolor{Chapter }{The Standard Representation \texttt{HapResolutionRep}}}\label{hapresolutionrep}
\logpage{[ 1, 1, 0 ]}
\hyperdef{L}{X804F611B7E23BDB1}{}
{
 For every $M_i$ we fix a basis and number its elements. Furthermore, it is assumed that we
have a (partial) enumeration of the group of a resolution. In practice this is
done by generating a lookup table on the fly. 

 In standard representation, the elements of the modules $M_k$ are represented by lists -"words"- of pairs of integers. A letter \texttt{[i,g]} of such a word consists of the number of a basis element \texttt{i} or \texttt{-i} for its additive inverse and a number $g$ representing a group element. 

 A \texttt{HapResolution} in \texttt{HapResolutionRep} representation is a component object with the components 
\begin{itemize}
\item \texttt{group}, a group of arbitrary type.
\item \texttt{elts}, a (partial) list of (possibly duplicate) elements in G. This list provides
the "enumeration" of the group. Note that there are functions in Hap which
assume that \texttt{elts[1]} is the identity element of G. 
\item \texttt{appendToElts(g)} a function that appends the group element \texttt{g} to \texttt{.elts}. This is not documented in Hap 1.8.6 but seems to be required for infinite
groups. This requirement might vanish in some later version of Hap [G. Ellis,
private communication]. 
\item \texttt{dimension(k)}, a function which returns the ZG-rank of the Module $M_k$
\item \texttt{boundary(k,j)}, a function which returns the image in $M_{k-1}$ of the $j$th free generator of $M_k$. Note that negative $j$ are valid as input as well. In this case the additive inverse of the boundary
of the $j$th generator is returned
\item \texttt{homotopy(k,[i,g])} a function which returns the image in $M_{k+1}$, under a contracting homotopy $M_k \to M_{k+1}$, of the element \texttt{[[i,g]]} in $M_k$. The value of this might be \texttt{fail}. However, currently (version 1.8.4) some Hap functions assume that \texttt{homotopy} is a function without testing.
\item \texttt{properties}, a list of pairs \texttt{["name","value"]} "name" is a string and value is anything (boolean, number, string...). Every \texttt{HapResolution} (regardless of representation) has to have \texttt{["type","resolution"]}, \texttt{["length",length]} where \texttt{length} is the length of the resolution and \texttt{["characteristic",char]}. Currently (Hap 1.8.6), \texttt{length} must not be \texttt{infinity}. The values of these properties can be tested using the Hap function \texttt{EvaluateProperty(resolution,propertyname)}.
\end{itemize}
 Note that making \texttt{HapResolution}s immutable will make the \texttt{.elts} component immutable. As this lookup table might change during calculations, we
do not recommend using immutable resolutions (in any representation). }

 
\section{\textcolor{Chapter }{The \texttt{HapLargeGroupResolutionRep} Representation}}\label{largegrouprep}
\logpage{[ 1, 2, 0 ]}
\hyperdef{L}{X8024014D8488FE30}{}
{
 In this sub-representation of the standard representation, the module elements
in this resolution are lists of groupring elements. So the lookup table \texttt{.elts} is not used as long as no conversion to standard representation takes place.
In addition to the components of a \texttt{HapResolution}, a resolution in large group representation has the following components: 
\begin{itemize}
\item \texttt{boundary2(resolution,term,gen)}, a function that returns the boundary of the \mbox{\texttt{\slshape gen}}th generator of the \mbox{\texttt{\slshape term}}th module.
\item \texttt{groupring} the group ring of the resolution \mbox{\texttt{\slshape resolution}}.
\item \texttt{dimension2(resolution,term)} a function that returns the dimension of the \mbox{\texttt{\slshape term}}th module of the resolution \mbox{\texttt{\slshape resolution}}.
\end{itemize}
 The effort of having two versions of \texttt{boundary} and \texttt{dimension} is necessary to keep the structure compatible with the usual Hap resolution. }

 }

  
\chapter{\textcolor{Chapter }{Accessing and Manipulating Resolutions}}\logpage{[ 2, 0, 0 ]}
\hyperdef{L}{X86374CEA7CDC6946}{}
{
 
\section{\textcolor{Chapter }{Representation-Independent Access Methods}}\logpage{[ 2, 1, 0 ]}
\hyperdef{L}{X7A7225067E7895A9}{}
{
 All methods listed below take a \texttt{HapResolution} in any representation. If the other arguments are compatible with the
representation of the resolution, the returned value will be in the form
defined by this representation. If the other arguments are in a different
representation, \textsf{GAP}s method selection is used via \texttt{TryNextMethod()} to find an applicable method (a suitable representation). 

 The idea behind this is that the results of computations have the same form as
the input. And as all representations are sub-representations of the \texttt{HapResolutionRep} representation, input which is compatible with the \texttt{HapResolutionRep} representation is always valid. 

 Every new representation must support the functions of this section. 

\subsection{\textcolor{Chapter }{StrongestValidRepresentationForLetter}}
\logpage{[ 2, 1, 1 ]}\nobreak
\hyperdef{L}{X7CBC6D4C783383BE}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StrongestValidRepresentationForLetter({\slshape resolution, term, letter})\index{StrongestValidRepresentationForLetter@\texttt{StrongestValidRepresentationForLetter}}
\label{StrongestValidRepresentationForLetter}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
filter



 Finds the sub-representation of \texttt{HapResolutionRep} for which \mbox{\texttt{\slshape letter}} is a valid letter of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. Note that \mbox{\texttt{\slshape resolution}} automatically is in some sub-representation of \texttt{HapResolutionRep}.This is mainly meant for debugging. }

 

\subsection{\textcolor{Chapter }{StrongestValidRepresentationForWord}}
\logpage{[ 2, 1, 2 ]}\nobreak
\hyperdef{L}{X7C10841285614D04}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{StrongestValidRepresentationForWord({\slshape resolution, term, word})\index{StrongestValidRepresentationForWord@\texttt{StrongestValidRepresentationForWord}}
\label{StrongestValidRepresentationForWord}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
filter



 Finds the sub-representation of \texttt{HapResolutionRep} for which \mbox{\texttt{\slshape word}} is a valid word of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. Note that \mbox{\texttt{\slshape resolution}} automatically is in some sub-representation of \texttt{HapResolutionRep}. This is mainly meant for debugging. }

 

\subsection{\textcolor{Chapter }{PositionInGroupOfResolution}}
\logpage{[ 2, 1, 3 ]}\nobreak
\hyperdef{L}{X780AD2DB7F5D4935}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PositionInGroupOfResolution({\slshape resolution, g})\index{PositionInGroupOfResolution@\texttt{PositionInGroupOfResolution}}
\label{PositionInGroupOfResolution}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PositionInGroupOfResolutionNC({\slshape resolution, g})\index{PositionInGroupOfResolutionNC@\texttt{PositionInGroupOfResolutionNC}}
\label{PositionInGroupOfResolutionNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
positive integer



 This returns the position of the group element \mbox{\texttt{\slshape g}} in the enumeration of the group of \mbox{\texttt{\slshape resolution}}. The NC version does not check if \mbox{\texttt{\slshape g}} really is an element of the group of \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{IsValidGroupInt}}
\logpage{[ 2, 1, 4 ]}\nobreak
\hyperdef{L}{X7A58EC7B8130D6E2}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsValidGroupInt({\slshape resolution, n})\index{IsValidGroupInt@\texttt{IsValidGroupInt}}
\label{IsValidGroupInt}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Returns true if the \mbox{\texttt{\slshape n}}th element of the group of \mbox{\texttt{\slshape resolution}} is known. }

 

\subsection{\textcolor{Chapter }{GroupElementFromPosition}}
\logpage{[ 2, 1, 5 ]}\nobreak
\hyperdef{L}{X822604B67B2A9133}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GroupElementFromPosition({\slshape resolution, n})\index{GroupElementFromPosition@\texttt{GroupElementFromPosition}}
\label{GroupElementFromPosition}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
group element or \texttt{fail}



 Returns \mbox{\texttt{\slshape n}}th element of the group of \mbox{\texttt{\slshape resolution}}. If the \mbox{\texttt{\slshape n}}th element is not known, \texttt{fail} is returned. }

 

\subsection{\textcolor{Chapter }{MultiplyGroupElts}}
\logpage{[ 2, 1, 6 ]}\nobreak
\hyperdef{L}{X7D3673E8840FA0B6}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyGroupElts({\slshape resolution, x, y})\index{MultiplyGroupElts@\texttt{MultiplyGroupElts}}
\label{MultiplyGroupElts}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
positive integer or group element, depending on the type of \mbox{\texttt{\slshape x}} and \mbox{\texttt{\slshape y}}



 If \texttt{x} and \texttt{y} are given in standard representation (i.e. as integers), this returns the
position of the product of the group elements represented by the positive
integers \mbox{\texttt{\slshape x}} and \mbox{\texttt{\slshape x}}. 

 If \texttt{x} and \texttt{y} are given in any other representation, the returned group element will also be
represented in this way. }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGLetterWithGroupElt}}
\logpage{[ 2, 1, 7 ]}\nobreak
\hyperdef{L}{X8540F3B37BAC695F}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGLetterWithGroupElt({\slshape resolution, letter, g})\index{MultiplyFreeZGLetterWithGroupElt@\texttt{MultiplyFreeZGLetterWithGroupElt}}
\label{MultiplyFreeZGLetterWithGroupElt}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
A letter



 Multiplies the letter \mbox{\texttt{\slshape letter}} with the group element \mbox{\texttt{\slshape g}} and returns the result. If \mbox{\texttt{\slshape resolution}} is in standard representation, \mbox{\texttt{\slshape g}} has to be an integer and \mbox{\texttt{\slshape letter}} has to be a pair of integer. If \mbox{\texttt{\slshape resolution}} is in any other representation, \mbox{\texttt{\slshape letter}} and \mbox{\texttt{\slshape g}} can be in a form compatible with that representation or in the standard form
(in the latter case, the returned value will also have standard form). }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGWordWithGroupElt}}
\logpage{[ 2, 1, 8 ]}\nobreak
\hyperdef{L}{X826835B185CA4DAF}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGWordWithGroupElt({\slshape resolution, word, g})\index{MultiplyFreeZGWordWithGroupElt@\texttt{MultiplyFreeZGWordWithGroupElt}}
\label{MultiplyFreeZGWordWithGroupElt}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
A word



 Multiplies the word \mbox{\texttt{\slshape word}} with the group element \mbox{\texttt{\slshape g}} and returns the result. If \mbox{\texttt{\slshape resolution}} is in standard representation, \mbox{\texttt{\slshape g}} has to be an integer and \mbox{\texttt{\slshape word}} has to be a list of pairs of integers. If \mbox{\texttt{\slshape resolution}} is in any other representation, \mbox{\texttt{\slshape word}} and \mbox{\texttt{\slshape g}} can be in a form compatible with that representation or in the standard form
(in the latter case, the returned value will also have standard form). }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGLetter}}
\logpage{[ 2, 1, 9 ]}\nobreak
\hyperdef{L}{X7D8B54D7828D7C5C}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGLetter({\slshape resolution, term, letter})\index{BoundaryOfFreeZGLetter@\texttt{BoundaryOfFreeZGLetter}}
\label{BoundaryOfFreeZGLetter}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word (in the same representation as \mbox{\texttt{\slshape letter}})



 Calculates the boundary of the letter (word of length 1) \mbox{\texttt{\slshape letter}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. 

 The returned value is a word of the \mbox{\texttt{\slshape term}}-1st module and comes in the same representation as \mbox{\texttt{\slshape letter}}. }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGWord}}
\logpage{[ 2, 1, 10 ]}\nobreak
\hyperdef{L}{X81A6037F82C3C31E}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGWord({\slshape resolution, term, word})\index{BoundaryOfFreeZGWord@\texttt{BoundaryOfFreeZGWord}}
\label{BoundaryOfFreeZGWord}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word (in the same representation as \mbox{\texttt{\slshape letter}})



 Calculates the boundary of the word \mbox{\texttt{\slshape word}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. 

 The returned value is a word of the \mbox{\texttt{\slshape term}}-1st module and comes in the same representation as \mbox{\texttt{\slshape word}}. }

 }

 
\section{\textcolor{Chapter }{Converting Between Representations}}\logpage{[ 2, 2, 0 ]}
\hyperdef{L}{X7B94A2ED857C62D5}{}
{
 Four methods are provided to convert letters and words from standard
representation to any other representation and back again. 

\subsection{\textcolor{Chapter }{ConvertStandardLetter}}
\logpage{[ 2, 2, 1 ]}\nobreak
\hyperdef{L}{X7EB515317948BE8E}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertStandardLetter({\slshape resolution, term, letter})\index{ConvertStandardLetter@\texttt{ConvertStandardLetter}}
\label{ConvertStandardLetter}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertStandardLetterNC({\slshape resolution, term, letter})\index{ConvertStandardLetterNC@\texttt{ConvertStandardLetterNC}}
\label{ConvertStandardLetterNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
letter in the representation of \mbox{\texttt{\slshape resolution}}



 Converts the letter \mbox{\texttt{\slshape letter}} in standard representation to the representation of \mbox{\texttt{\slshape resolution}}. The NC version does not check whether \mbox{\texttt{\slshape letter}} really is a letter in standard representation. }

 

\subsection{\textcolor{Chapter }{ConvertStandardWord}}
\logpage{[ 2, 2, 2 ]}\nobreak
\hyperdef{L}{X7A1CB5DF7A459D76}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertStandardWord({\slshape resolution, term, word})\index{ConvertStandardWord@\texttt{ConvertStandardWord}}
\label{ConvertStandardWord}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertStandardWordNC({\slshape resolution, term, word})\index{ConvertStandardWordNC@\texttt{ConvertStandardWordNC}}
\label{ConvertStandardWordNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
word in the representation of \mbox{\texttt{\slshape resolution}}



 Converts the word \mbox{\texttt{\slshape word}} in standard representation to the representation of \mbox{\texttt{\slshape resolution}}. The NC version does not check whether \mbox{\texttt{\slshape word}} is a valid word in standard representation. }

 

\subsection{\textcolor{Chapter }{ConvertLetterToStandardRep}}
\logpage{[ 2, 2, 3 ]}\nobreak
\hyperdef{L}{X83153E2682184860}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertLetterToStandardRep({\slshape resolution, term, letter})\index{ConvertLetterToStandardRep@\texttt{ConvertLetterToStandardRep}}
\label{ConvertLetterToStandardRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertLetterToStandardRepNC({\slshape resolution, term, letter})\index{ConvertLetterToStandardRepNC@\texttt{ConvertLetterToStandardRepNC}}
\label{ConvertLetterToStandardRepNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
letter in standard representation



 Converts the letter \mbox{\texttt{\slshape letter}} in the representation of \mbox{\texttt{\slshape resolution}} to the standard representation. The NC version does not check whether \mbox{\texttt{\slshape letter}} is a valid letter of \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{ConvertWordToStandardRep}}
\logpage{[ 2, 2, 4 ]}\nobreak
\hyperdef{L}{X848203218271A166}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertWordToStandardRep({\slshape resolution, term, word})\index{ConvertWordToStandardRep@\texttt{ConvertWordToStandardRep}}
\label{ConvertWordToStandardRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ConvertWordToStandardRepNC({\slshape resolution, term, word})\index{ConvertWordToStandardRepNC@\texttt{ConvertWordToStandardRepNC}}
\label{ConvertWordToStandardRepNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
word in standard representation



 Converts the word \mbox{\texttt{\slshape word}} in the representation of \mbox{\texttt{\slshape resolution}} to the standard representation. The NC version does not check whether \mbox{\texttt{\slshape word}} is a valid word of \mbox{\texttt{\slshape resolution}}. }

 }

 
\section{\textcolor{Chapter }{Special Methods for \texttt{HapResolutionRep}}}\logpage{[ 2, 3, 0 ]}
\hyperdef{L}{X84FB45EB83B5822C}{}
{
 Some methods explicitely require the input to be in the standard
representation (\mbox{\texttt{\slshape HapResolutionRep}}). Two of these test if a word/letter is really in standard representation,
the other ones are non-check versions of the universal methods. 

\subsection{\textcolor{Chapter }{IsFreeZGLetter}}
\logpage{[ 2, 3, 1 ]}\nobreak
\hyperdef{L}{X7B803CC184BD2612}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGLetter({\slshape resolution, term, letter})\index{IsFreeZGLetter@\texttt{IsFreeZGLetter}}
\label{IsFreeZGLetter}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Checks if \mbox{\texttt{\slshape letter}} is an valid letter (word of length 1) in standard representation of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{IsFreeZGWord}}
\logpage{[ 2, 3, 2 ]}\nobreak
\hyperdef{L}{X7A36FB7B84E9A892}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGWord({\slshape resolution, term, word})\index{IsFreeZGWord@\texttt{IsFreeZGWord}}
\label{IsFreeZGWord}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Check if \mbox{\texttt{\slshape word}} is a valid word in large standard representation of the \mbox{\texttt{\slshape term}}th module in \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{MultiplyGroupEltsNC}}
\logpage{[ 2, 3, 3 ]}\nobreak
\hyperdef{L}{X836D3F9886EED6AC}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyGroupEltsNC({\slshape resolution, x, y})\index{MultiplyGroupEltsNC@\texttt{MultiplyGroupEltsNC}}
\label{MultiplyGroupEltsNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
positive integer



 Given positive integers \texttt{x} and \texttt{y}, this returns the position of the product of the group elements represented
by the positive integers \mbox{\texttt{\slshape x}} and \mbox{\texttt{\slshape x}}. This assumes that all input is in standard representation and does not check
the input. }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGLetterWithGroupEltNC}}
\logpage{[ 2, 3, 4 ]}\nobreak
\hyperdef{L}{X85893CC5823508A8}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGLetterWithGroupEltNC({\slshape resolution, letter, g})\index{MultiplyFreeZGLetterWithGroupEltNC@\texttt{MultiplyFreeZGLetterWithGroupEltNC}}
\label{MultiplyFreeZGLetterWithGroupEltNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
A letter in standard representation



 Multiplies the letter \mbox{\texttt{\slshape letter}} with the group element represented by the positive integer \mbox{\texttt{\slshape g}} and returns the result. The input is assumed to be in \mbox{\texttt{\slshape HapResolutionRep}} and is not checked. }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGWordWithGroupEltNC}}
\logpage{[ 2, 3, 5 ]}\nobreak
\hyperdef{L}{X8073DE7E7AD8B7CB}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGWordWithGroupEltNC({\slshape resolution, word, g})\index{MultiplyFreeZGWordWithGroupEltNC@\texttt{MultiplyFreeZGWordWithGroupEltNC}}
\label{MultiplyFreeZGWordWithGroupEltNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
A letter in standard representation



 Multiplies the word \mbox{\texttt{\slshape word}} with the group element represented by the positive integer \mbox{\texttt{\slshape g}} and returns the result. The input is assumed to be in \mbox{\texttt{\slshape HapResolutionRep}} and is not checked. }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGLetterNC}}
\logpage{[ 2, 3, 6 ]}\nobreak
\hyperdef{L}{X7BD3994E7C414149}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGLetterNC({\slshape resolution, term, letter})\index{BoundaryOfFreeZGLetterNC@\texttt{BoundaryOfFreeZGLetterNC}}
\label{BoundaryOfFreeZGLetterNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in standard representation



 Calculates the boundary of the letter (word of length 1) \mbox{\texttt{\slshape letter}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. The input is assumed to be in standard representation and not checked. }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGWordNC}}
\logpage{[ 2, 3, 7 ]}\nobreak
\hyperdef{L}{X84B1DA21805A0880}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGWordNC({\slshape resolution, term, word})\index{BoundaryOfFreeZGWordNC@\texttt{BoundaryOfFreeZGWordNC}}
\label{BoundaryOfFreeZGWordNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in standard representation



 Calculates the boundary of the word \mbox{\texttt{\slshape word}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. The input is assumed to be in standard representation and not checked. }

 }

 
\section{\textcolor{Chapter }{The \texttt{HapLargeGroupResolutionRep} Representation}}\logpage{[ 2, 4, 0 ]}
\hyperdef{L}{X8024014D8488FE30}{}
{
 The large group representation has one additional component called \texttt{groupring}. Elements of the modules in a resolution are represented by lists of group
ring elements. The length of the list corresponds to the dimension of the free
module. 

 All methods for the generic representation do also work for the large group
representation. Some of them are wrappers for special methods which do only
work for this representation. The following list only contains the methods
which are not already present in the generic representation. 

 Note that the input or the output of these functions does not comply with the
standard representation. 

\subsection{\textcolor{Chapter }{GroupRingOfResolution}}
\logpage{[ 2, 4, 1 ]}\nobreak
\hyperdef{L}{X861BE6C787FA8032}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GroupRingOfResolution({\slshape resolution})\index{GroupRingOfResolution@\texttt{GroupRingOfResolution}}
\label{GroupRingOfResolution}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
group ring



 This returns the group ring of \mbox{\texttt{\slshape resolution}}. Note that by the way that group rings are handled in \textsf{GAP}, this is not equal to \texttt{GroupRing(R,GroupOfResolution(\mbox{\texttt{\slshape resolution}}))} where \texttt{R} is the ring of the resolution. }

 

\subsection{\textcolor{Chapter }{MultiplyGroupElts{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 2 ]}\nobreak
\hyperdef{L}{X8338F7A37F240E33}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyGroupElts{\textunderscore}LargeGroupRep({\slshape resolution, x, y})\index{MultiplyGroupEltsLargeGroupRep@\texttt{Multiply}\-\texttt{Group}\-\texttt{Elts{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyGroupEltsLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyGroupEltsNC{\textunderscore}LargeGroupRep({\slshape resolution, x, y})\index{MultiplyGroupEltsNCLargeGroupRep@\texttt{Multiply}\-\texttt{Group}\-\texttt{Elts}\-\texttt{N}\-\texttt{C{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyGroupEltsNCLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
group element



 Returns the product of \mbox{\texttt{\slshape x}} and \mbox{\texttt{\slshape y}}. The NC version does not check whether \mbox{\texttt{\slshape x}} and \mbox{\texttt{\slshape y}} are actually elements of the group of \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{IsFreeZGLetterNoTermCheck{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 3 ]}\nobreak
\hyperdef{L}{X86F91A948022DEBB}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGLetterNoTermCheck{\textunderscore}LargeGroupRep({\slshape resolution, letter})\index{IsFreeZGLetterNoTermCheckLargeGroupRep@\texttt{IsFree}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter}\-\texttt{No}\-\texttt{Term}\-\texttt{Check{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{IsFreeZGLetterNoTermCheckLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Returns \texttt{true} if \mbox{\texttt{\slshape letter}} has the form of a letter (a module element with exactly one non-zero entry
which has exactly one non-zero coefficient) a module of \mbox{\texttt{\slshape resolution}} in the \texttt{HapLargeGroupResolution} representation. Note that it is not tested if \mbox{\texttt{\slshape letter}} actually is a letter in any term of \mbox{\texttt{\slshape resolution}} }

 

\subsection{\textcolor{Chapter }{IsFreeZGWordNoTermCheck{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 4 ]}\nobreak
\hyperdef{L}{X793BA61478AEBE16}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGWordNoTermCheck{\textunderscore}LargeGroupRep({\slshape resolution, word})\index{IsFreeZGWordNoTermCheckLargeGroupRep@\texttt{IsFree}\-\texttt{Z}\-\texttt{G}\-\texttt{Word}\-\texttt{No}\-\texttt{Term}\-\texttt{Check{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{IsFreeZGWordNoTermCheckLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Returns \texttt{true} if \mbox{\texttt{\slshape word}} has the form of a word of a module of \mbox{\texttt{\slshape resolution}} in the \texttt{HapLargeGroupResolution} representation. Note that it is not tested if \mbox{\texttt{\slshape word}} actually is a word in any term of \mbox{\texttt{\slshape resolution}}. }

 

\subsection{\textcolor{Chapter }{IsFreeZGLetter{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 5 ]}\nobreak
\hyperdef{L}{X85A7BFC284E9D9CB}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGLetter{\textunderscore}LargeGroupRep({\slshape resolution, term, letter})\index{IsFreeZGLetterLargeGroupRep@\texttt{IsFree}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{IsFreeZGLetterLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Returns \texttt{true} if and only if \mbox{\texttt{\slshape letter}} is a letter (a word of length 1) of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}} in the \texttt{hapLargeGroupResolution} representation. I.e. it tests if \mbox{\texttt{\slshape letter}} is a module element with exactly one non-zero entry which has exactly one
non-zero coefficient. }

 

\subsection{\textcolor{Chapter }{IsFreeZGWord{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 6 ]}\nobreak
\hyperdef{L}{X7BF4A7EC83BE61C8}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsFreeZGWord{\textunderscore}LargeGroupRep({\slshape resolution, term, word})\index{IsFreeZGWordLargeGroupRep@\texttt{IsFree}\-\texttt{Z}\-\texttt{G}\-\texttt{Word{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{IsFreeZGWordLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
boolean



 Tests if \mbox{\texttt{\slshape word}} is an element of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resoultion}}. }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGLetterWithGroupElt{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 7 ]}\nobreak
\hyperdef{L}{X7A4B682079630694}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGLetterWithGroupElt{\textunderscore}LargeGroupRep({\slshape resolution, letter, g})\index{MultiplyFreeZGLetterWithGroupEltLargeGroupRep@\texttt{Multiply}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter}\-\texttt{With}\-\texttt{Group}\-\texttt{Elt{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyFreeZGLetterWithGroupEltLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGLetterWithGroupEltNC{\textunderscore}LargeGroupRep({\slshape resolution, letter, g})\index{MultiplyFreeZGLetterWithGroupEltNCLargeGroupRep@\texttt{Multiply}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter}\-\texttt{With}\-\texttt{Group}\-\texttt{Elt}\-\texttt{N}\-\texttt{C{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyFreeZGLetterWithGroupEltNCLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG letter in large group representation



 Multiplies the letter \mbox{\texttt{\slshape letter}} with the group element \mbox{\texttt{\slshape g}} and returns the result. The NC version does not check whether \mbox{\texttt{\slshape g}} is an element of the group of \mbox{\texttt{\slshape resolution}} and \mbox{\texttt{\slshape letter}} can be a letter. }

 

\subsection{\textcolor{Chapter }{MultiplyFreeZGWordWithGroupElt{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 8 ]}\nobreak
\hyperdef{L}{X7F2365D2851E3E3C}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGWordWithGroupElt{\textunderscore}LargeGroupRep({\slshape resolution, word, g})\index{MultiplyFreeZGWordWithGroupEltLargeGroupRep@\texttt{Multiply}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Word}\-\texttt{With}\-\texttt{Group}\-\texttt{Elt{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyFreeZGWordWithGroupEltLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{MultiplyFreeZGWordWithGroupEltNC{\textunderscore}LargeGroupRep({\slshape resolution, word, g})\index{MultiplyFreeZGWordWithGroupEltNCLargeGroupRep@\texttt{Multiply}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Word}\-\texttt{With}\-\texttt{Group}\-\texttt{Elt}\-\texttt{N}\-\texttt{C{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{MultiplyFreeZGWordWithGroupEltNCLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in large group representation



 Multiplies the word \mbox{\texttt{\slshape word}} with the group element \mbox{\texttt{\slshape g}} and returns the result. The NC version does not check whether \mbox{\texttt{\slshape g}} is an element of the group of \mbox{\texttt{\slshape resolution}} and \mbox{\texttt{\slshape word}} can be a word. }

 

\subsection{\textcolor{Chapter }{GeneratorsOfModuleOfResolution{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 9 ]}\nobreak
\hyperdef{L}{X8355F6E8842B3D8C}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GeneratorsOfModuleOfResolution{\textunderscore}LargeGroupRep({\slshape resolution, term})\index{GeneratorsOfModuleOfResolutionLargeGroupRep@\texttt{Generators}\-\texttt{Of}\-\texttt{Module}\-\texttt{Of}\-\texttt{Resolution{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{GeneratorsOfModuleOfResolutionLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
list of letters/words in large group representation



 Returns a set of generators for the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}}. The returned value is a list of vectors of group ring elements. }

 

\subsection{\textcolor{Chapter }{BoundaryOfGenerator{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 10 ]}\nobreak
\hyperdef{L}{X840DF79086D5473E}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfGenerator{\textunderscore}LargeGroupRep({\slshape resolution, term, n})\index{BoundaryOfGeneratorLargeGroupRep@\texttt{Boundary}\-\texttt{Of}\-\texttt{Generator{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{BoundaryOfGeneratorLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfGeneratorNC{\textunderscore}LargeGroupRep({\slshape resolution, term, n})\index{BoundaryOfGeneratorNCLargeGroupRep@\texttt{Boundary}\-\texttt{Of}\-\texttt{Generator}\-\texttt{N}\-\texttt{C{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{BoundaryOfGeneratorNCLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in the large group representation



 Returns the boundary of the \mbox{\texttt{\slshape n}}th generator of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}} as a word in the \mbox{\texttt{\slshape n-1}}st module (in large group representation). The NC version does not check
whether there is a \mbox{\texttt{\slshape term}}th module and if it has at least \mbox{\texttt{\slshape n}} generators. }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGLetterNC{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 11 ]}\nobreak
\hyperdef{L}{X83D90EC28357DCCE}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGLetterNC{\textunderscore}LargeGroupRep({\slshape resolution, term, letter})\index{BoundaryOfFreeZGLetterNCLargeGroupRep@\texttt{Boundary}\-\texttt{Of}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter}\-\texttt{N}\-\texttt{C{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{BoundaryOfFreeZGLetterNCLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGLetter{\textunderscore}LargeGroupRep({\slshape resolution, term, letter})\index{BoundaryOfFreeZGLetterLargeGroupRep@\texttt{Boundary}\-\texttt{Of}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Letter{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{BoundaryOfFreeZGLetterLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in large group representation



 Calculates the boundary of the letter \mbox{\texttt{\slshape letter}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}} in large group representation. The NC version does not check whether \mbox{\texttt{\slshape letter}} actually is a letter in the \mbox{\texttt{\slshape term}}th module. }

 

\subsection{\textcolor{Chapter }{BoundaryOfFreeZGWord{\textunderscore}LargeGroupRep}}
\logpage{[ 2, 4, 12 ]}\nobreak
\hyperdef{L}{X78C681D37F8DC2A1}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{BoundaryOfFreeZGWord{\textunderscore}LargeGroupRep({\slshape resolution, term, word})\index{BoundaryOfFreeZGWordLargeGroupRep@\texttt{Boundary}\-\texttt{Of}\-\texttt{Free}\-\texttt{Z}\-\texttt{G}\-\texttt{Word{\textunderscore}}\-\texttt{Large}\-\texttt{GroupRep}}
\label{BoundaryOfFreeZGWordLargeGroupRep}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
free ZG word in large group representation



 Calculates the boundary of the element \mbox{\texttt{\slshape word}} of the \mbox{\texttt{\slshape term}}th module of \mbox{\texttt{\slshape resolution}} in large group representation. The NC version does not check whether \mbox{\texttt{\slshape word}} actually is a word in the \mbox{\texttt{\slshape term}}th module. }

 }

 }

 
\chapter{\textcolor{Chapter }{Contracting Homotopies}}\logpage{[ 3, 0, 0 ]}
\hyperdef{L}{X792B9CC97C670AEA}{}
{
 
\section{\textcolor{Chapter }{The \texttt{PartialContractingHomotopy} Data Type}}\logpage{[ 3, 1, 0 ]}
\hyperdef{L}{X7E957D2381DBE362}{}
{
 A partial contracting homotopy is a component object that knows the values of
a contracting homotopy on some subspace of a resolution. It has two mandatory
components: 
\begin{itemize}
\item \texttt{.resolution} a \texttt{HapResolution} on which the contraction is defined.
\item \texttt{.knownPartOfHomotopy} a list of \texttt{Record}s with components \texttt{.space} and \texttt{.map}.
\end{itemize}
 Let \texttt{h} be a contracting homotopy. The lookup table \texttt{.knownPartOfHomotopy} has one entry for each term of the resolution \texttt{h.resolution} (that is, one more than \texttt{Length(h.resolution)}). 

 The $i$ th element of \texttt{.knownPartOfHomotopy} contains a record with components \texttt{.space} and \texttt{.map} where \texttt{.space} is a \texttt{FreeZGWord} of the $i-1$ st term of the resolution. The component \texttt{.map} is a list of length \texttt{Dimension(h.resolution)(i-1)}. The entries of this list are pairs \texttt{[g,im]} where \texttt{g} represents a group element and \texttt{im} represents the image of the contraction. So the entry \texttt{[g,im]} in the \texttt{k}th component of the list \texttt{.map} means that the \texttt{k}th free generator of the corresponding module multiplied with the group
element represented by \texttt{g} is mapped to \texttt{im} under the partial contracting homotopy. Note that the data type of \texttt{g} or \texttt{im} are not fixed at this level. They must be specified by the sub
representations. Also, \texttt{im} need not represent the actual image under a contracting homotopy. It is
possible to just store a bit of information that is then used to generate the
actual image. 

 As this is a very general data type, it has very few methods. 

\subsection{\textcolor{Chapter }{ResolutionOfContractingHomotopy}}
\logpage{[ 3, 1, 1 ]}\nobreak
\hyperdef{L}{X7D899ACD7EB512FA}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ResolutionOfContractingHomotopy({\slshape homotopy})\index{ResolutionOfContractingHomotopy@\texttt{ResolutionOfContractingHomotopy}}
\label{ResolutionOfContractingHomotopy}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
A \texttt{HapResolution}



 This returns the resolution of the homotopy \mbox{\texttt{\slshape homotopy}} (the component \mbox{\texttt{\slshape homotopy!.resolution}}). }

 

\subsection{\textcolor{Chapter }{PartialContractingHomotopyLookup}}
\logpage{[ 3, 1, 2 ]}\nobreak
\hyperdef{L}{X79C69C9B877C6D60}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PartialContractingHomotopyLookup({\slshape homotopy, term, generator, groupel})\index{PartialContractingHomotopyLookup@\texttt{PartialContractingHomotopyLookup}}
\label{PartialContractingHomotopyLookup}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{PartialContractingHomotopyLookupNC({\slshape homotopy, term, generator, groupel})\index{PartialContractingHomotopyLookupNC@\texttt{PartialContractingHomotopyLookupNC}}
\label{PartialContractingHomotopyLookupNC}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
The entry \texttt{im} of the corresponding lookup table



 Looks up the known part of the contracting homotopy \mbox{\texttt{\slshape homotopy}} and returns the corresponding image. More precisely, it returns the image of
the \mbox{\texttt{\slshape generator}}th generator times the group element represented by \mbox{\texttt{\slshape groupel}} in term \mbox{\texttt{\slshape term}} under the partial homotopy. The data type of this image depends on the
representation of \mbox{\texttt{\slshape homotopy}}. 

 \mbox{\texttt{\slshape term}} has to be an integer and \mbox{\texttt{\slshape generator}} a positive integer. \mbox{\texttt{\slshape groupel}} only has to be an \texttt{Object}. 

 The NC version does not do any checks on the input. The other version checks
if \mbox{\texttt{\slshape term}} and \mbox{\texttt{\slshape generator}} are sensible. It does not check \mbox{\texttt{\slshape groupel}}. }

 }

 }

 \newpage
\immediate\write\pagenrlog{["End"], \arabic{page}];}
\immediate\closeout\pagenrlog
\end{document}
