pushFwd(RingMap,Matrix) -- push forward of a module map via a finite ring map

Synopsis

• Function: pushFwd
• Usage:
gA = pushFwd(f, g)
gA = pushFwd g
• Inputs:
• f, , from a ring $A$ to a ring $B$ or (if not specified) the natural map from A = coefficientRing ring g
• g, , (a matrix), $g : M_1 \to M_2$ of modules over $B$
• Optional inputs:
• NoPrune => ..., default value false, NoPrune option for pushFwd
• Outputs:
• gA, ,

Description

If $M_1$ and $M_2$ are both finite generated as $A$-modules, via $f$, this returns the induced map on $A$-modules.

 i1 : kk = QQ o1 = QQ o1 : Ring i2 : A = kk[a,b] o2 = A o2 : PolynomialRing i3 : B = kk[z,t] o3 = B o3 : PolynomialRing i4 : f = map(B,A,{z^2,t^2}) 2 2 o4 = map (B, A, {z , t }) o4 : RingMap B <--- A i5 : M = B^1/ideal(z^3,t^3) o5 = cokernel | z3 t3 | 1 o5 : B-module, quotient of B i6 : g = map(M,M,matrix{{z*t}}) o6 = | zt | o6 : Matrix i7 : p = pushFwd(f,g) o7 = | 0 0 ab 0 | | 0 0 0 b | | 1 0 0 0 | | 0 a 0 0 | o7 : Matrix i8 : source p == pushFwd(f, source g) o8 = true i9 : target p == pushFwd(f, target g) o9 = true i10 : kerg = pushFwd(f,ker g) o10 = cokernel | b a 0 0 0 0 0 | | 0 -b a 0 0 0 0 | | 0 0 0 b a 0 0 | | 0 0 0 0 0 b a | 4 o10 : A-module, quotient of A i11 : kerp = prune ker p o11 = cokernel {1} | b a 0 0 0 0 0 | {1} | 0 -b a 0 0 0 0 | {1} | 0 0 0 b a 0 0 | {1} | 0 0 0 0 0 b a | 4 o11 : A-module, quotient of A i12 : k = ZZ/32003 o12 = k o12 : QuotientRing i13 : A = k[x,y]/(y^4-2*x^3*y^2-4*x^5*y+x^6-y^7) o13 = A o13 : QuotientRing i14 : A = k[x,y]/(y^3-x^7) o14 = A o14 : QuotientRing i15 : B = integralClosure(A, Keep =>{}) o15 = B o15 : PolynomialRing i16 : describe B o16 = k[w , Degrees => {3}, Heft => {1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 1] 3,0 {GRevLex => {3} } {4:(GRevLex => {}) } {Position => Up } i17 : f = map(B^1, B^1, matrix{{w_(3,0)}}) o17 = | w_(3,0) | 1 1 o17 : Matrix B <--- B i18 : g = pushFwd(icMap A, f) o18 = | 0 0 x | | 1 0 0 | | 0 1 0 | o18 : Matrix i19 : pushFwd(icMap A, f^2) == g*g o19 = true i20 : A = kk[x] o20 = A o20 : PolynomialRing i21 : B = A[y, Join => false]/(y^3-x^7) o21 = B o21 : QuotientRing i22 : pushFwd B^1 3 o22 = A o22 : A-module, free i23 : pushFwd matrix{{y}} o23 = | 0 0 x7 | | 1 0 0 | | 0 1 0 | 3 3 o23 : Matrix A <--- A

Pushforward is linear and respects composition:

 i24 : B = A[y,z,Join => false]/(y^3 - x*z, z^3-y^7); i25 : pushFwd B^1 9 o25 = A o25 : A-module, free i26 : fy = pushFwd matrix{{y}} o26 = | 0 0 0 0 0 0 0 0 0 | | 1 0 0 0 0 0 0 0 0 | | 0 1 0 0 0 0 0 0 0 | | 0 0 0 0 1 0 0 0 0 | | 0 0 0 0 0 1 0 0 0 | | 0 0 x 0 0 0 0 0 0 | | 0 0 0 x 0 0 0 0 0 | | 0 0 0 0 0 0 1 0 x3 | | 0 0 0 0 0 0 0 1 0 | 9 9 o26 : Matrix A <--- A i27 : fz = pushFwd matrix{{z}}; 9 9 o27 : Matrix A <--- A i28 : fx = pushFwd matrix{{x_B}}; 9 9 o28 : Matrix A <--- A i29 : g = pushFwd matrix{{y*z -x_B*z^2}} o29 = | 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 | | 0 1 0 0 0 0 0 0 0 | | 1 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 | | -x 0 x 0 0 0 0 0 0 | | 0 -x 0 -x6+x3 0 -x3+1 0 -x8+x5 0 | | 0 0 -x 0 -x3+1 0 -x5+x2 0 -x8+x5 | 9 9 o29 : Matrix A <--- A i30 : g == fy*fz-fx*fz^2 o30 = true i31 : fz^3-fy^7 == 0 o31 = true