Currently,
R and
S must both be polynomial rings over the same base field.
This function first checks to see whether M will be a finitely generated R-module via F. If not, an error message describing the codimension of M/(vars of S)M is given (this is equal to the dimension of R if and only if M is a finitely generated R-module.
Assuming that it is, the push forward
F_*(M) is computed. This is done by first finding a presentation for
M in terms of a set of elements that generates
M as an
S-module, and then applying the routine
coimage to a map whose target is
M and whose source is a free module over
R.
Example: The Auslander-Buchsbaum formula
Let's illustrate the Auslander-Buchsbaum formula. First construct some rings and make a module of projective dimension 2.
i1 : R4 = ZZ/32003[a..d];
|
i2 : R5 = ZZ/32003[a..e];
|
i3 : R6 = ZZ/32003[a..f];
|
i4 : M = coker genericMatrix(R6,a,2,3)
o4 = cokernel | a c e |
| b d f |
2
o4 : R6-module, quotient of R6
|
i5 : pdim M
o5 = 2
|
Create ring maps.
i6 : G = map(R6,R5,{a+b+c+d+e+f,b,c,d,e})
o6 = map(R6,R5,{a + b + c + d + e + f, b, c, d, e})
o6 : RingMap R6 <--- R5
|
i7 : F = map(R5,R4,random(R5^1, R5^{4:-1}))
o7 = map(R5,R4,{2340a - 15750b + 2748c + 8948d - 8709e, - 7407a - 2636b - 14168c - 10630d + 15897e, - 15629a - 14672b + 10679c - 3d - 1023e, - 10295a + 13888b - 9492c + 3343d + 11006e})
o7 : RingMap R5 <--- R4
|
The module M, when thought of as an R5 or R4 module, has the same depth, but since depth M + pdim M = dim ring, the projective dimension will drop to 1, respectively 0, for these two rings.
i8 : P = pushForward(G,M)
o8 = cokernel | c -de |
| d bc-ad+bd+cd+d2+de |
2
o8 : R5-module, quotient of R5
|
i9 : pdim P
o9 = 1
|
i10 : Q = pushForward(F,P)
3
o10 = R4
o10 : R4-module, free, degrees {0..1, 0}
|
i11 : pdim Q
o11 = 0
|
Example: generic projection of a homogeneous coordinate ring
We compute the pushforward N of the homogeneous coordinate ring M of the twisted cubic curve in P^3.
i12 : P3 = QQ[a..d];
|
i13 : M = comodule monomialCurveIdeal(P3,{1,2,3})
o13 = cokernel | c2-bd bc-ad b2-ac |
1
o13 : P3-module, quotient of P3
|
The result is a module with the same codimension, degree and genus as the twisted cubic, but the support is a cubic in the plane, necessarily having one node.
i14 : P2 = QQ[a,b,c];
|
i15 : F = map(P3,P2,random(P3^1, P3^{-1,-1,-1}))
4 2 6 2 3 1 3 1 4 7 5
o15 = map(P3,P2,{-a + -b + -c + -d, -a + -b + --c + -d, -a + 2b + -c + -d})
7 3 7 3 2 4 10 8 5 6 2
o15 : RingMap P3 <--- P2
|
i16 : N = pushForward(F,M)
o16 = cokernel {0} | 211058296848ab-38224164480b2-667696125390ac+51787263280bc+231539151600c2 277014014613a2-15027528000b2-328788066390ac+41779898800bc+68008780800c2 58700708453068738580275200b3-334910360730025534784716800b2c+166226826750510952609680000ac2+600619386598055787694768000bc2-454418707150019571055020000c3 0 |
{1} | 1175634944505a+85453679808b-464762248042c 390413623068a+14725069080b-110051961910c 15244641888440251224115488555a2+11820387092769780678389880ab+55203404787674440497686400b2-6924320736277982096762586072ac-496161087335008118525395680bc+1739160853022821822885306280c2 2434061082285a3-438938519040a2b-43734532800ab2-5391078400b3-1902919014864a2c+253091170080abc+41744620800b2c+514847468520ac2-84578529600bc2-45790466400c3 |
2
o16 : P2-module, quotient of P2
|
i17 : hilbertPolynomial M
o17 = - 2*P + 3*P
0 1
o17 : ProjectiveHilbertPolynomial
|
i18 : hilbertPolynomial N
o18 = - 2*P + 3*P
0 1
o18 : ProjectiveHilbertPolynomial
|
i19 : ann N
3 2 2
o19 = ideal(2434061082285a - 438938519040a b - 43734532800a*b -
-----------------------------------------------------------------------
3 2 2
5391078400b - 1902919014864a c + 253091170080a*b*c + 41744620800b c +
-----------------------------------------------------------------------
2 2 3
514847468520a*c - 84578529600b*c - 45790466400c )
o19 : Ideal of P2
|
Note: these examples are from the original Macaulay script by David Eisenbud.