# saturate -- saturation of ideal or submodule

## Synopsis

• Usage:
saturate(I, J)
saturate I
• Inputs:
• I, an ideal, , or ,
• J, an ideal, , , or , if not present, then the ideal generated by the variables of the ring is used
• Optional inputs:
• Strategy => , default value null, specifies the algorithm
• MinimalGenerators => , default value true, indicates whether the output should be trimmed
• BasisElementLimit => ..., default value infinity,
• DegreeLimit => ..., default value {},
• PairLimit => ..., default value infinity,
• Outputs:
• an ideal or , the saturation $I:J^\infty = \{f | f J^N\subset I \text{ for some } N>0\}$

## Description

If $I$ is either an ideal or a submodule of a module $M$, the saturation $I : J^\infty$ is defined to be the set of elements $f$ in the ring or $M$ such that $f J^N$ is contained in $I$, for some $N$ large enough.

For example, one way to homogenize an ideal is to homogenize the generators and then saturate with respect to the homogenizing variable.

 i1 : R = ZZ/32003[a..d]; i2 : I = ideal(a^3-b, a^4-c) 3 4 o2 = ideal (a - b, a - c) o2 : Ideal of R i3 : Ih = homogenize(I,d) 2 2 3 2 3 2 o3 = ideal (a*b - c*d, a c - b d, b - a*c , a - b*d ) o3 : Ideal of R i4 : saturate(Ih,d) 2 2 3 2 3 2 o4 = ideal (a*b - c*d, a c - b d, b - a*c , a - b*d ) o4 : Ideal of R

We can use this command to remove graded submodules of finite length.

 i5 : m = ideal vars R o5 = ideal (a, b, c, d) o5 : Ideal of R i6 : M = R^1 / (a * m^2) o6 = cokernel | a3 a2b a2c a2d ab2 abc abd ac2 acd ad2 | 1 o6 : R-module, quotient of R i7 : M / saturate 0_M o7 = cokernel | a a3 a2b a2c a2d ab2 abc abd ac2 acd ad2 | 1 o7 : R-module, quotient of R

If $I$ and $J$ are both monomial ideals, then a faster algorithm is used. Otherwise, when needed, Gröbner bases will be computed, and if the computation succeeds the result is cached inside the first argument. Partial computations are not yet cached, but this may change in a future version.

## Ways to use saturate :

• "saturate(Ideal)"
• "saturate(Ideal,Ideal)"
• "saturate(Ideal,RingElement)"
• "saturate(Module)"
• "saturate(Module,Ideal)"
• "saturate(Module,RingElement)"
• "saturate(MonomialIdeal,RingElement)"
• "saturate(Vector)"
• "saturate(Vector,Ideal)"
• "saturate(Vector,RingElement)"

## For the programmer

The object saturate is .