Usage

If you are just interested in using the &Gauss; package with &homalg;, you do not need to know much about &GaussForHomalg;, as it will work in the background, telling &homalg; which functions to call.

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

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

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

if IsBound( HOMALG.OtherInternalMatrixTypes ) then Add( HOMALG.OtherInternalMatrixTypes, IsSparseMatrix ); else HOMALG.OtherInternalMatrixTypes := [ IsSparseMatrix ]; fi;

This is a specialty to explain to &homalg; that &Gauss; introduces a new matrix type in &GAP;. Usually, there should not be a need for this.

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

In 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 &ZZ; / n &ZZ; is stored in GaussFQI.gi (Finite Quotients of the Integers), while the Rationals have their own file, GaussRationals.gi. Note that both files include only one method, 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 , 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 , which is generally just a matrix transposition, but could be overwritten to be a true involution when creating the &homalg; table for noncommutative rings.