saturate
saturate(I,J,options) -- computes the saturation (I : J^*) 
    of I with respect to J.  If J is not given, the 
    ideal J is taken to be the ideal generated by the variables of 
    the ring R of I.
saturate(Ideal)
saturate(Ideal,Ideal)
saturate(Ideal,RingElement)
saturate(Module)
saturate(Module,Ideal)
saturate(Module,RingElement)
saturate(Vector)
If I is either an ideal or a submodule of a module M,
    the saturation (I : J^*) is defined to be the set of elements
    f in the ring (first case) or in M (second case) such that
    J^N * f 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)
 3      2   4      3
 o3 = ideal (a  - b*d , a  - c*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 {0} | a3 a2b a2c a2d ab2 abc abd ac2 acd ad2 |
 
 1
 o6 : R - module, quotient of R
 | 
  
    | i7 : M / saturate 0_M
 o7 = cokernel {0} | a a3 a2b a2c a2d ab2 abc abd ac2 acd ad2 |
 
 1
 o7 : R - module, quotient of R
 | 
Allowable options include:
The computation is currently not stored anywhere: this means
    that the computation cannot be continued after an interrupt.
    This will be changed in a later version.




