Description
A map of chain complexes $f \colon C \to D$ is null-homopic if there exists a map of chain complexes $h : C \to D$ of degree $\deg(f)+1$, such that we have the equality \[ f = \operatorname{dd}^D h + (-1)^{\deg(f)} h \operatorname{dd}^C. \]
As a first example, we construct a map of chain complexes in which the null homotopy is given by the identity.
i1 : R = ZZ/101[x,y,z];
|
i2 : M = cokernel matrix{{x,y,z^2}, {y^2,z,x^2}}
o2 = cokernel | x y z2 |
| y2 z x2 |
2
o2 : R-module, quotient of R
|
i3 : C = complex {id_M}
o3 = cokernel | x y z2 | <-- cokernel | x y z2 |
| y2 z x2 | | y2 z x2 |
0 1
o3 : Complex
|
i4 : h = map(C, C, i -> if i == 0 then id_M, Degree => 1)
o4 = 1 : cokernel | x y z2 | <----------- cokernel | x y z2 | : 0
| y2 z x2 | | 1 0 | | y2 z x2 |
| 0 1 |
o4 : ComplexMap
|
i5 : isWellDefined h
o5 = true
|
i6 : assert isNullHomotopyOf(h, id_C)
|
i7 : assert isNullHomotopic id_C
|
A random map of chain complexes, arising as a boundary in the associated Hom complex, is automatically null homotopic. We use the method nullHomotopy to construct a witness and verify it is a null homotopy.
i8 : C = (freeResolution M) ** R^1/ideal(x^3, z^3-x)
o8 = cokernel | x3 z3-x 0 0 | <-- cokernel {2} | x3 z3-x 0 0 0 0 | <-- cokernel {5} | x3 z3-x 0 0 0 0 | <-- cokernel {7} | x3 z3-x 0 0 |
| 0 0 x3 z3-x | {1} | 0 0 x3 z3-x 0 0 | {7} | 0 0 x3 z3-x 0 0 | {9} | 0 0 x3 z3-x |
{2} | 0 0 0 0 x3 z3-x | {9} | 0 0 0 0 x3 z3-x |
0 3
1 2
o8 : Complex
|
i9 : f = randomComplexMap(C, C[1], Boundary => true)
o9 = -1 : 0 <----- cokernel | x3 z3-x 0 0 | : -1
0 | 0 0 x3 z3-x |
0 : cokernel | x3 z3-x 0 0 | <-------------------------------------------------------------------------- cokernel {2} | x3 z3-x 0 0 0 0 | : 0
| 0 0 x3 z3-x | | 19xy+20y2-29yz-8z2-5x -46y+30z 30x2-24xy-38y2-16yz+15z2-29x | {1} | 0 0 x3 z3-x 0 0 |
| -8x2+48y2+19xz-10yz-29z2+36x 36y+7z -33x2-29y2-24xz-38yz+20z2 | {2} | 0 0 0 0 x3 z3-x |
1 : cokernel {2} | x3 z3-x 0 0 0 0 | <-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cokernel {5} | x3 z3-x 0 0 0 0 | : 1
{1} | 0 0 x3 z3-x 0 0 | {2} | 2x2y-29y3+29xz-2x 25x2y3-39x2y2z-18x2yz2-34x2y+47xy2-19x2z+39xyz+18xz2 -47x2y5+38x2y4z+2x2y3z2+43x2y3+47xy4+15x2y2z-38xy3z+28x2yz2-2xy2z2 | {7} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x | {1} | 10x2y2-24xy3-38y4+29x2yz-16y3z+43y2z2+24x2z+38xyz+16xz2+19x2-10xy-29xz -38x2y4-16x2y3z+9x2y2z2+34xy3z2-47y4z2+19x2y2-39xy3-18xy2z -34x2y4z2-43xy5z2-47y6z2-15x2y4+38xy5-28x2y3z+2xy4z | {9} | 0 0 0 0 x3 z3-x |
{2} | 8x2y+18y3-18xz-8x -49x2y3-34xy4+47y5-19xy3z+39y4z+18y3z2+34x2yz-47xy2z+19x2z2-39xyz2-18x2 34x2y5+43xy6+47y7+48x2y4z+15xy5z-38y6z+47x2y3z2+28xy4z2-2y5z2-43x2y3z-47xy4z-15x2y2z2+38xy3z2+2x2y2 |
2 : cokernel {5} | x3 z3-x 0 0 0 0 | <--------------------------------------------------------------------------------------------------- cokernel {7} | x3 z3-x 0 0 | : 2
{7} | 0 0 x3 z3-x 0 0 | {5} | 21x2-34xy+47y2-19xz+39yz+18z2 -19x2y2+43xy3+47y4+16x2yz+15xy2z-38y3z-7x2z2+28xyz2-2y2z2 | {9} | 0 0 x3 z3-x |
{9} | 0 0 0 0 x3 z3-x | {7} | 13 -16x2-22xy-48y2-45xz+32yz-47z2 |
{9} | 0 -47 |
o9 : ComplexMap
|
i10 : assert isNullHomotopic f
|
i11 : h = nullHomotopy f
o11 = 0 : cokernel | x3 z3-x 0 0 | <----------------------------------- cokernel | x3 z3-x 0 0 | : -1
| 0 0 x3 z3-x | | 24yz+46 -24y2-30 | | 0 0 x3 z3-x |
| -2x2yz+24z2-36 2x2y2-24yz-7 |
1 : cokernel {2} | x3 z3-x 0 0 0 0 | <--------------------------------------------------- cokernel {2} | x3 z3-x 0 0 0 0 | : 0
{1} | 0 0 x3 z3-x 0 0 | {2} | 2x2y2+41 0 -29 | {1} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x | {1} | -24y3+24xz+19x-10y-29z 0 -24x2y-38y-16z | {2} | 0 0 0 0 x3 z3-x |
{2} | -8 0 -40 |
2 : cokernel {5} | x3 z3-x 0 0 0 0 | <------------------------------------------------------------------------------------------------------ cokernel {5} | x3 z3-x 0 0 0 0 | : 1
{7} | 0 0 x3 z3-x 0 0 | {5} | 43 9x2+34xy-47y2+19xz-39yz-18z2 -34x2y2-43xy3-47y4-48x2yz-15xy2z+38y3z-47x2z2-28xyz2+2y2z2 | {7} | 0 0 x3 z3-x 0 0 |
{9} | 0 0 0 0 x3 z3-x | {7} | 0 0 0 | {9} | 0 0 0 0 x3 z3-x |
{9} | 0 0 47 |
3 : cokernel {7} | x3 z3-x 0 0 | <--------------------------------------------- cokernel {7} | x3 z3-x 0 0 | : 2
{9} | 0 0 x3 z3-x | {7} | 13 -16x2-22xy-48y2-45xz+32yz-47z2 | {9} | 0 0 x3 z3-x |
{9} | 0 0 |
o11 : ComplexMap
|
i12 : assert isNullHomotopyOf(h, f)
|
By assigning debugLevel a positive value, this method provides some information about the nature of the failure to be a null homotopy.
i13 : g1 = randomComplexMap(C, C[1], Degree => 1)
o13 = 0 : cokernel | x3 z3-x 0 0 | <-------------- cokernel | x3 z3-x 0 0 | : -1
| 0 0 x3 z3-x | | 15 39 | | 0 0 x3 z3-x |
| -23 43 |
1 : cokernel {2} | x3 z3-x 0 0 0 0 | <--------------------------------------- cokernel {2} | x3 z3-x 0 0 0 0 | : 0
{1} | 0 0 x3 z3-x 0 0 | {2} | -17 0 -38 | {1} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x | {1} | -11x+48y+36z 11 33x+40y+11z | {2} | 0 0 0 0 x3 z3-x |
{2} | 35 0 46 |
2 : cokernel {5} | x3 z3-x 0 0 0 0 | <---------------------------------------------------------------------------------------------------- cokernel {5} | x3 z3-x 0 0 0 0 | : 1
{7} | 0 0 x3 z3-x 0 0 | {5} | -28 x2-3xy-47y2+22xz-23yz-7z2 29x2y2-37xy3+30y4-47x2yz-13xy2z-18y3z+15x2z2-10xyz2+39y2z2 | {7} | 0 0 x3 z3-x 0 0 |
{9} | 0 0 0 0 x3 z3-x | {7} | 0 2 27x2-22xy-9y2+32xz-32yz-20z2 | {9} | 0 0 0 0 x3 z3-x |
{9} | 0 0 24 |
3 : cokernel {7} | x3 z3-x 0 0 | <----------------------------------------- cokernel {7} | x3 z3-x 0 0 | : 2
{9} | 0 0 x3 z3-x | {7} | -30 -48x2-15xy+39xz+33yz-49z2 | {9} | 0 0 x3 z3-x |
{9} | 0 -33 |
o13 : ComplexMap
|
i14 : g2 = randomComplexMap(C, C[1], Degree => -1)
o14 = -2 : 0 <----- cokernel | x3 z3-x 0 0 | : -1
0 | 0 0 x3 z3-x |
-1 : 0 <----- cokernel {2} | x3 z3-x 0 0 0 0 | : 0
0 {1} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x |
0 : cokernel | x3 z3-x 0 0 | <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cokernel {5} | x3 z3-x 0 0 0 0 | : 1
| 0 0 x3 z3-x | | -19x2y3+44xy4+9y5+17x2y2z-39xy3z-39y4z-20x2yz2+36xy2z2+4y3z2 -3x2y5+41xy6-6y7-22x2y4z+16xy5z+35y6z-30x2y3z2-28xy4z2-9y5z2 -13x2y7-47xy8+37y9+4x2y6z+27xy7z-35y8z+30x2y5z2-40xy6z2-31y7z2 | {7} | 0 0 x3 z3-x 0 0 |
| 13x2y3-49xy4+43y5-26x2y2z-11xy3z-8y4z+22x2yz2-8xy2z2+36y3z2 -35x2y5+3xy6-2y7+6x2y4z-31xy5z-41y6z+40x2y3z2+25xy4z2-49y5z2 -39x2y7-29xy8-37y9-31x2y6z-48xy7z+47y8z-48x2y5z2+30xy6z2-49y7z2 | {9} | 0 0 0 0 x3 z3-x |
1 : cokernel {2} | x3 z3-x 0 0 0 0 | <------------------------------------------------------------------------------------------------------------------------------------------ cokernel {7} | x3 z3-x 0 0 | : 2
{1} | 0 0 x3 z3-x 0 0 | {2} | 28x2y3+xy4+10y5-18x2y2z+40xy3z+7y4z+46x2yz2-22xy2z2+30y3z2 -46x2y5+27xy6-37y7+12x2y4z-21xy5z-23y6z-18x2y3z2+23xy4z2+44y5z2 | {9} | 0 0 x3 z3-x |
{2} | 0 0 0 0 x3 z3-x | {1} | 13x2y4+3xy5+8y6-17x2y3z-41xy4z-29y5z-13x2y2z2+8xy3z2+30y4z2 -39x2y6+47y8+20x2y5z-47xy6z-28y7z+19x2y4z2-28xy5z2+6y6z2 |
{2} | -46x2y3+42xy4+15y5+49x2y2z+23xy3z+18y4z-18x2yz2-28xy2z2-16y3z2 -9x2y5-29xy6-37y7-33x2y4z+26xy5z-33y6z+28x2y3z2+5xy4z2-28y5z2 |
o14 : ComplexMap
|
i15 : debugLevel = 1
o15 = 1
|
i16 : assert not isNullHomotopyOf(g1, f)
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
-- 1 : (ReduceHooks) with Strategy => Default from -*Function[/usr/share/Macaulay2/Core/matrix.m2:76:55-76:85]*-
fails to be a null homotopy at location 0
fails to be a null homotopy at location 1
fails to be a null homotopy at location 2
|
i17 : assert not isNullHomotopyOf(g2, f)
expected degree of first map to be one more than degree of the second
|