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 3 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 [BR08], 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 ℤ / n ℤ 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 ReducedRowEchelonForm
(3.3-1), 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 Involution
(3.2-5), which is generally just a matrix transposition, but could be overwritten to be a true involution when creating the homalg table for noncommutative rings.
generated by GAPDoc2HTML