The direct sum is an n-ary operator with projection and inclusion maps from each component satisfying appropriate identities.
One can access these maps as follows.
i1 : S = ZZ/101[a,b,c];
|
i2 : C1 = freeResolution coker vars S
1 3 3 1
o2 = S <-- S <-- S <-- S
0 1 2 3
o2 : Complex
|
i3 : C2 = complex (ideal(a,b,c))
o3 = image | a b c |
0
o3 : Complex
|
i4 : D = C1 ++ C2
3 3 1
o4 = image | 1 0 0 0 | <-- S <-- S <-- S
| 0 a b c |
1 2 3
0
o4 : Complex
|
i5 : D_[0]
1
o5 = 0 : image | 1 0 0 0 | <------------- S : 0
| 0 a b c | {0} | 1 |
{1} | 0 |
{1} | 0 |
{1} | 0 |
3 3
1 : S <----------------- S : 1
{1} | 1 0 0 |
{1} | 0 1 0 |
{1} | 0 0 1 |
3 3
2 : S <----------------- S : 2
{2} | 1 0 0 |
{2} | 0 1 0 |
{2} | 0 0 1 |
1 1
3 : S <------------- S : 3
{3} | 1 |
o5 : ComplexMap
|
i6 : D_[1]
o6 = 0 : image | 1 0 0 0 | <----------------- image | a b c | : 0
| 0 a b c | {0} | 0 0 0 |
{1} | 1 0 0 |
{1} | 0 1 0 |
{1} | 0 0 1 |
o6 : ComplexMap
|
i7 : D^[0] * D_[0] == 1
o7 = true
|
i8 : D^[1] * D_[1] == 1
o8 = true
|
i9 : D^[0] * D_[1] == 0
o9 = true
|
i10 : D^[1] * D_[0] == 0
o10 = true
|
i11 : D_[0] * D^[0] + D_[1] * D^[1] == 1
o11 = true
|
i12 : E = (mike => C1) ++ (greg => C2)
3 3 1
o12 = image | 1 0 0 0 | <-- S <-- S <-- S
| 0 a b c |
1 2 3
0
o12 : Complex
|
i13 : E_[mike]
1
o13 = 0 : image | 1 0 0 0 | <------------- S : 0
| 0 a b c | {0} | 1 |
{1} | 0 |
{1} | 0 |
{1} | 0 |
3 3
1 : S <----------------- S : 1
{1} | 1 0 0 |
{1} | 0 1 0 |
{1} | 0 0 1 |
3 3
2 : S <----------------- S : 2
{2} | 1 0 0 |
{2} | 0 1 0 |
{2} | 0 0 1 |
1 1
3 : S <------------- S : 3
{3} | 1 |
o13 : ComplexMap
|
i14 : E_[greg]
o14 = 0 : image | 1 0 0 0 | <----------------- image | a b c | : 0
| 0 a b c | {0} | 0 0 0 |
{1} | 1 0 0 |
{1} | 0 1 0 |
{1} | 0 0 1 |
o14 : ComplexMap
|
i15 : E^[mike] * E_[mike] == 1
o15 = true
|
i16 : E^[greg] * E_[greg] == 1
o16 = true
|
i17 : E^[mike] * E_[greg] == 0
o17 = true
|
i18 : E^[greg] * E_[mike] == 0
o18 = true
|
i19 : E_[mike] * E^[mike] + E_[greg] * E^[greg] == 1
o19 = true
|