% 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{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}
\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}
\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}
\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}
\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}
\definecolor{Black}{rgb}{0.0,0.0,0.0}
\definecolor{FuncColor}{rgb}{1.0,0.0,0.0}
%% strange name because of pdflatex bug:
\definecolor{Chapter }{rgb}{0.0,0.0,1.0}

\usepackage{fancyvrb}

\usepackage{pslatex}

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

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


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

\begin{document}

\logpage{[ 0, 0, 0 ]}
\begin{titlepage}
\begin{center}{\Huge \textbf{The \textsf{GaussForHomalg} Package Manual\mbox{}}}\\[1cm]
\hypersetup{pdftitle=The \textsf{GaussForHomalg} Package Manual}
\markright{\scriptsize \mbox{}\hfill The \textsf{GaussForHomalg} Package Manual \hfill\mbox{}}
{\Large \textbf{\textsf{Gauss} Functionality for \textsf{homalg}\mbox{}}}\\[1cm]
{ Version 2009.11.09 \mbox{}}\\[1cm]
{November 2009 \mbox{}}\\[1cm]
\mbox{}\\[2cm]
{\large \textbf{Simon Goertzen\\
    \mbox{}}}\\
\hypersetup{pdfauthor=Simon Goertzen\\
    }
\end{center}\vfill

\mbox{}\\
{\mbox{}\\
\small \noindent \textbf{Simon Goertzen\\
    } --- Email: \href{mailto://simon.goertzen@rwth-aachen.de} {\texttt{simon.goertzen@rwth-aachen.de}}\\
 --- Homepage: \href{http://wwwb.math.rwth-aachen.de/goertzen/} {\texttt{http://wwwb.math.rwth-aachen.de/goertzen/}}\\
 --- Address: \begin{minipage}[t]{8cm}\noindent
 Lehrstuhl B f{\"u}r Mathematik\\
 RWTH Aachen\\
 Templergraben 64\\
 52062 Aachen\\
 (Germany)\\
 \end{minipage}
}\\
\end{titlepage}

\newpage\setcounter{page}{2}
{\small 
\section*{Abstract}
\logpage{[ 0, 0, 2 ]}
This document explains the primary uses of the \textsf{GaussForHomalg} package. Included in this manual is a documented list of the most important
methods and functions you will need. \mbox{}}\\[1cm]
{\small 
\section*{Copyright}
\logpage{[ 0, 0, 1 ]}
 {\copyright} 2007-2009 by Simon Goertzen

 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, 3 ]}
Many thanks to Mohamed Barakat and the Lehrstuhl B f{\"u}r Mathematik at RWTH
Aachen University in general for their support. It should be noted that \textsf{GaussForHomalg} is dependant on the \textsf{GAP} \textsf{homalg} package by M. Barakat \cite{homalg-package}, as well as the \textsf{Gauss} package by myself \cite{Gauss}. This should be clear as \textsf{GaussForHomalg} presents a link between these two packages. This manual was created with the
help of the \textsf{GAPDoc} package by M. Neunh{\"o}ffer and F. L{\"u}beck \cite{GAPDoc}. \mbox{}}\\[1cm]
\newpage

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

\tableofcontents
\newpage

 \index{\textsf{GaussForHomalg}}   
\chapter{\textcolor{Chapter }{Introduction}}\label{intro}
\logpage{[ 1, 0, 0 ]}
\hyperdef{L}{X7DFB63A97E67C0A1}{}
{
  
\section{\textcolor{Chapter }{Overview over this manual}}\label{overview}
\logpage{[ 1, 1, 0 ]}
\hyperdef{L}{X786BACDB82918A65}{}
{
  Chapter \ref{intro} is concerned with the technical details of installing and running this
package. Chapter \ref{usage} explains how \textsf{GaussForHomalg} works and what you need to know to extend \textsf{homalg} with your own rings. Also included in this manual is a documented list of the
most important methods and functions for this linking process. Anyone
interested in source code should just check out the files in the \texttt{gap/pkg/GaussForHomalg/gap/} folder ($\to$ Appendix \ref{FileOverview}). }

   
\section{\textcolor{Chapter }{Installation of the \textsf{GaussForHomalg} Package}}\label{install}
\logpage{[ 1, 2, 0 ]}
\hyperdef{L}{X8585599E87114B98}{}
{
  To install this package just extract the package's archive file to the GAP \texttt{pkg/} directory. By default the \textsf{GaussForHomalg} package is not automatically loaded by \textsf{GAP} when it is installed. You must load the package with \texttt{LoadPackage("GaussForHomalg");} before its functions become available. Please, send me an e-mail if you have
any questions, remarks, suggestions, etc. concerning \textsf{GaussForHomalg}. Also, I would like to hear about applications of this package.\\
 Simon Goertzen\\
 }

 }

   
\chapter{\textcolor{Chapter }{Usage}}\label{usage}
\logpage{[ 2, 0, 0 ]}
\hyperdef{L}{X86A9B6F87E619FFF}{}
{
  If you are just interested in using the \textsf{Gauss} package with \textsf{homalg}, you do not need to know much about \textsf{GaussForHomalg}, as it will work in the background, telling \textsf{homalg} which functions to call.

 However, you might be interested in writing your own \textsf{XyzForHomalg}, enabling \textsf{homalg} to assist you with your computations. For this purpose, I will provide an
overview of the \textsf{GaussForHomalg} code. Please note that \textsf{Gauss} is a \textsf{GAP} package, therefore this is not a reference guide for the package \textsf{RingsForHomalg}, which utilizes the IO-stream functionality of \textsf{IO{\textunderscore}ForHomalg} to send commands to external computer algebra systems. If you wish to tie an
external system to \textsf{homalg}, \textsf{RingsForHomalg} is the better reference package.

 The file for all low-level operations is \texttt{GaussTools.gi}. Like all "Tools" files it just includes one global variable \texttt{CommonHomalgTableForGaussTools}, which is a record of functions with \textsf{homalg} matrices as arguments. The return values of the \textsf{GaussForHomalg} tools are documented in \ref{methods} and have to be the same for each tools table.

 In this particular case, the file also includes the following code:

 
\begin{Verbatim}[fontsize=\small,frame=single,label=]
  if IsBound( HOMALG.OtherInternalMatrixTypes ) then
      Add( HOMALG.OtherInternalMatrixTypes, IsSparseMatrix );
  else
      HOMALG.OtherInternalMatrixTypes := [ IsSparseMatrix ];
  fi;
\end{Verbatim}
 This is a specialty to explain to \textsf{homalg} that \textsf{Gauss} introduces a new matrix type in \textsf{GAP}. Usually, there should not be a need for this.

 The next "general" file is \texttt{GaussBasic.gi}. This includes the basic functions based on \cite{BR}, again stored in the global record \texttt{CommonHomalgTableForGaussBasic}. Preceding this record are some small methods to make sure \textsf{GaussForHomalg} works with sparse as well as with dense matrices - just like above, these
should not be neccessary in general.

 In \texttt{GaussForHomalg.gi} the methods for matrix entry manipulation are installed.

 Finally, we come to the most important files, making sense of the basic
functions and tools defined above. Depending on the functionality (especially
concerning function names) of the system you will need different files for
different rings. In this case, functionality for ${\ensuremath{\mathbb Z}} / n {\ensuremath{\mathbb Z}}$ is stored in \texttt{GaussFQI.gi} (Finite Quotients of the Integers), while the Rationals have their own file, \texttt{GaussRationals.gi}. Note that both files include only one method, \texttt{CreateHomalgTable}, using method selection to create the correct table. Depending on the
properties of the ring, the basic functions are loaded and some more
"specific" functions can be defined, in this case for example the function \texttt{RowReducedEchelonForm} (\ref{RowReducedEchelonForm}), both in a one- and a two-argument version. The tools should be universal
enough to be loaded for every possible ring. If it is neccessary to overwrite
a tool, this is the place to do it. An example for this could be \texttt{Involution} (\ref{Involution}), which is generally just a matrix transposition, but could be overwritten to
be a true involution when creating the \textsf{homalg} table for noncommutative rings. }

   
\chapter{\textcolor{Chapter }{\textsf{GaussForHomalg} methods and functions}}\label{methods}
\logpage{[ 3, 0, 0 ]}
\hyperdef{L}{X789AFD2A804F2CD4}{}
{
 
\section{\textcolor{Chapter }{The Tools}}\logpage{[ 3, 1, 0 ]}
\hyperdef{L}{X796BBDF981806C64}{}
{
 Please note that there are more tool functions you can define, \textsf{GaussForHomalg} just provides homalg with a sufficient subset. This varies with the type and
complexity of the rings you want to define. On the other hand, \texttt{ImportMatrix} (\ref{ImportMatrix}) is a function specifically designed for \textsf{GaussForHomalg}.  

\subsection{\textcolor{Chapter }{ZeroMatrix}}
\logpage{[ 3, 1, 1 ]}\nobreak
\hyperdef{L}{X838F5B6C7C87C8E1}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ZeroMatrix({\slshape C})\index{ZeroMatrix@\texttt{ZeroMatrix}}
\label{ZeroMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns a sparse matrix with the same dimensions and base ring as the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{IdentityMatrix}}
\logpage{[ 3, 1, 2 ]}\nobreak
\hyperdef{L}{X7D807ABC7FCB4E77}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IdentityMatrix({\slshape C})\index{IdentityMatrix@\texttt{IdentityMatrix}}
\label{IdentityMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns a sparse $n \times n$ identity matrix with the same ring as the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}, $n$ being the number of rows of \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{CopyMatrix}}
\logpage{[ 3, 1, 3 ]}\nobreak
\hyperdef{L}{X8304B38F8200E127}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CopyMatrix({\slshape C})\index{CopyMatrix@\texttt{CopyMatrix}}
\label{CopyMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns a sparse matrix which is a shallow copy of the sparse matrix
stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{ImportMatrix}}
\logpage{[ 3, 1, 4 ]}\nobreak
\hyperdef{L}{X7B5E86C283147027}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ImportMatrix({\slshape M, R})\index{ImportMatrix@\texttt{ImportMatrix}}
\label{ImportMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the sparse version of the \textsf{GAP} matrix \mbox{\texttt{\slshape M}} over the ring \mbox{\texttt{\slshape R}}. It prevents \textsf{homalg} from calling sparse matrix algorithms on dense \textsf{GAP} matrices. Note that this is not a "standard" tool but neccessary because of
the new data type. }

 

\subsection{\textcolor{Chapter }{Involution}}
\logpage{[ 3, 1, 5 ]}\nobreak
\hyperdef{L}{X81EB2A0A8756372B}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Involution({\slshape M})\index{Involution@\texttt{Involution}}
\label{Involution}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns a sparse matrix which is the transpose of the sparse matrix
stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape M}}. }

 

\subsection{\textcolor{Chapter }{CertainRows}}
\logpage{[ 3, 1, 6 ]}\nobreak
\hyperdef{L}{X7BAE852578C6B839}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CertainRows({\slshape M, plist})\index{CertainRows@\texttt{CertainRows}}
\label{CertainRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the rows in \mbox{\texttt{\slshape plist}} of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape M}} as a new matrix. }

 

\subsection{\textcolor{Chapter }{CertainColumns}}
\logpage{[ 3, 1, 7 ]}\nobreak
\hyperdef{L}{X7CE203DF7F323F87}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CertainColumns({\slshape M, plist})\index{CertainColumns@\texttt{CertainColumns}}
\label{CertainColumns}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the columns in \mbox{\texttt{\slshape plist}} of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape M}} as a new matrix. }

 

\subsection{\textcolor{Chapter }{UnionOfRows}}
\logpage{[ 3, 1, 8 ]}\nobreak
\hyperdef{L}{X81B6E8EC86BC649A}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UnionOfRows({\slshape A, B})\index{UnionOfRows@\texttt{UnionOfRows}}
\label{UnionOfRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the sparse matrix created by concatenating the rows of the sparse
matrices stored in the \texttt{Eval} attributes of the \textsf{homalg} matrices \mbox{\texttt{\slshape A}} and \mbox{\texttt{\slshape B}}. }

 

\subsection{\textcolor{Chapter }{UnionOfColumns}}
\logpage{[ 3, 1, 9 ]}\nobreak
\hyperdef{L}{X81630C648148E324}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{UnionOfColumns({\slshape A, B})\index{UnionOfColumns@\texttt{UnionOfColumns}}
\label{UnionOfColumns}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the sparse matrix created by concatenating the columns of the
sparse matrices stored in the \texttt{Eval} attributes of the \textsf{homalg} matrices \mbox{\texttt{\slshape A}} and \mbox{\texttt{\slshape B}}. }

 

\subsection{\textcolor{Chapter }{DiagMat}}
\logpage{[ 3, 1, 10 ]}\nobreak
\hyperdef{L}{X792C1E46800C874C}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DiagMat({\slshape e})\index{DiagMat@\texttt{DiagMat}}
\label{DiagMat}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This method takes a list \mbox{\texttt{\slshape e}} of \textsf{homalg} matrices and returns the sparse block matrix of the matrices stored in the \texttt{Eval} attributes of the matrices in \mbox{\texttt{\slshape e}}. }

 

\subsection{\textcolor{Chapter }{KroneckerMat}}
\logpage{[ 3, 1, 11 ]}\nobreak
\hyperdef{L}{X7A1A3AE878C2AA3B}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{KroneckerMat({\slshape A, B})\index{KroneckerMat@\texttt{KroneckerMat}}
\label{KroneckerMat}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the sparse Kronecker matrix of the matrices stored in the \texttt{Eval} attributes of the \textsf{homalg} matrices \mbox{\texttt{\slshape A}} and \mbox{\texttt{\slshape B}}. }

 

\subsection{\textcolor{Chapter }{Compose}}
\logpage{[ 3, 1, 12 ]}\nobreak
\hyperdef{L}{X798C13F97F955B72}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{Compose({\slshape A, B})\index{Compose@\texttt{Compose}}
\label{Compose}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a sparse matrix



 This returns the matrix product of the sparse matrices stored in the \texttt{Eval} attributes of the \textsf{homalg} matrices \mbox{\texttt{\slshape A}} and \mbox{\texttt{\slshape B}}. }

 

\subsection{\textcolor{Chapter }{NrRows}}
\logpage{[ 3, 1, 13 ]}\nobreak
\hyperdef{L}{X7AAEA5B1875BEE2D}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NrRows({\slshape C})\index{NrRows@\texttt{NrRows}}
\label{NrRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
an integer



 This returns the number of rows of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{NrColumns}}
\logpage{[ 3, 1, 14 ]}\nobreak
\hyperdef{L}{X781766A47B5D41AD}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{NrColumns({\slshape C})\index{NrColumns@\texttt{NrColumns}}
\label{NrColumns}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
an integer



 This returns the number of columns of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{IsZeroMatrix}}
\logpage{[ 3, 1, 15 ]}\nobreak
\hyperdef{L}{X7AEBD5187EE3DAA4}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsZeroMatrix({\slshape C})\index{IsZeroMatrix@\texttt{IsZeroMatrix}}
\label{IsZeroMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
\textsc{true} or \textsc{false}



 This returns \textsc{true} if the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}} is a zero matrix, and \textsc{false} otherwise. }

 

\subsection{\textcolor{Chapter }{IsDiagonalMatrix}}
\logpage{[ 3, 1, 16 ]}\nobreak
\hyperdef{L}{X7EEC8E768178696E}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{IsDiagonalMatrix({\slshape C})\index{IsDiagonalMatrix@\texttt{IsDiagonalMatrix}}
\label{IsDiagonalMatrix}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
\textsc{true} or \textsc{false}



 This returns \textsc{true} if the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}} is a diagonal matrix, and \textsc{false} otherwise. }

 

\subsection{\textcolor{Chapter }{ZeroRows}}
\logpage{[ 3, 1, 17 ]}\nobreak
\hyperdef{L}{X828225E0857B1FDA}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ZeroRows({\slshape C})\index{ZeroRows@\texttt{ZeroRows}}
\label{ZeroRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a list



 This returns the list of zero rows of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 

\subsection{\textcolor{Chapter }{ZeroColumns}}
\logpage{[ 3, 1, 18 ]}\nobreak
\hyperdef{L}{X870D761F7AB96D12}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{ZeroColumns({\slshape C})\index{ZeroColumns@\texttt{ZeroColumns}}
\label{ZeroColumns}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a list



 This returns the list of zero columns of the sparse matrix stored in the \texttt{Eval} attribute of the \textsf{homalg} matrix \mbox{\texttt{\slshape C}}. }

 }

 
\section{\textcolor{Chapter }{The Basic Functions and \textsf{homalg} table creation}}\logpage{[ 3, 2, 0 ]}
\hyperdef{L}{X87BA6DDD812E02F4}{}
{
  

\subsection{\textcolor{Chapter }{DecideZeroRows}}
\logpage{[ 3, 2, 1 ]}\nobreak
\hyperdef{L}{X83FB5A3887826EC8}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DecideZeroRows({\slshape A, B})\index{DecideZeroRows@\texttt{DecideZeroRows}}
\label{DecideZeroRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} matrix



 This returns the \textsf{homalg} matrix you get by row reducing the \textsf{homalg} matrix \mbox{\texttt{\slshape A}} with the \textsf{homalg} matrix \mbox{\texttt{\slshape B}}. }

 

\subsection{\textcolor{Chapter }{DecideZeroRowsEffectively}}
\logpage{[ 3, 2, 2 ]}\nobreak
\hyperdef{L}{X7CF573C581B0C77F}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{DecideZeroRowsEffectively({\slshape A, B, T})\index{DecideZeroRowsEffectively@\texttt{DecideZeroRowsEffectively}}
\label{DecideZeroRowsEffectively}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} matrix \mbox{\texttt{\slshape M}}



 This returns the \textsf{homalg} matrix \mbox{\texttt{\slshape M}} you get by row reducing the \textsf{homalg} matrix \mbox{\texttt{\slshape A}} with the \textsf{homalg} matrix \mbox{\texttt{\slshape B}}. The transformation matrix is stored in the void \textsf{homalg} matrix \mbox{\texttt{\slshape T}} as a side effect. The matrices satisfy $M = A + T * B$. }

 

\subsection{\textcolor{Chapter }{SyzygiesGeneratorsOfRows}}
\logpage{[ 3, 2, 3 ]}\nobreak
\hyperdef{L}{X7BE7DDBA8490A185}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SyzygiesGeneratorsOfRows({\slshape M})\index{SyzygiesGeneratorsOfRows@\texttt{SyzygiesGeneratorsOfRows}}
\label{SyzygiesGeneratorsOfRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} matrix



 This returns the row syzygies of the \textsf{homalg} matrix \mbox{\texttt{\slshape M}}, again as a \textsf{homalg} matrix. }

 

\subsection{\textcolor{Chapter }{RelativeSyzygiesGeneratorsOfRows}}
\logpage{[ 3, 2, 4 ]}\nobreak
\hyperdef{L}{X87DF107B7F8C95AE}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RelativeSyzygiesGeneratorsOfRows({\slshape M, N})\index{RelativeSyzygiesGeneratorsOfRows@\texttt{RelativeSyzygiesGeneratorsOfRows}}
\label{RelativeSyzygiesGeneratorsOfRows}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} matrix



 The row syzygies of \mbox{\texttt{\slshape M}} are returned, but now the computation interpretes the rows of the \textsf{homalg} matrix \mbox{\texttt{\slshape N}} as additional zero relations. }

  

\subsection{\textcolor{Chapter }{RowReducedEchelonForm}}
\logpage{[ 3, 2, 5 ]}\nobreak
\hyperdef{L}{X7D9684E68245618F}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{RowReducedEchelonForm({\slshape M[, U]})\index{RowReducedEchelonForm@\texttt{RowReducedEchelonForm}}
\label{RowReducedEchelonForm}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} matrix \mbox{\texttt{\slshape N}}



 If one argument is given, this returns the triangular basis (reduced row
echelon form) of the \textsf{homalg} matrix \mbox{\texttt{\slshape M}}, again as a \textsf{homalg} matrix. In case of two arguments, still only the triangular basis of \mbox{\texttt{\slshape M}} is returned, but the transformation matrix is stored in the void \textsf{homalg} matrix \mbox{\texttt{\slshape U}} as a side effect. The matrices satisfy $N = U * M$. }

 

\subsection{\textcolor{Chapter }{CreateHomalgTable}}
\logpage{[ 3, 2, 6 ]}\nobreak
\hyperdef{L}{X8187F91A834A4276}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{CreateHomalgTable({\slshape R})\index{CreateHomalgTable@\texttt{CreateHomalgTable}}
\label{CreateHomalgTable}
}\hfill{\scriptsize (function)}}\\
\textbf{\indent Returns:\ }
a \textsf{homalg} table



 This returns the \textsf{homalg} table of what will become the \textsf{homalg} ring \mbox{\texttt{\slshape R}} (at this point \mbox{\texttt{\slshape R}} is just a \textsf{homalg} object with some properties for the method selection of \texttt{CreateHomalgTable}). This method includes the needed functions stored in the global variables \texttt{CommonHomalgTableForGaussTools} and \texttt{CommonHomalgTableForGaussBasic}, and can add some more to the record that will become the \textsf{homalg} table. }

 }

 
\section{\textcolor{Chapter }{Matrix entry manipulation}}\logpage{[ 3, 3, 0 ]}
\hyperdef{L}{X805204B0834D63EB}{}
{
 This is just support for the sparse matrix data type.  

\subsection{\textcolor{Chapter }{GetEntryOfHomalgMatrix}}
\logpage{[ 3, 3, 1 ]}\nobreak
\hyperdef{L}{X8626D7EE820F90C7}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{GetEntryOfHomalgMatrix({\slshape M, r, c, R})\index{GetEntryOfHomalgMatrix@\texttt{GetEntryOfHomalgMatrix}}
\label{GetEntryOfHomalgMatrix}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
\mbox{\texttt{\slshape M}}[\mbox{\texttt{\slshape r}},\mbox{\texttt{\slshape c}}]



 If the Eval attribute of the homalg matrix \mbox{\texttt{\slshape M}} over the \textsf{homalg} ring \mbox{\texttt{\slshape R}} is sparse, this calls the corresponding \textsf{Gauss} command \texttt{GetEntry}. }

 

\subsection{\textcolor{Chapter }{SetEntryOfHomalgMatrix}}
\logpage{[ 3, 3, 2 ]}\nobreak
\hyperdef{L}{X7973BA7A83A23D80}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{SetEntryOfHomalgMatrix({\slshape M, r, c, e, R})\index{SetEntryOfHomalgMatrix@\texttt{SetEntryOfHomalgMatrix}}
\label{SetEntryOfHomalgMatrix}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
nothing



 If the Eval attribute of the homalg matrix \mbox{\texttt{\slshape M}} over the \textsf{homalg} ring \mbox{\texttt{\slshape R}} is sparse, this calls the corresponding \textsf{Gauss} command \texttt{GetEntry}, to achieve \texttt{\mbox{\texttt{\slshape M}}[\mbox{\texttt{\slshape r}},\mbox{\texttt{\slshape c}}]:=\mbox{\texttt{\slshape e}}}. }

 

\subsection{\textcolor{Chapter }{AddToEntryOfHomalgMatrix}}
\logpage{[ 3, 3, 3 ]}\nobreak
\hyperdef{L}{X78548FF17F965F33}{}
{\noindent\textcolor{FuncColor}{$\Diamond$\ \texttt{AddToEntryOfHomalgMatrix({\slshape M, r, c, e, R})\index{AddToEntryOfHomalgMatrix@\texttt{AddToEntryOfHomalgMatrix}}
\label{AddToEntryOfHomalgMatrix}
}\hfill{\scriptsize (method)}}\\
\textbf{\indent Returns:\ }
nothing



 If the Eval attribute of the homalg matrix \mbox{\texttt{\slshape M}} over the \textsf{homalg} ring \mbox{\texttt{\slshape R}} is sparse, this calls the corresponding \textsf{Gauss} command \texttt{AddToEntry}, to achieve \texttt{\mbox{\texttt{\slshape M}}[\mbox{\texttt{\slshape r}},\mbox{\texttt{\slshape c}}] := \mbox{\texttt{\slshape M}}[\mbox{\texttt{\slshape r}},\mbox{\texttt{\slshape c}}] + \mbox{\texttt{\slshape e}}}. }

 }

 }

   
\chapter{\textcolor{Chapter }{Example}}\label{examples}
\logpage{[ 4, 0, 0 ]}
\hyperdef{L}{X85861B017AEEC50B}{}
{
 
\section{\textcolor{Chapter }{HomHom}}\label{HomHom}
\logpage{[ 4, 1, 0 ]}
\hyperdef{L}{X791E21F47805048A}{}
{
  The following example is taken from Section 2 of \cite{BREACA}. \\
\\
 The computation takes place over the ring $R={\ensuremath{\mathbb Z}}/2^8{\ensuremath{\mathbb Z}}$, which is directly supported by the package \textsf{Gauss}. 

 Here we compute the (infinite) long exact homology sequence of the covariant
functor $Hom(Hom(-,{\ensuremath{\mathbb Z}}/2^7{\ensuremath{\mathbb
Z}}),{\ensuremath{\mathbb Z}}/2^4{\ensuremath{\mathbb Z}})$ (and its left derived functors) applied to the short exact sequence\\
\\
 $0 \longrightarrow M\_={\ensuremath{\mathbb Z}}/2^2{\ensuremath{\mathbb Z}}
\stackrel{\alpha_1}{\longrightarrow} M={\ensuremath{\mathbb
Z}}/2^5{\ensuremath{\mathbb Z}} \stackrel{\alpha_2}{\longrightarrow}
\_M={\ensuremath{\mathbb Z}}/2^3{\ensuremath{\mathbb Z}} \longrightarrow 0$ . 
\begin{Verbatim}[fontsize=\small,frame=single,label=Example]
  gap> R := HomalgRingOfIntegers( 2^8 );
  <A homalg internal ring>
  gap> Display( R );
  Z/256Z
  gap> M := LeftPresentation( [ 2^5 ], R );
  <A cyclic left module presented by an unknown number of relations for a cyclic\
   generator>
  gap> Display( M );
  Z/256Z/< ZmodnZObj(32,256) >
  gap> M;
  <A cyclic left module presented by 1 relation for a cyclic generator>
  gap> _M := LeftPresentation( [ 2^3 ], R );
  <A cyclic left module presented by an unknown number of relations for a cyclic\
   generator>
  gap> Display( _M );
  Z/256Z/< ZmodnZObj(8,256) >
  gap> _M;
  <A cyclic left module presented by 1 relation for a cyclic generator>
  gap> alpha2 := HomalgMap( [ 1 ], M, _M );
  <A "homomorphism" of left modules>
  gap> IsMorphism( alpha2 );
  true
  gap> alpha2;
  <A homomorphism of left modules>
  gap> Display( alpha2 );
     1
  
  the map is currently represented by the above 1 x 1 matrix
  gap> M_ := Kernel( alpha2 );
  <A cyclic left module presented by yet unknown relations for a cyclic generato\
  r>
  gap> alpha1 := KernelEmb( alpha2 );
  <A monomorphism of left modules>
  gap> seq := HomalgComplex( alpha2 );
  <An acyclic complex containing a single morphism of left modules at degrees 
  [ 0 .. 1 ]>
  gap> Add( seq, alpha1 );
  gap> seq;
  <A sequence containing 2 morphisms of left modules at degrees [ 0 .. 2 ]>
  gap> IsShortExactSequence( seq );
  true
  gap> seq;
  <A short exact sequence containing 2 morphisms of left modules at degrees 
  [ 0 .. 2 ]>
  gap> Display( seq );
  -------------------------
  at homology degree: 2
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
    24
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 1
  Z/256Z/< ZmodnZObj(32,256) > 
  -------------------------
     1
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 0
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
  gap> K := LeftPresentation( [ 2^7 ], R );
  <A cyclic left module presented by an unknown number of relations for a cyclic\
   generator>
  gap> L := RightPresentation( [ 2^4 ], R );
  <A cyclic right module on a cyclic generator satisfying an unknown number of r\
  elations>
  gap> triangle := LHomHom( 4, seq, K, L, "t" );
  <An exact triangle containing 3 morphisms of left complexes at degrees 
  [ 1, 2, 3, 1 ]>
  gap> lehs := LongSequence( triangle );
  <A sequence containing 14 morphisms of left modules at degrees [ 0 .. 14 ]>
  gap> ByASmallerPresentation( lehs );
  <A non-zero sequence containing 14 morphisms of left modules at degrees 
  [ 0 .. 14 ]>
  gap> IsExactSequence( lehs );
  false
  gap> lehs;
  <A non-zero left acyclic complex containing 
  14 morphisms of left modules at degrees [ 0 .. 14 ]>
  gap> Assert( 0, IsLeftAcyclic( lehs ) );
  gap> Display( lehs );
  -------------------------
  at homology degree: 14
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
     4
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 13
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     6
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 12
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     2
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 11
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
     4
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 10
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     6
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 9
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     2
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 8
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
     4
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 7
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     6
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 6
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     2
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 5
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
     4
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 4
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     6
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 3
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
     2
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 2
  Z/256Z/< ZmodnZObj(4,256) > 
  -------------------------
     8
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 1
  Z/256Z/< ZmodnZObj(16,256) > 
  -------------------------
     1
  
  the map is currently represented by the above 1 x 1 matrix
  ------------v------------
  at homology degree: 0
  Z/256Z/< ZmodnZObj(8,256) > 
  -------------------------
\end{Verbatim}
 }

  }

 

\appendix


\chapter{\textcolor{Chapter }{An Overview of the \textsf{GaussForHomalg} package source code}}\label{FileOverview}
\logpage{[ "A", 0, 0 ]}
\hyperdef{L}{X82B7FBAA79447092}{}
{
  \begin{center}
\begin{tabular}{l|l}Filename&
Content\\
\hline
\texttt{GaussForHomalg.gi}&
Methods for matrix entry manipulation\\
\texttt{GaussTools.gi}&
Tools for matrix operations\\
\texttt{GaussBasic.gi}&
The "Basic" Operations ($\to$ \cite{BR} and \cite{homalg-package})\\
\texttt{GaussFQI.gi}&
\textsf{homalg} Table for finite quotients of {\ensuremath{\mathbb Z}}: ${\ensuremath{\mathbb Z}} / \langle p^n \rangle$\\
\texttt{GaussRationals.gi}&
\textsf{homalg} Table for the rationals {\ensuremath{\mathbb Q}}\\
\end{tabular}\\[2mm]
\textbf{Table: }\emph{The \textsf{GaussForHomalg} package files.}\end{center}

 }

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

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

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


\printindex

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