# LocalRings -- Localizations of polynomial rings at prime ideals

## Description

This package defines the LocalRing class for localizations of polynomial rings and extends most basic commutative algebra computations to such local rings. Moreover, the functions hilbertSamuelFunction and length(Module) for Artinian modules over a local ring are implemented in this package.

For information about the classical way of working with local rings at maximal ideals see replacements for functions from version 1.0.

The following is an example of defining the rational quartic curve in $\PP^3$ localized at a maximal ideal and a prime ideal using two different methods.

 i1 : R = ZZ/32003[a..d]; i2 : I = monomialCurveIdeal(R,{1,3,4}) 3 2 2 2 3 2 o2 = ideal (b*c - a*d, c - b*d , a*c - b d, b - a c) o2 : Ideal of R i3 : M = ideal"a,b,c,d"; -- maximal ideal at the origin o3 : Ideal of R i4 : P = ideal"a,b,c"; -- prime ideal o4 : Ideal of R i5 : RM = R_M o5 = RM o5 : LocalRing, maximal ideal (a, b, c, d) i6 : RP = localRing(R, P) o6 = RP o6 : LocalRing, maximal ideal (a, b, c)

An ideal, module, or chain complex may either be localized using promote or using the tensor product.

 i7 : C = res I 1 4 4 1 o7 = R <-- R <-- R <-- R <-- 0 0 1 2 3 4 o7 : ChainComplex i8 : D = C ** RM; i9 : E = pruneComplex D 1 4 4 1 o9 = RM <-- RM <-- RM <-- RM 0 1 2 3 o9 : ChainComplex

The computation above shows that the rational quartic curve is not locally Cohen-Macaulay at the origin. Therefore the curve is not Cohen-Macaulay

However, the curve is Cohen-Macaulay at the prime ideal $(a, b, c)$ (and in fact any other prime ideal).

 i10 : D' = C ** RP; i11 : E' = pruneComplex D' 1 2 1 o11 = RP <-- RP <-- RP 0 1 2 o11 : ChainComplex

The elementary definitions and operations are declared in localring.m2. Engine routines for core computations are implemented in e/localring.hpp.

The following commutative algebra computations are implemented in this package: syz, resolution, mingens, minimalPresentation, trim, length(Module), isSubset, inducedMap, quotient(Matrix,Matrix), remainder(Matrix,Matrix), quotient(Module,Module), saturate, annihilator. Most of these routines rely on the functions liftUp and pruneComplex and take advantage of Nakayama's lemma and flatness of local rings.

In addition, methods such as map, modulo, subquotient, kernel, cokernel, image, homology, Hom, Ext, Tor, etc. work over local rings automatically.

## Caveat

Currently limited to localization at prime ideals rather than arbitrary multiplicatively closed sets. Quotients of local rings are not implemented yet. Moreover, certain functions (such as symbol%, radical, minimalPrimes, leadingCoefficient) are ambiguous or not yet defined.

• PruneComplex -- Pruning chain complexes over polynomial and local rings

## Version

This documentation describes version 2.1 of LocalRings.

## Source code

The source code from which this documentation is derived is in the file LocalRings.m2. The auxiliary files accompanying it are in the directory LocalRings/.

## Exports

• Types
• Functions and commands
• Methods
• baseRing(LocalRing) -- produce the ring from which a ring was formed
• char(LocalRing) -- computes the characteristic of the ring or field
• coefficientRing(LocalRing) -- get the coefficient ring
• degreeLength(LocalRing) -- the length of the degree vector
• degrees(LocalRing) -- degrees of generators
• dim(LocalRing) -- compute the Krull dimension
• frac(LocalRing) -- construct a fraction field
• generators(LocalRing) -- the list of generators of a ring
• "hilbertSamuelFunction(Ideal,Module,ZZ)" -- see hilbertSamuelFunction -- Computes the Hilbert-Samuel Function of Modules over Local Rings
• "hilbertSamuelFunction(Ideal,Module,ZZ,ZZ)" -- see hilbertSamuelFunction -- Computes the Hilbert-Samuel Function of Modules over Local Rings
• "hilbertSamuelFunction(Module,ZZ)" -- see hilbertSamuelFunction -- Computes the Hilbert-Samuel Function of Modules over Local Rings
• "hilbertSamuelFunction(Module,ZZ,ZZ)" -- see hilbertSamuelFunction -- Computes the Hilbert-Samuel Function of Modules over Local Rings
• isCommutative(LocalRing) -- whether a ring is commutative
• isWellDefined(LocalRing) -- whether a local ring is well defined
• "liftUp(Ideal,Ring)" -- see liftUp -- Lifts various objects over R_P to R.
• "liftUp(Matrix,Ring)" -- see liftUp -- Lifts various objects over R_P to R.
• "liftUp(Module,Ring)" -- see liftUp -- Lifts various objects over R_P to R.
• "liftUp(MutableMatrix,Ring)" -- see liftUp -- Lifts various objects over R_P to R.
• "liftUp(RingElement,Ring)" -- see liftUp -- Lifts various objects over R_P to R.
• "liftUp(Thing)" -- see liftUp -- Lifts various objects over R_P to R.
• "localComplement(Matrix)" -- see localComplement -- find the splitting of the target of a map
• "localMingens(Matrix)" -- see localMingens -- finds a minimal set of generators
• "localModulo(Matrix,Matrix)" -- see localModulo -- find the pre-image (pullback) of image of a map over a local ring
• "localPrune(Module)" -- see localPrune -- find a minimal presentation
• "localResolution(Ideal)" -- see localResolution -- find a resolution over a local ring
• "localResolution(Module)" -- see localResolution -- find a resolution over a local ring
• "max(LocalRing)" -- see LocalRing -- The class of all local rings
• "localRing(EngineRing,Ideal)" -- see localRing -- Constructor for local rings
• "localRing(Ring,Ideal)" -- see localRing -- Constructor for local rings
• "PolynomialRing _ Ideal" -- see localRing -- Constructor for local rings
• "PolynomialRing _ RingElement" -- see localRing -- Constructor for local rings
• "localsyz(Matrix)" -- see localsyz -- find syzygies
• numgens(LocalRing) -- number of generators of a polynomial ring
• "setMaxIdeal(Ideal)" -- see setMaxIdeal -- set the maximal ideal for local ring methods
• Symbols
• "maxIdeal" -- see LocalRing -- The class of all local rings
• "residueMap" -- see LocalRing -- The class of all local rings

## For the programmer

The object LocalRings is .