next | previous | forward | backward | up | index | toc

# isComplexMorphism(ComplexMap) -- whether a complex map is a morphism of complexes

## Synopsis

• Function: isComplexMorphism
• Usage:
isComplexMorphism f
• Inputs:
• f, ,
• Outputs:
• , that is true when $f$ commutes with the differentials and has degree $0$

## Description

For a complex map $f : C \to D$ of degree $d$, this method checks whether $d = 0$ and, for all $i$, we have $dd^D_{i+d} * f_i = (-1)^d * (f_{i-1} * dd^C_i)$.

We first construct a random complex morphism.

 i1 : S = ZZ/101[a,b,c]; i2 : C = freeResolution coker vars S 1 3 3 1 o2 = S <-- S <-- S <-- S 0 1 2 3 o2 : Complex i3 : D = C ** C 1 6 15 20 15 6 1 o3 = S <-- S <-- S <-- S <-- S <-- S <-- S 0 1 2 3 4 5 6 o3 : Complex i4 : f1 = randomComplexMap(D, C, Boundary => true, InternalDegree => 1) 1 1 o4 = 0 : S <------------------- S : 0 | -5a-17b-11c | 6 3 1 : S <-------------------------------------------------- S : 1 {1} | 2a-28b+50c -28a+39b-13c -23a-b-48c | {1} | 26a-16b+42c 41a-20b-19c 23a-11b-16c | {1} | 18a+31b+19c -5a-23b-48c 50a-38b-19c | {1} | -7a-25b-38c 28a-36b+16c 23a-b-4c | {1} | 10a+16b-21c -49a+3b-41c -21a+11b+32c | {1} | -41a+49b-19c 2a-29b+48c -3a+5b+8c | 15 3 2 : S <-------------------------------------------------- S : 2 {2} | 33a+7b-12c 16a-20b+41c -39a-42b+11c | {2} | 30a+40b-7c -2a+46b+14c 4a+20b+35c | {2} | -3a-39b+2c -39a-30b+47c 22a-34b-43c | {2} | -28a+39b+9c -23a+32b+46c 47b-47c | {2} | 8a-25b+14c 7a-33b+16c 39a+3b-11c | {2} | -35a+8b+10c -49a-20b+7c -4a+33b+22c | {2} | 31a+35b-8c -17a-20b-19c -8a-43b+4c | {2} | -28a+16b-29c 42a+43c -39a-11b-37c | {2} | 15a+8b-39c -25a+30b -25a-4b-16c | {2} | 8a-14b-7c 3a+33b-36c -22a+41b+48c | {2} | -24a+49b+2c -37a+44b+5c -19a+7b-24c | {2} | 50a+18b 43a+23b-19c 49a-38b+48c | {2} | -18a+42c -38a+33b+34c -8a-2b-22c | {2} | 10a-b-10c 46b-45c -22a-32b-6c | {2} | -25a+39c -45a+44b-21c -50a+12b-25c | 20 1 3 : S <------------------------ S : 3 {3} | 9a+22b+11c | {3} | -39a-32b+46c | {3} | 4a+9b-28c | {3} | 13a+32b+c | {3} | -26a+20b-3c | {3} | 22a-24b+22c | {3} | -49a+30b-47c | {3} | -11a+48b-23c | {3} | -8a+15b-7c | {3} | 43a-39b+2c | {3} | -8a+29c | {3} | 36a-33b-47c | {3} | -3a+49b+15c | {3} | -22a+33b-37c | {3} | -30a+19b-13c | {3} | 41a-17b-10c | {3} | 16a+20b+30c | {3} | -28a-44b-18c | {3} | -6a+39b+39c | {3} | 35a-36b+27c | o4 : ComplexMap i5 : isComplexMorphism f1 o5 = true i6 : assert(degree f1 == 0) i7 : assert isNullHomotopic f1 i8 : assert(source f1 == C and target f1 == D)

We next generate a complex morphism that (likely) induces a nontrivial map on homology.

 i9 : f2 = randomComplexMap(D, C, Cycle => true) 1 1 o9 = 0 : S <----------- S : 0 | -40 | 6 3 1 : S <----------------------- S : 1 {1} | -44 -48 22 | {1} | 41 2 1 | {1} | 18 -1 -9 | {1} | 4 48 -22 | {1} | -41 -42 -1 | {1} | -18 1 -31 | 15 3 2 : S <----------------------- S : 2 {2} | -11 -3 -35 | {2} | -41 22 6 | {2} | -49 -25 31 | {2} | -48 22 0 | {2} | 13 4 35 | {2} | 40 -31 -6 | {2} | 33 -3 -13 | {2} | -41 0 1 | {2} | 31 25 -40 | {2} | -41 -35 -47 | {2} | -49 35 29 | {2} | 0 -18 1 | {2} | -9 -4 -13 | {2} | -40 35 -47 | {2} | -31 35 -2 | 20 1 3 : S <--------------- S : 3 {3} | -9 | {3} | -35 | {3} | 6 | {3} | 40 | {3} | 3 | {3} | -31 | {3} | 25 | {3} | -2 | {3} | -41 | {3} | -49 | {3} | -13 | {3} | 4 | {3} | 30 | {3} | -47 | {3} | 27 | {3} | -40 | {3} | 37 | {3} | -35 | {3} | -31 | {3} | -39 | o9 : ComplexMap i10 : isComplexMorphism f2 o10 = true i11 : assert(degree f2 == 0) i12 : assert isComplexMorphism f2

When the degree is non-zero, the map is not a complex morphism. If the debugLevel is greater than zero, then information about the failure is displayed.

 i13 : f3 = randomComplexMap(D, C, Cycle => true, Degree=>1, InternalDegree => 1) 6 1 o13 = 1 : S <--------------- S : 0 {1} | -26 | {1} | -50 | {1} | 1 | {1} | 26 | {1} | 50 | {1} | -1 | 15 3 2 : S <----------------------- S : 1 {2} | 35 -16 -48 | {2} | 17 49 -40 | {2} | 1 44 11 | {2} | 26 0 0 | {2} | 15 16 48 | {2} | -18 -49 40 | {2} | 35 10 -48 | {2} | 0 50 0 | {2} | -1 -45 -11 | {2} | 17 49 -14 | {2} | 1 44 -40 | {2} | 0 0 -1 | {2} | -15 10 -48 | {2} | 18 49 -14 | {2} | 1 45 -40 | 20 3 3 : S <----------------------- S : 2 {3} | 29 -48 31 | {3} | 16 48 0 | {3} | -49 40 0 | {3} | 28 37 -31 | {3} | 35 0 48 | {3} | 46 -48 -30 | {3} | 1 0 -11 | {3} | -29 -18 -47 | {3} | 0 17 49 | {3} | 0 1 44 | {3} | -10 48 0 | {3} | -15 0 48 | {3} | -10 -37 -30 | {3} | -49 14 0 | {3} | 28 22 -47 | {3} | 0 18 49 | {3} | 46 18 -40 | {3} | 1 0 40 | {3} | 0 1 45 | {3} | 10 22 40 | 15 1 4 : S <--------------- S : 3 {4} | -31 | {4} | -48 | {4} | -29 | {4} | -48 | {4} | 30 | {4} | -37 | {4} | 47 | {4} | -49 | {4} | 28 | {4} | -18 | {4} | 46 | {4} | 1 | {4} | 40 | {4} | -22 | {4} | 10 | o13 : ComplexMap i14 : assert(degree f3 == 1) i15 : isComplexMorphism f3 o15 = false i16 : debugLevel = 1 o16 = 1 i17 : isComplexMorphism f3 -- the complex map has non-zero degree o17 = false i18 : assert isCommutative f3
 i19 : f4 = randomComplexMap(D, C) -- (basis,List,List,Module) with Strategy => Torsion from FunctionClosure[/usr/local/share/Macaulay2/Core/basis.m2:270:33-276:27] -- (basis,List,List,Module) with Strategy => Default from basisDefaultStrategy -- (inducedMap,Module,Module,Matrix) with Strategy => Default from FunctionClosure[/usr/local/share/Macaulay2/Core/matrix.m2:658:85-666:19] -- (inducedMap,Module,Module,Matrix) with Strategy => Default from FunctionClosure[/usr/local/share/Macaulay2/Core/matrix.m2:658:85-666:19] -- (inducedMap,Module,Module,Matrix) with Strategy => Default from FunctionClosure[/usr/local/share/Macaulay2/Core/matrix.m2:658:85-666:19] -- (inducedMap,Module,Module,Matrix) with Strategy => Default from FunctionClosure[/usr/local/share/Macaulay2/Core/matrix.m2:658:85-666:19] 1 1 o19 = 0 : S <--------- S : 0 | 7 | 6 3 1 : S <----------------------- S : 1 {1} | 30 8 -18 | {1} | 13 8 42 | {1} | -17 -29 23 | {1} | -13 30 -28 | {1} | 3 -46 15 | {1} | -41 49 18 | 15 3 2 : S <----------------------- S : 2 {2} | -16 -28 30 | {2} | -46 47 4 | {2} | 12 -28 22 | {2} | -18 6 5 | {2} | 27 -9 -20 | {2} | -21 -33 -13 | {2} | 23 28 -29 | {2} | -37 -29 15 | {2} | -23 26 -4 | {2} | 44 5 12 | {2} | -39 -37 3 | {2} | 20 -33 9 | {2} | 19 -28 -2 | {2} | 0 42 20 | {2} | -47 44 -26 | 20 1 3 : S <--------------- S : 3 {3} | 33 | {3} | 16 | {3} | 10 | {3} | 31 | {3} | 28 | {3} | -6 | {3} | 21 | {3} | -30 | {3} | -4 | {3} | -14 | {3} | -33 | {3} | -42 | {3} | -44 | {3} | -5 | {3} | -16 | {3} | -35 | {3} | -39 | {3} | -4 | {3} | -24 | {3} | -32 | o19 : ComplexMap i20 : assert(degree f4 == 0) i21 : debugLevel = 0 o21 = 0 i22 : isComplexMorphism f4 o22 = false i23 : debugLevel = 1 o23 = 1 i24 : isComplexMorphism f4 -- block (1, 0) fails to commute o24 = false