This function returns true if R is regular in codimension n, false if it is not, and null if it did not make a determination. It considers interesting minors of the jacobian matrix to try to verify that the ring is regular in codimension n. It is frequently much faster at giving an affirmative answer than computing the dimension of the ideal of all minors of the Jacobian. We begin with a simple example which is R1, but not R2.
i1 : R = QQ[x, y, z]/ideal(x*y-z^2); |
i2 : regularInCodimension(1, R) o2 = true |
i3 : regularInCodimension(2, R) |
Next we consider a more interesting example that is R1 but not R2, and highlight the speed differences. Note that regularInCodimension(2, R) returns nothing, as the function did not determine if the ring was regular in codimension n.
i4 : T = ZZ/101[x1,x2,x3,x4,x5,x6,x7]; |
i5 : I = ideal(x5*x6-x4*x7,x1*x6-x2*x7,x5^2-x1*x7,x4*x5-x2*x7,x4^2-x2*x6,x1*x4-x2*x5,x2*x3^3*x5+3*x2*x3^2*x7+8*x2^2*x5+3*x3*x4*x7-8*x4*x7+x6*x7,x1*x3^3*x5+3*x1*x3^2*x7+8*x1*x2*x5+3*x3*x5*x7-8*x5*x7+x7^2,x2*x3^3*x4+3*x2*x3^2*x6+8*x2^2*x4+3*x3*x4*x6-8*x4*x6+x6^2,x2^2*x3^3+3*x2*x3^2*x4+8*x2^3+3*x2*x3*x6-8*x2*x6+x4*x6,x1*x2*x3^3+3*x2*x3^2*x5+8*x1*x2^2+3*x2*x3*x7-8*x2*x7+x4*x7,x1^2*x3^3+3*x1*x3^2*x5+8*x1^2*x2+3*x1*x3*x7-8*x1*x7+x5*x7); o5 : Ideal of T |
i6 : S = T/I; |
i7 : dim S o7 = 3 |
i8 : time regularInCodimension(1, S) -- used 0.747105 seconds o8 = true |
i9 : time regularInCodimension(2, S) -- used 7.45315 seconds |
On one machine, a call of dim singularLocus R took 32.4468 seconds and returned 1. On the same machine, regularInCodimension(1, R) took only 0.153042 seconds.
The following is a (pruned) affine chart on Abelian surface (the product of elliptic curves). It is nonsingular, as our function verifies. If one does not prune it, then the dim singularLocus call takes an enormous amount of time, otherwise dim singularLocus frequently takes a similar amount of time to our function.
i10 : R = QQ[c, f, g, h]/ideal(g^3+h^3+1,f*g^3+f*h^3+f,c*g^3+c*h^3+c,f^2*g^3+f^2*h^3+f^2,c*f*g^3+c*f*h^3+c*f,c^2*g^3+c^2*h^3+c^2,f^3*g^3+f^3*h^3+f^3,c*f^2*g^3+c*f^2*h^3+c*f^2,c^2*f*g^3+c^2*f*h^3+c^2*f,c^3-f^2-c,c^3*h-f^2*h-c*h,c^3*g-f^2*g-c*g,c^3*h^2-f^2*h^2-c*h^2,c^3*g*h-f^2*g*h-c*g*h,c^3*g^2-f^2*g^2-c*g^2,c^3*h^3-f^2*h^3-c*h^3,c^3*g*h^2-f^2*g*h^2-c*g*h^2,c^3*g^2*h-f^2*g^2*h-c*g^2*h,c^3*g^3+f^2*h^3+c*h^3+f^2+c); |
i11 : dim(R) o11 = 2 |
i12 : time (dim singularLocus (R)) -- used 0.294595 seconds o12 = -1 |
i13 : time regularInCodimension(2, R) -- used 0.507182 seconds o13 = true |
i14 : time regularInCodimension(2, R) -- used 0.161293 seconds o14 = true |
i15 : time regularInCodimension(2, R) -- used 0.515789 seconds o15 = true |
The function works by choosing interesting looking submatrices, computing their determinants, and periodically (based on a logarithmic growth setting), computing the dimension of a subideal of the Jacobian. The option Verbose can be used to see this in action.
i16 : time regularInCodimension(2, S, Verbose=>true) regularInCodimension: ring dimension =3, there are 17325 possible minors, we will compute up to 327.599 of them. regularInCodimension: About to enter loop internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 11, and computed = 10 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 14, and computed = 12 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 18, and computed = 14 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 24, and computed = 19 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 31, and computed = 23 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 40, and computed = 29 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing RandomNonZero regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 52, and computed = 36 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 67, and computed = 46 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 87, and computed = 56 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 113, and computed = 70 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 147, and computed = 87 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 191, and computed = 111 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 248, and computed = 145 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing RandomNonZero regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 322, and computed = 192 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 328, and computed = 195 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 regularInCodimension: Loop completed, submatrices considered = 328, and computed = 195. singular locus dimension appears to be = 1 -- used 7.72729 seconds |
The maximum number of minors considered can be controlled by the option MaxMinors. Alternately, it can be controlled in a more precise way by passing a function to the option MaxMinors. This function should have two inputs, the first is minimum number of minors needed to determine if the ring is regular in codimension n, and the second is the total number of minors available in the Jacobian. The function regularInCodimension does not recompute determinants, so MaxMinors or is only an upper bound on the number of minors computed.
i17 : time regularInCodimension(2, S, Verbose=>true, MaxMinors=>30) regularInCodimension: ring dimension =3, there are 17325 possible minors, we will compute up to 30 of them. regularInCodimension: About to enter loop internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing LexLargestTerm internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing Random internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 11, and computed = 10 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 2 internalChooseMinor: Choosing LexSmallestTerm internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallestTerm regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 14, and computed = 13 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 2 internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 18, and computed = 16 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing GRevLexSmallest internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 24, and computed = 18 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing RandomNonZero internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest internalChooseMinor: Choosing Random internalChooseMinor: Choosing LexSmallest regularInCodimension: Loop step, about to compute dimension. Submatrices considered: 30, and computed = 23 regularInCodimension: isCodimAtLeast failed, computing codim. regularInCodimension: partial singular locus dimension computed, = 1 regularInCodimension: Loop completed, submatrices considered = 30, and computed = 23. singular locus dimension appears to be = 1 -- used 0.820803 seconds |
This function has many options which allow you to fine tune the strategy used to find interesting minors. You can pass it a HashTable specifying the strategy via the option Strategy. See LexSmallest for how to construct this HashTable. The default strategy is StrategyDefault, which seems to work well on the examples we have explored. However, caution must be taken, even in the above examples, certain strategies work well while others do not. In the Abelian surface example, LexSmallest works very well, while LexSmallestTerm does not even typically correctly identify the ring as nonsingular (this is because of the fact that there are a small number of entries with nonzero constant terms, which are selected repeatedly). However, in our first example, the LexSmallestTerm is much faster, and Random does not perform well at all.
i18 : StrategyCurrent#Random = 0; |
i19 : StrategyCurrent#LexSmallest = 100; |
i20 : StrategyCurrent#LexSmallestTerm = 0; |
i21 : time regularInCodimension(2, R, Strategy=>StrategyCurrent) -- used 0.172093 seconds o21 = true |
i22 : time regularInCodimension(2, R, Strategy=>StrategyCurrent) -- used 0.20193 seconds o22 = true |
i23 : time regularInCodimension(1, S, Strategy=>StrategyCurrent) -- used 0.464978 seconds o23 = true |
i24 : time regularInCodimension(1, S, Strategy=>StrategyCurrent) -- used 1.20252 seconds o24 = true |
i25 : StrategyCurrent#LexSmallest = 0; |
i26 : StrategyCurrent#LexSmallestTerm = 100; |
i27 : time regularInCodimension(2, R, Strategy=>StrategyCurrent) -- used 2.14857 seconds |
i28 : time regularInCodimension(2, R, Strategy=>StrategyCurrent) -- used 2.16156 seconds |
i29 : time regularInCodimension(1, S, Strategy=>StrategyCurrent) -- used 0.217348 seconds o29 = true |
i30 : time regularInCodimension(1, S, Strategy=>StrategyCurrent) -- used 0.290243 seconds o30 = true |
i31 : time regularInCodimension(1, S, Strategy=>StrategyRandom) -- used 1.40817 seconds o31 = true |
i32 : time regularInCodimension(1, S, Strategy=>StrategyRandom) -- used 3.57934 seconds o32 = true |
The minimum number of minors computed before checking the codimension, can also be controlled by an option MinMinorsFunction. This is should be a function of a single variable, the number of minors computed. Finally, via the option CodimCheckFunction, you can pass the regularInCodimension a function which controls how frequently the codimension of the partial Jacobian ideal is computed. By default this is the floor of 1.3^k. Finally, passing the option ModP => p will do the computation after changing the coefficient ring to ZZ/p.
The options PairLimit and SPairsFunction are passed directly to isCodimAtLeast. You can turn off internal calls to codim/dim, and only use isCodimAtLeast by setting UseOnlyFastCodim => true.
The object regularInCodimension is a method function with options.