# ComplexMap ++ ComplexMap -- direct sum of complex maps

## Synopsis

• Operator: ++
• Usage:
h = f ++ g
h = directSum(f,g,...)
h = directSum(name1 => f, name2 => g, ...)
• Inputs:
• f, ,
• g, ,
• Outputs:
• h, , that is the direct sum of the input chain complex maps

## Description

The direct sum of two complex maps is a a complex map from the direct sum of the sources to the direct sum of the targets.

First, we define some non-trivial maps of chain complexes.

 i1 : R = ZZ/101[a..d]; i2 : C1 = (freeResolution coker matrix{{a,b,c}})[1] 1 3 3 1 o2 = R <-- R <-- R <-- R -1 0 1 2 o2 : Complex i3 : C2 = freeResolution coker matrix{{a*b,a*c,b*c}} 1 3 2 o3 = R <-- R <-- R 0 1 2 o3 : Complex i4 : D1 = (freeResolution coker matrix{{a,b,c}}) 1 3 3 1 o4 = R <-- R <-- R <-- R 0 1 2 3 o4 : Complex i5 : D2 = freeResolution coker matrix{{a^2, b^2, c^2}}[-1] 1 3 3 1 o5 = R <-- R <-- R <-- R 1 2 3 4 o5 : Complex i6 : f = randomComplexMap(D1, C1, Cycle => true) 1 o6 = -1 : 0 <----- R : -1 0 1 3 0 : R <---------------------------------------------------- R : 0 | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d | 3 3 1 : R <------------------------------------------------------------ R : 1 {1} | -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c | {1} | 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d | {1} | -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d | 3 1 2 : R <--------------------------- R : 2 {2} | 24a-36b-30c-29d | {2} | 19a+19b-10c-29d | {2} | -8a-22b-29c-24d | o6 : ComplexMap i7 : g = randomComplexMap(D2, C2, Cycle => true) 1 o7 = 0 : 0 <----- R : 0 0 1 3 1 : R <-------------------------------------------------------------------------------------------------------------- R : 1 | 19a2+47ab-16b2-43ac-15bc-28c2-47cd 7a2+45ab-34b2+47ac-48bc-23c2-47bd 38a2+2ab+15b2+16ac+47bc+39c2+22ad | 3 2 2 : R <-------------------------------------------- R : 2 {2} | -7b+19c -38a+5b-16c-22d | {2} | -45a+34b+32c+47d 30a-34b-48c-47d | {2} | -43a+8b-28c-47d -39a-23b | o7 : ComplexMap
 i8 : h = f ++ g 1 o8 = -1 : 0 <----- R : -1 0 1 4 0 : R <------------------------------------------------------ R : 0 | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d 0 | 4 6 1 : R <------------------------------------------------------------------------------------------------------------------------------------------------------------------- R : 1 {1} | -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c 0 0 0 | {1} | 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d 0 0 0 | {1} | -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d 0 0 0 | {0} | 0 0 0 19a2+47ab-16b2-43ac-15bc-28c2-47cd 7a2+45ab-34b2+47ac-48bc-23c2-47bd 38a2+2ab+15b2+16ac+47bc+39c2+22ad | 6 3 2 : R <------------------------------------------------------------ R : 2 {2} | 24a-36b-30c-29d 0 0 | {2} | 19a+19b-10c-29d 0 0 | {2} | -8a-22b-29c-24d 0 0 | {2} | 0 -7b+19c -38a+5b-16c-22d | {2} | 0 -45a+34b+32c+47d 30a-34b-48c-47d | {2} | 0 -43a+8b-28c-47d -39a-23b | o8 : ComplexMap i9 : assert isWellDefined h i10 : assert(h == map(D1 ++ D2, C1 ++ C2, {{f,0},{0,g}}))

The direct sum of any sequence of complex maps can be computed as follows.

 i11 : directSum(f, g, f[2]) 1 o11 = -3 : 0 <----- R : -3 0 1 3 -2 : R <---------------------------------------------------- R : -2 | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d | 3 4 -1 : R <-------------------------------------------------------------- R : -1 {1} | 0 -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c | {1} | 0 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d | {1} | 0 -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d | 4 5 0 : R <-------------------------------------------------------------------------- R : 0 {0} | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d 0 0 | {2} | 0 0 0 0 24a-36b-30c-29d | {2} | 0 0 0 0 19a+19b-10c-29d | {2} | 0 0 0 0 -8a-22b-29c-24d | 5 6 1 : R <------------------------------------------------------------------------------------------------------------------------------------------------------------------- R : 1 {1} | -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c 0 0 0 | {1} | 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d 0 0 0 | {1} | -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d 0 0 0 | {0} | 0 0 0 19a2+47ab-16b2-43ac-15bc-28c2-47cd 7a2+45ab-34b2+47ac-48bc-23c2-47bd 38a2+2ab+15b2+16ac+47bc+39c2+22ad | {3} | 0 0 0 0 0 0 | 6 3 2 : R <------------------------------------------------------------ R : 2 {2} | 24a-36b-30c-29d 0 0 | {2} | 19a+19b-10c-29d 0 0 | {2} | -8a-22b-29c-24d 0 0 | {2} | 0 -7b+19c -38a+5b-16c-22d | {2} | 0 -45a+34b+32c+47d 30a-34b-48c-47d | {2} | 0 -43a+8b-28c-47d -39a-23b | o11 : ComplexMap i12 : h2 = directSum(mike => f, greg => g, dan => f[2]) 1 o12 = -3 : 0 <----- R : -3 0 1 3 -2 : R <---------------------------------------------------- R : -2 | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d | 3 4 -1 : R <-------------------------------------------------------------- R : -1 {1} | 0 -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c | {1} | 0 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d | {1} | 0 -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d | 4 5 0 : R <-------------------------------------------------------------------------- R : 0 {0} | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d 0 0 | {2} | 0 0 0 0 24a-36b-30c-29d | {2} | 0 0 0 0 19a+19b-10c-29d | {2} | 0 0 0 0 -8a-22b-29c-24d | 5 6 1 : R <------------------------------------------------------------------------------------------------------------------------------------------------------------------- R : 1 {1} | -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c 0 0 0 | {1} | 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d 0 0 0 | {1} | -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d 0 0 0 | {0} | 0 0 0 19a2+47ab-16b2-43ac-15bc-28c2-47cd 7a2+45ab-34b2+47ac-48bc-23c2-47bd 38a2+2ab+15b2+16ac+47bc+39c2+22ad | {3} | 0 0 0 0 0 0 | 6 3 2 : R <------------------------------------------------------------ R : 2 {2} | 24a-36b-30c-29d 0 0 | {2} | 19a+19b-10c-29d 0 0 | {2} | -8a-22b-29c-24d 0 0 | {2} | 0 -7b+19c -38a+5b-16c-22d | {2} | 0 -45a+34b+32c+47d 30a-34b-48c-47d | {2} | 0 -43a+8b-28c-47d -39a-23b | o12 : ComplexMap i13 : h2_[greg,dan] 1 3 o13 = -2 : R <---------------------------------------------------- R : -2 | -46a+17b-8c-24d 48a+6b+28c+29d 5a+3b-39c-29d | 3 3 -1 : R <------------------------------------------------------------ R : -1 {1} | -48a+3b-10c-29d -5a+36b+14c+29d 19b-34c | {1} | 46a+17b-29c-24d -39a+39c -24a-3b-24c+29d | {1} | -18a+21b -21a-22b-8c-24d -19a-32b+28c+29d | 4 2 0 : R <----------------------------- R : 0 {0} | 0 0 | {2} | 0 24a-36b-30c-29d | {2} | 0 19a+19b-10c-29d | {2} | 0 -8a-22b-29c-24d | 5 3 1 : R <------------------------------------------------------------------------------------------------------------------ R : 1 {1} | 0 0 0 | {1} | 0 0 0 | {1} | 0 0 0 | {0} | 19a2+47ab-16b2-43ac-15bc-28c2-47cd 7a2+45ab-34b2+47ac-48bc-23c2-47bd 38a2+2ab+15b2+16ac+47bc+39c2+22ad | {3} | 0 0 0 | 6 2 2 : R <-------------------------------------------- R : 2 {2} | 0 0 | {2} | 0 0 | {2} | 0 0 | {2} | -7b+19c -38a+5b-16c-22d | {2} | -45a+34b+32c+47d 30a-34b-48c-47d | {2} | -43a+8b-28c-47d -39a-23b | o13 : ComplexMap i14 : assert(source oo == C2 ++ C1[2])

One can easily obtain the compositions with canonical injections and surjections.

 i15 : h_[0]^[0] == f o15 = true i16 : h_[1]^[1] == g o16 = true i17 : h_[0]^[1] == 0 o17 = true i18 : h_[1]^[0] == 0 o18 = true
 i19 : h_[0] == h * (C1 ++ C2)_[0] o19 = true i20 : h_[1] == h * (C1 ++ C2)_[1] o20 = true i21 : h^[0] == (D1 ++ D2)^[0] * h o21 = true i22 : h^[1] == (D1 ++ D2)^[1] * h o22 = true