A map of complexes $f : C \rightarrow D$ of degree $d$ is a sequence of maps $f_i : C_i \rightarrow D_{d+i}$. No relationship between the maps $f_i$ and and the differentials of either $C$ or $D$ is assumed.
We construct a map of chain complexes by specifying the individual maps between the terms.
i1 : R = ZZ/101[a,b,c]; |
i2 : C = freeResolution coker matrix{{a^2-b^2,b^3-c^3,c^4}} 1 3 3 1 o2 = R <-- R <-- R <-- R 0 1 2 3 o2 : Complex |
i3 : D = freeResolution coker vars R 1 3 3 1 o3 = R <-- R <-- R <-- R 0 1 2 3 o3 : Complex |
i4 : H = hashTable { 0 => map(D_0, C_0, 1), 1 => map(D_1, C_1, {{a, 0, 0}, {-b, b^2, 0}, {0, -c^2, c^3}}), 2 => map(D_2, C_2, {{a*b^2, 0, 0}, {-a*c^2, a*c^3, 0}, {b*c^2, -b*c^3, b^2*c^3}}), 3 => map(D_3, C_3, {{a*b^2*c^3}}) } o4 = HashTable{0 => | 1 | } 1 => {1} | a 0 0 | {1} | -b b2 0 | {1} | 0 -c2 c3 | 2 => {2} | ab2 0 0 | {2} | -ac2 ac3 0 | {2} | bc2 -bc3 b2c3 | 3 => {3} | ab2c3 | o4 : HashTable |
i5 : f = map(D, C, H) 1 1 o5 = 0 : R <--------- R : 0 | 1 | 3 3 1 : R <--------------------- R : 1 {1} | a 0 0 | {1} | -b b2 0 | {1} | 0 -c2 c3 | 3 3 2 : R <-------------------------- R : 2 {2} | ab2 0 0 | {2} | -ac2 ac3 0 | {2} | bc2 -bc3 b2c3 | 1 1 3 : R <----------------- R : 3 {3} | ab2c3 | o5 : ComplexMap |
i6 : assert isWellDefined f |
i7 : assert isHomogeneous f |
i8 : assert(degree f == 0) |
i9 : assert isComplexMorphism f |
The keys in the hash table index the terms in the source of the map. If a key is missing, that map is taken to be the zero map. We illustrate by constructing a map of chain complexes having nonzero degree, and omitting one key in the hash table.
i10 : E = D[-3] 1 3 3 1 o10 = R <-- R <-- R <-- R 3 4 5 6 o10 : Complex |
i11 : H = hashTable { 0 => map(E_3, C_0, 1), 1 => map(E_4, C_1, {{a, 0, 0}, {-b, b^2, 0}, {0, -c^2, c^3}}), 3 => map(E_6, C_3, {{a*b^2*c^3}}) } o11 = HashTable{0 => | 1 | } 1 => {1} | a 0 0 | {1} | -b b2 0 | {1} | 0 -c2 c3 | 3 => {3} | ab2c3 | o11 : HashTable |
i12 : g = map(E, C, H, Degree => 3) 1 1 o12 = 3 : R <--------- R : 0 | 1 | 3 3 4 : R <--------------------- R : 1 {1} | a 0 0 | {1} | -b b2 0 | {1} | 0 -c2 c3 | 1 1 6 : R <----------------- R : 3 {3} | ab2c3 | o12 : ComplexMap |
i13 : g_2 o13 = 0 3 3 o13 : Matrix R <--- R |
i14 : assert(g_1 == f_1) |
i15 : assert(g != f) |
i16 : assert isWellDefined g |
i17 : assert isHomogeneous g |
i18 : assert(degree g == 3) |
i19 : assert not isComplexMorphism g |
i20 : assert not isCommutative g |
i21 : assert(source g == C) |
i22 : assert(target g == E) |
This is the primary constructor used by all of the more user friendly methods for constructing a chain complex.
This constructor minimizes computation and does very little error checking. To verify that a complex is well constructed, use isWellDefined(ComplexMap).