# yonedaMap(Matrix) -- creates a chain complex map representing an extension of modules

## Synopsis

• Function: yonedaMap
• Usage:
g = yonedaMap f
• Inputs:
• f, , over a ring $R$, from $R^1$ to $\operatorname{Ext}^d_R(M,N)$, which represents an element in the Ext module
• Optional inputs:
• LengthLimit => an integer, default value infinity, determines the maximum length of the free resolutions used
• Outputs:
• g, , of degree $-d$ from the free resolution of $M$ to the free resolution of $N$ corresponding to the given element in the Ext module

## Description

The module $\operatorname{Ext}^d_R(M,N)$ is constructed from a free resolution $F$ of $M$, $0 \leftarrow M \leftarrow F_0 \leftarrow F_1 \leftarrow \dots \leftarrow F_d \leftarrow \ldots,$ by taking the homology of the complex $\operatorname{Hom}_R(F, N)$. An element of $\operatorname{Ext}^d_R(M,N)$ is represented by an element of $\operatorname{Hom}_R(F_d, N)$. This map extends to a map of degree $-d$ from $F$ to the free resolution of $N$.

We illustrate this method by choosing a random element in an Ext module. This particular Ext module may be regarded as a possible obstruction space for deformations of the ideal $I$.

 i1 : S = ZZ/101[a..d] o1 = S o1 : PolynomialRing i2 : I = ideal"a2,ab,ac,b3" 2 3 o2 = ideal (a , a*b, a*c, b ) o2 : Ideal of S i3 : E = Ext^1(I, S^1/I) o3 = subquotient ({-3} | 0 a b 0 0 0 0 0 |, {-3} | -b a 0 0 0 0 0 ac ab a2 0 0 0 0 0 0 0 b3 0 0 |) {-3} | 0 0 c a 0 0 0 b2 | {-3} | -c 0 a 0 0 0 0 0 0 0 ac ab a2 0 0 0 0 0 b3 0 | {-3} | 0 0 0 0 c b a 0 | {-3} | 0 -c b 0 0 0 0 0 0 0 0 0 0 ac ab a2 0 0 0 b3 | {-4} | 1 0 0 0 0 0 0 0 | {-4} | 0 b2 0 -a ac ab a2 0 0 0 0 0 0 0 0 0 b3 0 0 0 | 4 o3 : S-module, subquotient of S i4 : B = basis(0, E) o4 = {-4} | bc3 bc2d bcd2 bd3 c4 c3d c2d2 cd3 d4 0 0 0 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 d2 0 0 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 0 d2 0 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 c2 cd d2 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d2 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d | o4 : Matrix i5 : f = B * random(S^16, S^1) o5 = {-4} | 24bc3+19c4-36bc2d+19c3d-30bcd2-10c2d2-29bd3-29cd3-8d4 | {-2} | -22d2 | {-2} | 0 | {-2} | -29d2 | {-2} | -24c2-38cd-16d2 | {-2} | 0 | {-2} | 39d2 | {-1} | 21d | o5 : Matrix i6 : g = yonedaMap f 1 4 o6 = 0 : S <-------------------------------------------------------------------------------------------------------- S : 1 | -22ad2 21b2d-29ad2 -24c3-38c2d+39ad2-16cd2 24bc3+19c4-36bc2d+19c3d-30bcd2-10c2d2-29bd3-29cd3-8d4 | 4 1 1 : S <-------------------------- S : 2 {2} | -39d2 | {2} | -29d2 | {2} | 24c2+38cd+38d2 | {3} | 21d | o6 : ComplexMap i7 : assert isWellDefined g i8 : assert(degree g === -1) i9 : assert isCommutative g i10 : assert isHomogeneous g i11 : source g -- free resolution of I 4 4 1 o11 = S <-- S <-- S 0 1 2 o11 : Complex i12 : target g -- free resolution of S/I 1 4 4 1 o12 = S <-- S <-- S <-- S 0 1 2 3 o12 : Complex i13 : assert(yonedaMap' g == f)

If the free resolutions are not finite in length, one needs to choose a truncation via the optional argument LengthLimit.

 i14 : R = ZZ/101[x,y,z]/(y^2*z-x*(x-z)*(x-2*z)); i15 : M = truncate(1,R^1) o15 = image | z y x | 1 o15 : R-module, submodule of R i16 : prune Ext^3(M, M) o16 = cokernel {-4} | z y x 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 z y x 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 z y x 0 0 0 | {-3} | 0 0 0 0 0 0 0 0 0 z y x | 4 o16 : R-module, quotient of R i17 : B = basis(-4, Ext^3(M, M)) o17 = {-4} | 0 0 0 | {-4} | 1 0 0 | {-4} | 0 1 0 | {-4} | 0 0 0 | {-4} | 0 0 1 | {-4} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | {-3} | 0 0 0 | o17 : Matrix i18 : f = B_{2} o18 = {-4} | 0 | {-4} | 0 | {-4} | 0 | {-4} | 0 | {-4} | 1 | {-4} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | o18 : Matrix i19 : g = yonedaMap(f, LengthLimit => 8) 3 4 o19 = 0 : R <------------------------- R : 3 {1} | -49 0 0 0 | {1} | 0 -49 -50 0 | {1} | 50 0 0 z | 4 4 1 : R <----------------------------------- R : 4 {2} | 49 0 -46x-3z 0 | {2} | 0 -49x 0 -46x-3z | {2} | 50 0 -49x 0 | {3} | 0 50 0 49 | 4 4 2 : R <------------------------------- R : 5 {3} | 0 -46x-3z -49x yz | {4} | -49 0 0 x | {4} | 0 -49 -50 0 | {4} | 50 0 0 0 | 4 4 3 : R <----------------------------- R : 6 {5} | 0 0 0 x | {5} | -50 0 49x+z 0 | {5} | 49 0 -47x-3z 0 | {6} | 0 50 0 49 | 4 4 4 : R <-------------------------------- R : 7 {6} | 0 -47x-3z -49x-z 0 | {7} | -49 0 0 x | {7} | 0 -49 -50 0 | {7} | 50 0 0 0 | 4 4 5 : R <----------------------------- R : 8 {8} | 0 0 0 x | {8} | -50 0 49x+z 0 | {8} | 49 0 -47x-3z 0 | {9} | 0 50 0 49 | o19 : ComplexMap i20 : assert isHomogeneous g i21 : assert isWellDefined g i22 : assert isCommutative g i23 : assert(degree g === -3) i24 : assert(yonedaMap' g == map(target f, R^1, f, Degree => -4)) i25 : assert(isHomogeneous yonedaMap' g)