The computes a partial Groebner basis, takes the initial terms, and checks whether that (partial) initial ideal has codimension at least n. The following example made up of some minors of the following matrix, is no accessible via standard executions of either minors or codim even on a subset of the minors.
i1 : R = ZZ/127[x_1 .. x_(12)]; |
i2 : P = minors(3,genericMatrix(R,x_1,3,4)); o2 : Ideal of R |
i3 : C = res (R^1/(P^3)); |
i4 : myDiff = C.dd_3; 30 12 o4 : Matrix R <--- R |
i5 : r = rank myDiff; |
i6 : time isCodimAtLeast(3, chooseGoodMinors(15, r, myDiff, Strategy=>StrategyDefaultNonRandom)) -- used 0.817706 seconds o6 = true |
The function works by computing gb(I, PairLimit=>f(i)) for successive values of i. Here f(i) is a function that takes t, some approximation of the base degree value of the polynomial ring (for example, in a standard graded polynomial ring, this is probably expected to be \{1\}). And i is a counting variable. You can provide your own function by calling isCodimAtLeast(n, I, SPairsFunction=>( (i) -> f(i) ). Perhaps more commonly however, the user may want to instead tell the function to compute for larger values of i. This is done via the option PairLimit. This is the max value of i to consider before the function gives up.
i7 : time isCodimAtLeast(3, chooseGoodMinors(15, r, myDiff, Strategy=>StrategyDefaultNonRandom), PairLimit => 3, Verbose=>true) isCodimAtLeast: Computing codim of monomials based on ideal generators. -- used 0.800313 seconds o7 = true |
i8 : time isCodimAtLeast(3, chooseGoodMinors(15, r, myDiff, Strategy=>StrategyDefaultNonRandom), PairLimit => 15, Verbose=>true) isCodimAtLeast: Computing codim of monomials based on ideal generators. -- used 0.815101 seconds o8 = true |
Notice in the first case the function returned null, because the depth of search was not high enough. The second returned true, but it did so as soon as the answer was found (and before we hit the PairLimit limit).
The object isCodimAtLeast is a method function with options.