Adding Localization of Polynomial Rings at Prime Ideals
This commit introduces changes in the core and in the engine, includes a new
package, PruneComplex, and updates the LocalRings package. A new raw engine
type LocalRing for localizations of polynomial rings at prime ideals, along
with arithmetic operations for such rings, is defined in e/localring.hpp.
The m2/localring.m2 file in the core utilizes that type, allowing for making
local rings as:
RP = localRing(ZZ/32003[x,y,z,w], ideal"xy-zw")
The PruneComplex package includes various methods for pruning chain complexes
over polynomial and local rings. In particular, in the local or graded case
the output is guaranteed to be a minimal free resolution. Algorithms in this
package are also implemented using C++ in e/mutablecomplex.hpp for speed.
This introduces a new type MutableComplex in the engine.
The LocalRings package uses the package above to extend the following methods
to such local rings: syz, res, trim, mingens, minimalPresentation, symbol//,
inducedMap, symbol:, saturate, annihilate. This package now also includes a
new method for computing length of modules over local rings and the Hilbert--
Samuel function of modules over local rings, optionally given a parameter
ideal. See arXiv:1710.09830 for reference.
Note: Methods isSubset and symbol== are fixed in m2/modules2.m2 and reduce is
fixed in m2/matrix.m2. Many other methods that only rely on the methods above,
such as map, modulo, subquotient, kernel, cokernel, image, homology, Hom, Ext,
Tor, etc. work for local rings automatically.
Note: The old LocalRings.m2 package from 2008 is stored in
packages/LocalRings/legacy.m2 and is still usable, though it is slower and
incompatible with new operations.
If you need specific methods that do not work, please email Mahrud Sayrafi.