The GAP package SingularInterface is a highly efficient and robust unidirectional low-level interface to Singular [DGPS14]. It is the outcome of an intensive collaboration between core developers of both systems.
The goal of this interface is to map all of Singular’s powerful functionality into GAP. To achieve this it automatically wraps all Singular datatypes and exports all of Singular’s interface procedures to GAP. Furthermore, all procedures of any contributed library can be loaded on demand.
This package is a rather "faithful" image of Singular; it does not make an extensive attempt for a better integration of Singular into the GAP ecosystem. This is intentionally left to other packages, which are free to realize this in different ways.
The development of SingularInterface has reached a \(\beta\)-phase and is already actively used in some research projects. We hope to attract more users in the near future, whose feedback will be crucial for a successful further development.
The motivation behind developing SingularInterface is the increasing interest of various research projects in combining the strength of both systems: GAP users get access to Singular's polynomial arithmetic and highly optimized Gröbner basis engine. Singular users gain a second front end language for this engine -- in addition to the current Singular language -- with an advanced object model primarily designed for modeling higher mathematical structures, as well as access to GAP as an expert system for group and representation theory.
Almost all functions provided by SingularInterface have a name starting with one of the following prefixes:
SI_
: Singular interpreter functions such as std
are prefixed with SI_
, resulting in the GAP name SI_std
.
SIL_
: Singular library functions such as groebner
are prefixed with SIL_
, resulting in the GAP name SIL_groebner
.
_SI_
: Various low-level methods start with the prefix _SI_
; these are for internal use and currently undocumented.
IsSI_
: These are names of types provided by SingularInterface, such as IsSI_matrix
.
This makes it relatively easy to discover all functions provided by SingularInterface, namely by using GAP's tab completion feature: Just type a prefix, such as SI_
, then press the TAB key twice and GAP displays all matching identifiers.
One notable exception to this naming scheme is the function Singular
(2.1-1).
The latest SingularInterface release can be downloaded from http://gap-system.github.io/SingularInterface/.
For instructions on how to compile the SingularInterface source code, please refer to the INSTALL
file accompanying it. To check that the package has been successfully installed, start GAP and type:
gap> LoadPackage( "SingularInterface" ); true
The noncommutative extensions Plural and SCA of Singular (aka. noncommutative subsystems) decided to comply with Singular's column convention while implementing the noncommutative Gröbner basis algorithms for left ideals and modules. This is incompatible with matrix multiplication resulting in various annoying side-effects (see, e.g., SI_lift
(4.2-6)).
These noncommutative subsystems should have either used the row convention (violating Singular's established convention) or should have implemented the Gröbner basis algorithms for right ideals and modules instead (breaking with the existing literature on the subject which usually describes algorithms for left ideals and modules).
SingularInterface makes no attempt to resolve this issue. Any higher implementation which needs the noncommutative subsystems will probably need to address this issue.
For example, the homalg project [hpa14] completely resolves this dilemma by mimicking the row convention. The details are too technical to be exposed here. The effect is that both left and right modules are properly supported in homalg, regardless of the commutativity of the ring. This is done in a way which is even compatible with base change from a commutative ring (in Singular) to a noncommutative ring extension (in Plural or SCA). The support for right modules depends on the existence of an involution of the noncommutative ring.
reference Rundbrief article
generated by GAPDoc2HTML