% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
\documentclass[a4paper,11pt]{report}

\usepackage{a4wide}
\sloppy
\pagestyle{myheadings}
\usepackage{amssymb}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex
\usepackage{color}
\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{linkColor}{rgb}{0.0,0.0,0.554}
\definecolor{citeColor}{rgb}{0.0,0.0,0.554}
\definecolor{fileColor}{rgb}{0.0,0.0,0.554}
\definecolor{urlColor}{rgb}{0.0,0.0,0.554}
\definecolor{promptColor}{rgb}{0.0,0.0,0.589}
\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0}
\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0}
\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0}

%%  for a long time these were red and blue by default,
%%  now black, but keep variables to overwrite
\definecolor{FuncColor}{rgb}{0.0,0.0,0.0}
%% strange name because of pdflatex bug:
\definecolor{Chapter }{rgb}{0.0,0.0,0.0}
\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}


\usepackage{fancyvrb}

\usepackage{mathptmx,helvet}
\usepackage[T1]{fontenc}
\usepackage{textcomp}


\usepackage[
            pdftex=true,
            bookmarks=true,        
            a4paper=true,
            pdftitle={Written with GAPDoc},
            pdfcreator={LaTeX with hyperref package / GAPDoc},
            colorlinks=true,
            backref=page,
            breaklinks=true,
            linkcolor=linkColor,
            citecolor=citeColor,
            filecolor=fileColor,
            urlcolor=urlColor,
            pdfpagemode={UseNone}, 
           ]{hyperref}

\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont}

% 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}}

%% nicer description environments, allows long labels
\usepackage{enumitem}
\setdescription{style=nextline}

%% depth of toc
\setcounter{tocdepth}{1}





%% command for ColorPrompt style examples
\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}}
\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}}
\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}}


\begin{document}

\logpage{[ 0, 0, 0 ]}
\begin{titlepage}
\mbox{}\vfill

\begin{center}{\maintitlesize \textbf{\textsf{homalg}\mbox{}}}\\
\vfill

\hypersetup{pdftitle=\textsf{homalg}}
\markright{\scriptsize \mbox{}\hfill \textsf{homalg} \hfill\mbox{}}
{\Huge \textbf{A homological algebra meta-package for computable Abelian categories\mbox{}}}\\
\vfill

{\Huge Version 2015.03.31\mbox{}}\\[1cm]
{March 2015\mbox{}}\\[1cm]
\mbox{}\\[2cm]
{\Large \textbf{Mohamed Barakat\\
    \mbox{}}}\\
{\Large \textbf{Markus Lange-Hegermann\\
    \mbox{}}}\\
\hypersetup{pdfauthor=Mohamed Barakat\\
    ; Markus Lange-Hegermann\\
    }
\mbox{}\\[2cm]
\begin{minipage}{12cm}\noindent
(\emph{this manual is still under construction}) \\
\\
 This manual is best viewed as an \textsc{HTML} document. The latest version is available \textsc{online} at: \\
\\
 \href{http://homalg.math.rwth-aachen.de/~barakat/homalg-project/homalg/chap0.html} {\texttt{http://homalg.math.rwth-aachen.de/\texttt{\symbol{126}}barakat/homalg-project/homalg/chap0.html}} \\
\\
 An \textsc{offline} version should be included in the documentation subfolder of the package. This
package is part of the \textsf{homalg}-project: \\
\\
 \href{http://homalg.math.rwth-aachen.de/index.php/core-packages/homalg-package} {\texttt{http://homalg.math.rwth-aachen.de/index.php/core-packages/homalg-package}} \end{minipage}

\end{center}\vfill

\mbox{}\\
{\mbox{}\\
\small \noindent \textbf{Mohamed Barakat\\
    }  Email: \href{mailto://barakat@mathematik.uni-kl.de} {\texttt{barakat@mathematik.uni-kl.de}}\\
  Homepage: \href{http://www.mathematik.uni-kl.de/~barakat/} {\texttt{http://www.mathematik.uni-kl.de/\texttt{\symbol{126}}barakat/}}\\
  Address: \begin{minipage}[t]{8cm}\noindent
 Department of Mathematics, \\
 University of Kaiserslautern, \\
 67653 Kaiserslautern, \\
 Germany \end{minipage}
}\\
{\mbox{}\\
\small \noindent \textbf{Markus Lange-Hegermann\\
    }  Email: \href{mailto://markus.lange.hegermann@rwth-aachen.de} {\texttt{markus.lange.hegermann@rwth-aachen.de}}\\
  Homepage: \href{http://wwwb.math.rwth-aachen.de/~markus} {\texttt{http://wwwb.math.rwth-aachen.de/\texttt{\symbol{126}}markus}}\\
  Address: \begin{minipage}[t]{8cm}\noindent
 Lehrstuhl B f{\"u}r Mathematik, RWTH Aachen, Templergraben 64, 52056 Aachen,
Germany \end{minipage}
}\\
\end{titlepage}

\newpage\setcounter{page}{2}
{\small 
\section*{Copyright}
\logpage{[ 0, 0, 1 ]}
 {\copyright} 2007-2015 by Mohamed Barakat and Markus Lange-Hegermann

 This package may be distributed under the terms and conditions of the GNU
Public License Version 2. \mbox{}}\\[1cm]
{\small 
\section*{Acknowledgements}
\logpage{[ 0, 0, 2 ]}
 \href{http://www-groups.mcs.st-and.ac.uk/~neunhoef/} {Max Neunhöffer}  not only taught me the philosophy of object-oriented programming in \textsf{GAP4}, but also to what extent this philosophy is still unique among programming
languages ($\to$ \ref{WhyGAP4}). The slides (in German) to his talk in our seminar on 30.10.2006 can be
found on \href{http://www-groups.mcs.st-and.ac.uk/~neunhoef/Publications/talks.html} {his homepage}. 

 He, \href{http://www.math.rwth-aachen.de/~Frank.Luebeck/} {Frank
  Lübeck}, and \href{http://www.math.rwth-aachen.de/~Thomas.Breuer/} {Thomas
  Breuer}  patiently answered trillions of specific questions, even those I was too lazy
to look up in the excellent \href{http://www.gap-system.org/Manuals/doc/ref/chap0.html} {reference manual}. Without their continuous and tireless help and advice, not only this package
but the  as a whole \href{http://homalg.math.rwth-aachen.de/} {homalg
  project} would have remained on my todo list. 

 A lot of  ideas that make up this package and the whole \textsf{homalg} project came out of intensive discussions with  \href{http://wwwb.math.rwth-aachen.de/~daniel/} {Daniel
  Robertz} during our early collaboration, where we developed our philosophy of a meta
package for homological algebra and  \href{http://homalg.math.rwth-aachen.de/maple/} {implemented} it in \textsf{Maple}. 

 In the fall of 2007 I began collaborating with  \href{http://wwwb.math.rwth-aachen.de/goertzen/} {Simon
  Görtzen} to further pursue and extend these  ideas preparing the transition to \textsf{GAP4}. With his help \textsf{homalg} became an extendable multi-package project. 

 Max Neunh{\"o}ffer convinced me to use his wonderful \textsf{IO} package to start communicating with external computer algebra systems. This
was crucial to remedy the yet missing support for important rings in \textsf{GAP}. Max provided the first piece of code to access the computer algebra system \textsf{Singular}. This was the starting point of the packages \textsf{HomalgToCAS} and \textsf{IO{\textunderscore}ForHomalg}, which were further abstracted by Simon and myself enabling \textsf{homalg} to communicate with virtually any external (computer algebra) system. 

 \href{http://wwwb.math.rwth-aachen.de/~thomas/} {Thomas
  Bächler}  wrote the package \textsf{MapleForHomalg} to directly access \textsf{Maple} via its \textsf{C}-interface. It offers an alternative to the package \textsf{IO{\textunderscore}ForHomalg}, which requires \textsf{Maple}'s terminal interface \texttt{cmaple}. 

 The basic support for \textsf{Sage} was added by Simon, and the support for \textsf{Singular} was initiated by  \href{http://wwwb.math.rwth-aachen.de/~markus/} {Markus
  Lange-Hegermann} and continued by him and Simon, while  \href{http://www.math.rwth-aachen.de/~Markus.Kirschmer/} {Markus
  Kirschmer} contributed the complete support for \textsf{MAGMA}. This formed the beginning of the \textsf{RingsForHomalg} package. Recently, Daniel added the support for \textsf{Macaulay2}. 

 My concerns about how to handle the garbage collection in the external
computer algebra systems were evaporated with the idea of Thomas Breuer using
the so-called \href{http://www.gap-system.org/Manuals/doc/ref/chap86.html} {weak
  pointers}  in \textsf{GAP4} to keep track of all the external objects that became obsolete for \textsf{homalg}. This idea took shape in a discussion with him and Frank L{\"u}beck and
finally found its way into the package \textsf{HomalgToCAS}. 

 My gratitude to all with whom I worked together to develop extension packages
and those who developed their own packages within the \textsf{homalg} project ($\to$ Appendix \ref{homalg-Project}). Without their contributions the package \textsf{homalg} would have remained a core without a body: 
\begin{itemize}
\item \href{http://wwwb.math.rwth-aachen.de/~thomas/} {Thomas Bächler}
\item Barbara Bremer
\item \href{http://www.math.rwth-aachen.de/~Thomas.Breuer/} {Thomas Breuer}
\item Anna Fabia{\a'n}ska
\item \href{http://wwwb.math.rwth-aachen.de/goertzen/} {Simon Görtzen}
\item \href{http://www.math.rwth-aachen.de/~Markus.Kirschmer/} {Markus Kirschmer}
\item \href{http://wwwb.math.rwth-aachen.de/~markus/} {Markus Lange-Hegermann}
\item \href{http://www.math.rwth-aachen.de/~Frank.Luebeck/} {Frank Lübeck}
\item \href{http://www-groups.mcs.st-and.ac.uk/~neunhoef/} {Max Neunhöffer}
\item \href{http://wwwb.math.rwth-aachen.de/~daniel/} {Daniel Robertz}
\end{itemize}
 I would also like to thank  \href{http://www-sop.inria.fr/members/Alban.Quadrat/} {Alban
  Quadrat} for supporting the \textsf{homalg} project and for all the wonderful discussions we had. At several places in the
code I was happy to add the comment: ``I learned this from Alban''. 

 My teacher \href{http://wwwb.math.rwth-aachen.de/Mitarbeiter/plesken.php} {Wilhelm
  Plesken}  remains an inexhaustible source of extremely broad and deep knowledge. Thank
you for being such a magnificent person. 

 This manual was created using the GAPDoc package of Max Neunh{\"o}ffer and
Frank L{\"u}beck. 

 Last but not least, thanks to \emph{Miriam}, \emph{Josef}, \emph{Jonas}, and \emph{Irene} for the endless love and support. 

 

 Mohamed Barakat \mbox{}}\\[1cm]
\newpage

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

\tableofcontents
\newpage

 \index{\textsf{homalg}}   
\chapter{\textcolor{Chapter }{Introduction}}\label{intro}
\logpage{[ 1, 0, 0 ]}
\hyperdef{L}{X7DFB63A97E67C0A1}{}
{
  
\section{\textcolor{Chapter }{What is the role of the \textsf{homalg} package in the \textsf{homalg} project?}}\label{homalg-vs-homalg}
\logpage{[ 1, 1, 0 ]}
\hyperdef{L}{X82BF34E17E2EA775}{}
{
  
\subsection{\textcolor{Chapter }{Philosophy}}\label{philosophy}
\logpage{[ 1, 1, 1 ]}
\hyperdef{L}{X873C99678745ABAF}{}
{
  The package \textsf{homalg} is meant to be the first part of a continuously growing  \href{http://www.opensource.org/} {open
source} multi volume book about  \href{http://en.wikipedia.org/wiki/Homological_algebra} {homological} and \href{http://en.wikipedia.org/wiki/Homotopical_algebra} {homotopical
algebra}. \textsf{homalg} is an attempt to translate as much as possible of homological algebra, as can
be found in books like \cite{ce}, \cite{ML}, \cite{HS}, \cite{rot}, \cite{weihom}, and \cite{GM}, into a language that a computer can directly understand. But just like the
aforementioned books, \textsf{homalg} should, to a great extent, be readable by a mathematician, even without deep
programming knowledge. For the reasons mentioned in ($\to$ Appendix \ref{WhyGAP4}) \textsf{GAP4} was chosen as the language of \textsf{homalg}. }

 
\subsection{\textcolor{Chapter }{\textsf{homalg} provides ...}}\label{homalg-provides}
\logpage{[ 1, 1, 2 ]}
\hyperdef{L}{X795D59887F03438E}{}
{
  The package \textsf{homalg} is the foundational part of the project. It provides procedures to construct
basic objects in homological algebra: 
\begin{itemize}
\item filtrations of objects
\item complexes (of objects and of complexes)
\item chain morphisms
\item bicomplexes
\item bigraded (differential) objects
\item spectral sequences
\item functors
\end{itemize}
 Beside these so-called constructors \textsf{homalg} provides  \emph{operations} to perform computations with these objects. The list of operations includes: 
\begin{itemize}
\item computation of subfactor objects
\item applying functors (like \texttt{Ext}, \texttt{Tor}, ...) to objects, morphisms, complexes and chain morphisms
\item derivation and composition of functors
\item horse shoe resolution of short exact sequences of objects
\item connecting homomorphisms and long exact sequences
\item Cartan-Eilenberg resolution of complexes
\item hyper (co)homology
\item spectral sequences of bicomplexes
\item the Grothendieck spectral sequences associated to two composable functors
\item test if an object is torsion-free, reflexive, projective, stably free, pure
\item determine the rank, grade, projective dimension, degree of torsion-freeness,
and codegree of purity of an object
\end{itemize}
 Using the philosophy of \textsf{GAP4}, one or more  methods are  \emph{installed} for each operation, depending on  \emph{properties} and  \emph{attributes} of these objects. These properties and attributes can themselves be computed
by methods installed for this purpose. }

 
\subsection{\textcolor{Chapter }{Building upon the \textsf{homalg} package}}\label{build}
\logpage{[ 1, 1, 3 ]}
\hyperdef{L}{X835B2AEE82D68AD2}{}
{
  As mentioned above, the package \textsf{homalg} should only be the first and foundational part of the \textsf{homalg} project. On the one hand it is designed independently of the details of the
different matrix operations, which other packages are meant to provide.
Typically, these packages (like \textsf{RingsForHomalg}) heavily rely on existing, well tested, and optimized systems like \textsf{Singular}, \textsf{Macaulay2}, or \textsf{MAGMA}. On the other hand other packages can be built upon or extend the \textsf{homalg} package in different ways: 
\begin{itemize}
\item add constructors (sheaves, schemes, simplicial sets, ...)
\item add methods for basic operation (Yoneda products, Massey products, Steenrod
operations, ...)
\item add methods to compute sheaf cohomology, local cohomology, Hochschild
(co)homology, cyclic (co)homology...
\item provide algorithms for holonomic $D$-modules based on the restriction algorithm: localization, computing tensor
products, \texttt{Hom}, \texttt{Ext}, de Rham cohomology, ...
\item support change of rings, Lyndon/Hochschild-Serre spectral sequence, base
change spectral sequences, ...
\item support perturbation techniques, Serre and Eilenberg-Moore spectral sequence
of simplicial spaces of infinite type, ...
\item ...
\end{itemize}
 The project will remain open and contributions are highly welcome. The
different packages will be attributed to their respective authors. The whole
project will be attributed to the "\textsf{homalg} team", i.e. the authors and contributers of all packages in the project. }

 }

 
\section{\textcolor{Chapter }{This manual}}\label{overview}
\logpage{[ 1, 2, 0 ]}
\hyperdef{L}{X78DD800B83ABC621}{}
{
  Chapter \ref{install} describes the installation of this package. The remaining chapters are each
devoted to one of the \textsf{homalg} objects ($\to$ \ref{homalg-provides}) with its constructors, properties, attributes, and operations.  }

  }

    
\chapter{\textcolor{Chapter }{Installation of the \textsf{homalg} Package}}\label{install}
\logpage{[ 2, 0, 0 ]}
\hyperdef{L}{X7CEA38317C04C738}{}
{
  To install this package just extract the package's archive file to the \textsf{GAP} \texttt{pkg} directory.

 By default the \textsf{homalg} package is not automatically loaded by \textsf{GAP} when it is installed. You must load the package with \\
\\
 \texttt{LoadPackage}( "homalg" ); \\
\\
 before its functions become available.

 Please, send me an e-mail if you have any questions, remarks, suggestions,
etc. concerning this package. Also, I would be pleased to hear about
applications of this package. \\
\\
\\
 Mohamed Barakat  }

   
\chapter{\textcolor{Chapter }{Objects}}\label{Objects}
\logpage{[ 3, 0, 0 ]}
\hyperdef{L}{X78497E777FB3E402}{}
{
  
\section{\textcolor{Chapter }{Objects: Category and Representations}}\label{Objects:Category}
\logpage{[ 3, 1, 0 ]}
\hyperdef{L}{X7E3651DF87064E72}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgObject}}
\logpage{[ 3, 1, 1 ]}\nobreak
\hyperdef{L}{X7E610FA77A49B9EC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgObject({\mdseries\slshape F})\index{IsHomalgObject@\texttt{IsHomalgObject}}
\label{IsHomalgObject}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 This is the super \textsf{GAP}-category which will include the \textsf{GAP}-categories \texttt{IsHomalgStaticObject} (\ref{IsHomalgStaticObject}), \texttt{IsHomalgComplex} (\ref{IsHomalgComplex}), \texttt{IsHomalgBicomplex} (\ref{IsHomalgBicomplex}), \texttt{IsHomalgBigradedObject} (\ref{IsHomalgBigradedObject}), and \texttt{IsHomalgSpectralSequence} (\ref{IsHomalgSpectralSequence}). We need this \textsf{GAP}-category to be able to build complexes with *objects* being objects of \textsf{homalg} categories or again complexes. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareCategory( "IsHomalgObject",
          IsHomalgObjectOrMorphism and
          IsStructureObjectOrObject and
          IsAdditiveElementWithZero );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsHomalgStaticObject}}
\logpage{[ 3, 1, 2 ]}\nobreak
\hyperdef{L}{X79FC4A848517AF55}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgStaticObject({\mdseries\slshape F})\index{IsHomalgStaticObject@\texttt{IsHomalgStaticObject}}
\label{IsHomalgStaticObject}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 This is the super \textsf{GAP}-category which will include the \textsf{GAP}-categories \texttt{IsHomalgModule}, etc. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareCategory( "IsHomalgStaticObject",
          IsHomalgStaticObjectOrMorphism and
          IsHomalgObject );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsFinitelyPresentedObjectRep}}
\logpage{[ 3, 1, 3 ]}\nobreak
\hyperdef{L}{X7F1BC3F77949E779}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsFinitelyPresentedObjectRep({\mdseries\slshape M})\index{IsFinitelyPresentedObjectRep@\texttt{IsFinitelyPresentedObjectRep}}
\label{IsFinitelyPresentedObjectRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of finitley presented \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgObject} (\ref{IsHomalgObject}), which is a subrepresentation of the \textsf{GAP} representations \texttt{IsStructureObjectOrFinitelyPresentedObjectRep}.) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsFinitelyPresentedObjectRep",
          IsHomalgObject and
          IsStructureObjectOrFinitelyPresentedObjectRep,
          [ ] );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsStaticFinitelyPresentedObjectOrSubobjectRep}}
\logpage{[ 3, 1, 4 ]}\nobreak
\hyperdef{L}{X79ED26577A1C2E09}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStaticFinitelyPresentedObjectOrSubobjectRep({\mdseries\slshape M})\index{IsStaticFinitelyPresentedObjectOrSubobjectRep@\texttt{IsStatic}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{Object}\-\texttt{Or}\-\texttt{SubobjectRep}}
\label{IsStaticFinitelyPresentedObjectOrSubobjectRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of finitley presented \textsf{homalg} static objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgStaticObject} (\ref{IsHomalgStaticObject}).) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsStaticFinitelyPresentedObjectOrSubobjectRep",
          IsHomalgStaticObject,
          [ ] );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsStaticFinitelyPresentedObjectRep}}
\logpage{[ 3, 1, 5 ]}\nobreak
\hyperdef{L}{X7B645ADA876153F2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStaticFinitelyPresentedObjectRep({\mdseries\slshape M})\index{IsStaticFinitelyPresentedObjectRep@\texttt{IsStaticFinitelyPresentedObjectRep}}
\label{IsStaticFinitelyPresentedObjectRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of finitley presented \textsf{homalg} static objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgStaticObject} (\ref{IsHomalgStaticObject}), which is a subrepresentation of the \textsf{GAP} representations \texttt{IsStaticFinitelyPresentedObjectOrSubobjectRep} and \texttt{IsFinitelyPresentedObjectRep}.) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsStaticFinitelyPresentedObjectRep",
          IsStaticFinitelyPresentedObjectOrSubobjectRep and
          IsFinitelyPresentedObjectRep,
          [ ] );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsStaticFinitelyPresentedSubobjectRep}}
\logpage{[ 3, 1, 6 ]}\nobreak
\hyperdef{L}{X837C31E38502E580}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStaticFinitelyPresentedSubobjectRep({\mdseries\slshape M})\index{IsStaticFinitelyPresentedSubobjectRep@\texttt{IsStatic}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{SubobjectRep}}
\label{IsStaticFinitelyPresentedSubobjectRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of finitley presented \textsf{homalg} subobjects of static objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgStaticObject} (\ref{IsHomalgStaticObject}), which is a subrepresentation of the \textsf{GAP} representations \texttt{IsStaticFinitelyPresentedObjectOrSubobjectRep} and \texttt{IsFinitelyPresentedObjectRep}.) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsStaticFinitelyPresentedSubobjectRep",
          IsStaticFinitelyPresentedObjectOrSubobjectRep and
          IsFinitelyPresentedObjectRep,
          [ ] );
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Objects: Constructors}}\label{Objects:Constructors}
\logpage{[ 3, 2, 0 ]}
\hyperdef{L}{X7BD901538362C36E}{}
{
  

\subsection{\textcolor{Chapter }{Subobject (constructor for subobjects using morphisms)}}
\logpage{[ 3, 2, 1 ]}\nobreak
\hyperdef{L}{X810D3BFB7D9FE47E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Subobject({\mdseries\slshape phi})\index{Subobject@\texttt{Subobject}!constructor for subobjects using morphisms}
\label{Subobject:constructor for subobjects using morphisms}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 A synonym of \texttt{ImageSubobject} (\ref{ImageSubobject}). }

 }

 
\section{\textcolor{Chapter }{Objects: Properties}}\label{Objects:Properties}
\logpage{[ 3, 3, 0 ]}
\hyperdef{L}{X7B3E8C797D15F0B7}{}
{
  

\subsection{\textcolor{Chapter }{IsFree}}
\logpage{[ 3, 3, 1 ]}\nobreak
\hyperdef{L}{X7CD2A77778432E7B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsFree({\mdseries\slshape M})\index{IsFree@\texttt{IsFree}}
\label{IsFree}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is free. }

 

\subsection{\textcolor{Chapter }{IsStablyFree}}
\logpage{[ 3, 3, 2 ]}\nobreak
\hyperdef{L}{X7D49FC85781256AB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStablyFree({\mdseries\slshape M})\index{IsStablyFree@\texttt{IsStablyFree}}
\label{IsStablyFree}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is stably free. }

 

\subsection{\textcolor{Chapter }{IsProjective}}
\logpage{[ 3, 3, 3 ]}\nobreak
\hyperdef{L}{X7EC041A77E7E46D2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsProjective({\mdseries\slshape M})\index{IsProjective@\texttt{IsProjective}}
\label{IsProjective}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is projective. }

 

\subsection{\textcolor{Chapter }{IsProjectiveOfConstantRank}}
\logpage{[ 3, 3, 4 ]}\nobreak
\hyperdef{L}{X84A8AB217E8F4611}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsProjectiveOfConstantRank({\mdseries\slshape M})\index{IsProjectiveOfConstantRank@\texttt{IsProjectiveOfConstantRank}}
\label{IsProjectiveOfConstantRank}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is projective of constant rank. }

 

\subsection{\textcolor{Chapter }{IsInjective}}
\logpage{[ 3, 3, 5 ]}\nobreak
\hyperdef{L}{X7F065FD7822C0A12}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsInjective({\mdseries\slshape M})\index{IsInjective@\texttt{IsInjective}}
\label{IsInjective}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is (marked) injective. }

 

\subsection{\textcolor{Chapter }{IsInjectiveCogenerator}}
\logpage{[ 3, 3, 6 ]}\nobreak
\hyperdef{L}{X7FCE608683CCDC6B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsInjectiveCogenerator({\mdseries\slshape M})\index{IsInjectiveCogenerator@\texttt{IsInjectiveCogenerator}}
\label{IsInjectiveCogenerator}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is (marked) an injective cogenerator. }

 

\subsection{\textcolor{Chapter }{FiniteFreeResolutionExists}}
\logpage{[ 3, 3, 7 ]}\nobreak
\hyperdef{L}{X8784F151844F01FA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FiniteFreeResolutionExists({\mdseries\slshape M})\index{FiniteFreeResolutionExists@\texttt{FiniteFreeResolutionExists}}
\label{FiniteFreeResolutionExists}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} allows a finite free resolution. \\
 (no method installed) }

 

\subsection{\textcolor{Chapter }{IsReflexive}}
\logpage{[ 3, 3, 8 ]}\nobreak
\hyperdef{L}{X7A6A34C283332F60}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsReflexive({\mdseries\slshape M})\index{IsReflexive@\texttt{IsReflexive}}
\label{IsReflexive}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is reflexive. }

 

\subsection{\textcolor{Chapter }{IsTorsionFree}}
\logpage{[ 3, 3, 9 ]}\nobreak
\hyperdef{L}{X86D92DA17DCE22DD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTorsionFree({\mdseries\slshape M})\index{IsTorsionFree@\texttt{IsTorsionFree}}
\label{IsTorsionFree}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is torsion-free. }

 

\subsection{\textcolor{Chapter }{IsArtinian}}
\logpage{[ 3, 3, 10 ]}\nobreak
\hyperdef{L}{X7D8F8A0B81EFD22A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsArtinian({\mdseries\slshape M})\index{IsArtinian@\texttt{IsArtinian}}
\label{IsArtinian}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is artinian. }

 

\subsection{\textcolor{Chapter }{IsTorsion}}
\logpage{[ 3, 3, 11 ]}\nobreak
\hyperdef{L}{X80C6B26284721409}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTorsion({\mdseries\slshape M})\index{IsTorsion@\texttt{IsTorsion}}
\label{IsTorsion}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is torsion. }

 

\subsection{\textcolor{Chapter }{IsPure}}
\logpage{[ 3, 3, 12 ]}\nobreak
\hyperdef{L}{X7B894ED27D38E4B5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsPure({\mdseries\slshape M})\index{IsPure@\texttt{IsPure}}
\label{IsPure}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is pure. }

 

\subsection{\textcolor{Chapter }{IsCohenMacaulay}}
\logpage{[ 3, 3, 13 ]}\nobreak
\hyperdef{L}{X8373421F7E085763}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCohenMacaulay({\mdseries\slshape M})\index{IsCohenMacaulay@\texttt{IsCohenMacaulay}}
\label{IsCohenMacaulay}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is Cohen-Macaulay (depends on the specific Abelian category). }

 

\subsection{\textcolor{Chapter }{IsGorenstein}}
\logpage{[ 3, 3, 14 ]}\nobreak
\hyperdef{L}{X83CBA38E81DC4A72}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGorenstein({\mdseries\slshape M})\index{IsGorenstein@\texttt{IsGorenstein}}
\label{IsGorenstein}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is Gorenstein (depends on the specific Abelian category). }

 

\subsection{\textcolor{Chapter }{IsKoszul}}
\logpage{[ 3, 3, 15 ]}\nobreak
\hyperdef{L}{X7E7AEFBE7801F196}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsKoszul({\mdseries\slshape M})\index{IsKoszul@\texttt{IsKoszul}}
\label{IsKoszul}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} is Koszul (depends on the specific Abelian category). }

 

\subsection{\textcolor{Chapter }{HasConstantRank}}
\logpage{[ 3, 3, 16 ]}\nobreak
\hyperdef{L}{X7A20E4597A707218}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasConstantRank({\mdseries\slshape M})\index{HasConstantRank@\texttt{HasConstantRank}}
\label{HasConstantRank}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} has constant rank. \\
 (no method installed) }

 

\subsection{\textcolor{Chapter }{ConstructedAsAnIdeal}}
\logpage{[ 3, 3, 17 ]}\nobreak
\hyperdef{L}{X7CD026F185A5E41E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ConstructedAsAnIdeal({\mdseries\slshape J})\index{ConstructedAsAnIdeal@\texttt{ConstructedAsAnIdeal}}
\label{ConstructedAsAnIdeal}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} subobject \mbox{\texttt{\mdseries\slshape J}} was constructed as an ideal. \\
 (no method installed) }

 }

 
\section{\textcolor{Chapter }{Objects: Attributes}}\label{Objects:Attributes}
\logpage{[ 3, 4, 0 ]}
\hyperdef{L}{X805B06828294072C}{}
{
  

\subsection{\textcolor{Chapter }{TorsionSubobject}}
\logpage{[ 3, 4, 1 ]}\nobreak
\hyperdef{L}{X7E6C8ED2865B6F35}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TorsionSubobject({\mdseries\slshape M})\index{TorsionSubobject@\texttt{TorsionSubobject}}
\label{TorsionSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 This constructor returns the finitely generated torsion subobject of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{TheMorphismToZero}}
\logpage{[ 3, 4, 2 ]}\nobreak
\hyperdef{L}{X82BCEE867CBE84E5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TheMorphismToZero({\mdseries\slshape M})\index{TheMorphismToZero@\texttt{TheMorphismToZero}}
\label{TheMorphismToZero}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} map



 The zero morphism from the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} to zero. }

 

\subsection{\textcolor{Chapter }{TheIdentityMorphism}}
\logpage{[ 3, 4, 3 ]}\nobreak
\hyperdef{L}{X85EFEC127CA408A1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TheIdentityMorphism({\mdseries\slshape M})\index{TheIdentityMorphism@\texttt{TheIdentityMorphism}}
\label{TheIdentityMorphism}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} map



 The identity automorphism of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{FullSubobject}}
\logpage{[ 3, 4, 4 ]}\nobreak
\hyperdef{L}{X8236B1D480ED04CD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FullSubobject({\mdseries\slshape M})\index{FullSubobject@\texttt{FullSubobject}}
\label{FullSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 The \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} as a subobject of itself. }

 

\subsection{\textcolor{Chapter }{ZeroSubobject}}
\logpage{[ 3, 4, 5 ]}\nobreak
\hyperdef{L}{X81679BB58541E235}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ZeroSubobject({\mdseries\slshape M})\index{ZeroSubobject@\texttt{ZeroSubobject}}
\label{ZeroSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 The zero subobject of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{EmbeddingInSuperObject}}
\logpage{[ 3, 4, 6 ]}\nobreak
\hyperdef{L}{X7C16CBCC78C56CDC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{EmbeddingInSuperObject({\mdseries\slshape N})\index{EmbeddingInSuperObject@\texttt{EmbeddingInSuperObject}}
\label{EmbeddingInSuperObject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} map



 In case \mbox{\texttt{\mdseries\slshape N}} was defined as a subobject of some object $L$ the embedding of \mbox{\texttt{\mdseries\slshape N}} in $L$ is returned. }

 

\subsection{\textcolor{Chapter }{SuperObject (for subobjects)}}
\logpage{[ 3, 4, 7 ]}\nobreak
\hyperdef{L}{X7ADC5B647C8E6D8C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SuperObject({\mdseries\slshape M})\index{SuperObject@\texttt{SuperObject}!for subobjects}
\label{SuperObject:for subobjects}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 In case \mbox{\texttt{\mdseries\slshape M}} was defined as a subobject of some object $L$ the super object $L$ is returned. }

 

\subsection{\textcolor{Chapter }{FactorObject}}
\logpage{[ 3, 4, 8 ]}\nobreak
\hyperdef{L}{X7FB9A7C3785D92DC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FactorObject({\mdseries\slshape N})\index{FactorObject@\texttt{FactorObject}}
\label{FactorObject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 In case \mbox{\texttt{\mdseries\slshape N}} was defined as a subobject of some object $L$ the factor object $L/$\mbox{\texttt{\mdseries\slshape N}} is returned. }

 

\subsection{\textcolor{Chapter }{UnderlyingSubobject}}
\logpage{[ 3, 4, 9 ]}\nobreak
\hyperdef{L}{X7A23EAD67E6B85C1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{UnderlyingSubobject({\mdseries\slshape M})\index{UnderlyingSubobject@\texttt{UnderlyingSubobject}}
\label{UnderlyingSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 In case \mbox{\texttt{\mdseries\slshape M}} was defined as the object underlying a subobject $L$ then $L$ is returned. \\
 (no method installed) }

 

\subsection{\textcolor{Chapter }{NatTrIdToHomHom{\textunderscore}R (for morphisms)}}
\logpage{[ 3, 4, 10 ]}\nobreak
\hyperdef{L}{X7FC5F0AF7CF5DC67}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NatTrIdToHomHom{\textunderscore}R({\mdseries\slshape M})\index{NatTrIdToHomHomR@\texttt{NatTrIdToHomHom{\textunderscore}R}!for morphisms}
\label{NatTrIdToHomHomR:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural evaluation morphism from the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} to its double dual \texttt{HomHom}$($\mbox{\texttt{\mdseries\slshape M}}$)$. }

 

\subsection{\textcolor{Chapter }{Annihilator (for static objects)}}
\logpage{[ 3, 4, 11 ]}\nobreak
\hyperdef{L}{X81889C777A22A5D3}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Annihilator({\mdseries\slshape M})\index{Annihilator@\texttt{Annihilator}!for static objects}
\label{Annihilator:for static objects}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 The annihilator of the object \mbox{\texttt{\mdseries\slshape M}} as a subobject of the structure object. }

 

\subsection{\textcolor{Chapter }{EndomorphismRing (for static objects)}}
\logpage{[ 3, 4, 12 ]}\nobreak
\hyperdef{L}{X809A7C3882912EFD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{EndomorphismRing({\mdseries\slshape M})\index{EndomorphismRing@\texttt{EndomorphismRing}!for static objects}
\label{EndomorphismRing:for static objects}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 The endomorphism ring of the object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{UnitObject}}
\logpage{[ 3, 4, 13 ]}\nobreak
\hyperdef{L}{X85F3D7CF81E85423}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{UnitObject({\mdseries\slshape M})\index{UnitObject@\texttt{UnitObject}}
\label{UnitObject}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
a Chern character



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

  

\subsection{\textcolor{Chapter }{RankOfObject}}
\logpage{[ 3, 4, 14 ]}\nobreak
\hyperdef{L}{X7E192147807E66DA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RankOfObject({\mdseries\slshape M})\index{RankOfObject@\texttt{RankOfObject}}
\label{RankOfObject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer



 The projective rank of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{ProjectiveDimension}}
\logpage{[ 3, 4, 15 ]}\nobreak
\hyperdef{L}{X84FDF25D797B874B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ProjectiveDimension({\mdseries\slshape M})\index{ProjectiveDimension@\texttt{ProjectiveDimension}}
\label{ProjectiveDimension}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer



 The projective dimension of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{DegreeOfTorsionFreeness}}
\logpage{[ 3, 4, 16 ]}\nobreak
\hyperdef{L}{X807BA3C583D3F1EB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DegreeOfTorsionFreeness({\mdseries\slshape M})\index{DegreeOfTorsionFreeness@\texttt{DegreeOfTorsionFreeness}}
\label{DegreeOfTorsionFreeness}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer of infinity



 Auslander's degree of torsion-freeness of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. It is set to infinity only for \mbox{\texttt{\mdseries\slshape M}}$=0$. }

 

\subsection{\textcolor{Chapter }{Grade}}
\logpage{[ 3, 4, 17 ]}\nobreak
\hyperdef{L}{X7E32A9FC81E0E101}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Grade({\mdseries\slshape M})\index{Grade@\texttt{Grade}}
\label{Grade}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer of infinity



 The grade of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. It is set to infinity if \mbox{\texttt{\mdseries\slshape M}}$=0$. Another name for this operation is \texttt{Depth}. }

 

\subsection{\textcolor{Chapter }{PurityFiltration}}
\logpage{[ 3, 4, 18 ]}\nobreak
\hyperdef{L}{X816186E587563E3F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{PurityFiltration({\mdseries\slshape M})\index{PurityFiltration@\texttt{PurityFiltration}}
\label{PurityFiltration}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} filtration



 The purity filtration of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{CodegreeOfPurity}}
\logpage{[ 3, 4, 19 ]}\nobreak
\hyperdef{L}{X8021C33D85444081}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CodegreeOfPurity({\mdseries\slshape M})\index{CodegreeOfPurity@\texttt{CodegreeOfPurity}}
\label{CodegreeOfPurity}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a list of nonnegative integers



 The codegree of purity of the \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{HilbertPolynomial}}
\logpage{[ 3, 4, 20 ]}\nobreak
\hyperdef{L}{X84299BAB807A1E13}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HilbertPolynomial({\mdseries\slshape M})\index{HilbertPolynomial@\texttt{HilbertPolynomial}}
\label{HilbertPolynomial}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a univariate polynomial with rational coefficients



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{AffineDimension}}
\logpage{[ 3, 4, 21 ]}\nobreak
\hyperdef{L}{X7BC36CC67CB09858}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AffineDimension({\mdseries\slshape M})\index{AffineDimension@\texttt{AffineDimension}}
\label{AffineDimension}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{ProjectiveDegree}}
\logpage{[ 3, 4, 22 ]}\nobreak
\hyperdef{L}{X82A1B55879AB1742}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ProjectiveDegree({\mdseries\slshape M})\index{ProjectiveDegree@\texttt{ProjectiveDegree}}
\label{ProjectiveDegree}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a nonnegative integer



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{ConstantTermOfHilbertPolynomialn}}
\logpage{[ 3, 4, 23 ]}\nobreak
\hyperdef{L}{X791B772A7E368A88}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ConstantTermOfHilbertPolynomialn({\mdseries\slshape M})\index{ConstantTermOfHilbertPolynomialn@\texttt{ConstantTermOfHilbertPolynomialn}}
\label{ConstantTermOfHilbertPolynomialn}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
an integer



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{ElementOfGrothendieckGroup}}
\logpage{[ 3, 4, 24 ]}\nobreak
\hyperdef{L}{X7FC735717985B092}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ElementOfGrothendieckGroup({\mdseries\slshape M})\index{ElementOfGrothendieckGroup@\texttt{ElementOfGrothendieckGroup}}
\label{ElementOfGrothendieckGroup}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
an element of the Grothendieck group of a projective space



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{ChernPolynomial}}
\logpage{[ 3, 4, 25 ]}\nobreak
\hyperdef{L}{X81024DAF8695083E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ChernPolynomial({\mdseries\slshape M})\index{ChernPolynomial@\texttt{ChernPolynomial}}
\label{ChernPolynomial}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
a Chern polynomial with rank



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 

\subsection{\textcolor{Chapter }{ChernCharacter}}
\logpage{[ 3, 4, 26 ]}\nobreak
\hyperdef{L}{X79942F6187DF4434}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ChernCharacter({\mdseries\slshape M})\index{ChernCharacter@\texttt{ChernCharacter}}
\label{ChernCharacter}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
a Chern character



 \mbox{\texttt{\mdseries\slshape M}} is a \textsf{homalg} object. }

 }

 
\section{\textcolor{Chapter }{Objects: Operations and Functions}}\label{Objects:Operations}
\logpage{[ 3, 5, 0 ]}
\hyperdef{L}{X7B4D450B78A86F8B}{}
{
  

\subsection{\textcolor{Chapter }{CurrentResolution}}
\logpage{[ 3, 5, 1 ]}\nobreak
\hyperdef{L}{X87AEDF2985D65DCC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CurrentResolution({\mdseries\slshape M})\index{CurrentResolution@\texttt{CurrentResolution}}
\label{CurrentResolution}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The computed (part of a) resolution of the static object \mbox{\texttt{\mdseries\slshape M}}. }

 

\subsection{\textcolor{Chapter }{UnderlyingObject (for subobjects)}}
\logpage{[ 3, 5, 2 ]}\nobreak
\hyperdef{L}{X81FACFAC828CA2F9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{UnderlyingObject({\mdseries\slshape M})\index{UnderlyingObject@\texttt{UnderlyingObject}!for subobjects}
\label{UnderlyingObject:for subobjects}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 In case \mbox{\texttt{\mdseries\slshape M}} was defined as a subobject of some object $L$ the object underlying the subobject $M$ is returned. }

 

\subsection{\textcolor{Chapter }{Saturate (for ideals)}}
\logpage{[ 3, 5, 3 ]}\nobreak
\hyperdef{L}{X82AE15AF82136AE0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Saturate({\mdseries\slshape K, J})\index{Saturate@\texttt{Saturate}!for ideals}
\label{Saturate:for ideals}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} ideal



 Compute the saturation ideal $\mbox{\texttt{\mdseries\slshape K}}:\mbox{\texttt{\mdseries\slshape J}}^\infty$ of the ideals \mbox{\texttt{\mdseries\slshape K}} and \mbox{\texttt{\mdseries\slshape J}}. 

 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@Display( ZZ );|
  <An internal ring>
  !gapprompt@gap>| !gapinput@m := LeftSubmodule( "2", ZZ );|
  <A principal (left) ideal given by a cyclic generator>
  !gapprompt@gap>| !gapinput@Display( m );|
  [ [  2 ] ]
  
  A (left) ideal generated by the entry of the above matrix
  !gapprompt@gap>| !gapinput@J := LeftSubmodule( "3", ZZ );|
  <A principal (left) ideal given by a cyclic generator>
  !gapprompt@gap>| !gapinput@Display( J );|
  [ [  3 ] ]
  
  A (left) ideal generated by the entry of the above matrix
  !gapprompt@gap>| !gapinput@I := Intersect( J, m^3 );|
  <A principal (left) ideal given by a cyclic generator>
  !gapprompt@gap>| !gapinput@Display( I );|
  [ [  -24 ] ]
  
  A (left) ideal generated by the entry of the above matrix
  !gapprompt@gap>| !gapinput@Im := SubobjectQuotient( I, m );|
  <A principal (left) ideal of rank 1 on a free generator>
  !gapprompt@gap>| !gapinput@Display( Im );|
  [ [  -12 ] ]
  
  A (left) ideal generated by the entry of the above matrix
  !gapprompt@gap>| !gapinput@I_m := Saturate( I, m );|
  <A principal (left) ideal of rank 1 on a free generator>
  !gapprompt@gap>| !gapinput@Display( I_m );|
  [ [  -3 ] ]
  
  A (left) ideal generated by the entry of the above matrix
  !gapprompt@gap>| !gapinput@I_m = J;|
  true
\end{Verbatim}
 

 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( Saturate,
          "for homalg subobjects of static objects",
          [ IsStaticFinitelyPresentedSubobjectRep, IsStaticFinitelyPresentedSubobjectRep ],
          
    function( K, J )
      local quotient_last, quotient;
      
      quotient_last := SubobjectQuotient( K, J );
      
      quotient := SubobjectQuotient( quotient_last, J );
      
      while not IsSubset( quotient_last, quotient ) do
          quotient_last := quotient;
          quotient := SubobjectQuotient( quotient_last, J );
      od;
      
      return quotient_last;
      
  end );
  
  
  InstallMethod( \-,	## a geometrically motivated definition
          "for homalg subobjects of static objects",
          [ IsStaticFinitelyPresentedSubobjectRep, IsStaticFinitelyPresentedSubobjectRep ],
          
    function( K, J )
      
      return Saturate( K, J );
      
  end );
\end{Verbatim}
 }

 }

  }

   
\chapter{\textcolor{Chapter }{Morphisms}}\label{Morphisms}
\logpage{[ 4, 0, 0 ]}
\hyperdef{L}{X7BEB6C617FED52DA}{}
{
  
\section{\textcolor{Chapter }{Morphisms: Categories and Representations}}\label{Morphisms:Category}
\logpage{[ 4, 1, 0 ]}
\hyperdef{L}{X7DE206257C909BDE}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgMorphism}}
\logpage{[ 4, 1, 1 ]}\nobreak
\hyperdef{L}{X7D0F89828196DFF0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgMorphism({\mdseries\slshape phi})\index{IsHomalgMorphism@\texttt{IsHomalgMorphism}}
\label{IsHomalgMorphism}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 This is the super \textsf{GAP}-category which will include the \textsf{GAP}-categories \texttt{IsHomalgStaticMorphism} (\ref{IsHomalgStaticMorphism}) and \texttt{IsHomalgChainMorphism} (\ref{IsHomalgChainMorphism}). We need this \textsf{GAP}-category to be able to build complexes with *objects* being objects of \textsf{homalg} categories or again complexes. We need this GAP-category to be able to build
chain morphisms with *morphisms* being morphisms of \textsf{homalg} categories or again chain morphisms. \\
 CAUTION: Never let \textsf{homalg} morphisms (which are not endomorphisms) be multiplicative elements!! 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareCategory( "IsHomalgMorphism",
          IsHomalgStaticObjectOrMorphism and
          IsAdditiveElementWithInverse );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsHomalgStaticMorphism}}
\logpage{[ 4, 1, 2 ]}\nobreak
\hyperdef{L}{X81458CA5836D582F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgStaticMorphism({\mdseries\slshape phi})\index{IsHomalgStaticMorphism@\texttt{IsHomalgStaticMorphism}}
\label{IsHomalgStaticMorphism}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 This is the super \textsf{GAP}-category which will include the \textsf{GAP}-categories \texttt{IsHomalgMap}, etc. \\
 CAUTION: Never let homalg morphisms (which are not endomorphisms) be
multiplicative elements!! 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareCategory( "IsHomalgStaticMorphism",
          IsHomalgMorphism );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsHomalgEndomorphism}}
\logpage{[ 4, 1, 3 ]}\nobreak
\hyperdef{L}{X7933C51A842ABA32}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgEndomorphism({\mdseries\slshape phi})\index{IsHomalgEndomorphism@\texttt{IsHomalgEndomorphism}}
\label{IsHomalgEndomorphism}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 This is the super \textsf{GAP}-category which will include the \textsf{GAP}-categories \texttt{IsHomalgSelfMap}, \texttt{IsHomalgChainEndomorphism} (\ref{IsHomalgChainEndomorphism}), etc. be multiplicative elements!! 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareCategory( "IsHomalgEndomorphism",
          IsHomalgMorphism and
          IsMultiplicativeElementWithInverse );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsMorphismOfFinitelyGeneratedObjectsRep}}
\logpage{[ 4, 1, 4 ]}\nobreak
\hyperdef{L}{X823580787F23EB10}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMorphismOfFinitelyGeneratedObjectsRep({\mdseries\slshape phi})\index{IsMorphismOfFinitelyGeneratedObjectsRep@\texttt{IsMorphism}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Generated}\-\texttt{ObjectsRep}}
\label{IsMorphismOfFinitelyGeneratedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of morphisms of finitley generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgMorphism} (\ref{IsHomalgMorphism}).) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsMorphismOfFinitelyGeneratedObjectsRep",
          IsHomalgMorphism,
          [ ] );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{IsStaticMorphismOfFinitelyGeneratedObjectsRep}}
\logpage{[ 4, 1, 5 ]}\nobreak
\hyperdef{L}{X84A97E897C74B492}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStaticMorphismOfFinitelyGeneratedObjectsRep({\mdseries\slshape phi})\index{IsStaticMorphismOfFinitelyGeneratedObjectsRep@\texttt{IsStatic}\-\texttt{Morphism}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Generated}\-\texttt{ObjectsRep}}
\label{IsStaticMorphismOfFinitelyGeneratedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of static morphisms of finitley generated \textsf{homalg} static objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgStaticMorphism} (\ref{IsHomalgStaticMorphism}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsMorphismOfFinitelyGeneratedObjectsRep} (\ref{IsMorphismOfFinitelyGeneratedObjectsRep}).) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  DeclareRepresentation( "IsStaticMorphismOfFinitelyGeneratedObjectsRep",
          IsHomalgStaticMorphism and
          IsMorphismOfFinitelyGeneratedObjectsRep,
          [ ] );
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Morphisms: Constructors}}\label{Morphisms:Constructors}
\logpage{[ 4, 2, 0 ]}
\hyperdef{L}{X86A95A9B85D8B58B}{}
{
  }

 
\section{\textcolor{Chapter }{Morphisms: Properties}}\label{Morphisms:Properties}
\logpage{[ 4, 3, 0 ]}
\hyperdef{L}{X7B0B60BD79756A00}{}
{
  

\subsection{\textcolor{Chapter }{IsMorphism}}
\logpage{[ 4, 3, 1 ]}\nobreak
\hyperdef{L}{X7F66120A814DC16B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMorphism({\mdseries\slshape phi})\index{IsMorphism@\texttt{IsMorphism}}
\label{IsMorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape phi}} is a well-defined map, i.e. independent of all involved presentations. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedMorphism}}
\logpage{[ 4, 3, 2 ]}\nobreak
\hyperdef{L}{X7F210D987C9DCC11}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedMorphism({\mdseries\slshape phi})\index{IsGeneralizedMorphism@\texttt{IsGeneralizedMorphism}}
\label{IsGeneralizedMorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape phi}} is a generalized morphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedEpimorphism}}
\logpage{[ 4, 3, 3 ]}\nobreak
\hyperdef{L}{X7AD32A427B247366}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedEpimorphism({\mdseries\slshape phi})\index{IsGeneralizedEpimorphism@\texttt{IsGeneralizedEpimorphism}}
\label{IsGeneralizedEpimorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape phi}} is a generalized epimorphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedMonomorphism}}
\logpage{[ 4, 3, 4 ]}\nobreak
\hyperdef{L}{X83C68AEA7FE4AA29}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedMonomorphism({\mdseries\slshape phi})\index{IsGeneralizedMonomorphism@\texttt{IsGeneralizedMonomorphism}}
\label{IsGeneralizedMonomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape phi}} is a generalized monomorphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedIsomorphism}}
\logpage{[ 4, 3, 5 ]}\nobreak
\hyperdef{L}{X83F05F467DA5EA4D}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedIsomorphism({\mdseries\slshape phi})\index{IsGeneralizedIsomorphism@\texttt{IsGeneralizedIsomorphism}}
\label{IsGeneralizedIsomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape phi}} is a generalized isomorphism. }

 

\subsection{\textcolor{Chapter }{IsOne}}
\logpage{[ 4, 3, 6 ]}\nobreak
\hyperdef{L}{X814D78347858EC13}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsOne({\mdseries\slshape phi})\index{IsOne@\texttt{IsOne}}
\label{IsOne}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is the identity morphism. }

 

\subsection{\textcolor{Chapter }{IsIdempotent}}
\logpage{[ 4, 3, 7 ]}\nobreak
\hyperdef{L}{X7CB5896082D29173}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsIdempotent({\mdseries\slshape phi})\index{IsIdempotent@\texttt{IsIdempotent}}
\label{IsIdempotent}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is an automorphism. }

 

\subsection{\textcolor{Chapter }{IsMonomorphism}}
\logpage{[ 4, 3, 8 ]}\nobreak
\hyperdef{L}{X78AD1FDD7F53932C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMonomorphism({\mdseries\slshape phi})\index{IsMonomorphism@\texttt{IsMonomorphism}}
\label{IsMonomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is a monomorphism. }

 

\subsection{\textcolor{Chapter }{IsEpimorphism}}
\logpage{[ 4, 3, 9 ]}\nobreak
\hyperdef{L}{X8724CEF182DC4064}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsEpimorphism({\mdseries\slshape phi})\index{IsEpimorphism@\texttt{IsEpimorphism}}
\label{IsEpimorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is an epimorphism. }

 

\subsection{\textcolor{Chapter }{IsSplitMonomorphism}}
\logpage{[ 4, 3, 10 ]}\nobreak
\hyperdef{L}{X7DFACF1F7D7F7EE9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSplitMonomorphism({\mdseries\slshape phi})\index{IsSplitMonomorphism@\texttt{IsSplitMonomorphism}}
\label{IsSplitMonomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is a split monomorphism. \\
 }

 

\subsection{\textcolor{Chapter }{IsSplitEpimorphism}}
\logpage{[ 4, 3, 11 ]}\nobreak
\hyperdef{L}{X80A66EFA862E56BC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSplitEpimorphism({\mdseries\slshape phi})\index{IsSplitEpimorphism@\texttt{IsSplitEpimorphism}}
\label{IsSplitEpimorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is a split epimorphism. \\
 }

 

\subsection{\textcolor{Chapter }{IsIsomorphism}}
\logpage{[ 4, 3, 12 ]}\nobreak
\hyperdef{L}{X7E07BBF57B92BA56}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsIsomorphism({\mdseries\slshape phi})\index{IsIsomorphism@\texttt{IsIsomorphism}}
\label{IsIsomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is an isomorphism. }

 

\subsection{\textcolor{Chapter }{IsAutomorphism}}
\logpage{[ 4, 3, 13 ]}\nobreak
\hyperdef{L}{X7F30E3D37E9D7F37}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAutomorphism({\mdseries\slshape phi})\index{IsAutomorphism@\texttt{IsAutomorphism}}
\label{IsAutomorphism}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} is an automorphism. }

 }

 
\section{\textcolor{Chapter }{Morphisms: Attributes}}\label{Morphisms:Attributes}
\logpage{[ 4, 4, 0 ]}
\hyperdef{L}{X806EEA4685A4A3F3}{}
{
  

\subsection{\textcolor{Chapter }{Source}}
\logpage{[ 4, 4, 1 ]}\nobreak
\hyperdef{L}{X7DE8173F80E07AB1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Source({\mdseries\slshape phi})\index{Source@\texttt{Source}}
\label{Source}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 The source of the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}}. }

 

\subsection{\textcolor{Chapter }{Range}}
\logpage{[ 4, 4, 2 ]}\nobreak
\hyperdef{L}{X829F76BB80BD55DB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Range({\mdseries\slshape phi})\index{Range@\texttt{Range}}
\label{Range}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} object



 The target (range) of the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}}. }

 

\subsection{\textcolor{Chapter }{CokernelEpi (for morphisms)}}
\logpage{[ 4, 4, 3 ]}\nobreak
\hyperdef{L}{X7F3927E287087B64}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CokernelEpi({\mdseries\slshape phi})\index{CokernelEpi@\texttt{CokernelEpi}!for morphisms}
\label{CokernelEpi:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural epimorphism from the \texttt{Range}$($\mbox{\texttt{\mdseries\slshape phi}}$)$ onto the \texttt{Cokernel}$($\mbox{\texttt{\mdseries\slshape phi}}$)$. }

 

\subsection{\textcolor{Chapter }{CokernelNaturalGeneralizedIsomorphism (for morphisms)}}
\logpage{[ 4, 4, 4 ]}\nobreak
\hyperdef{L}{X7D71AE8E838712D7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CokernelNaturalGeneralizedIsomorphism({\mdseries\slshape phi})\index{CokernelNaturalGeneralizedIsomorphism@\texttt{Cokernel}\-\texttt{Natural}\-\texttt{Generalized}\-\texttt{Isomorphism}!for morphisms}
\label{CokernelNaturalGeneralizedIsomorphism:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural generalized isomorphism from the \texttt{Cokernel}$($\mbox{\texttt{\mdseries\slshape phi}}$)$ onto the \texttt{Range}$($\mbox{\texttt{\mdseries\slshape phi}}$)$. }

 

\subsection{\textcolor{Chapter }{KernelSubobject}}
\logpage{[ 4, 4, 5 ]}\nobreak
\hyperdef{L}{X87C00FFB79FA93A8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{KernelSubobject({\mdseries\slshape phi})\index{KernelSubobject@\texttt{KernelSubobject}}
\label{KernelSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 This constructor returns the finitely generated kernel of the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} as a subobject of the \textsf{homalg} object \texttt{Source}(\mbox{\texttt{\mdseries\slshape phi}}) with generators given by the syzygies of \mbox{\texttt{\mdseries\slshape phi}}. }

 

\subsection{\textcolor{Chapter }{KernelEmb (for morphisms)}}
\logpage{[ 4, 4, 6 ]}\nobreak
\hyperdef{L}{X82672DB279FAEFCC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{KernelEmb({\mdseries\slshape phi})\index{KernelEmb@\texttt{KernelEmb}!for morphisms}
\label{KernelEmb:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural embedding of the \texttt{Kernel}$($\mbox{\texttt{\mdseries\slshape phi}}$)$ into the \texttt{Source}$($\mbox{\texttt{\mdseries\slshape phi}}$)$. }

 

\subsection{\textcolor{Chapter }{ImageSubobject}}
\logpage{[ 4, 4, 7 ]}\nobreak
\hyperdef{L}{X82FB6A4687E778D5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ImageSubobject({\mdseries\slshape phi})\index{ImageSubobject@\texttt{ImageSubobject}}
\label{ImageSubobject}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 This constructor returns the finitely generated image of the \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} as a subobject of the \textsf{homalg} object \texttt{Range}(\mbox{\texttt{\mdseries\slshape phi}}) with generators given by \mbox{\texttt{\mdseries\slshape phi}} applied to the generators of its source object. }

 

\subsection{\textcolor{Chapter }{ImageObjectEmb (for morphisms)}}
\logpage{[ 4, 4, 8 ]}\nobreak
\hyperdef{L}{X85FA7C19800F72B2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ImageObjectEmb({\mdseries\slshape phi})\index{ImageObjectEmb@\texttt{ImageObjectEmb}!for morphisms}
\label{ImageObjectEmb:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural embedding of the \texttt{ImageObject}$($\mbox{\texttt{\mdseries\slshape phi}}$)$ into the \texttt{Range}$($\mbox{\texttt{\mdseries\slshape phi}}$)$. }

 

\subsection{\textcolor{Chapter }{ImageObjectEpi (for morphisms)}}
\logpage{[ 4, 4, 9 ]}\nobreak
\hyperdef{L}{X86E3E1BA7BCE4D66}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ImageObjectEpi({\mdseries\slshape phi})\index{ImageObjectEpi@\texttt{ImageObjectEpi}!for morphisms}
\label{ImageObjectEpi:for morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The natural epimorphism from the \texttt{Source}$($\mbox{\texttt{\mdseries\slshape phi}}$)$ onto the \texttt{ImageObject}$($\mbox{\texttt{\mdseries\slshape phi}}$)$. }

 

\subsection{\textcolor{Chapter }{MorphismAid}}
\logpage{[ 4, 4, 10 ]}\nobreak
\hyperdef{L}{X823682157C6B4D63}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MorphismAid({\mdseries\slshape phi})\index{MorphismAid@\texttt{MorphismAid}}
\label{MorphismAid}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The morphism aid map of a true generalized map. \\
 (no method installed) }

 

\subsection{\textcolor{Chapter }{GeneralizedInverse}}
\logpage{[ 4, 4, 11 ]}\nobreak
\hyperdef{L}{X8569D5BE8405F643}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneralizedInverse({\mdseries\slshape phi})\index{GeneralizedInverse@\texttt{GeneralizedInverse}}
\label{GeneralizedInverse}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} morphism



 The generalized inverse of the epimorphism \mbox{\texttt{\mdseries\slshape phi}} (cf. \cite[Cor. 4.8]{BaSF})). }

 

\subsection{\textcolor{Chapter }{DegreeOfMorphism}}
\logpage{[ 4, 4, 12 ]}\nobreak
\hyperdef{L}{X8500C49A784C8EDC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DegreeOfMorphism({\mdseries\slshape phi})\index{DegreeOfMorphism@\texttt{DegreeOfMorphism}}
\label{DegreeOfMorphism}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
an integer



 The degree of the morphism \mbox{\texttt{\mdseries\slshape phi}} between graded objects. \\
 (no method installed) }

 }

 
\section{\textcolor{Chapter }{Morphisms: Operations and Functions}}\label{Morphisms:Operations and Functions}
\logpage{[ 4, 5, 0 ]}
\hyperdef{L}{X789623548056F7B7}{}
{
  

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for morphisms)}}
\logpage{[ 4, 5, 1 ]}\nobreak
\hyperdef{L}{X7B4F9EF27A241520}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape phi})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for morphisms}
\label{ByASmallerPresentation:for morphisms}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} map



 It invokes \texttt{ByASmallerPresentation} for \textsf{homalg} (static) objects. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg morphisms",
          [ IsStaticMorphismOfFinitelyGeneratedObjectsRep ],
          
    function( phi )
      
      ByASmallerPresentation( Source( phi ) );
      ByASmallerPresentation( Range( phi ) );
      
      return DecideZero( phi );
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape phi}} and returns it. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );|
  <A 2 x 3 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@N := HomalgMatrix( "[ 2, 3, 4, 5,   6, 7, 8, 9 ]", 2, 4, ZZ );|
  <A 2 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@N := LeftPresentation( N );|
  <A non-torsion left module presented by 2 relations for 4 generators>
  !gapprompt@gap>| !gapinput@mat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@1, 0, -2, -4, \|
  !gapprompt@>| !gapinput@0, 1,  4,  7, \|
  !gapprompt@>| !gapinput@1, 0, -2, -4  \|
  !gapprompt@>| !gapinput@]", 3, 4, ZZ );|
  <A 3 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@phi := HomalgMap( mat, M, N );|
  <A "homomorphism" of left modules>
  !gapprompt@gap>| !gapinput@IsMorphism( phi );|
  true
  !gapprompt@gap>| !gapinput@phi;|
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@Display( phi );|
  [ [   1,   0,  -2,  -4 ],
    [   0,   1,   4,   7 ],
    [   1,   0,  -2,  -4 ] ]
  
  the map is currently represented by the above 3 x 4 matrix
  !gapprompt@gap>| !gapinput@ByASmallerPresentation( phi );|
  <A non-zero homomorphism of left modules>
  !gapprompt@gap>| !gapinput@Display( phi );|
  [ [   0,   0,   0 ],
    [   1,  -1,  -2 ] ]
  
  the map is currently represented by the above 2 x 3 matrix
  !gapprompt@gap>| !gapinput@M;|
  <A rank 1 left module presented by 1 relation for 2 generators>
  !gapprompt@gap>| !gapinput@Display( M );|
  Z/< 3 > + Z^(1 x 1)
  !gapprompt@gap>| !gapinput@N;|
  <A rank 2 left module presented by 1 relation for 3 generators>
  !gapprompt@gap>| !gapinput@Display( N );|
  Z/< 4 > + Z^(1 x 2)
\end{Verbatim}
 }

 }

  }

   
\chapter{\textcolor{Chapter }{Elements}}\label{Elements}
\logpage{[ 5, 0, 0 ]}
\hyperdef{L}{X79B130FC7906FB4C}{}
{
  An element of an object $M$ is internally represented by a morphism from the ``structure object'' to the object $M$. In particular, the data structure for object elements automatically profits
from the intrinsic realization of morphisms in the \textsf{homalg} project. 
\section{\textcolor{Chapter }{Elements: Category and Representations}}\label{Elements:Category}
\logpage{[ 5, 1, 0 ]}
\hyperdef{L}{X7FBC2FC77E93856C}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgElement}}
\logpage{[ 5, 1, 1 ]}\nobreak
\hyperdef{L}{X784BBB2A782DB774}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgElement({\mdseries\slshape M})\index{IsHomalgElement@\texttt{IsHomalgElement}}
\label{IsHomalgElement}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of object elements. }

 

\subsection{\textcolor{Chapter }{IsElementOfAnObjectGivenByAMorphismRep}}
\logpage{[ 5, 1, 2 ]}\nobreak
\hyperdef{L}{X87F3740E85E9AA51}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsElementOfAnObjectGivenByAMorphismRep({\mdseries\slshape M})\index{IsElementOfAnObjectGivenByAMorphismRep@\texttt{IsElement}\-\texttt{Of}\-\texttt{An}\-\texttt{Object}\-\texttt{Given}\-\texttt{By}\-\texttt{A}\-\texttt{MorphismRep}}
\label{IsElementOfAnObjectGivenByAMorphismRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of elements of finitley presented objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgElement} (\ref{IsHomalgElement}).) }

 }

 
\section{\textcolor{Chapter }{Elements: Constructors}}\label{Elements:Constructors}
\logpage{[ 5, 2, 0 ]}
\hyperdef{L}{X8159567F8721ADCA}{}
{
  }

 
\section{\textcolor{Chapter }{Elements: Properties}}\label{Elements:Properties}
\logpage{[ 5, 3, 0 ]}
\hyperdef{L}{X7C36DB5C81520E55}{}
{
  

\subsection{\textcolor{Chapter }{IsZero (for elements)}}
\logpage{[ 5, 3, 1 ]}\nobreak
\hyperdef{L}{X7D16A0BB80BA69DC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsZero({\mdseries\slshape m})\index{IsZero@\texttt{IsZero}!for elements}
\label{IsZero:for elements}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the object element \mbox{\texttt{\mdseries\slshape m}} is zero. }

 

\subsection{\textcolor{Chapter }{IsCyclicGenerator}}
\logpage{[ 5, 3, 2 ]}\nobreak
\hyperdef{L}{X7886344B7A8B9304}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCyclicGenerator({\mdseries\slshape m})\index{IsCyclicGenerator@\texttt{IsCyclicGenerator}}
\label{IsCyclicGenerator}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the object element \mbox{\texttt{\mdseries\slshape m}} is a cyclic generator. }

 

\subsection{\textcolor{Chapter }{IsTorsion}}
\logpage{[ 5, 3, 3 ]}\nobreak
\hyperdef{L}{X80C6B26284721409}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTorsion({\mdseries\slshape m})\index{IsTorsion@\texttt{IsTorsion}}
\label{IsTorsion}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the object element \mbox{\texttt{\mdseries\slshape m}} is a torsion element. }

 }

 
\section{\textcolor{Chapter }{Elements: Attributes}}\label{Elements:Attributes}
\logpage{[ 5, 4, 0 ]}
\hyperdef{L}{X875351A77DEB949A}{}
{
   

\subsection{\textcolor{Chapter }{Annihilator (for elements)}}
\logpage{[ 5, 4, 1 ]}\nobreak
\hyperdef{L}{X8557F75878DEEA58}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Annihilator({\mdseries\slshape e})\index{Annihilator@\texttt{Annihilator}!for elements}
\label{Annihilator:for elements}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} subobject



 The annihilator of the object element \mbox{\texttt{\mdseries\slshape e}} as a subobject of the structure object. }

 }

 
\section{\textcolor{Chapter }{Elements: Operations and Functions}}\label{Elements:Operations}
\logpage{[ 5, 5, 0 ]}
\hyperdef{L}{X865C489C7FE750A9}{}
{
  

\subsection{\textcolor{Chapter }{in (for elements)}}
\logpage{[ 5, 5, 1 ]}\nobreak
\hyperdef{L}{X7A4ED0528640EEFE}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{in({\mdseries\slshape m, N})\index{in@\texttt{in}!for elements}
\label{in:for elements}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Is the element \mbox{\texttt{\mdseries\slshape m}} of the object $M$ included in the subobject \mbox{\texttt{\mdseries\slshape N}}$\leq M$, i.e., does the morphism (with the unit object as source and $M$ as target) underling the element \mbox{\texttt{\mdseries\slshape m}} of $M$ factor over the subobject morphism \mbox{\texttt{\mdseries\slshape N}}$\to M$? 

 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := 2 * ZZ;|
  <A free left module of rank 2 on free generators>
  !gapprompt@gap>| !gapinput@a := HomalgModuleElement( "[ 6, 0 ]", M );|
  ( 6, 0 )
  !gapprompt@gap>| !gapinput@N := Subobject( HomalgMap( "[ 2, 0 ]", 1 * ZZ, M ) );|
  <A free left submodule given by a cyclic generator>
  !gapprompt@gap>| !gapinput@K := Subobject( HomalgMap( "[ 4, 0 ]", 1 * ZZ, M ) );|
  <A free left submodule given by a cyclic generator>
  !gapprompt@gap>| !gapinput@a in M;|
  true
  !gapprompt@gap>| !gapinput@a in N;|
  true
  !gapprompt@gap>| !gapinput@a in UnderlyingObject( N );|
  true
  !gapprompt@gap>| !gapinput@a in K;|
  false
  !gapprompt@gap>| !gapinput@a in UnderlyingObject( K );|
  false
  !gapprompt@gap>| !gapinput@a in 3 * ZZ;|
  false 
\end{Verbatim}
 

 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( \in,
          "for homalg elements",
          [ IsHomalgElement, IsStaticFinitelyPresentedSubobjectRep ],
          
    function( m, N )
      local phi, psi;
      
      phi := UnderlyingMorphism( m );
      
      psi := MorphismHavingSubobjectAsItsImage( N );
      
      if not IsIdenticalObj( Range( phi ), Range( psi ) ) then
          Error( "the super object of the subobject and the range ",
                 "of the morphism underlying the element do not coincide\n" );
      fi;
      
      return IsZero( PreCompose( phi, CokernelEpi( psi ) ) );
      
  end );
\end{Verbatim}
 }

 }

  }

   
\chapter{\textcolor{Chapter }{Complexes}}\label{Complexes}
\logpage{[ 6, 0, 0 ]}
\hyperdef{L}{X79C388D385DB7CD1}{}
{
  
\section{\textcolor{Chapter }{Complexes: Category and Representations}}\label{Complexes:Category}
\logpage{[ 6, 1, 0 ]}
\hyperdef{L}{X7FF155CB7C4C7CB4}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgComplex}}
\logpage{[ 6, 1, 1 ]}\nobreak
\hyperdef{L}{X8166F9FD7BFDA207}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgComplex({\mdseries\slshape C})\index{IsHomalgComplex@\texttt{IsHomalgComplex}}
\label{IsHomalgComplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} (co)complexes. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgObject}.) }

 

\subsection{\textcolor{Chapter }{IsComplexOfFinitelyPresentedObjectsRep}}
\logpage{[ 6, 1, 2 ]}\nobreak
\hyperdef{L}{X825B40448449FFF6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsComplexOfFinitelyPresentedObjectsRep({\mdseries\slshape C})\index{IsComplexOfFinitelyPresentedObjectsRep@\texttt{IsComplex}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsComplexOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of complexes of finitley presented \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgComplex} (\ref{IsHomalgComplex}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 

\subsection{\textcolor{Chapter }{IsCocomplexOfFinitelyPresentedObjectsRep}}
\logpage{[ 6, 1, 3 ]}\nobreak
\hyperdef{L}{X7B0613FF7A702D48}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCocomplexOfFinitelyPresentedObjectsRep({\mdseries\slshape C})\index{IsCocomplexOfFinitelyPresentedObjectsRep@\texttt{IsCocomplex}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsCocomplexOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of cocomplexes of finitley presented \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgComplex} (\ref{IsHomalgComplex}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 }

 
\section{\textcolor{Chapter }{Complexes: Constructors}}\label{Complexes:Constructors}
\logpage{[ 6, 2, 0 ]}
\hyperdef{L}{X7B31FFA97FEE9B80}{}
{
  

\subsection{\textcolor{Chapter }{HomalgComplex (constructor for complexes given an object)}}
\logpage{[ 6, 2, 1 ]}\nobreak
\hyperdef{L}{X7C0D9D0178477517}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgComplex({\mdseries\slshape M[, d]})\index{HomalgComplex@\texttt{HomalgComplex}!constructor for complexes given an object}
\label{HomalgComplex:constructor for complexes given an object}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgComplex({\mdseries\slshape phi[, d]})\index{HomalgComplex@\texttt{HomalgComplex}!constructor for complexes given a morphism}
\label{HomalgComplex:constructor for complexes given a morphism}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgComplex({\mdseries\slshape C[, d]})\index{HomalgComplex@\texttt{HomalgComplex}!constructor for complexes given a complex}
\label{HomalgComplex:constructor for complexes given a complex}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgComplex({\mdseries\slshape cm[, d]})\index{HomalgComplex@\texttt{HomalgComplex}!constructor for complexes given a chain morphism}
\label{HomalgComplex:constructor for complexes given a chain morphism}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The first syntax creates a complex (i.e. chain complex) with the single \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} at (homological) degree \mbox{\texttt{\mdseries\slshape d}}. 

 The second syntax creates a complex with the single \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}}, its source placed at (homological) degree \mbox{\texttt{\mdseries\slshape d}} (and its target at \mbox{\texttt{\mdseries\slshape d}}$-1$). 

 The third syntax creates a complex (i.e. chain complex) with the single \textsf{homalg} (co)complex \mbox{\texttt{\mdseries\slshape C}} at (homological) degree \mbox{\texttt{\mdseries\slshape d}}. 

 The fourth syntax creates a complex with the single \textsf{homalg} (co)chain morphism \mbox{\texttt{\mdseries\slshape cm}} ($\to$ \texttt{HomalgChainMorphism} (\ref{HomalgChainMorphism:constructor for chain morphisms given a morphism})), its source placed at (homological) degree \mbox{\texttt{\mdseries\slshape d}} (and its target at \mbox{\texttt{\mdseries\slshape d}}$-1$). 

 If \mbox{\texttt{\mdseries\slshape d}} is not provided it defaults to zero in all cases. \\
 To add a morphism (resp. (co)chain morphism) to a complex use \texttt{Add} (\ref{Add:to complexes given a morphism}). 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );|
  <A 2 x 3 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@N := HomalgMatrix( "[ 2, 3, 4, 5,   6, 7, 8, 9 ]", 2, 4, ZZ );|
  <A 2 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@N := LeftPresentation( N );|
  <A non-torsion left module presented by 2 relations for 4 generators>
  !gapprompt@gap>| !gapinput@mat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@0, 3, 6, 9, \|
  !gapprompt@>| !gapinput@0, 2, 4, 6, \|
  !gapprompt@>| !gapinput@0, 3, 6, 9  \|
  !gapprompt@>| !gapinput@]", 3, 4, ZZ );|
  <A 3 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@phi := HomalgMap( mat, M, N );|
  <A "homomorphism" of left modules>
  !gapprompt@gap>| !gapinput@IsMorphism( phi );|
  true
  !gapprompt@gap>| !gapinput@phi;|
  <A homomorphism of left modules>
\end{Verbatim}
 The first possibility: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@C := HomalgComplex( N );|
  <A non-zero graded homology object consisting of a single left module at degre\
  e 0>
  !gapprompt@gap>| !gapinput@Add( C, phi );|
  !gapprompt@gap>| !gapinput@C;|
  <A complex containing a single morphism of left modules at degrees [ 0 .. 1 ]>
\end{Verbatim}
 The second possibility: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@C := HomalgComplex( phi );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{HomalgCocomplex (constructor for cocomplexes given a object)}}
\logpage{[ 6, 2, 2 ]}\nobreak
\hyperdef{L}{X82E0E9D17E29A67B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgCocomplex({\mdseries\slshape M[, d]})\index{HomalgCocomplex@\texttt{HomalgCocomplex}!constructor for cocomplexes given a object}
\label{HomalgCocomplex:constructor for cocomplexes given a object}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgCocomplex({\mdseries\slshape phi[, d]})\index{HomalgCocomplex@\texttt{HomalgCocomplex}!constructor for cocomplexes given a morphism}
\label{HomalgCocomplex:constructor for cocomplexes given a morphism}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgCocomplex({\mdseries\slshape C[, d]})\index{HomalgCocomplex@\texttt{HomalgCocomplex}!constructor for cocomplexes given a complex}
\label{HomalgCocomplex:constructor for cocomplexes given a complex}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgCocomplex({\mdseries\slshape cm[, d]})\index{HomalgCocomplex@\texttt{HomalgCocomplex}!constructor for cocomplexes given a chain morphism}
\label{HomalgCocomplex:constructor for cocomplexes given a chain morphism}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The first syntax creates a cocomplex (i.e. cochain complex) with the single \textsf{homalg} object \mbox{\texttt{\mdseries\slshape M}} at (cohomological) degree \mbox{\texttt{\mdseries\slshape d}}. 

 The second syntax creates a cocomplex with the single \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}}, its source placed at (cohomological) degree \mbox{\texttt{\mdseries\slshape d}} (and its target at \mbox{\texttt{\mdseries\slshape d}}$+1$). 

 The third syntax creates a cocomplex (i.e. cochain complex) with the single \textsf{homalg} cocomplex \mbox{\texttt{\mdseries\slshape C}} at (cohomological) degree \mbox{\texttt{\mdseries\slshape d}}. 

 The fourth syntax creates a cocomplex with the single \textsf{homalg} (co)chain morphism \mbox{\texttt{\mdseries\slshape cm}} ($\to$ \texttt{HomalgChainMorphism} (\ref{HomalgChainMorphism:constructor for chain morphisms given a morphism})), its source placed at (cohomological) degree \mbox{\texttt{\mdseries\slshape d}} (and its target at \mbox{\texttt{\mdseries\slshape d}}$+1$). 

 If \mbox{\texttt{\mdseries\slshape d}} is not provided it defaults to zero in all cases. \\
 To add a morphism (resp. (co)chain morphism) to a cocomplex use \texttt{Add} (\ref{Add:to complexes given a morphism}). 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );|
  <A 2 x 3 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := RightPresentation( Involution( M ) );|
  <A non-torsion right module on 3 generators satisfying 2 relations>
  !gapprompt@gap>| !gapinput@N := HomalgMatrix( "[ 2, 3, 4, 5,   6, 7, 8, 9 ]", 2, 4, ZZ );|
  <A 2 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@N := RightPresentation( Involution( N ) );|
  <A non-torsion right module on 4 generators satisfying 2 relations>
  !gapprompt@gap>| !gapinput@mat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@0, 3, 6, 9, \|
  !gapprompt@>| !gapinput@0, 2, 4, 6, \|
  !gapprompt@>| !gapinput@0, 3, 6, 9  \|
  !gapprompt@>| !gapinput@]", 3, 4, ZZ );|
  <A 3 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@phi := HomalgMap( Involution( mat ), M, N );|
  <A "homomorphism" of right modules>
  !gapprompt@gap>| !gapinput@IsMorphism( phi );|
  true
  !gapprompt@gap>| !gapinput@phi;|
  <A homomorphism of right modules>
\end{Verbatim}
 The first possibility: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  <A homomorphism of right modules>
  !gapprompt@gap>| !gapinput@C := HomalgCocomplex( M );|
  <A non-zero graded cohomology object consisting of a single right module at de\
  gree 0>
  !gapprompt@gap>| !gapinput@Add( C, phi );|
  !gapprompt@gap>| !gapinput@C;|
  <A cocomplex containing a single morphism of right modules at degrees
  [ 0 .. 1 ]>
\end{Verbatim}
 The second possibility: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@C := HomalgCocomplex( phi );|
  <A non-zero acyclic cocomplex containing a single morphism of right modules at\
   degrees [ 0 .. 1 ]>
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Complexes: Properties}}\label{Complexes:Properties}
\logpage{[ 6, 3, 0 ]}
\hyperdef{L}{X80A23E668343440B}{}
{
  

\subsection{\textcolor{Chapter }{IsSequence}}
\logpage{[ 6, 3, 1 ]}\nobreak
\hyperdef{L}{X7C668F517AEB1F99}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSequence({\mdseries\slshape C})\index{IsSequence@\texttt{IsSequence}}
\label{IsSequence}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if all maps in \mbox{\texttt{\mdseries\slshape C}} are well-defined. }

 

\subsection{\textcolor{Chapter }{IsComplex}}
\logpage{[ 6, 3, 2 ]}\nobreak
\hyperdef{L}{X856E7B4E8264E8F0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsComplex({\mdseries\slshape C})\index{IsComplex@\texttt{IsComplex}}
\label{IsComplex}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape C}} is complex. }

 

\subsection{\textcolor{Chapter }{IsAcyclic}}
\logpage{[ 6, 3, 3 ]}\nobreak
\hyperdef{L}{X847A62A6806046C4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAcyclic({\mdseries\slshape C})\index{IsAcyclic@\texttt{IsAcyclic}}
\label{IsAcyclic}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is acyclic, i.e. exact except at its boundaries. }

 

\subsection{\textcolor{Chapter }{IsRightAcyclic}}
\logpage{[ 6, 3, 4 ]}\nobreak
\hyperdef{L}{X7F4927337891E086}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightAcyclic({\mdseries\slshape C})\index{IsRightAcyclic@\texttt{IsRightAcyclic}}
\label{IsRightAcyclic}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is acyclic, i.e. exact except at its left boundary. }

 

\subsection{\textcolor{Chapter }{IsLeftAcyclic}}
\logpage{[ 6, 3, 5 ]}\nobreak
\hyperdef{L}{X8673124C83AA8FCC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftAcyclic({\mdseries\slshape C})\index{IsLeftAcyclic@\texttt{IsLeftAcyclic}}
\label{IsLeftAcyclic}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is acyclic, i.e. exact except at its right boundary. }

 

\subsection{\textcolor{Chapter }{IsGradedObject}}
\logpage{[ 6, 3, 6 ]}\nobreak
\hyperdef{L}{X78FEA48B7839E683}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGradedObject({\mdseries\slshape C})\index{IsGradedObject@\texttt{IsGradedObject}}
\label{IsGradedObject}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is a graded object, i.e. if all maps between the objects in \mbox{\texttt{\mdseries\slshape C}} vanish. }

 

\subsection{\textcolor{Chapter }{IsExactSequence}}
\logpage{[ 6, 3, 7 ]}\nobreak
\hyperdef{L}{X793465497B435197}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsExactSequence({\mdseries\slshape C})\index{IsExactSequence@\texttt{IsExactSequence}}
\label{IsExactSequence}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is exact. }

 

\subsection{\textcolor{Chapter }{IsShortExactSequence}}
\logpage{[ 6, 3, 8 ]}\nobreak
\hyperdef{L}{X87ADD4F685457000}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsShortExactSequence({\mdseries\slshape C})\index{IsShortExactSequence@\texttt{IsShortExactSequence}}
\label{IsShortExactSequence}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is a short exact sequence. }

 

\subsection{\textcolor{Chapter }{IsSplitShortExactSequence}}
\logpage{[ 6, 3, 9 ]}\nobreak
\hyperdef{L}{X7BAF581986905995}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSplitShortExactSequence({\mdseries\slshape C})\index{IsSplitShortExactSequence@\texttt{IsSplitShortExactSequence}}
\label{IsSplitShortExactSequence}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is a split short exact sequence. }

 

\subsection{\textcolor{Chapter }{IsTriangle}}
\logpage{[ 6, 3, 10 ]}\nobreak
\hyperdef{L}{X84B794FB86C169CF}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTriangle({\mdseries\slshape C})\index{IsTriangle@\texttt{IsTriangle}}
\label{IsTriangle}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Set to true if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is a triangle. }

 

\subsection{\textcolor{Chapter }{IsExactTriangle}}
\logpage{[ 6, 3, 11 ]}\nobreak
\hyperdef{L}{X81E57EE37FC94539}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsExactTriangle({\mdseries\slshape C})\index{IsExactTriangle@\texttt{IsExactTriangle}}
\label{IsExactTriangle}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} is an exact triangle. }

 }

 
\section{\textcolor{Chapter }{Complexes: Attributes}}\label{Complexes:Attributes}
\logpage{[ 6, 4, 0 ]}
\hyperdef{L}{X7BC7B49D7F928DF8}{}
{
  

\subsection{\textcolor{Chapter }{BettiTable (for complexes)}}
\logpage{[ 6, 4, 1 ]}\nobreak
\hyperdef{L}{X7DE6E8D8875B515F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{BettiTable({\mdseries\slshape C})\index{BettiTable@\texttt{BettiTable}!for complexes}
\label{BettiTable:for complexes}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} diagram



 The Betti diagram of the \textsf{homalg} complex \mbox{\texttt{\mdseries\slshape C}} of graded modules. }

 

\subsection{\textcolor{Chapter }{FiltrationByShortExactSequence (for complexes)}}
\logpage{[ 6, 4, 2 ]}\nobreak
\hyperdef{L}{X80EDFDD281834882}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FiltrationByShortExactSequence({\mdseries\slshape C})\index{FiltrationByShortExactSequence@\texttt{FiltrationByShortExactSequence}!for complexes}
\label{FiltrationByShortExactSequence:for complexes}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} diagram



 The filtration induced by the short exact sequence \mbox{\texttt{\mdseries\slshape C}} on its middle object. }

 }

 
\section{\textcolor{Chapter }{Complexes: Operations and Functions}}\label{Complexes:Operations}
\logpage{[ 6, 5, 0 ]}
\hyperdef{L}{X84E12E9C7A60D9BC}{}
{
  

\subsection{\textcolor{Chapter }{Add (to complexes given a morphism)}}
\logpage{[ 6, 5, 1 ]}\nobreak
\hyperdef{L}{X7F10893B78FEDEB7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Add({\mdseries\slshape C, phi})\index{Add@\texttt{Add}!to complexes given a morphism}
\label{Add:to complexes given a morphism}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Add({\mdseries\slshape C, mat})\index{Add@\texttt{Add}!to complexes given a matrix}
\label{Add:to complexes given a matrix}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 In the first syntax the morphism \mbox{\texttt{\mdseries\slshape phi}} is added to the (co)chain complex \mbox{\texttt{\mdseries\slshape C}} ($\to$ \ref{Complexes:Constructors}) as the new \emph{highest} degree morphism and the altered argument \mbox{\texttt{\mdseries\slshape C}} is returned. In case \mbox{\texttt{\mdseries\slshape C}} is a chain complex, the highest degree object in \mbox{\texttt{\mdseries\slshape C}} and the target of \mbox{\texttt{\mdseries\slshape phi}} must be \emph{identical}. In case \mbox{\texttt{\mdseries\slshape C}} is a \emph{co}chain complex, the highest degree object in \mbox{\texttt{\mdseries\slshape C}} and the source of \mbox{\texttt{\mdseries\slshape phi}} must be \emph{identical}. 

 In the second syntax the matrix \mbox{\texttt{\mdseries\slshape mat}} is interpreted as the matrix of the new \emph{highest} degree morphism $psi$, created according to the following rules: In case \mbox{\texttt{\mdseries\slshape C}} is a chain complex, the highest degree left (resp. right) object $C_d$ in \mbox{\texttt{\mdseries\slshape C}} is declared as the target of $psi$, while its source is taken to be a free left (resp. right) object of rank
equal to \texttt{NrRows}(\mbox{\texttt{\mdseries\slshape mat}}) (resp. \texttt{NrColumns}(\mbox{\texttt{\mdseries\slshape mat}})). For this \texttt{NrColumns}(\mbox{\texttt{\mdseries\slshape mat}}) (resp. \texttt{NrRows}(\mbox{\texttt{\mdseries\slshape mat}})) must coincide with the \texttt{NrGenerators}($C_d$). In case \mbox{\texttt{\mdseries\slshape C}} is a \emph{co}chain complex, the highest degree left (resp. right) object $C^d$ in \mbox{\texttt{\mdseries\slshape C}} is declared as the source of $psi$, while its target is taken to be a free left (resp. right) object of rank
equal to \texttt{NrColumns}(\mbox{\texttt{\mdseries\slshape mat}}) (resp. \texttt{NrRows}(\mbox{\texttt{\mdseries\slshape mat}})). For this \texttt{NrRows}(\mbox{\texttt{\mdseries\slshape mat}}) (resp. \texttt{Columns}(\mbox{\texttt{\mdseries\slshape mat}})) must coincide with the \texttt{NrGenerators}($C^d$). 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@mat := HomalgMatrix( "[ 0, 1,   0, 0 ]", 2, 2, ZZ );|
  <A 2 x 2 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@phi := HomalgMap( mat );|
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@C := HomalgComplex( phi );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Add( C, mat );|
  !gapprompt@gap>| !gapinput@C;|
  <A sequence containing 2 morphisms of left modules at degrees [ 0 .. 2 ]>
  !gapprompt@gap>| !gapinput@Display( C );|
  -------------------------
  at homology degree: 2
  Z^(1 x 2)
  -------------------------
  [ [  0,  1 ],
    [  0,  0 ] ]
  
  the map is currently represented by the above 2 x 2 matrix
  ------------v------------
  at homology degree: 1
  Z^(1 x 2)
  -------------------------
  [ [  0,  1 ],
    [  0,  0 ] ]
  
  the map is currently represented by the above 2 x 2 matrix
  ------------v------------
  at homology degree: 0
  Z^(1 x 2)
  -------------------------
  !gapprompt@gap>| !gapinput@IsComplex( C );|
  true
  !gapprompt@gap>| !gapinput@IsAcyclic( C );|
  true
  !gapprompt@gap>| !gapinput@IsExactSequence( C );|
  false
  !gapprompt@gap>| !gapinput@C;|
  <A non-zero acyclic complex containing 2 morphisms of left modules at degrees
  [ 0 .. 2 ]>
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for complexes)}}
\logpage{[ 6, 5, 2 ]}\nobreak
\hyperdef{L}{X79677A407C9EF3A0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape C})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for complexes}
\label{ByASmallerPresentation:for complexes}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 It invokes \texttt{ByASmallerPresentation} for \textsf{homalg} (static) objects. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg complexes",
          [ IsHomalgComplex ],
          
    function( C )
      
      List( ObjectsOfComplex( C ), ByASmallerPresentation );
      
      if Length( ObjectDegreesOfComplex( C ) ) > 1 then
          List( MorphismsOfComplex( C ), DecideZero );
      fi;
      
      IsZero( C );
      
      return C;
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape C}} and returns it. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );|
  <A 2 x 3 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@N := HomalgMatrix( "[ 2, 3, 4, 5,   6, 7, 8, 9 ]", 2, 4, ZZ );|
  <A 2 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@N := LeftPresentation( N );|
  <A non-torsion left module presented by 2 relations for 4 generators>
  !gapprompt@gap>| !gapinput@mat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@0, 3, 6, 9, \|
  !gapprompt@>| !gapinput@0, 2, 4, 6, \|
  !gapprompt@>| !gapinput@0, 3, 6, 9  \|
  !gapprompt@>| !gapinput@]", 3, 4, ZZ );|
  <A 3 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@phi := HomalgMap( mat, M, N );|
  <A "homomorphism" of left modules>
  !gapprompt@gap>| !gapinput@IsMorphism( phi );|
  true
  !gapprompt@gap>| !gapinput@phi;|
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@C := HomalgComplex( phi );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( C );|
  -------------------------
  at homology degree: 1
  [ [  2,  3,  4 ],
    [  5,  6,  7 ] ]
  
  Cokernel of the map
  
  Z^(1x2) --> Z^(1x3),
  
  currently represented by the above matrix
  -------------------------
  [ [  0,  3,  6,  9 ],
    [  0,  2,  4,  6 ],
    [  0,  3,  6,  9 ] ]
  
  the map is currently represented by the above 3 x 4 matrix
  ------------v------------
  at homology degree: 0
  [ [  2,  3,  4,  5 ],
    [  6,  7,  8,  9 ] ]
  
  Cokernel of the map
  
  Z^(1x2) --> Z^(1x4),
  
  currently represented by the above matrix
  -------------------------
\end{Verbatim}
 And now: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ByASmallerPresentation( C );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( C );|
  -------------------------
  at homology degree: 1
  Z/< 3 > + Z^(1 x 1)
  -------------------------
  [ [  0,  0,  0 ],
    [  2,  0,  0 ] ]
  
  the map is currently represented by the above 2 x 3 matrix
  ------------v------------
  at homology degree: 0
  Z/< 4 > + Z^(1 x 2)
  -------------------------
\end{Verbatim}
 }

 }

  }

   
\chapter{\textcolor{Chapter }{Chain Morphisms}}\label{ChainMorphisms}
\logpage{[ 7, 0, 0 ]}
\hyperdef{L}{X782EF48B7D997E9E}{}
{
  
\section{\textcolor{Chapter }{ChainMorphisms: Categories and Representations}}\label{ChainMorphisms:Category}
\logpage{[ 7, 1, 0 ]}
\hyperdef{L}{X8703B8017F55336F}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgChainMorphism}}
\logpage{[ 7, 1, 1 ]}\nobreak
\hyperdef{L}{X7CB62E188027B7C5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgChainMorphism({\mdseries\slshape cm})\index{IsHomalgChainMorphism@\texttt{IsHomalgChainMorphism}}
\label{IsHomalgChainMorphism}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} (co)chain morphisms. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgMorphism}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgChainEndomorphism}}
\logpage{[ 7, 1, 2 ]}\nobreak
\hyperdef{L}{X853BD37084BFC602}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgChainEndomorphism({\mdseries\slshape cm})\index{IsHomalgChainEndomorphism@\texttt{IsHomalgChainEndomorphism}}
\label{IsHomalgChainEndomorphism}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} (co)chain endomorphisms. 

 (It is a subcategory of the \textsf{GAP} categories \texttt{IsHomalgChainMorphism} and \texttt{IsHomalgEndomorphism}.) }

 

\subsection{\textcolor{Chapter }{IsChainMorphismOfFinitelyPresentedObjectsRep}}
\logpage{[ 7, 1, 3 ]}\nobreak
\hyperdef{L}{X7C35D69F7B09BD47}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsChainMorphismOfFinitelyPresentedObjectsRep({\mdseries\slshape c})\index{IsChainMorphismOfFinitelyPresentedObjectsRep@\texttt{IsChain}\-\texttt{Morphism}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsChainMorphismOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of chain morphisms of finitely presented \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgChainMorphism} (\ref{IsHomalgChainMorphism}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsMorphismOfFinitelyGeneratedObjectsRep}.) }

 

\subsection{\textcolor{Chapter }{IsCochainMorphismOfFinitelyPresentedObjectsRep}}
\logpage{[ 7, 1, 4 ]}\nobreak
\hyperdef{L}{X7DF3EA1D817266C1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCochainMorphismOfFinitelyPresentedObjectsRep({\mdseries\slshape c})\index{IsCochainMorphismOfFinitelyPresentedObjectsRep@\texttt{IsCochain}\-\texttt{Morphism}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsCochainMorphismOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of cochain morphisms of finitely presented \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgChainMorphism} (\ref{IsHomalgChainMorphism}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsMorphismOfFinitelyGeneratedObjectsRep}.) }

 }

 
\section{\textcolor{Chapter }{Chain Morphisms: Constructors}}\label{ChainMorphisms:Constructors}
\logpage{[ 7, 2, 0 ]}
\hyperdef{L}{X83637FBE86C5DDF1}{}
{
  

\subsection{\textcolor{Chapter }{HomalgChainMorphism (constructor for chain morphisms given a morphism)}}
\logpage{[ 7, 2, 1 ]}\nobreak
\hyperdef{L}{X853361547FB213CA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgChainMorphism({\mdseries\slshape phi[, C][, D][, d]})\index{HomalgChainMorphism@\texttt{HomalgChainMorphism}!constructor for chain morphisms given a morphism}
\label{HomalgChainMorphism:constructor for chain morphisms given a morphism}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} chain morphism



 The constructor creates a (co)chain morphism given a source \textsf{homalg} (co)chain complex \mbox{\texttt{\mdseries\slshape C}}, a target \textsf{homalg} (co)chain complex \mbox{\texttt{\mdseries\slshape D}}, and a \textsf{homalg} morphism \mbox{\texttt{\mdseries\slshape phi}} at (co)homological degree \mbox{\texttt{\mdseries\slshape d}}. The returned (co)chain morphism will cautiously be indicated using
parenthesis: ``chain morphism''. To verify if the result is indeed a (co)chain morphism use \texttt{IsMorphism} (\ref{IsMorphism:for chain morphisms}). If source and target are identical objects, and only then, the (co)chain
morphism is created as a (co)chain endomorphism. 

 The following examples shows a chain morphism that induces the zero morphism
on homology, but is itself \emph{not} zero in the derived category: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := 1 * ZZ;|
  <The free left module of rank 1 on a free generator>
  !gapprompt@gap>| !gapinput@Display( M );|
  Z^(1 x 1)
  !gapprompt@gap>| !gapinput@N := HomalgMatrix( "[3]", 1, 1, ZZ );;|
  !gapprompt@gap>| !gapinput@N := LeftPresentation( N );|
  <A cyclic left module presented by 1 relation for a cyclic generator>
  !gapprompt@gap>| !gapinput@Display( N );|
  Z/< 3 >
  !gapprompt@gap>| !gapinput@a := HomalgMap( HomalgMatrix( "[2]", 1, 1, ZZ ), M, M );|
  <An endomorphism of a left module>
  !gapprompt@gap>| !gapinput@c := HomalgMap( HomalgMatrix( "[2]", 1, 1, ZZ ), M, N );|
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@b := HomalgMap( HomalgMatrix( "[1]", 1, 1, ZZ ), M, M );|
  <An endomorphism of a left module>
  !gapprompt@gap>| !gapinput@d := HomalgMap( HomalgMatrix( "[1]", 1, 1, ZZ ), M, N );|
  <A homomorphism of left modules>
  !gapprompt@gap>| !gapinput@C1 := HomalgComplex( a );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@C2 := HomalgComplex( c );|
  <A non-zero acyclic complex containing a single morphism of left modules at de\
  grees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@cm := HomalgChainMorphism( d, C1, C2 );|
  <A "chain morphism" containing a single left morphism at degree 0>
  !gapprompt@gap>| !gapinput@Add( cm, b );|
  !gapprompt@gap>| !gapinput@IsMorphism( cm );|
  true
  !gapprompt@gap>| !gapinput@cm;|
  <A chain morphism containing 2 morphisms of left modules at degrees
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@hcm := DefectOfExactness( cm );|
  <A chain morphism of graded objects containing
  2 morphisms of left modules at degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@IsZero( hcm );|
  true
  !gapprompt@gap>| !gapinput@IsZero( Source( hcm ) );|
  false
  !gapprompt@gap>| !gapinput@IsZero( Range( hcm ) );|
  false
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Chain Morphisms: Properties}}\label{ChainMorphisms:Properties}
\logpage{[ 7, 3, 0 ]}
\hyperdef{L}{X789E2EC07C041D78}{}
{
  

\subsection{\textcolor{Chapter }{IsMorphism (for chain morphisms)}}
\logpage{[ 7, 3, 1 ]}\nobreak
\hyperdef{L}{X798B6A897FE4FF12}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMorphism({\mdseries\slshape cm})\index{IsMorphism@\texttt{IsMorphism}!for chain morphisms}
\label{IsMorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape cm}} is a well-defined chain morphism, i.e. independent of all involved
presentations. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedMorphism (for chain morphisms)}}
\logpage{[ 7, 3, 2 ]}\nobreak
\hyperdef{L}{X80AA0BFD824FD611}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedMorphism({\mdseries\slshape cm})\index{IsGeneralizedMorphism@\texttt{IsGeneralizedMorphism}!for chain morphisms}
\label{IsGeneralizedMorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape cm}} is a generalized morphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedEpimorphism (for chain morphisms)}}
\logpage{[ 7, 3, 3 ]}\nobreak
\hyperdef{L}{X84FE6CFD85AB7B73}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedEpimorphism({\mdseries\slshape cm})\index{IsGeneralizedEpimorphism@\texttt{IsGeneralizedEpimorphism}!for chain morphisms}
\label{IsGeneralizedEpimorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape cm}} is a generalized epimorphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedMonomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 4 ]}\nobreak
\hyperdef{L}{X7C7A07FD795C903E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedMonomorphism({\mdseries\slshape cm})\index{IsGeneralizedMonomorphism@\texttt{IsGeneralizedMonomorphism}!for chain morphisms}
\label{IsGeneralizedMonomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape cm}} is a generalized monomorphism. }

 

\subsection{\textcolor{Chapter }{IsGeneralizedIsomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 5 ]}\nobreak
\hyperdef{L}{X7D686DF9832AE258}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGeneralizedIsomorphism({\mdseries\slshape cm})\index{IsGeneralizedIsomorphism@\texttt{IsGeneralizedIsomorphism}!for chain morphisms}
\label{IsGeneralizedIsomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape cm}} is a generalized isomorphism. }

 

\subsection{\textcolor{Chapter }{IsOne (for chain morphisms)}}
\logpage{[ 7, 3, 6 ]}\nobreak
\hyperdef{L}{X790FC54F7DF8B5B1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsOne({\mdseries\slshape cm})\index{IsOne@\texttt{IsOne}!for chain morphisms}
\label{IsOne:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is the identity chain morphism. }

 

\subsection{\textcolor{Chapter }{IsMonomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 7 ]}\nobreak
\hyperdef{L}{X8709A2597FE67C7F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMonomorphism({\mdseries\slshape cm})\index{IsMonomorphism@\texttt{IsMonomorphism}!for chain morphisms}
\label{IsMonomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is a monomorphism. }

 

\subsection{\textcolor{Chapter }{IsEpimorphism (for chain morphisms)}}
\logpage{[ 7, 3, 8 ]}\nobreak
\hyperdef{L}{X7C8E0B1A7A8EE198}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsEpimorphism({\mdseries\slshape cm})\index{IsEpimorphism@\texttt{IsEpimorphism}!for chain morphisms}
\label{IsEpimorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is an epimorphism. }

 

\subsection{\textcolor{Chapter }{IsSplitMonomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 9 ]}\nobreak
\hyperdef{L}{X8724A5E77FD88D49}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSplitMonomorphism({\mdseries\slshape cm})\index{IsSplitMonomorphism@\texttt{IsSplitMonomorphism}!for chain morphisms}
\label{IsSplitMonomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is a split monomorphism. \\
 }

 

\subsection{\textcolor{Chapter }{IsSplitEpimorphism (for chain morphisms)}}
\logpage{[ 7, 3, 10 ]}\nobreak
\hyperdef{L}{X87508506872F4FC3}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSplitEpimorphism({\mdseries\slshape cm})\index{IsSplitEpimorphism@\texttt{IsSplitEpimorphism}!for chain morphisms}
\label{IsSplitEpimorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is a split epimorphism. \\
 }

 

\subsection{\textcolor{Chapter }{IsIsomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 11 ]}\nobreak
\hyperdef{L}{X85180A1E83C01BAA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsIsomorphism({\mdseries\slshape cm})\index{IsIsomorphism@\texttt{IsIsomorphism}!for chain morphisms}
\label{IsIsomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is an isomorphism. }

 

\subsection{\textcolor{Chapter }{IsAutomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 12 ]}\nobreak
\hyperdef{L}{X856D1F5C7E289064}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAutomorphism({\mdseries\slshape cm})\index{IsAutomorphism@\texttt{IsAutomorphism}!for chain morphisms}
\label{IsAutomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is an automorphism. }

 

\subsection{\textcolor{Chapter }{IsGradedMorphism (for chain morphisms)}}
\logpage{[ 7, 3, 13 ]}\nobreak
\hyperdef{L}{X81B2B7BC7B27A1F4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsGradedMorphism({\mdseries\slshape cm})\index{IsGradedMorphism@\texttt{IsGradedMorphism}!for chain morphisms}
\label{IsGradedMorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the source and target complex of the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} are graded objects, i.e. if all their morphisms vanish. }

 

\subsection{\textcolor{Chapter }{IsQuasiIsomorphism (for chain morphisms)}}
\logpage{[ 7, 3, 14 ]}\nobreak
\hyperdef{L}{X7B5C2D788794699E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsQuasiIsomorphism({\mdseries\slshape cm})\index{IsQuasiIsomorphism@\texttt{IsQuasiIsomorphism}!for chain morphisms}
\label{IsQuasiIsomorphism:for chain morphisms}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}} is a quasi-isomorphism. }

 }

 
\section{\textcolor{Chapter }{Chain Morphisms: Attributes}}\label{ChainMorphisms:Attributes}
\logpage{[ 7, 4, 0 ]}
\hyperdef{L}{X83FBA43B7E5833F0}{}
{
  

\subsection{\textcolor{Chapter }{Source (for chain morphisms)}}
\logpage{[ 7, 4, 1 ]}\nobreak
\hyperdef{L}{X81A0D7187D28BA34}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Source({\mdseries\slshape cm})\index{Source@\texttt{Source}!for chain morphisms}
\label{Source:for chain morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The source of the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}}. }

 

\subsection{\textcolor{Chapter }{Range (for chain morphisms)}}
\logpage{[ 7, 4, 2 ]}\nobreak
\hyperdef{L}{X842454D5851D0C79}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Range({\mdseries\slshape cm})\index{Range@\texttt{Range}!for chain morphisms}
\label{Range:for chain morphisms}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The target (range) of the \textsf{homalg} chain morphism \mbox{\texttt{\mdseries\slshape cm}}. }

 }

 
\section{\textcolor{Chapter }{Chain Morphisms: Operations and Functions}}\label{ChainMorphisms:Operations}
\logpage{[ 7, 5, 0 ]}
\hyperdef{L}{X7DD92C727DD630DA}{}
{
  

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for chain morphisms)}}
\logpage{[ 7, 5, 1 ]}\nobreak
\hyperdef{L}{X875F27D07EB78998}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape cm})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for chain morphisms}
\label{ByASmallerPresentation:for chain morphisms}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 See \texttt{ByASmallerPresentation} (\ref{ByASmallerPresentation:for complexes}) on complexes. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg chain morphisms",
          [ IsHomalgChainMorphism ],
          
    function( cm )
      
      ByASmallerPresentation( Source( cm ) );
      ByASmallerPresentation( Range( cm ) );
      
      List( MorphismsOfChainMorphism( cm ), DecideZero );
      
      return cm;
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape cm}} and returns it. }

 }

  }

   
\chapter{\textcolor{Chapter }{Bicomplexes}}\label{Bicomplexes}
\logpage{[ 8, 0, 0 ]}
\hyperdef{L}{X7CEDAD61826170CF}{}
{
  Each bicomplex in \textsf{homalg} has an underlying complex of complexes. The bicomplex structure is simply the
addition of the known sign trick which induces the obvious equivalence between
the category of bicomplexes and the category of complexes with complexes as
objects and chain morphisms as morphisms. The majority of filtered complexes
in algebra and geometry (unlike topology) arise as the total complex of a
bicomplex. Hence, most spectral sequences in algebra are spectral sequences of
bicomplexes. Indeed, bicomplexes in \textsf{homalg} are mainly used as an input for the spectral sequence machinery. 
\section{\textcolor{Chapter }{Bicomplexes: Category and Representations}}\label{Bicomplexes:Category}
\logpage{[ 8, 1, 0 ]}
\hyperdef{L}{X7CBAE2807BD16E7E}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgBicomplex}}
\logpage{[ 8, 1, 1 ]}\nobreak
\hyperdef{L}{X80B7C45A850F4C3E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgBicomplex({\mdseries\slshape BC})\index{IsHomalgBicomplex@\texttt{IsHomalgBicomplex}}
\label{IsHomalgBicomplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} bi(co)complexes. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgObject}.) }

 

\subsection{\textcolor{Chapter }{IsBicomplexOfFinitelyPresentedObjectsRep}}
\logpage{[ 8, 1, 2 ]}\nobreak
\hyperdef{L}{X7892BBCD783ABE16}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsBicomplexOfFinitelyPresentedObjectsRep({\mdseries\slshape BC})\index{IsBicomplexOfFinitelyPresentedObjectsRep@\texttt{IsBicomplex}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsBicomplexOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of bicomplexes (homological bicomplexes) of finitley generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgBicomplex} (\ref{IsHomalgBicomplex}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 

\subsection{\textcolor{Chapter }{IsBicocomplexOfFinitelyPresentedObjectsRep}}
\logpage{[ 8, 1, 3 ]}\nobreak
\hyperdef{L}{X7A82F6DC7C4C7761}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsBicocomplexOfFinitelyPresentedObjectsRep({\mdseries\slshape BC})\index{IsBicocomplexOfFinitelyPresentedObjectsRep@\texttt{IsBicocomplex}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsBicocomplexOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of bicocomplexes (cohomological bicomplexes) of finitley
generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgBicomplex} (\ref{IsHomalgBicomplex}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 }

 
\section{\textcolor{Chapter }{Bicomplexes: Constructors}}\label{Bicomplexes:Constructors}
\logpage{[ 8, 2, 0 ]}
\hyperdef{L}{X842D047F7E00F774}{}
{
  

\subsection{\textcolor{Chapter }{HomalgBicomplex (constructor for bicomplexes given a complex of complexes)}}
\logpage{[ 8, 2, 1 ]}\nobreak
\hyperdef{L}{X86D50FE285F49BF6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgBicomplex({\mdseries\slshape C})\index{HomalgBicomplex@\texttt{HomalgBicomplex}!constructor for bicomplexes given a complex of complexes}
\label{HomalgBicomplex:constructor for bicomplexes given a complex of complexes}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bicomplex



 This constructor creates a bicomplex (homological bicomplex) given a \textsf{homalg} complex of (co)complexes \mbox{\texttt{\mdseries\slshape C}} ($\to$ \texttt{HomalgComplex} (\ref{HomalgComplex:constructor for complexes given a chain morphism})), resp. creates a bicocomplex (cohomological bicomplex) given a \textsf{homalg} cocomplex of (co)complexes \mbox{\texttt{\mdseries\slshape C}} ($\to$ \texttt{HomalgCocomplex} (\ref{HomalgCocomplex:constructor for cocomplexes given a chain morphism})). Using the usual sign-trick a complex of complexes gives rise to a bicomplex
and vice versa. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );|
  <A 2 x 3 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@d := Resolution( M );|
  <A non-zero right acyclic complex containing a single morphism of left modules\
   at degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@dd := Hom( d );|
  <A non-zero acyclic cocomplex containing a single morphism of right modules at\
   degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@C := Resolution( dd );|
  <An acyclic cocomplex containing a single morphism of right complexes at degre\
  es [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@CC := Hom( C );|
  <A non-zero acyclic complex containing a single morphism of left cocomplexes a\
  t degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@BC := HomalgBicomplex( CC );|
  <A non-zero bicomplex containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( BC );|
   * *
   * *
  !gapprompt@gap>| !gapinput@UU := UnderlyingComplex( BC );|
  <A non-zero acyclic complex containing a single morphism of left cocomplexes a\
  t degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@IsIdenticalObj( UU, CC );|
  true
  !gapprompt@gap>| !gapinput@tBC := TransposedBicomplex( BC );|
  <A non-zero bicomplex containing left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( tBC );|
   * *
   * *
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Bicomplexes: Properties}}\label{Bicomplexes:Properties}
\logpage{[ 8, 3, 0 ]}
\hyperdef{L}{X854AA4C379C813AC}{}
{
  

\subsection{\textcolor{Chapter }{IsBisequence}}
\logpage{[ 8, 3, 1 ]}\nobreak
\hyperdef{L}{X7912E2147849BA74}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsBisequence({\mdseries\slshape BC})\index{IsBisequence@\texttt{IsBisequence}}
\label{IsBisequence}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if all maps in \mbox{\texttt{\mdseries\slshape BC}} are well-defined. }

 

\subsection{\textcolor{Chapter }{IsBicomplex}}
\logpage{[ 8, 3, 2 ]}\nobreak
\hyperdef{L}{X87886CA9828D0B4A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsBicomplex({\mdseries\slshape BC})\index{IsBicomplex@\texttt{IsBicomplex}}
\label{IsBicomplex}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape BC}} is bicomplex. }

 

\subsection{\textcolor{Chapter }{IsTransposedWRTTheAssociatedComplex}}
\logpage{[ 8, 3, 3 ]}\nobreak
\hyperdef{L}{X85363EC87E54554C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTransposedWRTTheAssociatedComplex({\mdseries\slshape BC})\index{IsTransposedWRTTheAssociatedComplex@\texttt{IsTransposedWRTTheAssociatedComplex}}
\label{IsTransposedWRTTheAssociatedComplex}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape BC}} is transposed with respect to the associated complex of complexes. \\
 (no method installed). }

 }

 
\section{\textcolor{Chapter }{Bicomplexes: Attributes}}\label{Bicomplexes:Attributes}
\logpage{[ 8, 4, 0 ]}
\hyperdef{L}{X7E2F2E387A4EF533}{}
{
  

\subsection{\textcolor{Chapter }{TotalComplex}}
\logpage{[ 8, 4, 1 ]}\nobreak
\hyperdef{L}{X7C805D967E803BEF}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TotalComplex({\mdseries\slshape BC})\index{TotalComplex@\texttt{TotalComplex}}
\label{TotalComplex}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} (co)complex



 The associated total complex. }

 

\subsection{\textcolor{Chapter }{SpectralSequence (for bicomplexes)}}
\logpage{[ 8, 4, 2 ]}\nobreak
\hyperdef{L}{X7E672CA37AA3D34C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SpectralSequence({\mdseries\slshape BC})\index{SpectralSequence@\texttt{SpectralSequence}!for bicomplexes}
\label{SpectralSequence:for bicomplexes}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} (co)homological spectral sequence



 The associated spectral sequence. }

 }

 
\section{\textcolor{Chapter }{Bicomplexes: Operations and Functions}}\label{Bicomplexes:Operations}
\logpage{[ 8, 5, 0 ]}
\hyperdef{L}{X81357E7A7C6D31F5}{}
{
  

\subsection{\textcolor{Chapter }{UnderlyingComplex}}
\logpage{[ 8, 5, 1 ]}\nobreak
\hyperdef{L}{X7CE9470285B819BC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{UnderlyingComplex({\mdseries\slshape BC})\index{UnderlyingComplex@\texttt{UnderlyingComplex}}
\label{UnderlyingComplex}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} complex



 The (co)complex of (co)complexes underlying the (co)homological bicomplex \mbox{\texttt{\mdseries\slshape BC}}. }

 

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for bicomplexes)}}
\logpage{[ 8, 5, 2 ]}\nobreak
\hyperdef{L}{X7D4B66E08666B142}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape B})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for bicomplexes}
\label{ByASmallerPresentation:for bicomplexes}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bicomplex



 See \texttt{ByASmallerPresentation} (\ref{ByASmallerPresentation:for complexes}) on complexes. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg bicomplexes",
          [ IsHomalgBicomplex ],
          
    function( B )
      
      ByASmallerPresentation( UnderlyingComplex( B ) );
      
      IsZero( B );
      
      return B;
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape B}} and returns it. }

 }

  }

   
\chapter{\textcolor{Chapter }{Bigraded Objects}}\label{BigradedObjects}
\logpage{[ 9, 0, 0 ]}
\hyperdef{L}{X86C997977B62C726}{}
{
  Bigraded objects in \textsf{homalg} provide a data structure for the sheets (or pages) of spectral sequences. 
\section{\textcolor{Chapter }{BigradedObjects: Categories and Representations}}\label{BigradedObjects:Category}
\logpage{[ 9, 1, 0 ]}
\hyperdef{L}{X82C303E27EA6C844}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgBigradedObject}}
\logpage{[ 9, 1, 1 ]}\nobreak
\hyperdef{L}{X795C082E83748032}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgBigradedObject({\mdseries\slshape Er})\index{IsHomalgBigradedObject@\texttt{IsHomalgBigradedObject}}
\label{IsHomalgBigradedObject}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} bigraded objects. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgObject}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgBigradedObjectAssociatedToAnExactCouple}}
\logpage{[ 9, 1, 2 ]}\nobreak
\hyperdef{L}{X7ADBEEA47D650EF2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgBigradedObjectAssociatedToAnExactCouple({\mdseries\slshape Er})\index{IsHomalgBigradedObjectAssociatedToAnExactCouple@\texttt{IsHomalg}\-\texttt{Bigraded}\-\texttt{Object}\-\texttt{Associated}\-\texttt{To}\-\texttt{An}\-\texttt{Exact}\-\texttt{Couple}}
\label{IsHomalgBigradedObjectAssociatedToAnExactCouple}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} bigraded objects associated to an exact couple. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgBigradedObject}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgBigradedObjectAssociatedToAFilteredComplex}}
\logpage{[ 9, 1, 3 ]}\nobreak
\hyperdef{L}{X7994D63E7F77C704}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgBigradedObjectAssociatedToAFilteredComplex({\mdseries\slshape Er})\index{IsHomalgBigradedObjectAssociatedToAFilteredComplex@\texttt{IsHomalg}\-\texttt{Bigraded}\-\texttt{Object}\-\texttt{Associated}\-\texttt{To}\-\texttt{A}\-\texttt{Filtered}\-\texttt{Complex}}
\label{IsHomalgBigradedObjectAssociatedToAFilteredComplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} bigraded objects associated to a filtered complex. \\
 The $0$-th spectral sheet $E_0$ stemming from a filtration is a bigraded (differential) object, which, in
general, does not stem from an exact couple (although $E_1$, $E_2$, ... do). 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgBigradedObject}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgBigradedObjectAssociatedToABicomplex}}
\logpage{[ 9, 1, 4 ]}\nobreak
\hyperdef{L}{X8007507A79E54A1A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgBigradedObjectAssociatedToABicomplex({\mdseries\slshape Er})\index{IsHomalgBigradedObjectAssociatedToABicomplex@\texttt{IsHomalg}\-\texttt{Bigraded}\-\texttt{Object}\-\texttt{Associated}\-\texttt{To}\-\texttt{A}\-\texttt{Bicomplex}}
\label{IsHomalgBigradedObjectAssociatedToABicomplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} bigraded objects associated to a bicmplex. 

 (It is a subcategory of the \textsf{GAP} category \\
 \texttt{IsHomalgBigradedObjectAssociatedToAFilteredComplex}.) }

 

\subsection{\textcolor{Chapter }{IsBigradedObjectOfFinitelyPresentedObjectsRep}}
\logpage{[ 9, 1, 5 ]}\nobreak
\hyperdef{L}{X7AE4EB99817C4508}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsBigradedObjectOfFinitelyPresentedObjectsRep({\mdseries\slshape Er})\index{IsBigradedObjectOfFinitelyPresentedObjectsRep@\texttt{IsBigraded}\-\texttt{Object}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsBigradedObjectOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of bigraded objects of finitley generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgBigradedObject} (\ref{IsHomalgBigradedObject}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 }

 
\section{\textcolor{Chapter }{Bigraded Objects: Constructors}}\label{BigradedObjects:Constructors}
\logpage{[ 9, 2, 0 ]}
\hyperdef{L}{X7A37F65D79540DFE}{}
{
  

\subsection{\textcolor{Chapter }{HomalgBigradedObject (constructor for bigraded objects given a bicomplex)}}
\logpage{[ 9, 2, 1 ]}\nobreak
\hyperdef{L}{X79DCB6FF7E6FFA8B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgBigradedObject({\mdseries\slshape B})\index{HomalgBigradedObject@\texttt{HomalgBigradedObject}!constructor for bigraded objects given a bicomplex}
\label{HomalgBigradedObject:constructor for bigraded objects given a bicomplex}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bigraded object



 This constructor creates a homological (resp. cohomological) bigraded object
given a homological (resp. cohomological) \textsf{homalg} bicomplex \mbox{\texttt{\mdseries\slshape B}} ($\to$ \texttt{HomalgBicomplex} (\ref{HomalgBicomplex:constructor for bicomplexes given a complex of complexes})). This is nothing but the level zero sheet (without differential) of the
spectral sequence associated to the bicomplex \mbox{\texttt{\mdseries\slshape B}}. So it is the double array of \textsf{homalg} objects (i.e. static objects or complexes) in \mbox{\texttt{\mdseries\slshape B}} forgetting the morphisms. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );;|
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@d := Resolution( M );;|
  !gapprompt@gap>| !gapinput@dd := Hom( d );;|
  !gapprompt@gap>| !gapinput@C := Resolution( dd );;|
  !gapprompt@gap>| !gapinput@CC := Hom( C );|
  <A non-zero acyclic complex containing a single morphism of left cocomplexes a\
  t degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@B := HomalgBicomplex( CC );|
  <A non-zero bicomplex containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@E0 := HomalgBigradedObject( B );|
  <A bigraded object containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( E0 );|
  Level 0:
  
   * *
   * *
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{AsDifferentialObject (for homalg bigraded objects stemming from a bicomplex)}}
\logpage{[ 9, 2, 2 ]}\nobreak
\hyperdef{L}{X7D0A240684BD8FC3}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AsDifferentialObject({\mdseries\slshape Er})\index{AsDifferentialObject@\texttt{AsDifferentialObject}!for homalg bigraded objects stemming from a bicomplex}
\label{AsDifferentialObject:for homalg bigraded objects stemming from a bicomplex}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bigraded object



 Add the induced bidegree $( -r, r - 1 )$ (resp. $( r, -r + 1 )$) differential to the level \mbox{\texttt{\mdseries\slshape r}} homological (resp. cohomological) bigraded object stemming from a homological
(resp. cohomological) bicomplex. This method performs side effects on its
argument \mbox{\texttt{\mdseries\slshape Er}} and returns it. 

 For an example see \texttt{DefectOfExactness} (\ref{DefectOfExactness:for homalg differential bigraded objects}) below. }

 

\subsection{\textcolor{Chapter }{DefectOfExactness (for homalg differential bigraded objects)}}
\logpage{[ 9, 2, 3 ]}\nobreak
\hyperdef{L}{X783AA6E3817BFC0F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DefectOfExactness({\mdseries\slshape Er})\index{DefectOfExactness@\texttt{DefectOfExactness}!for homalg differential bigraded objects}
\label{DefectOfExactness:for homalg differential bigraded objects}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bigraded object



 Homological: Compute the homology of a level \mbox{\texttt{\mdseries\slshape r}} \emph{differential} homological bigraded object, that is the \mbox{\texttt{\mdseries\slshape r}}-th sheet of a homological spectral sequence endowed with a bidegree $( -r, r - 1 )$ differential. The result is a level \mbox{\texttt{\mdseries\slshape r}}$+1$ homological bigraded object \emph{without} its differential. 

 Cohomological: Compute the cohomology of a level \mbox{\texttt{\mdseries\slshape r}} \emph{differential} cohomological bigraded object, that is the \mbox{\texttt{\mdseries\slshape r}}-th sheet of a cohomological spectral sequence endowed with a bidegree $( r, -r + 1 )$ differential. The result is a level \mbox{\texttt{\mdseries\slshape r}}$+1$ cohomological bigraded object \emph{without} its differential. 

 The differential of the resulting level \mbox{\texttt{\mdseries\slshape r}}$+1$ object can a posteriori be computed using \texttt{AsDifferentialObject} (\ref{AsDifferentialObject:for homalg bigraded objects stemming from a bicomplex}). The objects in the result are subquotients of the objects in \mbox{\texttt{\mdseries\slshape Er}}. An object in \mbox{\texttt{\mdseries\slshape Er}} (at a spot $(p,q)$) is called \emph{stable} if no passage to a true subquotient occurs at any higher level. Of course, a
zero object (at a spot $(p,q)$) is always stable. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );;|
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@d := Resolution( M );;|
  !gapprompt@gap>| !gapinput@dd := Hom( d );;|
  !gapprompt@gap>| !gapinput@C := Resolution( dd );;|
  !gapprompt@gap>| !gapinput@CC := Hom( C );|
  <A non-zero acyclic complex containing a single morphism of left cocomplexes a\
  t degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@B := HomalgBicomplex( CC );|
  <A non-zero bicomplex containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
\end{Verbatim}
 Now we construct the spectral sequence associated to the bicomplex $B$, also called the \emph{first} spectral sequence: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@I_E0 := HomalgBigradedObject( B );|
  <A bigraded object containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( I_E0 );|
  Level 0:
  
   * *
   * *
  !gapprompt@gap>| !gapinput@AsDifferentialObject( I_E0 );|
  <A bigraded object with a differential of bidegree
  [ 0, -1 ] containing left modules at bidegrees [ 0 .. 1 ]x[ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@I_E0;|
  <A bigraded object with a differential of bidegree
  [ 0, -1 ] containing left modules at bidegrees [ 0 .. 1 ]x[ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@AsDifferentialObject( I_E0 );|
  <A bigraded object with a differential of bidegree
  [ 0, -1 ] containing left modules at bidegrees [ 0 .. 1 ]x[ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@I_E1 := DefectOfExactness( I_E0 );|
  <A bigraded object containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( I_E1 );|
  Level 1:
  
   * *
   . .
  !gapprompt@gap>| !gapinput@AsDifferentialObject( I_E1 );|
  <A bigraded object with a differential of bidegree
  [ -1, 0 ] containing left modules at bidegrees [ 0 .. 1 ]x[ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@I_E2 := DefectOfExactness( I_E1 );|
  <A bigraded object containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( I_E2 );|
  Level 2:
  
   s .
   . .
\end{Verbatim}
 Legend: 
\begin{itemize}
\item A star \mbox{\texttt{\mdseries\slshape *}} stands for a nonzero object.
\item A dot \mbox{\texttt{\mdseries\slshape .}} stands for a zero object.
\item The letter \mbox{\texttt{\mdseries\slshape s}} stands for a nonzero object that became stable.
\end{itemize}
 

 The \emph{second} spectral sequence of the bicomplex is, by definition, the spectral sequence
associated to the transposed bicomplex: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@tB := TransposedBicomplex( B );|
  <A non-zero bicomplex containing left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@II_E0 := HomalgBigradedObject( tB );|
  <A bigraded object containing left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E0 );|
  Level 0:
  
   * *
   * *
  !gapprompt@gap>| !gapinput@AsDifferentialObject( II_E0 );|
  <A bigraded object with a differential of bidegree
  [ 0, -1 ] containing left modules at bidegrees [ -1 .. 0 ]x[ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@II_E1 := DefectOfExactness( II_E0 );|
  <A bigraded object containing left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E1 );|
  Level 1:
  
   * *
   . s
  !gapprompt@gap>| !gapinput@AsDifferentialObject( II_E1 );|
  <A bigraded object with a differential of bidegree
  [ -1, 0 ] containing left modules at bidegrees [ -1 .. 0 ]x[ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@II_E2 := DefectOfExactness( II_E1 );|
  <A bigraded object containing left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E2 );|
  Level 2:
  
   s .
   . s
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Bigraded Objects: Properties}}\label{BigradedObjects:Properties}
\logpage{[ 9, 3, 0 ]}
\hyperdef{L}{X83F0D79981589A42}{}
{
  

\subsection{\textcolor{Chapter }{IsEndowedWithDifferential}}
\logpage{[ 9, 3, 1 ]}\nobreak
\hyperdef{L}{X82DD24197D46CB80}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsEndowedWithDifferential({\mdseries\slshape Er})\index{IsEndowedWithDifferential@\texttt{IsEndowedWithDifferential}}
\label{IsEndowedWithDifferential}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape Er}} is a differential bigraded object. \\
 (no method installed) }

 

\subsection{\textcolor{Chapter }{IsStableSheet}}
\logpage{[ 9, 3, 2 ]}\nobreak
\hyperdef{L}{X8466E4747DF9DDF4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStableSheet({\mdseries\slshape Er})\index{IsStableSheet@\texttt{IsStableSheet}}
\label{IsStableSheet}
}\hfill{\scriptsize (property)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 Check if \mbox{\texttt{\mdseries\slshape Er}} is stable. \\
 (no method installed) }

 }

  
\section{\textcolor{Chapter }{Bigraded Objects: Operations and Functions}}\label{BigradedObjects:Operations}
\logpage{[ 9, 4, 0 ]}
\hyperdef{L}{X7A5828337CE2F4F2}{}
{
  

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for bigraded objects)}}
\logpage{[ 9, 4, 1 ]}\nobreak
\hyperdef{L}{X7A70FD7C82C0C837}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape Er})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for bigraded objects}
\label{ByASmallerPresentation:for bigraded objects}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} bigraded object



 It invokes \texttt{ByASmallerPresentation} for \textsf{homalg} (static) objects. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg bigraded objects",
          [ IsHomalgBigradedObject ],
          
    function( Er )
      
      List( Flat( ObjectsOfBigradedObject( Er ) ), ByASmallerPresentation );
      
      return Er;
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape Er}} and returns it. }

 }

  }

   
\chapter{\textcolor{Chapter }{Spectral Sequences}}\label{SpectralSequences}
\logpage{[ 10, 0, 0 ]}
\hyperdef{L}{X87330D8C82E71B50}{}
{
  Spectral sequences are regarded as the computational sledgehammer in
homological algebra. Quoting the last lines of Rotman's book \cite{rot}: 

 ``The reader should now be convinced that virtually every purely homological
result may be proved with spectral sequences. Even though ``elementary'' proofs may exist for many of these results, spectral sequences offer a
systematic approach in place of sporadic success.'' 
\section{\textcolor{Chapter }{SpectralSequences: Categorie and Representations}}\label{SpectralSequences:Category}
\logpage{[ 10, 1, 0 ]}
\hyperdef{L}{X85E1174B7BDA291E}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgSpectralSequence}}
\logpage{[ 10, 1, 1 ]}\nobreak
\hyperdef{L}{X795DCCD88630BA47}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgSpectralSequence({\mdseries\slshape E})\index{IsHomalgSpectralSequence@\texttt{IsHomalgSpectralSequence}}
\label{IsHomalgSpectralSequence}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} (co)homological spectral sequences. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgObject}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgSpectralSequenceAssociatedToAnExactCouple}}
\logpage{[ 10, 1, 2 ]}\nobreak
\hyperdef{L}{X7F2858CB84D2FF7F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgSpectralSequenceAssociatedToAnExactCouple({\mdseries\slshape E})\index{IsHomalgSpectralSequenceAssociatedToAnExactCouple@\texttt{IsHomalg}\-\texttt{Spectral}\-\texttt{Sequence}\-\texttt{Associated}\-\texttt{To}\-\texttt{An}\-\texttt{Exact}\-\texttt{Couple}}
\label{IsHomalgSpectralSequenceAssociatedToAnExactCouple}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} associated to an exact couple. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgSpectralSequence}.) }

 

\subsection{\textcolor{Chapter }{IsHomalgSpectralSequenceAssociatedToAFilteredComplex}}
\logpage{[ 10, 1, 3 ]}\nobreak
\hyperdef{L}{X7A6FDA637E4D77CA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgSpectralSequenceAssociatedToAFilteredComplex({\mdseries\slshape E})\index{IsHomalgSpectralSequenceAssociatedToAFilteredComplex@\texttt{IsHomalg}\-\texttt{Spectral}\-\texttt{Sequence}\-\texttt{Associated}\-\texttt{To}\-\texttt{A}\-\texttt{Filtered}\-\texttt{Complex}}
\label{IsHomalgSpectralSequenceAssociatedToAFilteredComplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} associated to a filtered complex. 

 (It is a subcategory of the \textsf{GAP} category \texttt{IsHomalgSpectralSequence}.) \\
\\
 The $0$-th spectral sheet $E_0$ stemming from a filtration is a bigraded (differential) object, which, in
general, does not stem from an exact couple (although $E_1$, $E_2$, ... do). }

 

\subsection{\textcolor{Chapter }{IsHomalgSpectralSequenceAssociatedToABicomplex}}
\logpage{[ 10, 1, 4 ]}\nobreak
\hyperdef{L}{X7E7F02B379ABFBF6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgSpectralSequenceAssociatedToABicomplex({\mdseries\slshape E})\index{IsHomalgSpectralSequenceAssociatedToABicomplex@\texttt{IsHomalg}\-\texttt{Spectral}\-\texttt{Sequence}\-\texttt{Associated}\-\texttt{To}\-\texttt{A}\-\texttt{Bicomplex}}
\label{IsHomalgSpectralSequenceAssociatedToABicomplex}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} associated to a bicomplex. 

 (It is a subcategory of the \textsf{GAP} category \\
 \texttt{IsHomalgSpectralSequenceAssociatedToAFilteredComplex}.) }

 

\subsection{\textcolor{Chapter }{IsSpectralSequenceOfFinitelyPresentedObjectsRep}}
\logpage{[ 10, 1, 5 ]}\nobreak
\hyperdef{L}{X81B2C07D7BBD25A9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSpectralSequenceOfFinitelyPresentedObjectsRep({\mdseries\slshape E})\index{IsSpectralSequenceOfFinitelyPresentedObjectsRep@\texttt{IsSpectral}\-\texttt{Sequence}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsSpectralSequenceOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of homological spectral sequences of finitley generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgSpectralSequence} (\ref{IsHomalgSpectralSequence}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 

\subsection{\textcolor{Chapter }{IsSpectralCosequenceOfFinitelyPresentedObjectsRep}}
\logpage{[ 10, 1, 6 ]}\nobreak
\hyperdef{L}{X7ACDC0C97D8F072A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSpectralCosequenceOfFinitelyPresentedObjectsRep({\mdseries\slshape E})\index{IsSpectralCosequenceOfFinitelyPresentedObjectsRep@\texttt{IsSpectral}\-\texttt{Cosequence}\-\texttt{Of}\-\texttt{Finitely}\-\texttt{Presented}\-\texttt{ObjectsRep}}
\label{IsSpectralCosequenceOfFinitelyPresentedObjectsRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of cohomological spectral sequences of finitley generated \textsf{homalg} objects. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgSpectralSequence} (\ref{IsHomalgSpectralSequence}), which is a subrepresentation of the \textsf{GAP} representation \texttt{IsFinitelyPresentedObjectRep}.) }

 }

 
\section{\textcolor{Chapter }{Spectral Sequences: Constructors}}\label{SpectralSequences:Constructors}
\logpage{[ 10, 2, 0 ]}
\hyperdef{L}{X84F3E1DF86C576A3}{}
{
  

\subsection{\textcolor{Chapter }{HomalgSpectralSequence (constructor for spectral sequences given a bicomplex)}}
\logpage{[ 10, 2, 1 ]}\nobreak
\hyperdef{L}{X840EE4DE7D84F72D}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgSpectralSequence({\mdseries\slshape r, B, a})\index{HomalgSpectralSequence@\texttt{HomalgSpectralSequence}!constructor for spectral sequences given a bicomplex}
\label{HomalgSpectralSequence:constructor for spectral sequences given a bicomplex}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgSpectralSequence({\mdseries\slshape r, B})\index{HomalgSpectralSequence@\texttt{HomalgSpectralSequence}!constructor for spectral sequences without a special sheet given a bicomplex}
\label{HomalgSpectralSequence:constructor for spectral sequences without a special sheet given a bicomplex}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgSpectralSequence({\mdseries\slshape B, a})\index{HomalgSpectralSequence@\texttt{HomalgSpectralSequence}!constructor for spectral sequences without bound given a bicomplex}
\label{HomalgSpectralSequence:constructor for spectral sequences without bound given a bicomplex}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HomalgSpectralSequence({\mdseries\slshape B})\index{HomalgSpectralSequence@\texttt{HomalgSpectralSequence}!constructor for spectral sequences without bound and without a special sheet given a bicomplex}
\label{HomalgSpectralSequence:constructor for spectral sequences without bound and without a special sheet given a bicomplex}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} spectral sequence



 The first syntax is the main constructor. It creates the homological (resp.
cohomological) spectral sequence associated to the homological (resp.
cohomological) bicomplex \mbox{\texttt{\mdseries\slshape B}} starting at level $0$ and ending at level \mbox{\texttt{\mdseries\slshape r}}$\geq 0$ (regardless if the spectral sequence stabilizes earlier). The generalized
embeddings into the objects of 0-th sheet are always computed for each higher
sheet $Er$ and stored as a record under the component $Er$!.absolute{\textunderscore}embeddings. If \mbox{\texttt{\mdseries\slshape a}} is greater than $0$ the generalized embeddings into the objects of the \mbox{\texttt{\mdseries\slshape a}}-th sheet also get computed for each higher sheet $Er$ and stored as a record under the component $Er$!.relative{\textunderscore}embeddings. The level \mbox{\texttt{\mdseries\slshape a}} at which the spectral sequence becomes intrinsic is a natural candidate for \mbox{\texttt{\mdseries\slshape a}}. The \mbox{\texttt{\mdseries\slshape a}}-th sheet is called the \emph{special} sheet. 

 If \mbox{\texttt{\mdseries\slshape r}}$=-1$ it computes all the sheets of the spectral sequence until the sequence
stabilizes, i.e. until all higher arrows become zero. 

 If \mbox{\texttt{\mdseries\slshape a}}$=-1$ no special sheet is specified. 

 In the second syntax \mbox{\texttt{\mdseries\slshape a}} is set to $-1$. 

 In the third syntax \mbox{\texttt{\mdseries\slshape r}} is set to $-1$. 

 In the fourth syntax both \mbox{\texttt{\mdseries\slshape r}} and \mbox{\texttt{\mdseries\slshape a}} are set to $-1$. 

 The following example demonstrates the computation of a $Tor-Ext$ spectral sequence: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@M := HomalgMatrix( "[ 2, 3, 4,   5, 6, 7 ]", 2, 3, ZZ );;|
  !gapprompt@gap>| !gapinput@M := LeftPresentation( M );|
  <A non-torsion left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@dM := Resolution( M );|
  <A non-zero right acyclic complex containing a single morphism of left modules\
   at degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@CC := Hom( dM, dM );|
  <A non-zero acyclic cocomplex containing a single morphism of right complexes \
  at degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@B := HomalgBicomplex( CC );|
  <A non-zero bicocomplex containing right modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
\end{Verbatim}
 Now we construct the spectral sequence associated to the bicomplex $B$, also called the \emph{first} spectral sequence: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@I_E := HomalgSpectralSequence( 2, B );|
  <A stable cohomological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of right modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@Display( I_E );|
  a cohomological spectral sequence at bidegrees
  [ [ 0 .. 1 ], [ -1 .. 0 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . .
  ---------
  Level 2:
  
   s s
   . .
\end{Verbatim}
 Legend: 
\begin{itemize}
\item A star \mbox{\texttt{\mdseries\slshape *}} stands for a nonzero object.
\item A dot \mbox{\texttt{\mdseries\slshape .}} stands for a zero object.
\item The letter \mbox{\texttt{\mdseries\slshape s}} stands for a nonzero object that became stable.
\end{itemize}
 

 The \emph{second} spectral sequence of the bicomplex is, by definition, the spectral sequence
associated to the transposed bicomplex: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@tB := TransposedBicomplex( B );|
  <A non-zero bicocomplex containing right modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@II_E := HomalgSpectralSequence( tB, 2 );|
  <A stable cohomological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of right modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E );|
  a cohomological spectral sequence at bidegrees
  [ [ -1 .. 0 ], [ 0 .. 1 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   * *
  ---------
  Level 2:
  
   s s
   . s
\end{Verbatim}
 }

 }

  
\section{\textcolor{Chapter }{Spectral Sequences: Attributes}}\label{SpectralSequences:Attributes}
\logpage{[ 10, 3, 0 ]}
\hyperdef{L}{X8014BAE984177944}{}
{
  

\subsection{\textcolor{Chapter }{GeneralizedEmbeddingsInTotalObjects}}
\logpage{[ 10, 3, 1 ]}\nobreak
\hyperdef{L}{X862BD6E2875BC376}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneralizedEmbeddingsInTotalObjects({\mdseries\slshape E})\index{GeneralizedEmbeddingsInTotalObjects@\texttt{GeneralizedEmbeddingsInTotalObjects}}
\label{GeneralizedEmbeddingsInTotalObjects}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a record containing \textsf{homalg} maps



 The generalized embbedings of the objects in the stable sheet into the objects
of the associated total complex. }

 

\subsection{\textcolor{Chapter }{GeneralizedEmbeddingsInTotalDefects}}
\logpage{[ 10, 3, 2 ]}\nobreak
\hyperdef{L}{X7B84FE76787EAD55}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneralizedEmbeddingsInTotalDefects({\mdseries\slshape E})\index{GeneralizedEmbeddingsInTotalDefects@\texttt{GeneralizedEmbeddingsInTotalDefects}}
\label{GeneralizedEmbeddingsInTotalDefects}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a record containing \textsf{homalg} maps



 The generalized embbedings of the objects in the stable sheet into the defects
of the associated total complex. }

 }

 
\section{\textcolor{Chapter }{Spectral Sequences: Operations and Functions}}\label{SpectralSequences:Operations}
\logpage{[ 10, 4, 0 ]}
\hyperdef{L}{X7BD192607D03A699}{}
{
  

\subsection{\textcolor{Chapter }{ByASmallerPresentation (for spectral sequences)}}
\logpage{[ 10, 4, 1 ]}\nobreak
\hyperdef{L}{X8775988481D1579F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ByASmallerPresentation({\mdseries\slshape E})\index{ByASmallerPresentation@\texttt{ByASmallerPresentation}!for spectral sequences}
\label{ByASmallerPresentation:for spectral sequences}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} spectral sequence



 See \texttt{ByASmallerPresentation} (\ref{ByASmallerPresentation:for bigraded objects}) on bigraded object. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( ByASmallerPresentation,
          "for homalg spectral sequences",
          [ IsHomalgSpectralSequence ],
          
    function( E )
      
      ByASmallerPresentation( HighestLevelSheetInSpectralSequence( E ) );
      
      if IsBound( E!.TransposedSpectralSequence ) then
          ByASmallerPresentation( E!.TransposedSpectralSequence );
      fi;
      
      return E;
      
  end );
\end{Verbatim}
 This method performs side effects on its argument \mbox{\texttt{\mdseries\slshape E}} and returns it. }

 }

  }

   
\chapter{\textcolor{Chapter }{Functors}}\label{Functors}
\logpage{[ 11, 0, 0 ]}
\hyperdef{L}{X78D1062D78BE08C1}{}
{
  Functors and their natural transformations form the heart of the \textsf{homalg} package. Usually, a functor is realized in computer algebra systems as a
procedure which can be applied to a certain type of objects. In \cite{BR} it was explained how to implement a functor of Abelian categories -- by itself
-- as an object which can be further manipulated (composed, derived, ...). So
in addition to the constructor \texttt{CreateHomalgFunctor} (\ref{CreateHomalgFunctor:constructor for functors}) which is used to create functors from scratch, \textsf{homalg} provides further easy-to-use constructors to create new functors out of
existing ones: 
\begin{itemize}
\item \texttt{InsertObjectInMultiFunctor} (\ref{InsertObjectInMultiFunctor:constructor for functors given a multi-functor and an object})
\item \texttt{RightSatelliteOfCofunctor} (\ref{RightSatelliteOfCofunctor:constructor of the right satellite of a contravariant functor})
\item \texttt{LeftSatelliteOfFunctor} (\ref{LeftSatelliteOfFunctor:constructor of the left satellite of a covariant functor})
\item \texttt{RightDerivedCofunctor} (\ref{RightDerivedCofunctor:constructor of the right derived functor of a contravariant functor})
\item \texttt{LeftDerivedFunctor} (\ref{LeftDerivedFunctor:constructor of the left derived functor of a covariant functor})
\item \texttt{ComposeFunctors} (\ref{ComposeFunctors:constructor for functors given two functors})
\end{itemize}
 In \textsf{homalg} each functor is implemented as a \textsf{GAP4} object. 

 So-called installers ($\to$ \texttt{InstallFunctor} (\ref{InstallFunctor}) and \texttt{InstallDeltaFunctor} (\ref{InstallDeltaFunctor})) take such a functor object and create operations in order to apply the
functor on objects, morphisms, complexes (of objects or again of complexes),
and chain morphisms. The installer \texttt{InstallDeltaFunctor} (\ref{InstallDeltaFunctor}) creates additional operations for $\delta$-functors in order to compute connecting homomorphisms, exact triangles, and
associated long exact sequences by starting with a short exact sequence. 

 In \textsf{homalg} special emphasis is laid on the action of functors on \emph{morphisms}, as an essential part of the very definition of a functor. This is for no
obvious reason often neglected in computer algebra systems. Starting from a
functor where the action on morphisms is also defined, all the above
constructors again create functors with actions both on objects and on
morphisms (and hence on chain complexes and chain morphisms). 

 It turned out that in a variety of situations a caching mechanism for functors
is not only extremely useful (e.g. to avoid repeated expensive computations)
but also an absolute necessity for the coherence of data. Functors in \textsf{homalg} are therefore endowed with a caching mechanism. 

 If $R$ is a \textsf{homalg} ring in which the component $R$!.\texttt{ByASmallerPresentation} is set to true \\
\\
 \texttt{R!.ByASmallerPresentation := true}; \\
\\
 any functor which returns an object over $R$ will first apply \texttt{ByASmallerPresentation} to its result before returning it. 

 One of the highlights in \textsf{homalg} is the computation of Grothendieck's spectral sequences connecting the
composition of the derivations of two functors with the derived functor of
their composite. 
\section{\textcolor{Chapter }{Functors: Category and Representations}}\label{Functors:Category}
\logpage{[ 11, 1, 0 ]}
\hyperdef{L}{X7E41BC437F2B76E1}{}
{
  

\subsection{\textcolor{Chapter }{IsHomalgFunctor}}
\logpage{[ 11, 1, 1 ]}\nobreak
\hyperdef{L}{X7EB19E0787C99FF2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgFunctor({\mdseries\slshape F})\index{IsHomalgFunctor@\texttt{IsHomalgFunctor}}
\label{IsHomalgFunctor}
}\hfill{\scriptsize (Category)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} category of \textsf{homalg} (multi-)functors. }

 

\subsection{\textcolor{Chapter }{IsHomalgFunctorRep}}
\logpage{[ 11, 1, 2 ]}\nobreak
\hyperdef{L}{X87ECF5AF7A154723}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsHomalgFunctorRep({\mdseries\slshape E})\index{IsHomalgFunctorRep@\texttt{IsHomalgFunctorRep}}
\label{IsHomalgFunctorRep}
}\hfill{\scriptsize (Representation)}}\\
\textbf{\indent Returns:\ }
\texttt{true} or \texttt{false}



 The \textsf{GAP} representation of \textsf{homalg} (multi-)functors. 

 (It is a representation of the \textsf{GAP} category \texttt{IsHomalgFunctor} (\ref{IsHomalgFunctor}).) }

 }

 
\section{\textcolor{Chapter }{Functors: Constructors}}\label{Functors:Constructors}
\logpage{[ 11, 2, 0 ]}
\hyperdef{L}{X86EE897086995E47}{}
{
  

\subsection{\textcolor{Chapter }{CreateHomalgFunctor (constructor for functors)}}
\logpage{[ 11, 2, 1 ]}\nobreak
\hyperdef{L}{X79407A4E78D628FF}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CreateHomalgFunctor({\mdseries\slshape list1, list2, ...})\index{CreateHomalgFunctor@\texttt{CreateHomalgFunctor}!constructor for functors}
\label{CreateHomalgFunctor:constructor for functors}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 This constructor is used to create functors for \textsf{homalg} from scratch. \mbox{\texttt{\mdseries\slshape listN}} is of the form \mbox{\texttt{\mdseries\slshape listN = [ stringN, valueN ]}}. \mbox{\texttt{\mdseries\slshape stringN}} will be the name of a component of the created functor and \mbox{\texttt{\mdseries\slshape valueN}} will be its value. This constructor is listed here for the sake of
completeness. Its documentation is rather better placed in a \textsf{homalg} programmers guide. The remaining constructors create new functors out of
existing ones and are probably more interesting for end users. 

 The constructor does \emph{not} invoke \texttt{InstallFunctor} (\ref{InstallFunctor}). This has to be done manually! }

 

\subsection{\textcolor{Chapter }{InsertObjectInMultiFunctor (constructor for functors given a multi-functor and an object)}}
\logpage{[ 11, 2, 2 ]}\nobreak
\hyperdef{L}{X79454910823BD09F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{InsertObjectInMultiFunctor({\mdseries\slshape F, p, obj, H})\index{InsertObjectInMultiFunctor@\texttt{InsertObjectInMultiFunctor}!constructor for functors given a multi-functor and an object}
\label{InsertObjectInMultiFunctor:constructor for functors given a multi-functor and an object}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given a \textsf{homalg} multi-functor \mbox{\texttt{\mdseries\slshape F}} with multiplicity $m$ and a string \mbox{\texttt{\mdseries\slshape H}} return the functor \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} $:=$ \mbox{\texttt{\mdseries\slshape F}}$(...,$\mbox{\texttt{\mdseries\slshape obj}}$,...)$, where \mbox{\texttt{\mdseries\slshape obj}} is inserted at the \mbox{\texttt{\mdseries\slshape p}}-th position. Of course \mbox{\texttt{\mdseries\slshape obj}} must be an object (e.g. ring, module, ...) that can be inserted at this
particular position. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) which installs several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@ZZ * 1;|
  <The free right module of rank 1 on a free generator>
  !gapprompt@gap>| !gapinput@InsertObjectInMultiFunctor( Functor_Hom_for_fp_modules, 2, ZZ * 1, "Hom_ZZ" );|
  <The functor Hom_ZZ for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@Functor_Hom_ZZ_for_fp_modules;	## got automatically defined|
  <The functor Hom_ZZ for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@Hom_ZZ;		## got automatically defined|
  <Operation "Hom_ZZ">
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{RightSatelliteOfCofunctor (constructor of the right satellite of a contravariant functor)}}
\logpage{[ 11, 2, 3 ]}\nobreak
\hyperdef{L}{X7E0DE63378A5E204}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightSatelliteOfCofunctor({\mdseries\slshape F[, p][, H]})\index{RightSatelliteOfCofunctor@\texttt{RightSatelliteOfCofunctor}!constructor of the right satellite of a contravariant functor}
\label{RightSatelliteOfCofunctor:constructor of the right satellite of a contravariant functor}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given a \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} and a string \mbox{\texttt{\mdseries\slshape H}} return the right satellite of \mbox{\texttt{\mdseries\slshape F}} with respect to its \mbox{\texttt{\mdseries\slshape p}}-th argument. \mbox{\texttt{\mdseries\slshape F}} is assumed contravariant in its \mbox{\texttt{\mdseries\slshape p}}-th argument. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 If \mbox{\texttt{\mdseries\slshape p}} is not specified it is assumed $1$. If the string \mbox{\texttt{\mdseries\slshape H}} is not specified the letter 'S' is added to the left of the name of \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) which installs several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. }

 

\subsection{\textcolor{Chapter }{LeftSatelliteOfFunctor (constructor of the left satellite of a covariant functor)}}
\logpage{[ 11, 2, 4 ]}\nobreak
\hyperdef{L}{X87448A45780737AE}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftSatelliteOfFunctor({\mdseries\slshape F[, p][, H]})\index{LeftSatelliteOfFunctor@\texttt{LeftSatelliteOfFunctor}!constructor of the left satellite of a covariant functor}
\label{LeftSatelliteOfFunctor:constructor of the left satellite of a covariant functor}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given a \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} and a string \mbox{\texttt{\mdseries\slshape H}} return the left satellite of \mbox{\texttt{\mdseries\slshape F}} with respect to its \mbox{\texttt{\mdseries\slshape p}}-th argument. \mbox{\texttt{\mdseries\slshape F}} is assumed covariant in its \mbox{\texttt{\mdseries\slshape p}}-th argument. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 If \mbox{\texttt{\mdseries\slshape p}} is not specified it is assumed $1$. If the string \mbox{\texttt{\mdseries\slshape H}} is not specified the string ``S{\textunderscore}'' is added to the left of the name of \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) which installs several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. }

 

\subsection{\textcolor{Chapter }{RightDerivedCofunctor (constructor of the right derived functor of a contravariant functor)}}
\logpage{[ 11, 2, 5 ]}\nobreak
\hyperdef{L}{X79EBC65E7DB3FDFB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightDerivedCofunctor({\mdseries\slshape F[, p][, H]})\index{RightDerivedCofunctor@\texttt{RightDerivedCofunctor}!constructor of the right derived functor of a contravariant functor}
\label{RightDerivedCofunctor:constructor of the right derived functor of a contravariant functor}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given a \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} and a string \mbox{\texttt{\mdseries\slshape H}} return the right derived functor of \mbox{\texttt{\mdseries\slshape F}} with respect to its \mbox{\texttt{\mdseries\slshape p}}-th argument. \mbox{\texttt{\mdseries\slshape F}} is assumed contravariant in its \mbox{\texttt{\mdseries\slshape p}}-th argument. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 If \mbox{\texttt{\mdseries\slshape p}} is not specified it is assumed $1$. If the string \mbox{\texttt{\mdseries\slshape H}} is not specified the letter 'R' is added to the left of the name of \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) and \texttt{InstallDeltaFunctor} (\ref{InstallDeltaFunctor}) which install several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. }

 

\subsection{\textcolor{Chapter }{LeftDerivedFunctor (constructor of the left derived functor of a covariant functor)}}
\logpage{[ 11, 2, 6 ]}\nobreak
\hyperdef{L}{X7AC81ED178F2ECB7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftDerivedFunctor({\mdseries\slshape F[, p][, H]})\index{LeftDerivedFunctor@\texttt{LeftDerivedFunctor}!constructor of the left derived functor of a covariant functor}
\label{LeftDerivedFunctor:constructor of the left derived functor of a covariant functor}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given a \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} and a string \mbox{\texttt{\mdseries\slshape H}} return the left derived functor of \mbox{\texttt{\mdseries\slshape F}} with respect to its \mbox{\texttt{\mdseries\slshape p}}-th argument. \mbox{\texttt{\mdseries\slshape F}} is assumed covariant in its \mbox{\texttt{\mdseries\slshape p}}-th argument. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 If \mbox{\texttt{\mdseries\slshape p}} is not specified it is assumed $1$. If the string \mbox{\texttt{\mdseries\slshape H}} is not specified the letter ``S{\textunderscore}'' is added to the left of the name of \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) and \texttt{InstallDeltaFunctor} (\ref{InstallDeltaFunctor}) which install several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. }

 

\subsection{\textcolor{Chapter }{ComposeFunctors (constructor for functors given two functors)}}
\logpage{[ 11, 2, 7 ]}\nobreak
\hyperdef{L}{X7B0F972B850EB3CF}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ComposeFunctors({\mdseries\slshape F[, p], G[, H]})\index{ComposeFunctors@\texttt{ComposeFunctors}!constructor for functors given two functors}
\label{ComposeFunctors:constructor for functors given two functors}
}\hfill{\scriptsize (operation)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} functor



 Given two \textsf{homalg} (multi-)functors \mbox{\texttt{\mdseries\slshape F}} and \mbox{\texttt{\mdseries\slshape G}} and a string \mbox{\texttt{\mdseries\slshape H}} return the composed functor \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} $:=$ \mbox{\texttt{\mdseries\slshape F}}$(...,$\mbox{\texttt{\mdseries\slshape G}}$(...),...)$, where \mbox{\texttt{\mdseries\slshape G}} is inserted at the \mbox{\texttt{\mdseries\slshape p}}-th position. Of course \mbox{\texttt{\mdseries\slshape G}} must be a functor that can be inserted at this particular position. The string \mbox{\texttt{\mdseries\slshape H}} becomes the name of the returned functor ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). The variable \texttt{Functor{\textunderscore}}\mbox{\texttt{\mdseries\slshape H}} will automatically be assigned if free, otherwise a warning is issued. 

 If \mbox{\texttt{\mdseries\slshape p}} is not specified it is assumed $1$. If the string \mbox{\texttt{\mdseries\slshape H}} is not specified the names of \mbox{\texttt{\mdseries\slshape F}} and \mbox{\texttt{\mdseries\slshape G}} are concatenated in this order ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). 

 \mbox{\texttt{\mdseries\slshape F}} * \mbox{\texttt{\mdseries\slshape G}} is a shortcut for \texttt{ComposeFunctors}(\mbox{\texttt{\mdseries\slshape F}},1,\mbox{\texttt{\mdseries\slshape G}}). 

 The constructor automatically invokes \texttt{InstallFunctor} (\ref{InstallFunctor}) which installs several necessary operations under the name \mbox{\texttt{\mdseries\slshape H}}. 

 Check this: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Functor_Hom_for_fp_modules * Functor_TensorProduct_for_fp_modules;|
  <The functor HomTensorProduct for f.p. modules and their maps over computable \
  rings>
  !gapprompt@gap>| !gapinput@Functor_HomTensorProduct_for_fp_modules;	## got automatically defined|
  <The functor HomTensorProduct for f.p. modules and their maps over computable \
  rings>
  !gapprompt@gap>| !gapinput@HomTensorProduct;		## got automatically defined|
  <Operation "HomTensorProduct">
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Functors: Attributes}}\label{Functors:Attributes}
\logpage{[ 11, 3, 0 ]}
\hyperdef{L}{X7A21845C7C536717}{}
{
  

\subsection{\textcolor{Chapter }{NameOfFunctor}}
\logpage{[ 11, 3, 1 ]}\nobreak
\hyperdef{L}{X845E5EF17BBBF64C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NameOfFunctor({\mdseries\slshape F})\index{NameOfFunctor@\texttt{NameOfFunctor}}
\label{NameOfFunctor}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a string



 The name of the \textsf{homalg} functor \mbox{\texttt{\mdseries\slshape F}}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@NameOfFunctor( Functor_Ext_for_fp_modules );|
  "Ext"
  !gapprompt@gap>| !gapinput@Display( Functor_Ext_for_fp_modules );|
  Ext
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{OperationOfFunctor}}
\logpage{[ 11, 3, 2 ]}\nobreak
\hyperdef{L}{X796A383A7AEDA56E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OperationOfFunctor({\mdseries\slshape F})\index{OperationOfFunctor@\texttt{OperationOfFunctor}}
\label{OperationOfFunctor}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
an operation



 The operation of the functor \mbox{\texttt{\mdseries\slshape F}}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Functor_Ext_for_fp_modules;|
  <The functor Ext for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@OperationOfFunctor( Functor_Ext_for_fp_modules );|
  <Operation "Ext">
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{Genesis}}
\logpage{[ 11, 3, 3 ]}\nobreak
\hyperdef{L}{X7BCB7F008620570C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Genesis({\mdseries\slshape F})\index{Genesis@\texttt{Genesis}}
\label{Genesis}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a list



 The first entry of the returned list is the name of the constructor used to
create the functor \mbox{\texttt{\mdseries\slshape F}}. The reset of the list contains arguments that were passed to this
constructor for creating \mbox{\texttt{\mdseries\slshape F}}. 

 These are examples of different functors created using the different
constructors: 
\begin{itemize}
\item  \texttt{CreateHomalgFunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Functor_Hom_for_fp_modules;|
  <The functor Hom for f.p. modules and their maps over computable rings>
\end{Verbatim}

\item  \texttt{InsertObjectInMultiFunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@LeftDualizingFunctor( ZZ, "ZZ_Hom" );|
  <The functor ZZ_Hom for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@Functor_ZZ_Hom_for_fp_modules;	## got automatically defined|
  <The functor ZZ_Hom for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@ZZ_Hom;		## got automatically defined|
  <Operation "ZZ_Hom">
  !gapprompt@gap>| !gapinput@Genesis( Functor_ZZ_Hom_for_fp_modules );|
  [ "InsertObjectInMultiFunctor",
    <The functor Hom for f.p. modules and their maps over computable rings>, 2,
    <The free left module of rank 1 on a free generator> ]
  !gapprompt@gap>| !gapinput@1 * ZZ;|
  <The free left module of rank 1 on a free generator>
\end{Verbatim}

\item  \texttt{LeftDerivedFunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Functor_TensorProduct_for_fp_modules;|
  <The functor TensorProduct for f.p. modules and their maps over computable rin\
  gs>
  !gapprompt@gap>| !gapinput@Genesis( Functor_LTensorProduct_for_fp_modules );|
  [ "LeftDerivedFunctor",
    <The functor TensorProduct for f.p. modules and their maps over computable r\
  ings>, 1 ]
\end{Verbatim}

\item  \texttt{RightDerivedCofunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Genesis( Functor_RHom_for_fp_modules );|
  [ "RightDerivedCofunctor",
    <The functor Hom for f.p. modules and their maps over computable rings>, 1 ]
\end{Verbatim}

\item  \texttt{LeftSatelliteOfFunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Genesis( Functor_Tor_for_fp_modules );|
  [ "LeftSatelliteOfFunctor",
    <The functor TensorProduct for f.p. modules and their maps over computable r\
  ings>, 1 ]
\end{Verbatim}

\item  \texttt{RightSatelliteOfCofunctor}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Genesis( Functor_Ext_for_fp_modules );|
  [ "RightSatelliteOfCofunctor",
    <The functor Hom for f.p. modules and their maps over computable rings>, 1 ]
\end{Verbatim}

\item  \texttt{ComposeFunctors}: 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@Genesis( Functor_HomHom_for_fp_modules );|
  [ "ComposeFunctors",
    [ <The functor Hom for f.p. modules and their maps over computable rings>,
        <The functor Hom for f.p. modules and their maps over computable rings>
       ], 1 ]
  !gapprompt@gap>| !gapinput@ValueGlobal( "ComposeFunctors" );|
  <Operation "ComposeFunctors">
\end{Verbatim}

\end{itemize}
 }

 

\subsection{\textcolor{Chapter }{ProcedureToReadjustGenerators (for functors)}}
\logpage{[ 11, 3, 4 ]}\nobreak
\hyperdef{L}{X83DB28187E1A4E92}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ProcedureToReadjustGenerators({\mdseries\slshape Functor})\index{ProcedureToReadjustGenerators@\texttt{ProcedureToReadjustGenerators}!for functors}
\label{ProcedureToReadjustGenerators:for functors}
}\hfill{\scriptsize (attribute)}}\\
\textbf{\indent Returns:\ }
a function

}

 }

 
\section{\textcolor{Chapter }{Basic Functors}}\label{Functors:Basic}
\logpage{[ 11, 4, 0 ]}
\hyperdef{L}{X7D83D0EB87D2D872}{}
{
  

\subsection{\textcolor{Chapter }{functor{\textunderscore}Kernel}}
\logpage{[ 11, 4, 1 ]}\nobreak
\hyperdef{L}{X7E1FD2EA8358FEA7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{functor{\textunderscore}Kernel\index{functorKernel@\texttt{functor{\textunderscore}Kernel}}
\label{functorKernel}
}\hfill{\scriptsize (global variable)}}\\


 The functor that associates to a map its kernel. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallValue( functor_Kernel,
          CreateHomalgFunctor(
                  [ "name", "Kernel" ],
                  [ "category", HOMALG.category ],
                  [ "operation", "Kernel" ],
                  [ "natural_transformation", "KernelEmb" ],
                  [ "special", true ],
                  [ "number_of_arguments", 1 ],
                  [ "1", [ [ "covariant" ],
                          [ IsStaticMorphismOfFinitelyGeneratedObjectsRep,
                            [ IsHomalgChainMorphism, IsKernelSquare ] ] ] ],
                  [ "OnObjects", _Functor_Kernel_OnObjects ]
                  )
          );
\end{Verbatim}
 }

 

\subsection{\textcolor{Chapter }{functor{\textunderscore}DefectOfExactness}}
\logpage{[ 11, 4, 2 ]}\nobreak
\hyperdef{L}{X795B435785C96DFD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{functor{\textunderscore}DefectOfExactness\index{functorDefectOfExactness@\texttt{functor{\textunderscore}}\-\texttt{Defect}\-\texttt{Of}\-\texttt{Exactness}}
\label{functorDefectOfExactness}
}\hfill{\scriptsize (global variable)}}\\


 The functor that associates to a pair of composable maps with a zero
compositum the defect of exactness, i.e. the kernel of the outer map modulo
the image of the inner map. 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallValue( functor_DefectOfExactness,
          CreateHomalgFunctor(
                  [ "name", "DefectOfExactness" ],
                  [ "category", HOMALG.category ],
                  [ "operation", "DefectOfExactness" ],
                  [ "special", true ],
                  [ "number_of_arguments", 2 ],
                  [ "1", [ [ "covariant" ],
                          [ IsStaticMorphismOfFinitelyGeneratedObjectsRep,
                            [ IsHomalgChainMorphism, IsLambekPairOfSquares ] ] ] ],
                  [ "2", [ [ "covariant" ],
                          [ IsStaticMorphismOfFinitelyGeneratedObjectsRep ] ] ],
                  [ "OnObjects", _Functor_DefectOfExactness_OnObjects ]
                  )
          );
\end{Verbatim}
 }

 }

 
\section{\textcolor{Chapter }{Tool Functors}}\label{Functors:Tool}
\logpage{[ 11, 5, 0 ]}
\hyperdef{L}{X815BF6DA7FD5D44B}{}
{
  }

 
\section{\textcolor{Chapter }{Other Functors}}\label{Functors:Other}
\logpage{[ 11, 6, 0 ]}
\hyperdef{L}{X879135AC8330C509}{}
{
  }

 
\section{\textcolor{Chapter }{Functors: Operations and Functions}}\label{Functors:Operations}
\logpage{[ 11, 7, 0 ]}
\hyperdef{L}{X7DACD68E7E5FA324}{}
{
  

\subsection{\textcolor{Chapter }{InstallFunctor}}
\logpage{[ 11, 7, 1 ]}\nobreak
\hyperdef{L}{X7EAE59AC7D402D5A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{InstallFunctor({\mdseries\slshape F})\index{InstallFunctor@\texttt{InstallFunctor}}
\label{InstallFunctor}
}\hfill{\scriptsize (operation)}}\\


 Install several methods for \textsf{GAP} operations that get declared under the name of the \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})). These methods are used to apply the functor to objects, morphisms,
(co)complexes of objects, and (co)chain morphisms. The objects in the
(co)complexes might again be (co)complexes. 

 (For purely technical reasons the multiplicity of the functor might at most be
three. This restriction should disappear in future versions.) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( InstallFunctor,
          "for homalg functors",
          [ IsHomalgFunctorRep ],
          
    function( Functor )
      
      InstallFunctorOnObjects( Functor );
      
      if IsSpecialFunctor( Functor ) then
          
          InstallSpecialFunctorOnMorphisms( Functor );
          
      else
          
          InstallFunctorOnMorphisms( Functor );
          
          InstallFunctorOnComplexes( Functor );
          
          InstallFunctorOnChainMorphisms( Functor );
          
      fi;
      
  end );
\end{Verbatim}
 The method does not return anything. }

 

\subsection{\textcolor{Chapter }{InstallDeltaFunctor}}
\logpage{[ 11, 7, 2 ]}\nobreak
\hyperdef{L}{X7BD3887982B2663E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{InstallDeltaFunctor({\mdseries\slshape F})\index{InstallDeltaFunctor@\texttt{InstallDeltaFunctor}}
\label{InstallDeltaFunctor}
}\hfill{\scriptsize (operation)}}\\


 In case \mbox{\texttt{\mdseries\slshape F}} is a $\delta$-functor in the sense of Grothendieck the procedure installs several
operations under the name of the \textsf{homalg} (multi-)functor \mbox{\texttt{\mdseries\slshape F}} ($\to$ \texttt{NameOfFunctor} (\ref{NameOfFunctor})) allowing one to compute connecting homomorphisms, exact triangles, and
associated long exact sequences. The input of these operations is a short
exact sequence. 

 (For purely technical reasons the multiplicity of the functor might at most be
three. This restriction should disappear in future versions.) 
\begin{Verbatim}[fontsize=\small,frame=single,label=Code]
  InstallMethod( InstallDeltaFunctor,
          "for homalg functors",
          [ IsHomalgFunctorRep ],
          
    function( Functor )
      local number_of_arguments;
      
      number_of_arguments := MultiplicityOfFunctor( Functor );
      
      if number_of_arguments = 1 then
          
          HelperToInstallUnivariateDeltaFunctor( Functor );
          
      elif number_of_arguments = 2 then
          
          HelperToInstallFirstArgumentOfBivariateDeltaFunctor( Functor );
          HelperToInstallSecondArgumentOfBivariateDeltaFunctor( Functor );
          
      elif number_of_arguments = 3 then
          
          HelperToInstallFirstArgumentOfTrivariateDeltaFunctor( Functor );
          HelperToInstallSecondArgumentOfTrivariateDeltaFunctor( Functor );
          HelperToInstallThirdArgumentOfTrivariateDeltaFunctor( Functor );
          
      fi;
      
  end );
\end{Verbatim}
 The method does not return anything. }

 }

  }

   
\chapter{\textcolor{Chapter }{Examples}}\label{Examples}
\logpage{[ 12, 0, 0 ]}
\hyperdef{L}{X7A489A5D79DA9E5C}{}
{
  
\section{\textcolor{Chapter }{ExtExt}}\label{ExtExt}
\logpage{[ 12, 1, 0 ]}
\hyperdef{L}{X7BB9DE017ECE6E86}{}
{
  This corresponds to Example B.2 in \cite{BaSF}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@imat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@  262,  -33,   75,  -40, \|
  !gapprompt@>| !gapinput@  682,  -86,  196, -104, \|
  !gapprompt@>| !gapinput@ 1186, -151,  341, -180, \|
  !gapprompt@>| !gapinput@-1932,  248, -556,  292, \|
  !gapprompt@>| !gapinput@ 1018, -127,  293, -156  \|
  !gapprompt@>| !gapinput@]", 5, 4, ZZ );|
  <A 5 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( imat );|
  <A left module presented by 5 relations for 4 generators>
  !gapprompt@gap>| !gapinput@N := Hom( ZZ, M );|
  <A rank 1 right module on 4 generators satisfying yet unknown relations>
  !gapprompt@gap>| !gapinput@F := InsertObjectInMultiFunctor( Functor_Hom_for_fp_modules, 2, N, "TensorN" );|
  <The functor TensorN for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@G := LeftDualizingFunctor( ZZ );;|
  !gapprompt@gap>| !gapinput@II_E := GrothendieckSpectralSequence( F, G, M );|
  <A stable homological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E );|
  The associated transposed spectral sequence:
  
  a homological spectral sequence at bidegrees
  [ [ 0 .. 1 ], [ -1 .. 0 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . .
  ---------
  Level 2:
  
   s s
   . .
  
  Now the spectral sequence of the bicomplex:
  
  a homological spectral sequence at bidegrees
  [ [ -1 .. 0 ], [ 0 .. 1 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . s
  ---------
  Level 2:
  
   s s
   . s
  !gapprompt@gap>| !gapinput@filt := FiltrationBySpectralSequence( II_E, 0 );|
  <An ascending filtration with degrees [ -1 .. 0 ] and graded parts:
     0:	<A non-torsion left module presented by 3 relations for 4 generators>
    -1:	<A non-zero left module presented by 33 relations for 8 generators>
  of
  <A non-zero left module presented by 27 relations for 19 generators>>
  !gapprompt@gap>| !gapinput@ByASmallerPresentation( filt );|
  <An ascending filtration with degrees [ -1 .. 0 ] and graded parts:
     0:	<A non-torsion left module presented by 2 relations for 3 generators>
    
  -1:	<A non-zero torsion left module presented by 6 relations for 6 generators>
  of
  <A rank 1 left module presented by 8 relations for 9 generators>>
  !gapprompt@gap>| !gapinput@m := IsomorphismOfFiltration( filt );|
  <A non-zero isomorphism of left modules>
\end{Verbatim}
 }

 
\section{\textcolor{Chapter }{Purity}}\label{Purity}
\logpage{[ 12, 2, 0 ]}
\hyperdef{L}{X7EE63228803A04F1}{}
{
  This corresponds to Example B.3 in \cite{BaSF}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@imat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@  262,  -33,   75,  -40, \|
  !gapprompt@>| !gapinput@  682,  -86,  196, -104, \|
  !gapprompt@>| !gapinput@ 1186, -151,  341, -180, \|
  !gapprompt@>| !gapinput@-1932,  248, -556,  292, \|
  !gapprompt@>| !gapinput@ 1018, -127,  293, -156  \|
  !gapprompt@>| !gapinput@]", 5, 4, ZZ );|
  <A 5 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( imat );|
  <A left module presented by 5 relations for 4 generators>
  !gapprompt@gap>| !gapinput@filt := PurityFiltration( M );|
  <The ascending purity filtration with degrees [ -1 .. 0 ] and graded parts:
     0:	<A free left module of rank 1 on a free generator>
    
  -1:	<A non-zero torsion left module presented by 2 relations for 2 generators>
  of
  <A non-pure rank 1 left module presented by 2 relations for 3 generators>>
  !gapprompt@gap>| !gapinput@M;|
  <A non-pure rank 1 left module presented by 2 relations for 3 generators>
  !gapprompt@gap>| !gapinput@II_E := SpectralSequence( filt );|
  <A stable homological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E );|
  The associated transposed spectral sequence:
  
  a homological spectral sequence at bidegrees
  [ [ 0 .. 1 ], [ -1 .. 0 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . .
  ---------
  Level 2:
  
   s .
   . .
  
  Now the spectral sequence of the bicomplex:
  
  a homological spectral sequence at bidegrees
  [ [ -1 .. 0 ], [ 0 .. 1 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . s
  ---------
  Level 2:
  
   s .
   . s
  !gapprompt@gap>| !gapinput@m := IsomorphismOfFiltration( filt );|
  <A non-zero isomorphism of left modules>
  !gapprompt@gap>| !gapinput@IsIdenticalObj( Range( m ), M );|
  true
  !gapprompt@gap>| !gapinput@Source( m );|
  <A non-torsion left module presented by 2 relations for 3 generators (locked)>
  !gapprompt@gap>| !gapinput@Display( last );|
  [ [   0,   2,   0 ],
    [   0,   0,  12 ] ]
  
  Cokernel of the map
  
  Z^(1x2) --> Z^(1x3),
  
  currently represented by the above matrix
  !gapprompt@gap>| !gapinput@Display( filt );|
  Degree 0:
  
  Z^(1 x 1)
  ----------
  Degree -1:
  
  Z/< 2 > + Z/< 12 > 
\end{Verbatim}
 }

 
\section{\textcolor{Chapter }{TorExt-Grothendieck}}\label{TorExt-Grothendieck}
\logpage{[ 12, 3, 0 ]}
\hyperdef{L}{X812EF8147AE16E72}{}
{
  This corresponds to Example B.5 in \cite{BaSF}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@imat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@  262,  -33,   75,  -40, \|
  !gapprompt@>| !gapinput@  682,  -86,  196, -104, \|
  !gapprompt@>| !gapinput@ 1186, -151,  341, -180, \|
  !gapprompt@>| !gapinput@-1932,  248, -556,  292, \|
  !gapprompt@>| !gapinput@ 1018, -127,  293, -156  \|
  !gapprompt@>| !gapinput@]", 5, 4, ZZ );|
  <A 5 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( imat );|
  <A left module presented by 5 relations for 4 generators>
  !gapprompt@gap>| !gapinput@F := InsertObjectInMultiFunctor( Functor_TensorProduct_for_fp_modules, 2, M, "TensorM" );|
  <The functor TensorM for f.p. modules and their maps over computable rings>
  !gapprompt@gap>| !gapinput@G := LeftDualizingFunctor( ZZ );;|
  !gapprompt@gap>| !gapinput@II_E := GrothendieckSpectralSequence( F, G, M );|
  <A stable cohomological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E );|
  The associated transposed spectral sequence:
  
  a cohomological spectral sequence at bidegrees
  [ [ 0 .. 1 ], [ -1 .. 0 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . .
  ---------
  Level 2:
  
   s s
   . .
  
  Now the spectral sequence of the bicomplex:
  
  a cohomological spectral sequence at bidegrees
  [ [ -1 .. 0 ], [ 0 .. 1 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . s
  ---------
  Level 2:
  
   s s
   . s
  !gapprompt@gap>| !gapinput@filt := FiltrationBySpectralSequence( II_E, 0 );|
  <A descending filtration with degrees [ -1 .. 0 ] and graded parts:
  
  -1:	<A non-zero left module presented by yet unknown relations for 9 generator\
  s>
  
  0:	<A non-zero left module presented by yet unknown relations for 4 generators\
  >
  of
  <A left module presented by yet unknown relations for 29 generators>>
  !gapprompt@gap>| !gapinput@ByASmallerPresentation( filt );|
  <A descending filtration with degrees [ -1 .. 0 ] and graded parts:
    -1:	<A non-zero left module presented by 4 relations for 4 generators>
     0:	<A non-torsion left module presented by 2 relations for 3 generators>
  of
  <A non-torsion left module presented by 6 relations for 7 generators>>
  !gapprompt@gap>| !gapinput@m := IsomorphismOfFiltration( filt );|
  <A non-zero isomorphism of left modules>
\end{Verbatim}
 }

 
\section{\textcolor{Chapter }{TorExt}}\label{TorExt}
\logpage{[ 12, 4, 0 ]}
\hyperdef{L}{X784BC2567875830B}{}
{
  This corresponds to Example B.6 in \cite{BaSF}. 
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
  !gapprompt@gap>| !gapinput@ZZ := HomalgRingOfIntegers( );|
  Z
  !gapprompt@gap>| !gapinput@imat := HomalgMatrix( "[ \|
  !gapprompt@>| !gapinput@  262,  -33,   75,  -40, \|
  !gapprompt@>| !gapinput@  682,  -86,  196, -104, \|
  !gapprompt@>| !gapinput@ 1186, -151,  341, -180, \|
  !gapprompt@>| !gapinput@-1932,  248, -556,  292, \|
  !gapprompt@>| !gapinput@ 1018, -127,  293, -156  \|
  !gapprompt@>| !gapinput@]", 5, 4, ZZ );|
  <A 5 x 4 matrix over an internal ring>
  !gapprompt@gap>| !gapinput@M := LeftPresentation( imat );|
  <A left module presented by 5 relations for 4 generators>
  !gapprompt@gap>| !gapinput@P := Resolution( M );|
  <A non-zero right acyclic complex containing a single morphism of left modules\
   at degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@GP := Hom( P );|
  <A non-zero acyclic cocomplex containing a single morphism of right modules at\
   degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@FGP := GP * P;|
  <A non-zero acyclic cocomplex containing a single morphism of left complexes a\
  t degrees [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@BC := HomalgBicomplex( FGP );|
  <A non-zero bicocomplex containing left modules at bidegrees [ 0 .. 1 ]x
  [ -1 .. 0 ]>
  !gapprompt@gap>| !gapinput@p_degrees := ObjectDegreesOfBicomplex( BC )[1];|
  [ 0, 1 ]
  !gapprompt@gap>| !gapinput@II_E := SecondSpectralSequenceWithFiltration( BC, p_degrees );|
  <A stable cohomological spectral sequence with sheets at levels 
  [ 0 .. 2 ] each consisting of left modules at bidegrees [ -1 .. 0 ]x
  [ 0 .. 1 ]>
  !gapprompt@gap>| !gapinput@Display( II_E );|
  The associated transposed spectral sequence:
  
  a cohomological spectral sequence at bidegrees
  [ [ 0 .. 1 ], [ -1 .. 0 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   . .
  ---------
  Level 2:
  
   s s
   . .
  
  Now the spectral sequence of the bicomplex:
  
  a cohomological spectral sequence at bidegrees
  [ [ -1 .. 0 ], [ 0 .. 1 ] ]
  ---------
  Level 0:
  
   * *
   * *
  ---------
  Level 1:
  
   * *
   * *
  ---------
  Level 2:
  
   s s
   . s
  !gapprompt@gap>| !gapinput@filt := FiltrationBySpectralSequence( II_E, 0 );|
  <A descending filtration with degrees [ -1 .. 0 ] and graded parts:
  
  -1:	<A non-zero left module presented by yet unknown relations for 10 generato\
  rs>
     0:	<A rank 1 left module presented by 3 relations for 4 generators>
  of
  <A left module presented by yet unknown relations for 13 generators>>
  !gapprompt@gap>| !gapinput@ByASmallerPresentation( filt );|
  <A descending filtration with degrees [ -1 .. 0 ] and graded parts:
    -1:	<A non-zero left module presented by 4 relations for 4 generators>
     0:	<A rank 1 left module presented by 2 relations for 3 generators>
  of
  <A non-torsion left module presented by 6 relations for 7 generators>>
  !gapprompt@gap>| !gapinput@m := IsomorphismOfFiltration( filt );|
  <A non-zero isomorphism of left modules>
\end{Verbatim}
 }

  }

 

\appendix


\chapter{\textcolor{Chapter }{The Mathematical Idea behind \textsf{homalg}}}\label{homalg-Idea}
\logpage{[ "A", 0, 0 ]}
\hyperdef{L}{X7C09FF8A80973037}{}
{
   }


\chapter{\textcolor{Chapter }{Development}}\label{devel}
\logpage{[ "B", 0, 0 ]}
\hyperdef{L}{X816F972F826BE589}{}
{
  
\section{\textcolor{Chapter }{Why was \textsf{homalg} discontinued in \href{http://www.maplesoft.com/} {Maple}?}}\label{WhyNotMaple}
\logpage{[ "B", 1, 0 ]}
\hyperdef{L}{X798E278B7D0EAE50}{}
{
  The original implementation of \textsf{homalg} in \textsf{Maple} by Daniel Robertz and myself hit several walls. The speed of the Gr{\"o}bner
basis routines in \textsf{Maple} was the smallest issue. The rising complexity of data structures for high
level algorithms (bicomplexes, functors, spectral sequences, ...) became the
main problem. We very much felt the need for an object-oriented programming
language, a language that allows defining complicated mathematical objects
carrying properties and attributes and even containing other objects as
subobjects. 

 As we were pushed to look for an alternative to \textsf{Maple}, our wish list grew even further. Section \ref{WhyGAP4} is a summary of this wish list. }

 
\section{\textcolor{Chapter }{Why \href{http://www.gap-system.org/} {GAP4}?}}\label{WhyGAP4}
\logpage{[ "B", 2, 0 ]}
\hyperdef{L}{X7AC59CBE796EBEB1}{}
{
  
\subsection{\textcolor{Chapter }{\textsf{GAP} is free and open software}}\label{OpenGAP}
\logpage{[ "B", 2, 1 ]}
\hyperdef{L}{X7A416A9D81334F54}{}
{
  In 1993 J. Neub{\"u}ser  \href{http://www.gap-system.org/Doc/Talks/cgt.ps} {addressed} the necessity of free software in mathematics: 

 ``You can read Sylow's Theorem and its proof in Huppert's book in the library
without even buying the book and then you can use Sylow's Theorem for the rest
of your life free of charge, but - and for understandable reasons of getting
funds for the maintenance, the necessity of which I have pointed out [...] -
for many computer algebra systems license fees have to be paid regularly for
the total time of their use. In order to protect what you pay for, you do not
get the source, but only an executable, i.e. a black box. You can press
buttons and you get answers in the same way as you get the bright pictures
from your television set but you cannot control how they were made in either
case.

 With this situation two of the most basic rules of conduct in mathematics are
violated. In mathematics information is passed on free of charge and
everything is laid open for checking. Not applying these rules to computer
algebra systems that are made for mathematical research [...] means moving in
a most undesirable direction. Most important: Can we expect somebody to
believe a result of a program that he is not allowed to see? [...] And even:
If O'Nan and Scott would have to pay a license fee for using an implementation
of their ideas about primitive groups, should not they in turn be entitled to
charge a license fee for using their ideas in the implementation?'' 

 I had the pleasure of being one of his students. 

 The detailed copyright for \textsf{GAP} can found on the \textsf{GAP} homepage under  \href{http://www.gap-system.org/Download/copyright.html#free} {Start -- Download --
Copyright}. }

 
\subsection{\textcolor{Chapter }{\textsf{GAP} has an area of expertise}}\label{ExpertGAP}
\logpage{[ "B", 2, 2 ]}
\hyperdef{L}{X7D4CC4667D357298}{}
{
  Not only does \textsf{GAP} have the potential of natively supporting a wide range of mathematical
structures, but finite groups and their representation theory are already an
area of expertise. So there are at least some areas where one does not need to
start from scratch. 

 But one could argue that rings are more central for homological algebra than
finite groups, and that \textsf{GAP4}, as for the time when the \textsf{homalg} project was shaping, does not seriously support important rings in a manner
that enables homological computations. This drawback would favor, for example,  \href{http://www.singular.uni-kl.de/} {Singular} (with its subsystem \textsf{Plural}) over \textsf{GAP4}. Point \ref{GAP-IO} indicates how this drawback was overcome in a way, that even gave the lead
back to \textsf{GAP4}. 

 One of my future plans for the \textsf{homalg} project is to address moduli problems in algebraic geometry (favorably via
orbifold stacks), where discrete groups (and especially finite groups) play a
central role. As of the time of writing these lines, discrete groups, finite
groups, and orbifolds are already in the focus of part of the project: The
package \textsf{SCO} by Simon G{\"o}rtzen to compute the cohomology of orbifolds is part of the
currently available \textsf{homalg} project. 

 For the remaining points the choice of \textsf{GAP4} as the programming language for developing \textsf{homalg} was unavoidable. }

 
\subsection{\textcolor{Chapter }{\textsf{GAP4} can communicate}}\label{GAP-IO}
\logpage{[ "B", 2, 3 ]}
\hyperdef{L}{X840B679D7D92F4D7}{}
{
  With the excellent \textsf{IO} \href{http://www-groups.mcs.st-and.ac.uk/~neunhoef/Computer/Software/Gap/io.html} {package}  of Max Neunh{\"o}ffer \textsf{GAP4} is able to communicate in an extremely efficient way with the outer world via
bidirectional streams. This allows \textsf{homalg} to delegate things that cannot be done in \textsf{GAP} to an external system such as \textsf{Singular}, \textsf{Sage}, \textsf{Macaulay2}, \textsf{MAGMA}, or \textsf{Maple}. }

 
\subsection{\textcolor{Chapter }{\textsf{GAP4} is a \emph{mathematical} object-oriented programming language}}\label{Objectify}
\logpage{[ "B", 2, 4 ]}
\hyperdef{L}{X81E161707CF4A1A2}{}
{
  The object-oriented programming philosophy of \textsf{GAP4} was developed by mathematicians who wanted to handle complex mathematical  objects carrying  \emph{properties} and \emph{attributes}, as often encountered in algebra and geometry. \textsf{GAP4} was thus designed to address the needs of \emph{mathematical} object-oriented programming more than any other language designed by computer
scientists. This was primarily achieved by the advanced  \emph{method selection} techniques that very much resemble the mathematical way of thinking. 

 Unlike the common object-oriented programming languages, methods in \textsf{GAP4} are not bound to objects but to operations. In particular, one can also install methods that depend on two or more
arguments. The index of a subgroup is an easy example of an operation
illustrating this. While it would be sufficient to bind a method for computing
the order of a group to the object representing the group, it is not clear
what to do with the index, since its definition involves two objects: a group $G$ and a subgroup $U$. Note that the index of $U$ in a subgroup of $G$ containing $U$ might also be of interest. Things become even more complicated when the
arguments of the operation are unrelated objects. Moreover, binding methods to
operations makes it possible for the programming language to support the
installation of one or more methods for the same operation, depending on
already known properties or attributes of the involved objects. 

 Moreover \textsf{GAP4} supports so-called \emph{immediate and true methods}. This considerably simplifies teaching theorems to the computer. For example
it takes one line of code to teach \textsf{GAP4} that a reflexive left module over a ring with left global dimension less or
equal to two is projective. These logical implications are installed globally
and \textsf{GAP4} immediately uses them as soon as the respective assumptions are fulfilled.
This mechanism enables \textsf{GAP4} to draw arbitrary long lines of conclusions. The more one knows about the
objects involved in the computation the more specialized efficient algorithms
can be utilized, while other computations can be completely avoided. \textsf{homalg} is equipped with plenty of logical implications for rings, matrices, modules,
morphisms, and complexes. 

 When all these features become relevant to what you want to do, there is
hardly an alternative to \textsf{GAP4}. }

 
\subsection{\textcolor{Chapter }{\textsf{GAP4} packages are easily extendible}}\label{BigGAP}
\logpage{[ "B", 2, 5 ]}
\hyperdef{L}{X7A1F08A37D7FEE56}{}
{
  Being able to install several methods for a single operation ($\to$ \ref{Objectify}) has the additional advantage of making \textsf{GAP4} packages easily extendible. If you have an algorithm that, in a special case,
performs better than existing algorithms you can install it as a method which
gets triggered when the special case occurs. You don't need to break existing
code to insert an additional \texttt{elif} section contributing to an increasing unreadability of the code. Even better,
you don't even need to know \emph{anything} about the code of other existing methods. In addition to that, you can add
(maybe missing) properties and attributes (along with methods to compute them)
to existing objects. }

 }

 
\section{\textcolor{Chapter }{Why not \href{http://www.sagemath.org/} {Sage}?}}\label{WhyNotSage}
\logpage{[ "B", 3, 0 ]}
\hyperdef{L}{X7D34F3FD7FB68255}{}
{
  Although the \textsf{python}-based \textsf{Sage} fulfills most of the above requirements, it was primarily the points expressed
in \ref{Objectify} that finally favored \textsf{GAP4} over \textsf{Sage}: The object-orientedness of \textsf{python}, although very modern, does not cover the needs of the \textsf{homalg} package. At this place I would like to thank  \href{http://modular.math.washington.edu/} {William
Stein} for the helpful discussion about \textsf{Sage} during the early stage of developing \textsf{homalg}, and to Max Neunh{\"o}ffer who explained me the advantages of the
object-oriented programming in \textsf{GAP4}. }

 
\section{\textcolor{Chapter }{How does \textsf{homalg} compare to \textsf{Sage}?}}\label{Sage}
\logpage{[ "B", 4, 0 ]}
\hyperdef{L}{X7814794184E99C00}{}
{
  In what follows \textsf{homalg} often refers to the whole \textsf{homalg} project. 

 
\subsection{\textcolor{Chapter }{They differ in objectives and scale}}\label{homalg-Sage-objectives}
\logpage{[ "B", 4, 1 ]}
\hyperdef{L}{X82A6EC2C850909B1}{}
{
  First of all, \textsf{Sage} is a huge project, that, among other things, is intended to replace
commercial, general purpose computer algebra systems like \textsf{Maple} and \textsf{Mathematica}. So while \textsf{Sage} targets (a growing number of) different fields of computer algebra, \textsf{homalg} only focuses on homological, and hopefully in the near future also homotopical
techniques (applicable to some of these different fields). The two projects
simply follow different goals and are different in scale. }

 
\subsection{\textcolor{Chapter }{They differ in the programming language}}\label{homalg-Sage-language}
\logpage{[ "B", 4, 2 ]}
\hyperdef{L}{X8346070A86BF5CC5}{}
{
  \textsf{Sage} is based on \textsf{python} and the \textsf{C}-extension \textsf{cython} while \textsf{homalg} is based on \textsf{GAP4}. Quoting from an email response William Stein sent me on the 25. of February,
2008: ``Sage *is* Python + a library''. Although I seriously considered developing \textsf{homalg} as part of \textsf{Sage}, for the reason mentioned in \ref{Objectify} I finally decided to use \textsf{GAP4} as the programming language. }

 
\subsection{\textcolor{Chapter }{They differ in the way they communicate with the outer world}}\label{homalg-Sage-communicate}
\logpage{[ "B", 4, 3 ]}
\hyperdef{L}{X8040F9357F008C1E}{}
{
  Both \textsf{Sage} and \textsf{homalg} rely for many things on external computer algebra systems. But although one
can simply invoke a \textsf{GAP} shell or a \textsf{Singular} shell from within \textsf{Sage}, \textsf{Sage} normally runs the external computer algebra systems in the background and
tries to understand the internals of the objects residing in them. An object
in the external computer algebra system is wrapped by an object in \textsf{Sage} and supporting this external object involves understanding its details in the
external system. \textsf{homalg} follows a different strategy: The only external objects \textsf{homalg} needs (beside rings) are non-empty matrices. And being zero or not is
basically the only thing \textsf{homalg} wants to know about a matrix after knowing its dimension. I myself was stunned
by this insight, which culminated in \emph{the principle of least communication} ($\to$  \textbf{Modules: The principle of least communication (technical)}). 

 In particular, \textsf{Sage} can make use of all of \textsf{homalg}, but for in order to make full use, \textsf{Sage} needs to understand the internals of the \textsf{homalg} objects. On the contrary, \textsf{homalg} can only make limited use of \textsf{Sage} (or of virtually any computer algebra system that supports rings in a
sufficient way ($\to$  (\textbf{Modules: Rings supported in a sufficient way}))), but without the need to delve into the inner life of the \textsf{Sage} objects. 

 }

 }

  }


\chapter{\textcolor{Chapter }{Logic Subpackages}}\label{Logic}
\logpage{[ "C", 0, 0 ]}
\hyperdef{L}{X8222352C78A19214}{}
{
  
\section{\textcolor{Chapter }{\textsf{LIOBJ}: Logical Implications for Objects of Abelian Categories}}\label{Modules:LIOBJ}
\logpage{[ "C", 1, 0 ]}
\hyperdef{L}{X81F73B26798E82E8}{}
{
  }

 
\section{\textcolor{Chapter }{\textsf{LIMOR}: Logical Implications for Morphisms of Abelian Categories}}\label{Morphisms:LIMOR}
\logpage{[ "C", 2, 0 ]}
\hyperdef{L}{X7CF905277FF642DC}{}
{
  }

 
\section{\textcolor{Chapter }{\textsf{LICPX}: Logical Implications for Complexes in Abelian Categories}}\label{Complexes:LICPX}
\logpage{[ "C", 3, 0 ]}
\hyperdef{L}{X837F47DF7803FC42}{}
{
  }

  }


\chapter{\textcolor{Chapter }{Debugging \textsf{homalg}}}\label{Debugging}
\logpage{[ "D", 0, 0 ]}
\hyperdef{L}{X85236E0B7FE22994}{}
{
  Beside the \textsf{GAP} builtin debugging facilities ($\to$  (\textbf{Reference: Debugging and Profiling Facilities})) \textsf{homalg} provides two ways to debug the computations. 
\section{\textcolor{Chapter }{Increase the assertion level}}\label{SetAssertionLevel}
\logpage{[ "D", 1, 0 ]}
\hyperdef{L}{X8062637283DD739D}{}
{
  \textsf{homalg} comes with numerous builtin assertion checks. They are activated if the user
increases the assertion level using \\
\\
 \texttt{SetAssertionLevel}( \mbox{\texttt{\mdseries\slshape level}} ); \\
\\
 ($\to$  (\textbf{Reference: SetAssertionLevel})), where \mbox{\texttt{\mdseries\slshape level}} is one of the values below: \begin{center}
\begin{tabular}{l|l}\mbox{\texttt{\mdseries\slshape level}}&
description\\
\hline
&
\\
0&
no assertion checks whatsoever\\
&
\\
3&
``high''-level homological assertions are checked\\
&
\\
4&
``mid''-level homological assertions are checked\\
&
\\
5&
``low''-level homological assertions are checked\\
&
\\
6&
assertions about basic matrix operations are checked ($\to$ Appendices of the \textsf{MatricesForHomalg} package)\\
&
(these are among the operations often delegated to external systems)\\
&
\\
\hline
\end{tabular}\\[2mm]
\end{center}

 In particular, if \textsf{homalg} delegates matrix operations to an external system then \texttt{SetAssertionLevel}( 4 ); can be used to let \textsf{homalg} debug the external system. }

  }


\chapter{\textcolor{Chapter }{The Core Packages and the Idea behind their Splitting}}\label{homalg-Project}
\logpage{[ "E", 0, 0 ]}
\hyperdef{L}{X849691F37C7AC1B4}{}
{
  I will try to explain the idea behind splitting the 6 \emph{core packages}: 
\begin{enumerate}
\item \textsf{homalg}
\item \textsf{Modules}
\item \textsf{HomalgToCAS}
\item \textsf{IO{\textunderscore}ForHomalg}
\item \textsf{RingsForHomalg}
\item \textsf{ExamplesForHomalg}
\end{enumerate}
 
\section{\textcolor{Chapter }{The 6=2+4 split}}\label{6=2+4}
\logpage{[ "E", 1, 0 ]}
\hyperdef{L}{X7DCE809486D10888}{}
{
  The following is an attempt to explain the 6=2+4 split. 
\subsection{\textcolor{Chapter }{Logically independent}}\label{homalg-independent}
\logpage{[ "E", 1, 1 ]}
\hyperdef{L}{X818F306582DFF370}{}
{
  The package \textsf{homalg} is logically independent from all other packages in the project. And among the
six core packages it is together with \textsf{Modules} the only package that has to do with mathematics. The remaining four packages
are of technical nature. More precisely, \textsf{homalg} is a stand alone package, that offers abstract homological constructions for
computable Abelian categories. But since the ring of integers (at least up
till now) is the only ring which for the purposes of homological algebra is \emph{sufficiently supported} in \textsf{GAP} ($\to$  (\textbf{Modules: Rings supported in a sufficient way})), \textsf{Modules} can put the above mentioned abstract constructions into action only for the
ring of integers and by generic (but of course non-efficient) methods for any
of its residue class rings (Simon G{\"o}rtzen's package \textsf{Gauss} adds the missing sufficient support for ${\ensuremath{\mathbb Z}}/p^n$ and ${\ensuremath{\mathbb Q}}$ to \textsf{GAP} and his other package \textsf{GaussForHomalg} makes this support visible to \textsf{Modules}). }

 
\subsection{\textcolor{Chapter }{Black boxes}}\label{black boxes}
\logpage{[ "E", 1, 2 ]}
\hyperdef{L}{X7EE794358500309A}{}
{
  The package \textsf{Modules} uses rings and matrices over these rings as a black box, enabling other
packages to ``abuse'' \textsf{homalg} to compute over rings other than the ring of integers by simply providing the
appropriate black boxes. And whether these rings and matrices are inside or
outside \textsf{GAP} is not at all the concern of \textsf{homalg}. Even the \textsf{GAP} representation for external rings, external ring elements, and external
matrices are declared in the package \textsf{HomalgToCAS} and not in homalg. }

 
\subsection{\textcolor{Chapter }{Summing up}}\label{summing up}
\logpage{[ "E", 1, 3 ]}
\hyperdef{L}{X786DDEFD85AD19F4}{}
{
  One of the main concepts of the \textsf{homalg} project is that high level and low level computations in homological algebra
can and \emph{should} be separated. So splitting \textsf{homalg} from the remaining 4 core packages is just emphasizing this concept. Moreover, \textsf{homalg} is up till now by far the biggest package in the project and will probably
keep growing by supporting more basic homological constructions, whereas the
other 4 packages will remain stable over longer time intervals. }

 }

 
\section{\textcolor{Chapter }{The 4=1+1+1+1 split}}\label{4=1+1+1+1}
\logpage{[ "E", 2, 0 ]}
\hyperdef{L}{X865D30A382B80584}{}
{
  The following is meant to justify the remaining 4=1+1+1+1 split. 
\subsection{\textcolor{Chapter }{\textsf{HomalgToCAS}}}\label{HomalgToCAS}
\logpage{[ "E", 2, 1 ]}
\hyperdef{L}{X82F19AF783FE0CEF}{}
{
  The package \textsf{HomalgToCAS} (which needs the \textsf{homalg} package) includes all what is needed to let the black boxes used by \textsf{homalg} reside in external computer algebra systems. So as mentioned above, \textsf{HomalgToCAS} is the right place to declare the three \textsf{GAP} representations external rings, external ring elements, and external matrices.
Still, \textsf{HomalgToCAS} is independent from the external computer algebra system with which \textsf{GAP} will communicate \emph{and} independent of how this communication physically looks like. }

 
\subsection{\textcolor{Chapter }{\textsf{IO{\textunderscore}ForHomalg} and Alternatives}}\label{IO_ForHomalg}
\logpage{[ "E", 2, 2 ]}
\hyperdef{L}{X7B6CDBAA83F80C84}{}
{
  The package \textsf{IO{\textunderscore}ForHomalg} (which needs \textsf{HomalgToCAS}) allows \textsf{GAP} to communicate via I/O-streams with computer algebra systems that come with a
terminal interface. \textsf{IO{\textunderscore}ForHomalg} uses Max Neunh{\"o}ffer's \textsf{IO} package, yet it is independent from the specific computer algebra system, as
long as the latter provides a terminal interface. Splitting \textsf{IO{\textunderscore}ForHomalg} from \textsf{HomalgToCAS} gives the freedom to replace the former by another package that lets \textsf{GAP} communicate with an external system using a different technology. So making \textsf{IO{\textunderscore}ForHomalg} a package of its own makes it clear for developers of a new communication
method which package of the \textsf{homalg} project has to be imitated/replaced. To be concrete, Thomas B{\"a}chler wrote
a package called \textsf{MapleForHomalg} that enables \textsf{GAP} to communicate with \textsf{Maple} without the need for a terminal interface. }

 
\subsection{\textcolor{Chapter }{\textsf{RingsForHomalg}}}\label{RingsForHomalg}
\logpage{[ "E", 2, 3 ]}
\hyperdef{L}{X7FF87EC182DEB669}{}
{
  The package \textsf{RingsForHomalg} (which needs \textsf{HomalgToCAS}) provides the details of the black boxes \textsf{homalg} relies on. The details of the black boxes of course depend on the external
computer algebra system (\textsf{Singular}, \textsf{MAGMA}, \textsf{Macaulay2}, \textsf{Maple}, \textsf{Sage}, ...), but are independent from the way the communication takes place. So it
can be used either with \textsf{IO{\textunderscore}ForHomalg}, with \textsf{MapleForHomalg}, or with any future communication package. }

 
\subsection{\textcolor{Chapter }{Your own \textsf{RingsForHomalg}}}\label{RingsForHomalg alternatives}
\logpage{[ "E", 2, 4 ]}
\hyperdef{L}{X81420453835E46E5}{}
{
  If someone needs to support a ring in some computer algebra system that \textsf{GAP} can already communicate with, but where the ring is not supported by \textsf{RingsForHomalg} yet, she or he needs to imitate/replace \textsf{RingsForHomalg} (as Simon G{\"o}rtzen did with his \textsf{GaussForHomalg}, where the computer algebra system was \textsf{GAP} itself, extended by his package \textsf{Gauss}). Any substitute for \textsf{RingsForHomalg} -- as it only needs \textsf{HomalgToCAS} -- will again be independent from the way how \textsf{GAP} communicates with the computer algebra system that hosts the ring. This should
encourage people to link more external systems to \textsf{homalg} without being forced to join the development of the package \textsf{RingsForHomalg}. They can simply write their own package and get the full credit for it. }

 
\subsection{\textcolor{Chapter }{\textsf{ExamplesForHomalg}}}\label{ExamplesForHomalg}
\logpage{[ "E", 2, 5 ]}
\hyperdef{L}{X7FD6382A7D29322F}{}
{
  The package \textsf{ExamplesForHomalg} (which needs \textsf{RingsForHomalg}) contains example scripts over various rings that are written in a universal
way, i.e. independent from the system that hosts the rings. These examples
cannot be part of the \textsf{homalg} package as they are defined over rings that \textsf{GAP} does not support. The package \textsf{ExamplesForHomalg} is meant to be the package where anyone can contribute interesting examples
using \textsf{homalg} without necessarily contributing to the code of any of the remaining core
packages. }

 
\subsection{\textcolor{Chapter }{Documentation}}\label{Documentation}
\logpage{[ "E", 2, 6 ]}
\hyperdef{L}{X7F4F8D6F7CD6B765}{}
{
  Splitting the core packages is part of documenting the project. The complete
manuals of the \textsf{homalg} and \textsf{ExamplesForHomalg} packages (maybe apart from the appendices) can then be free from any
non-mathematical technicalities the average user is not interested in. A
documentation of the three packages \textsf{HomalgToCAS}, \textsf{IO{\textunderscore}ForHomalg}, and \textsf{RingsForHomalg} will be rather technical and of interest mainly for developers. }

 
\subsection{\textcolor{Chapter }{Crediting}}\label{Crediting}
\logpage{[ "E", 2, 7 ]}
\hyperdef{L}{X814A1DC581E36F66}{}
{
  Everyone is encouraged to contribute to the \textsf{homalg} project. The project follows the philosophy of avoiding huge monolithic
packages and splitting unrelated tasks. This should enable contributers to
write their own packages (building on other existing packages) and getting the
full credit for their work, which can then be easily distinguished from the
work of others. }

 
\subsection{\textcolor{Chapter }{Stability}}\label{Stability}
\logpage{[ "E", 2, 8 ]}
\hyperdef{L}{X78397E8681145827}{}
{
  A huge monolithic package can never stabilize, even though parts of it will
stay frozen for a long period of time. The splitting makes it likely that
parts of the project together with their documentation quickly reach a stable
state. }

 }

  }


\chapter{\textcolor{Chapter }{Overview of the \textsf{homalg} Package Source Code}}\label{FileOverview}
\logpage{[ "F", 0, 0 ]}
\hyperdef{L}{X78D49DC684CAE641}{}
{
  The \textsf{homalg} package reached more than 50.000 lines of \textsf{GAP4} code (excluding the documentation) before the first release was made. To keep
this amount of code tracebale, the package was split in several files. 
\section{\textcolor{Chapter }{The Basic Objects}}\label{The Basic Objects}
\logpage{[ "F", 1, 0 ]}
\hyperdef{L}{X81DDCFC578069518}{}
{
  \begin{center}
\begin{tabular}{l|l}Filename \texttt{.gd}/\texttt{.gi}&
Content\\
\hline
\texttt{HomalgObject}&
objects of Abelian categories\\
&
\\
\texttt{HomalgSubobject}&
subobject of objects of Abelian categories\\
&
\\
\texttt{HomalgMorphism}&
morphisms of Abelian categories\\
&
\\
\texttt{HomalgElement}&
elements are morphisms from ``structure objects''\\
&
\\
\texttt{HomalgFiltration}&
filtrations of objects of Abelian categories\\
&
\\
\texttt{HomalgComplex}&
(co)complexes of objects or of (co)complexes\\
&
\\
\texttt{HomalgChainMorphism}&
chain morphisms of (co)complexes\\
&
consisting of morphisms or chain morphisms\\
&
\\
\texttt{HomalgBicomplex}&
bicomplexes of objects or of (co)complexes\\
&
\\
\texttt{HomalgBigradedObject}&
(differential) bigraded objects\\
&
\\
\texttt{HomalgSpectralSequence}&
homological and cohomological\\
&
spectral sequences\\
&
\\
\texttt{HomalgFunctor}&
constructors of (multi) functors of\\
&
Abelian categories,\\
&
left derivation of covariant functors,\\
&
right derivation of contravariant functors,\\
&
left satellites of covariant functors,\\
&
right satellites of contravariant functors,\\
&
and composition of functors\\
&
\\
\texttt{HomalgDiagram}&
basic diagrams\\
\end{tabular}\\[2mm]
\textbf{Table: }\emph{The \textsf{homalg} package files (continued)}\end{center}

 }

 
\section{\textcolor{Chapter }{The High Level Homological Algorithms}}\label{High Level Homological Algorithms}
\logpage{[ "F", 2, 0 ]}
\hyperdef{L}{X7BDE961D858BC60E}{}
{
  \begin{center}
\begin{tabular}{l|l}Filename \texttt{.gd}/\texttt{.gi}&
Content\\
\hline
\texttt{StaticObjects}&
subfactors, syzygy objects, shorten resolutions,\\
&
saturations\\
&
\\
\texttt{Morphisms}&
resolutions, (co)kernel sequences\\
&
\\
\texttt{Complexes}&
(co)homology, horse shoe lemma, connecting\\
&
homomorphisms, Cartan-Eilenberg resolution\\
&
\\
\texttt{ChainMorphisms}&
(co)homology\\
&
\\
\texttt{SpectralSequences}&
Grothendieck bicomplexes associated to two\\
&
composable functors, spectral sequences\\
&
of bicomplexes, Grothendieck spectral sequences\\
\texttt{Filtrations}&
spectral filtrations, i.e. filtrations induced\\
&
by spectral sequences of bicomplexes,\\
&
purity filtration\\
&
\\
\texttt{ToolFunctors}&
composition, addition, substraction,\\
&
stacking, augmentation, and post dividing maps\\
\texttt{BasicFunctors}&
kernel, defect of exactness\\
\texttt{OtherFunctors}&
torsion submodule, torsion free factor,\\
&
pullback, pushout, Auslander dual\\
\end{tabular}\\[2mm]
\textbf{Table: }\emph{The \textsf{homalg} package files (continued)}\end{center}

 }

 
\section{\textcolor{Chapter }{Logical Implications for \textsf{homalg} Objects}}\label{Logical Implications}
\logpage{[ "F", 3, 0 ]}
\hyperdef{L}{X7EF0F9E47CCE826C}{}
{
  \begin{center}
\begin{tabular}{l|l}Filename \texttt{.gd}/\texttt{.gi}&
Content\\
\hline
\texttt{LIOBJ}&
logical implications for objects of an Abelian category\\
&
\\
\texttt{LIMOR}&
logical implications for morphisms of an Abelian category\\
&
\\
\texttt{LICPX}&
logical implications for complexes\\
&
\\
\end{tabular}\\[2mm]
\textbf{Table: }\emph{The \textsf{homalg} package files (continued)}\end{center}

 }

 }

\def\bibname{References\logpage{[ "Bib", 0, 0 ]}
\hyperdef{L}{X7A6F98FD85F02BFE}{}
}

\bibliographystyle{alpha}
\bibliography{homalgBib.xml}

\addcontentsline{toc}{chapter}{References}

\def\indexname{Index\logpage{[ "Ind", 0, 0 ]}
\hyperdef{L}{X83A0356F839C696F}{}
}

\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Index}


\printindex

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