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 |