There are two major groups of routines: one for finding the depth of an ideal or module or ring,or the depth of an ideal on a module; and the other for finding relatively sparse systems of homogeneous parameters in an ideal (there is an inhomogeneous version too.)
The depth of an ideal on a module is a fundamental invariant, a kind of arithmetic version of codimension. In many local or graded cases one is interested in the depth of the maximal ideal on the module, and then we speak just of the depth of the module (or, when the module is the ring itself, the depth of the ring.) Over a regular ring, depth is most efficiently computed using the Auslander-Buchsbaum formula depth M = dim R - pdim M, where pdim is the projective dimension. In general, depth(I,M) = min i | Ext^{i}(R/I,M) != 0. Both these methods are incorporated.
Depth can be computed from regular sequences, which are systems of parameters. The other routines in this package try probabilistically to find relatively sparse systems of parameters; the maximum length of such a system is equal to the codimension of the ideal, so (inhomogeneousSystemOfParameters,Ideal) and (systemOfParameters, Ideal), without further arguments, look for regular sequences of length codim I.
To find such sequences, one can simply take an appropriate number of random linear combinations of the generators of the ideal, and this is what’s done by inhomogeneousSystemOfParameters. Since being a system of parameters is a matter of certain elements not being in certain prime ideals, this succeeds with very high probability over any field of reasonable size. But it produces inhomogeneous elements. When the ideal is homogeneous, one generally wants a homogeneous system of parameters; this is provided, again probabilistically, by the routine systemOfParameters.
Here is an example computing depths of modules (that is, the depths of the maximal ideal on the module:
i1 : S = ZZ/101[a,b,c,d] o1 = S o1 : PolynomialRing |
i2 : K = koszul vars S 1 4 6 4 1 o2 = S <-- S <-- S <-- S <-- S 0 1 2 3 4 o2 : ChainComplex |
i3 : apply(numgens S, i-> depth coker K.dd_(i+1)) o3 = {0, 1, 2, 3} o3 : List |
and here is one computing systems of paramters. The "Density" (a number between 0 and 1) is a measure of the sparseness sought, and "Attempts" bounds the number of probabilistic attempts.
i4 : I = ideal"ab,bc,cd2,da" 2 o4 = ideal (a*b, b*c, c*d , a*d) o4 : Ideal of S |
i5 : codim I o5 = 2 |
i6 : setRandomSeed 0 o6 = 0 |
i7 : systemOfParameters(I, Density => .1, Attempts => 1000, Verbose => true) Attempts: 1000 Density: .1 Seed: null 2 o7 = ideal (a*b, c*d ) o7 : Ideal of S |
i8 : inhomogeneousSystemOfParameters I o8 = | cd2+bc bc+ad | 1 2 o8 : Matrix S <--- S |
The systemOfParameters code could be improved by working one degree at a time, using a knowledge of the codim of the ideal generated by elements of degrees <=d for each d.
This documentation describes version 1.0 of Depth.
The source code from which this documentation is derived is in the file Depth.m2.