The tensor product is a complex $D$ whose $i$th component is the direct sum of $C1_j \otimes C2_k$ over all $i = j+k$. The differential on $C1_j \otimes C2_k$ is the differential $dd^{C1} \otimes id_{C2} + (-1)^j id_{C1} \otimes dd^{C2}$.
As the next example illustrates, the Koszul complex can be constructed via iterated tensor products.
i1 : S = ZZ/101[a..c] o1 = S o1 : PolynomialRing |
i2 : Ca = complex {matrix{{a}}} 1 1 o2 = S <-- S 0 1 o2 : Complex |
i3 : Cb = complex {matrix{{b}}} 1 1 o3 = S <-- S 0 1 o3 : Complex |
i4 : Cc = complex {matrix{{c}}} 1 1 o4 = S <-- S 0 1 o4 : Complex |
i5 : Cab = Cb ** Ca 1 2 1 o5 = S <-- S <-- S 0 1 2 o5 : Complex |
i6 : dd^Cab 1 2 o6 = 0 : S <----------- S : 1 | a b | 2 1 1 : S <-------------- S : 2 {1} | b | {1} | -a | o6 : ComplexMap |
i7 : assert isWellDefined Cab |
i8 : Cabc = Cc ** Cab 1 3 3 1 o8 = S <-- S <-- S <-- S 0 1 2 3 o8 : Complex |
i9 : Cc ** Cb ** Ca 1 3 3 1 o9 = S <-- S <-- S <-- S 0 1 2 3 o9 : Complex |
i10 : dd^Cabc 1 3 o10 = 0 : S <------------- S : 1 | a b c | 3 3 1 : S <-------------------- S : 2 {1} | b c 0 | {1} | -a 0 c | {1} | 0 -a -b | 3 1 2 : S <-------------- S : 3 {2} | c | {2} | -b | {2} | a | o10 : ComplexMap |
i11 : assert isWellDefined Cabc |
If one of the arguments is a module, it is considered as a complex concentrated in homological degree 0.
i12 : Cabc ** (S^1/(a,b,c)) o12 = cokernel | a b c | <-- cokernel {1} | a b c 0 0 0 0 0 0 | <-- cokernel {2} | a b c 0 0 0 0 0 0 | <-- cokernel {3} | a b c | {1} | 0 0 0 a b c 0 0 0 | {2} | 0 0 0 a b c 0 0 0 | 0 {1} | 0 0 0 0 0 0 a b c | {2} | 0 0 0 0 0 0 a b c | 3 1 2 o12 : Complex |
i13 : S^2 ** Cabc 2 6 6 2 o13 = S <-- S <-- S <-- S 0 1 2 3 o13 : Complex |
Because the tensor product can be regarded as the total complex of a double complex, each term of the tensor product comes with pairs of indices, labelling the summands.
i14 : indices Cabc_1 o14 = {{0, 1}, {1, 0}} o14 : List |
i15 : components Cabc_1 2 1 o15 = {S , S } o15 : List |
i16 : Cabc_1_[{1,0}] o16 = {1} | 0 | {1} | 0 | {1} | 1 | 3 1 o16 : Matrix S <--- S |
i17 : indices Cabc_2 o17 = {{0, 2}, {1, 1}} o17 : List |
i18 : components Cabc_2 1 2 o18 = {S , S } o18 : List |
i19 : Cabc_2_[{0,2}] o19 = {2} | 1 | {2} | 0 | {2} | 0 | 3 1 o19 : Matrix S <--- S |