We illustrate the tensor product of a complex along a ring map.
i1 : R = QQ[x,y,z] o1 = R o1 : PolynomialRing |
i2 : S = QQ[s,t] o2 = S o2 : PolynomialRing |
i3 : phi = map(S, R, {s, s+t, t}) o3 = map(S,R,{s, s + t, t}) o3 : RingMap S <--- R |
i4 : I = ideal(x^3, x^2*y, x*y^4, y*z^5) 3 2 4 5 o4 = ideal (x , x y, x*y , y*z ) o4 : Ideal of R |
i5 : C = freeResolution I 1 4 4 1 o5 = R <-- R <-- R <-- R 0 1 2 3 o5 : Complex |
i6 : D = phi ** C 1 4 4 1 o6 = S <-- S <-- S <-- S 0 1 2 3 o6 : Complex |
i7 : assert isWellDefined D |
i8 : dd^D 1 4 o8 = 0 : S <------------------------------------------------ S : 1 | s3 s3+s2t s5+4s4t+6s3t2+4s2t3+st4 st5+t6 | 4 4 1 : S <------------------------------------------------------- S : 2 {3} | -s-t 0 0 0 | {3} | s -s3-3s2t-3st2-t3 -t5 0 | {5} | 0 s 0 -t5 | {6} | 0 0 s2 s4+3s3t+3s2t2+st3 | 4 1 2 : S <----------------------------- S : 3 {4} | 0 | {6} | t5 | {8} | -s3-3s2t-3st2-t3 | {10} | s | o8 : ComplexMap |
i9 : prune HH D o9 = cokernel | s2t s3 st4 t6 | <-- cokernel {7} | s t3 | 0 1 o9 : Complex |
When the modules in the complex are not free modules, this is different than the image of a complex under a ring map.
i10 : I = ideal(x*y, x*z, y*z); o10 : Ideal of R |
i11 : J = I + ideal(x^2, y^2); o11 : Ideal of R |
i12 : g = inducedMap(module J, module I) o12 = {2} | 1 0 0 | {2} | 0 1 0 | {2} | 0 0 1 | {2} | 0 0 0 | {2} | 0 0 0 | o12 : Matrix |
i13 : assert isWellDefined g |
i14 : C = complex {g} o14 = image | xy xz yz x2 y2 | <-- image | xy xz yz | 0 1 o14 : Complex |
i15 : D1 = phi C o15 = image | s2+st st st+t2 s2 s2+2st+t2 | <-- image | s2+st st st+t2 | 0 1 o15 : Complex |
i16 : assert isWellDefined D1 |
i17 : D2 = phi ** C o17 = cokernel {2} | -t -t 0 s 0 -s-t | <-- cokernel {2} | -t -t | {2} | s+t 0 s 0 0 0 | {2} | s+t 0 | {2} | 0 s 0 0 s+t 0 | {2} | 0 s | {2} | 0 0 -t -s-t 0 0 | {2} | 0 0 0 0 -t s | 1 0 o17 : Complex |
i18 : assert isWellDefined D2 |
i19 : prune D1 o19 = cokernel {2} | s+t t | <-- cokernel {2} | -t -t | {2} | 0 -s-t | {2} | s+t 0 | {2} | -t s-t | {2} | 0 s | 0 1 o19 : Complex |
i20 : prune D2 o20 = cokernel {2} | -t -t -t -s+t -t -s-t | <-- cokernel {2} | -t -t | {2} | s+t 0 t -t 0 0 | {2} | s+t 0 | {2} | 0 s 0 0 -t 0 | {2} | 0 s | {2} | 0 0 t s 0 0 | {2} | 0 0 0 0 t s | 1 0 o20 : Complex |
When the ring map doesn’t preserve homogeneity, the DegreeMap option is needed to determine the degrees of the image free modules in the complex.
i21 : R = ZZ/101[a..d] o21 = R o21 : PolynomialRing |
i22 : S = ZZ/101[s,t] o22 = S o22 : PolynomialRing |
i23 : f = map(S, R, {s^4, s^3*t, s*t^3, t^4}, DegreeMap => i -> 4*i) 4 3 3 4 o23 = map(S,R,{s , s t, s*t , t }) o23 : RingMap S <--- R |
i24 : C = freeResolution coker vars R 1 4 6 4 1 o24 = R <-- R <-- R <-- R <-- R 0 1 2 3 4 o24 : Complex |
i25 : D = f ** C 1 4 6 4 1 o25 = S <-- S <-- S <-- S <-- S 0 1 2 3 4 o25 : Complex |
i26 : D == f C o26 = true |
i27 : assert isWellDefined D |
i28 : assert isHomogeneous D |
i29 : prune HH D o29 = cokernel | t4 st3 s3t s4 | <-- cokernel {5} | s3 0 t3 0 0 st2 | <-- cokernel {10} | s2 0 0 t2 | {5} | 0 t3 s3 s2t 0 0 | {11} | t s 0 0 | 0 {6} | 0 0 0 t2 st s2 | {11} | 0 0 t s | 1 2 o29 : Complex |
i30 : C1 = Hom(C, image vars R) o30 = image {-4} | d c b a | <-- image {-3} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {-2} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {-1} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image | d c b a | {-3} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 | {-2} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 | -4 {-3} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 | 0 {-3} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 | -3 {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b a | -1 -2 o30 : Complex |
i31 : D1 = f ** C1 o31 = cokernel {-12} | st3 s3t 0 s4 0 0 | <-- cokernel {-8} | st3 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- cokernel {-4} | st3 s3t 0 s4 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 0 0 0 0 | <-- cokernel | st3 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- cokernel {4} | st3 s3t 0 s4 0 0 | {-12} | -t4 0 s3t 0 s4 0 | {-8} | -t4 0 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | -t4 0 s3t 0 s4 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 0 0 0 | | -t4 0 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {4} | -t4 0 s3t 0 s4 0 | {-12} | 0 -t4 -st3 0 0 s4 | {-8} | 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 -t4 -st3 0 0 s4 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 0 0 | | 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {4} | 0 -t4 -st3 0 0 s4 | {-12} | 0 0 0 -t4 -st3 -s3t | {-8} | 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 -t4 -st3 -s3t 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 0 0 | | 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {4} | 0 0 0 -t4 -st3 -s3t | {-8} | 0 0 0 0 0 0 st3 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 st3 s3t 0 s4 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 0 0 0 0 st3 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | -4 {-8} | 0 0 0 0 0 0 -t4 0 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 -t4 0 s3t 0 s4 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 0 0 0 -t4 0 s3t 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 {-8} | 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 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 0 0 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t 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 0 0 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 st3 s3t 0 s4 0 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 st3 s3t 0 s4 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 0 0 0 0 st3 s3t 0 s4 0 0 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 -t4 0 s3t 0 s4 0 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 -t4 0 s3t 0 s4 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 0 0 0 -t4 0 s3t 0 s4 0 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 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 0 0 0 -t4 -st3 0 0 s4 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t 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 0 0 0 0 0 -t4 -st3 -s3t 0 0 0 0 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 st3 s3t 0 s4 0 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 st3 s3t 0 s4 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 0 0 0 0 st3 s3t 0 s4 0 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 0 s3t 0 s4 0 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 0 s3t 0 s4 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 0 0 0 -t4 0 s3t 0 s4 0 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 0 0 s4 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 0 0 0 -t4 -st3 0 0 s4 | {-8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 -st3 -s3t 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 0 0 0 0 0 -t4 -st3 -s3t | {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 st3 s3t 0 s4 0 0 0 0 0 0 0 0 | -3 {-4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -t4 0 s3t 0 s4 0 0 0 0 0 0 0 | -1 {-4} | 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 -t4 -st3 0 0 s4 0 0 0 0 0 0 | {-4} | 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 -t4 -st3 -s3t 0 0 0 0 0 0 | {-4} | 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 0 0 st3 s3t 0 s4 0 0 | {-4} | 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 0 0 -t4 0 s3t 0 s4 0 | {-4} | 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 0 0 0 -t4 -st3 0 0 s4 | {-4} | 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 0 0 0 0 0 -t4 -st3 -s3t | -2 o31 : Complex |
i32 : isWellDefined D1 o32 = true |
i33 : assert isHomogeneous D1 |