The maps $f : C \to D$ and $g : E \to F$ of chain complexes induces the map $h = f \otimes g : C \otimes E \to D \otimes F$ defined by $c \otimes e \mapsto f(c) \otimes g(e)$.
i1 : S = ZZ/101[a..c] o1 = S o1 : PolynomialRing |
i2 : C = freeResolution coker vars S 1 3 3 1 o2 = S <-- S <-- S <-- S 0 1 2 3 o2 : Complex |
i3 : D = (freeResolution coker matrix{{a^2,a*b,b^3}})[-1] 1 3 2 o3 = S <-- S <-- S 1 2 3 o3 : Complex |
i4 : f = randomComplexMap(D,C) 1 o4 = 0 : 0 <----- S : 0 0 1 3 1 : S <-------------------------------------------- S : 1 | 24a-36b-30c -29a+19b+19c -10a-29b-8c | 3 3 2 : S <----------------------- S : 2 {2} | -22 -24 -16 | {2} | -29 -38 39 | {3} | 0 0 0 | 2 1 3 : S <-------------- S : 3 {3} | 21 | {4} | 0 | o4 : ComplexMap |
i5 : E = (dual C)[-3] 1 3 3 1 o5 = S <-- S <-- S <-- S 0 1 2 3 o5 : Complex |
i6 : F = (dual D)[-3] 2 3 1 o6 = S <-- S <-- S 0 1 2 o6 : Complex |
i7 : g = randomComplexMap(F,E) 2 1 o7 = 0 : S <------------------------ S : 0 {-3} | 34 | {-4} | 19a-47b-39c | 3 3 1 : S <------------------------------------------------- S : 1 {-2} | -18 -47 45 | {-2} | -13 38 -34 | {-3} | -43a-15b-28c 2a+16b+22c -48a-47b+47c | 1 3 2 : S <----- S : 2 0 1 3 : 0 <----- S : 3 0 o7 : ComplexMap |
i8 : h = f ** g 1 o8 = 0 : 0 <----- S : 0 0 2 6 1 : S <--------------------------------------------------------------------------------------------------------- S : 1 {-3} | 0 0 0 8a-12b-10c 24a+40b+40c -37a+24b+31c | {-4} | 0 0 0 -49a2+6ab-25b2+9ac-14bc-42c2 -46a2+7ab+16b2-23ac-18bc-34c2 12a2+20ab+50b2+36ac-8bc+9c2 | 9 15 2 : S <----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : 2 {-2} | 0 0 0 -28a+42b+35c -17a-25b-4c -31a-4b-37c 17a-39b-39c 50a+16b+16c 8a+47b+47c -22a+17b+43c -35a+50b-28c -46a+8b+44c 0 0 0 | {-2} | 0 0 0 -9a-37b-14c 3a+46b-29c -8a+12b+10c -27a-45b-45c 9a+15b+15c -24a-40b-40c 29a-27b+3c 24a+9b-c 37a-24b-31c 0 0 0 | {-3} | 0 0 0 -22a2-24ab+35b2+12ac+44bc+32c2 48a2+9ab+30b2-37ac+41bc+47c2 -41a2-6ab-25b2+43ac+21bc+4c2 35a2+22ab+18b2-5ac-9bc-27c2 43a2-22ab+b2+6ac+15bc+14c2 -22a2+47ab+16b2+48ac-16c2 26a2-17ab+31b2+18ac+23bc+22c2 -20a2-16ab+41b2-34ac+42bc+26c2 -25a2+44ab+50b2+15ac+23bc+28c2 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 -41 -8 -39 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 -14a+24b+50c 49a+17b+27c -a+45b+18c | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 24 21 13 | {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 -46a+50b+20c -15a-32b-33c 34a-15b-6c | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 14 20 3 : S <-------------------------------------------------------------------------------------------------------------------------------------------------------------- S : 3 {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 -8 24 20 28 17 31 -15 45 -13 0 | {0} | 0 0 0 0 0 0 0 0 0 0 -17 -28 41 9 -3 8 6 -2 39 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 37a+27b+10c -44a-49b+21c 46a+24b-24c 22a-44b-35c -48a+20b-23c 41a+17b-17c -19a+38b+44c -32a+47b-49c -40a+45b-45c 0 | {0} | 0 0 0 0 0 0 0 0 0 0 17 50 8 -23 -32 7 5 -15 38 0 | {0} | 0 0 0 0 0 0 0 0 0 0 -27 9 -24 -11 -30 -21 -2 -33 -13 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 35a+31b+4c 43a+41b-32c -22a+50b-50c 18a-36b-47c 25a-2b-28c 6a-32b+32c 40a+21b+19c -23a+18b+50c 47a-15b+15c 0 | {1} | 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 0 0 0 0 0 0 0 0 0 0 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5a+23b-11c | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 9 15 4 : S <--------------------------------------------------------------------- S : 4 {2} | 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 0 | {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 26 23 36 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 30 -10 -7 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 6a-12b+18c 42a+33b-43c 2a+23b-23c | {2} | 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 0 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 2 6 5 : S <----- S : 5 0 1 6 : 0 <----- S : 6 0 o8 : ComplexMap |
i9 : assert isWellDefined h |
i10 : assert(source h === C ** E) |
i11 : assert(target h === D ** F) |
If one argument is a Complex or Module, then the identity map of the corresponding complex is used.
i12 : fE = f ** E 1 o12 = 0 : 0 <----- S : 0 0 1 6 1 : S <------------------------------------------------------- S : 1 {-3} | 0 0 0 24a-36b-30c -29a+19b+19c -10a-29b-8c | 6 15 2 : S <--------------------------------------------------------------------------------------------------------------------------------------------- S : 2 {-2} | 0 0 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 0 0 | {-2} | 0 0 0 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 0 | {-2} | 0 0 0 0 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 -22 -24 -16 | {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 -29 -38 39 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 14 20 3 : S <-------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : 3 {-1} | 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 24a-36b-30c 0 0 -29a+19b+19c 0 0 -10a-29b-8c 0 0 0 0 0 0 0 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 -22 0 0 -24 0 0 -16 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 -22 0 0 -24 0 0 -16 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 -22 0 0 -24 0 0 -16 0 | {0} | 0 0 0 0 0 0 0 0 0 0 -29 0 0 -38 0 0 39 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 -29 0 0 -38 0 0 39 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 -29 0 0 -38 0 0 39 0 | {1} | 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 0 0 0 0 0 0 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 0 0 0 | {0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 16 15 4 : S <--------------------------------------------------------------------------------------------- S : 4 {0} | 24a-36b-30c -29a+19b+19c -10a-29b-8c 0 0 0 0 0 0 0 0 0 0 0 0 | {1} | 0 0 0 -22 0 0 -24 0 0 -16 0 0 0 0 0 | {1} | 0 0 0 0 -22 0 0 -24 0 0 -16 0 0 0 0 | {1} | 0 0 0 0 0 -22 0 0 -24 0 0 -16 0 0 0 | {1} | 0 0 0 -29 0 0 -38 0 0 39 0 0 0 0 0 | {1} | 0 0 0 0 -29 0 0 -38 0 0 39 0 0 0 0 | {1} | 0 0 0 0 0 -29 0 0 -38 0 0 39 0 0 0 | {2} | 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 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 | {1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | {2} | 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 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 9 6 5 : S <-------------------------------- S : 5 {2} | -22 -24 -16 0 0 0 | {2} | -29 -38 39 0 0 0 | {3} | 0 0 0 0 0 0 | {2} | 0 0 0 21 0 0 | {2} | 0 0 0 0 21 0 | {2} | 0 0 0 0 0 21 | {3} | 0 0 0 0 0 0 | {3} | 0 0 0 0 0 0 | {3} | 0 0 0 0 0 0 | 2 1 6 : S <-------------- S : 6 {3} | 21 | {4} | 0 | o12 : ComplexMap |
i13 : assert(fE === f ** id_E) |
i14 : k = coker vars S o14 = cokernel | a b c | 1 o14 : S-module, quotient of S |
i15 : gk = g ** k o15 = 0 : cokernel {-3} | a b c 0 0 0 | <--------------- cokernel {-3} | a b c | : 0 {-4} | 0 0 0 a b c | {-3} | 34 | {-4} | 0 | 1 : cokernel {-2} | a b c 0 0 0 0 0 0 | <------------------------ cokernel {-2} | a b c 0 0 0 0 0 0 | : 1 {-2} | 0 0 0 a b c 0 0 0 | {-2} | -18 -47 45 | {-2} | 0 0 0 a b c 0 0 0 | {-3} | 0 0 0 0 0 0 a b c | {-2} | -13 38 -34 | {-2} | 0 0 0 0 0 0 a b c | {-3} | 0 0 0 | 2 : cokernel | a b c | <----- cokernel {-1} | a b c 0 0 0 0 0 0 | : 2 0 {-1} | 0 0 0 a b c 0 0 0 | {-1} | 0 0 0 0 0 0 a b c | 3 : 0 <----- cokernel | a b c | : 3 0 o15 : ComplexMap |
i16 : assert(gk == g ** id_(complex k)) |
This routine is functorial.
i17 : D' = (freeResolution coker matrix{{a^2,a*b,c^3}})[-1] 1 3 3 1 o17 = S <-- S <-- S <-- S 1 2 3 4 o17 : Complex |
i18 : f' = randomComplexMap(D', D) 1 1 o18 = 1 : S <---------- S : 1 | 19 | 3 3 2 : S <-------------------------------- S : 2 {2} | -16 15 39a+43b-17c | {2} | 7 -23 -11a+48b+36c | {3} | 0 0 35 | 3 2 3 : S <--------------------------- S : 3 {3} | 11 -38a+33b+40c | {5} | 0 0 | {5} | 0 0 | o18 : ComplexMap |
i19 : (f' * f) ** g == (f' ** g) * (f ** id_E) o19 = true |
i20 : (f' * f) ** g == (f' ** id_F) * (f ** g) o20 = true |
i21 : F' = dual (freeResolution coker matrix{{a^2,a*b,a*c,b^3}})[-3] 1 4 4 1 o21 = S <-- S <-- S <-- S 0 1 2 3 o21 : Complex |
i22 : g' = randomComplexMap(F', F) 1 2 o22 = 0 : S <-------------------------- S : 0 {-4} | 11a+46b-28c 1 | 4 3 1 : S <--------------------------------------------------------------------------------- S : 1 {-3} | -3a+22b-47c 27a-22b+32c -19 | {-3} | -23a-7b+2c -9a-32b-20c 17 | {-3} | 29a-47b+15c 24a-30b-48c -20 | {-4} | -37a2-13ab+30b2-10ac-18bc+39c2 -15a2+39ab+33b2-49bc-33c2 44a-39b+36c | 4 1 2 : S <----------------------------------------------------------------- S : 2 {-2} | 9a2-39ab+13b2+4ac-26bc+22c2 | {-2} | -49a2-11ab+43b2-8ac-8bc+36c2 | {-2} | -3a2-22ab+41b2-30ac+16bc-28c2 | {-3} | -6a3+35a2b-35ab2+3b3-9a2c+6abc-31b2c+40ac2+25bc2-2c3 | o22 : ComplexMap |
i23 : f ** (g' * g) == (f ** g') * (id_C ** g) o23 = true |
i24 : f ** (g' * g) == (id_D ** g') * (f ** g) o24 = true |