The routine carpet(a1,a2,m) sets a = min(a1,a2), b = max(a1,a2), and forms two matrices from m: X:the 2 x a matrix that is the first a cols of m; Y:the 2 x b matrix that is the nex b cols of m–that is, cols a1..a1+a2-1 of m; Let Ix, Iy be the ideals of 2 x 2 minors of X and Y. If $a,b\geq 2$,the routine returns Ix+Iy+Imixed, where Imixed consists of the quadrics "outside minor - inside minor", that is, $det(X_{\{i\}},Y_{\{j+1\}})-det(X_{\{i+1\}}|Y_{\{j\}})$, for each pair of (i,i+1), (j,j+1) in the ranges a1 and a2.
If m is usual ideal of the scroll of type (a,b), then carpet(a,b,m) produces the same ideal (over a different ring) as carpet(a,b). This is the ideal of the 2-dimensional rational normal scroll Scroll(a1,a2) is the ideal of 2 x 2 minors of X|Y. The ideal I to be constructed is the ideal of the unique (numerically) K3 scheme that is a double structure on the scroll S(a1,a2).
When a,b > 1, the carpet ideal I is the sum $Ix+Iy$ plus the ideal Imixed
When a = b = 1, I is the square of the determinant of X|Y.
When a = 1, b>1 (or symmetrically), I is defined as in the case a,b>1, after replacing $$ X = \begin{pmatrix} x_0 \\ x_1 \end{pmatrix} $$
by the 2 x 2 matrix $$ \begin{pmatrix} x_0^2 & x_0*x_1 \\ x_0*x_1 & x_1^2 \end{pmatrix} $$ and changing $a$ to 2.
i1 : betti res carpet(2,5) 0 1 2 3 4 5 6 o1 = total: 1 15 49 70 49 15 1 0: 1 . . . . . . 1: . 15 35 35 14 . . 2: . . 14 35 35 15 . 3: . . . . . . 1 o1 : BettiTally |
i2 : S = ZZ/101[a..j] o2 = S o2 : PolynomialRing |
i3 : m = genericMatrix(S,a,2,5) o3 = | a c e g i | | b d f h j | 2 5 o3 : Matrix S <--- S |
i4 : I = carpet(2,3,m) o4 = ideal (b*c - a*d, b*e - a*f, d*e - c*f, d*g - c*h - b*i + a*j, f*g - e*h - d*i + c*j, h*i - g*j) o4 : Ideal of S |
i5 : L = primaryDecomposition I; |
i6 : betti res L_0 0 1 2 3 4 o6 = total: 1 10 20 15 4 0: 1 . . . . 1: . 10 20 15 4 o6 : BettiTally |
i7 : betti res L_1 0 1 2 3 4 5 o7 = total: 1 15 40 45 24 5 0: 1 . . . . . 1: . 15 40 45 24 5 o7 : BettiTally |
We require $a1,a2 \ge 1$. If $a1>a2$ then the blocks are reversed, so that the smaller block always comes first. The script generalizeScroll is a more general tool that can do the same things.
The object carpet is a method function with options.