Given complex maps with the same source, this method constructs the associated map from the source to the direct sum of the targets.
First, we define some non-trivial maps of chain complexes.
i1 : R = ZZ/101[a..d]; |
i2 : D1 = (freeResolution coker matrix{{a,b,c}})[1] 1 3 3 1 o2 = R <-- R <-- R <-- R -1 0 1 2 o2 : Complex |
i3 : D2 = freeResolution coker matrix{{a*b,a*c,b*c}} 1 3 2 o3 = R <-- R <-- R 0 1 2 o3 : Complex |
i4 : C = freeResolution coker matrix{{a^2,b^2,c*d}} 1 3 3 1 o4 = R <-- R <-- R <-- R 0 1 2 3 o4 : Complex |
i5 : f = randomComplexMap(D1, C) 3 1 o5 = 0 : R <----- R : 0 0 3 3 1 : R <----------------------- R : 1 {2} | 24 -29 -10 | {2} | -36 19 -29 | {2} | -30 19 -8 | 1 3 2 : R <------------------------------------------------------------- R : 2 {3} | -22a-29b-24c-38d -16a+39b+21c+34d 19a-47b-39c-18d | 1 3 : 0 <----- R : 3 0 o5 : ComplexMap |
i6 : g = randomComplexMap(D2, C) 1 1 o6 = 0 : R <----------- R : 0 | -13 | 3 3 1 : R <---------------------- R : 1 {2} | -43 -47 16 | {2} | -15 38 22 | {2} | -28 2 45 | 2 3 2 : R <------------------------------------------------------------- R : 2 {3} | -34a-48b-47c+47d -23a+39b+43c-17d 11a-38b+33c+40d | {3} | 19a-16b+7c+15d -11a+48b+36c+35d 11a+46b-28c+d | 1 3 : 0 <----- R : 3 0 o6 : ComplexMap |
i7 : h = f||g 4 1 o7 = 0 : R <--------------- R : 0 {1} | 0 | {1} | 0 | {1} | 0 | {0} | -13 | 6 3 1 : R <----------------------- R : 1 {2} | 24 -29 -10 | {2} | -36 19 -29 | {2} | -30 19 -8 | {2} | -43 -47 16 | {2} | -15 38 22 | {2} | -28 2 45 | 3 3 2 : R <------------------------------------------------------------- R : 2 {3} | -22a-29b-24c-38d -16a+39b+21c+34d 19a-47b-39c-18d | {3} | -34a-48b-47c+47d -23a+39b+43c-17d 11a-38b+33c+40d | {3} | 19a-16b+7c+15d -11a+48b+36c+35d 11a+46b-28c+d | o7 : ComplexMap |
i8 : assert isWellDefined h |
i9 : assert(target h === target f ++ target g) |
i10 : assert(source h === source f) |
This is really a shorthand for constructing complex maps via block matrices.
i11 : assert(h === map(D1 ++ D2, C, {{f},{g}})) |