Does anyone here use this?

Would it be useful for someone new to topology/homological algebra learning wise ?

comments/opinions very welcomed.

thanks,

dc

http://wwwb.math.rwth-aachen.de/homalg/

*homalg* is a Maple package that implements a lot of basic homological algebra constructions in an abstract way. This means, these constructions are implemented independently of any specific ring. Whenever one wants to perform concrete homological computations over a ring, one specifies a so-called ring package implementing the arithmetics of that ring: the package must provide a procedure which effectively solves the ideal membership problem and another one which computes a generating set of syzygies for a finite set of relations.

The main facilities of *homalg* are the following:

- tensor product module of two modules over a commutative ring,
- dual module over a ring with involution,
- module of homomorphisms between two modules over a commutative ring,
- computation of kernels, cokernels, defects of homomorphisms, pullbacks and pushouts,
- derivation of functors,
- satellites,
- connecting homomorphisms,
- long exact (co)homology sequences,
- composition of functors,
- from n-cocycles to n-extensions and back,
- Yoneda product,
- ...

The following Maple ring packages have successfully been used with *homalg*. In each of the following descriptions we append a list of rings which can be dealt with in *homalg* using the respective package. Further, and without any extra help from the ring package, *homalg* can automatically compute over residue class rings of any supported ring.

- PIR is a tiny package, or rather a pseudo package, that makes Maple's built-in facilities for dealing with integers and some other principal ideal rings available to
*homalg*. (Prime subfields *Q* and *Z*/*pZ* and their finite field extensions, realized as primitive extensions, rational function fields over the previous fields, the integers *Z*, the Gaussian integers *Z*[√-1] and univariate polynomial rings *Z*/*pZ*[*x*], where *p* is a prime, *Q*[*x*] and *K*[*x*], where *K* is a rational function field over a finite extension of *Q*, realized as a primitive extension.)
- Involutive implements the involutive basis technique of V. P. Gerdt and Y. A. Blinkov in Maple. An involutive basis is a special kind of Gröbner basis for an ideal of a polynomial ring or, more generally, for a submodule of a free module over a polynomial ring. Involutive bases have nice combinatorial properties [PR05], and the algorithms designed by V. P. Gerdt and Y. A. Blinkov [Ger05], [GB98a], [GB98b] compute them efficiently. In fact, these algorithms provide an efficient alternative to Buchberger's algorithm [Buc65] to compute Gröbner bases. The packages Involutive, Janet, and JanetOre restricts to particular involutive bases, namely Janet bases. It also provides an interface to a C++ implementation of the involutive basis technique which can be used to call the fast routines when needed as well as to switch to these fast routines for the whole Maple session. (Commutative polynomial rings:
*S*[x_{1}, ..., x_{n}], where *S* is either *Z* or a field existing in Maple.)
- Janet implements the involutive basis technique for computing Janet bases of linear systems of partial differential equations. (Differential algebras over differential fields:
*K*[∂/∂x_{1}, ..., ∂/∂x_{n}], where *K* is a differential field which exists in Maple.)
- JanetOre generalizes Involutive from commutative polynomial rings to certain iterated skew polynomial rings. In particular, it computes Janet bases for left ideals in Ore algebras [CS98]. (
*K*[∂; σ, δ], where *K* is a polynomial ring over a field, ∂ a new indeterminate, σ is a certain automorphism of *K* and δ a σ-derivation of *K*, and iterated extensions of this kind.)
- OreModules [CQR07] is a Maple package for the study of structural properties of linear systems over Ore algebras, i.e. linear equations involving certain linear functional operators which can be considered as elements of an Ore algebra. By default, it uses the Maple package Ore_algebra [CS98] to compute Gröbner bases, but these calls can also be switched to JanetOre. (Ore algebras [CS98] and the iterated skew polynomial rings from the previous point.)

*homalg* is also able to make use of various normal form algorithms for modules resp. special types of modules over various rings, which are used to provide a standard form for a presentation of these modules:

- PIR uses the
**Smith** normal form for (Maple-built-in) principal ideal rings.
- Janet optionally uses the
**Jacobson** normal form for univariate differential rings, i.e. rings of the form *K*[∂], where *K* is a differential field with ∂ a derivation of *K*.
- Involutive optionally uses the extension package QuillenSuslin written by Anna Fabianska [Fab06] [FQ07] implementing the
**Quillen-Suslin** theorem to compute a free basis of a projective module over a polynomial ring (which is then free by the theorem).
- OreModules optionally uses the extension package Stafford [QR07] which computes a free basis using the
**Stafford** algorithm for a stably free module of rank at least 2 over the Weyl algebras *k*[x_{1},...,x_{n},∂_{1},..., ∂_{n}] and *k*(x_{1},...,x_{n})[∂_{1},...,∂_{n}], with *k* a field of characteristic 0.

Historically, *homalg* was created due to the repeated need for implementations of constructions from homological algebra over different rings, e.g. Involutive, Janet, and JanetOre demanded for such constructions, and the authors realized that they had to tackle the problem of finding a way to implement these constructions independently of the ring.