First sorts the generators of trim ideal gens gb I by ascending degree, ascending monomial order. Looks first for as much of a system of parameters among the generators as possible, then tries up to Attempts sparse random combinations of given Density. The default value of Density is (1+codim I)/(numgens trim I).
If the option Seed is not null then it should be an ideal of ring I generated by a part of a sop in I, and it is used as the beginning of the system of parameters constructed.
If no sop is found after Attempts tries, and the Density is < 1 then the Density is increased by .1, and 20 more attempts are made. If the Density is already == 1, then the program stops with an error.
i1 : S = ZZ/101[a,b,c,d] o1 = S o1 : PolynomialRing |
i2 : I = ideal"ab,bc,cd,da" o2 = ideal (a*b, b*c, c*d, a*d) o2 : Ideal of S |
i3 : codim I o3 = 2 |
i4 : setRandomSeed 0 o4 = 0 |
i5 : inhomogeneousSystemOfParameters I o5 = | bc+cd bc+ad | 1 2 o5 : Matrix S <--- S |
i6 : systemOfParameters I o6 = ideal (a*b, c*d) o6 : Ideal of S |
i7 : systemOfParameters(I, Density => .1, Attempts => 1000, Verbose => true) Attempts: 1000 Density: .1 Seed: null o7 = ideal (a*b, c*d) o7 : Ideal of S |
Could be rewritten to take into account the codimensions of the sub ideals generated by the elements of degree up to d for each d.
The routine tries to find generators among linear combinations, with field coefficients, of generators of I; but over very small fields there may not be any! For example there is no linear form that is a parameter in the 1-dimensional ring R = ZZ/2[x,y]/intersect(ideal"x", ideal"x+y", ideal"y")
The object systemOfParameters is a method function with options.