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. \] Given $f$, this method returns a map $h$ of chain complexes that will be a null-homotopy if one exists.
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 : assert isNullHomotopic id_C
|
i5 : h = nullHomotopy id_C
o5 = 1 : cokernel | x y z2 | <----------- cokernel | x y z2 | : 0
| y2 z x2 | | 1 0 | | y2 z x2 |
| 0 1 |
2 : 0 <----- cokernel | x y z2 | : 1
0 | y2 z x2 |
o5 : ComplexMap
|
i6 : assert(h_0 == id_M)
|
i7 : assert isNullHomotopyOf(h, id_C)
|
A random map of chain complexes, arising as a boundary in the associated Hom complex, is automatically null homotopic.
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)
|
When a map of chain complexes is not null-homotopic, this method nevertheless returns a map $h$ of chain complexes, having the correct source, target and degree, but cannot be a null homotopy.
i13 : g = randomComplexMap(C, C[1])
o13 = -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 | | 15x2-23xy+43y2+39xz-17yz-11z2 40x+11y+46z 22x2-47xy-7y2-23xz+2yz+29z2 | {1} | 0 0 x3 z3-x 0 0 |
| 48x2+36xy+11y2+35xz-38yz+33z2 -28x+y-3z -47x2+15xy-13y2-37xz-10yz+30z2 | {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} | -18x2y+27xy2-9y3+39x2z-22xyz-32y2z+32xz2-20yz2 4x2y3+22xy4-8y5+13x2y2z-49xy3z+43y4z-26x2yz2-11xy2z2-8y3z2 -49x2y5+30xy6-40y7-13x2y4z-47xy5z+37y6z+4x2y3z2+27xy4z2-35y5z2 | {7} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x | {1} | 24x2y2-15xy3+33y4-30x2yz+39xy2z-49y3z-48x2z2-33y2z2 36x2y4-30xy5-28y6-3x2y3z+41xy4z-6y5z-22x2y2z2+16xy3z2+35y4z2 -31x2y6-48xy7+30y8-39x2y5z-29xy6z-37y7z-31x2y4z2-48xy5z2+47y6z2 | {9} | 0 0 0 0 x3 z3-x |
{2} | -19x2y-20xy2+36y3+17x2z+44xyz+9y2z-39xz2-39yz2 -9x2y3+40xy4+25y5-35x2y2z+3xy3z-2y4z+6x2yz2-31xy2z2-41y3z2 -49x2y5+46xy6-22y7+28x2y4z+xy5z+10y6z-18x2y3z2+40xy4z2+7y5z2 |
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} | 30x2+13xy-13y2-17xz+3yz-41z2 8x2y2-46xy3+42y4-29x2yz+49xy2z+23y3z+30x2z2-18xyz2-28y2z2 | {9} | 0 0 x3 z3-x |
{9} | 0 0 0 0 x3 z3-x | {7} | 8 15x2+18xy-46y2-16xz+12yz-18z2 |
{9} | 0 27 |
o13 : ComplexMap
|
i14 : assert not isNullHomotopic g
|
i15 : h' = nullHomotopy g
o15 = 0 : cokernel | x3 z3-x 0 0 | <----------------------------------------------------------------------------------------------------------------------------------------- cokernel | x3 z3-x 0 0 | : -1
| 0 0 x3 z3-x | | -39xyz2-36xz2+39xz-22yz-39z2-8z+41 -23xy2z-29xyz-48y2z-39xy-15y2+9yz-20z2+36z+40 | | 0 0 x3 z3-x |
| 18x2yz-27xy2z-39x2z2+22xyz2-48x2y+31xz2+18xz-27yz-35z-33 -18x2y2+27xy3+39x2yz-22xy2z-30xyz2-31xyz+36xz2-18xy+27y2-37yz-30z2-31z-2 |
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} | -18x2y2+27xy3+39x2yz-22xy2z-7xyz2-31xyz-36xz2+48yz2+20x2-18xy+27y2+39xz-22yz-39z2-31z-33 0 -31 | {1} | 0 0 x3 z3-x 0 0 |
{2} | 0 0 0 0 x3 z3-x | {1} | -23xy3z-27x2y2+22x2yz-29xy2z-48y3z-32x2z2-3xyz2-44x2y-39xy2-15y3-31x2z+9y2z-48xz2+16x2-27xy+36yz-3z2+38y+30z-27 0 -48x2yz-15x2y-30x2z+36y-3z | {2} | 0 0 0 0 x3 z3-x |
{2} | 17x2yz+44xy2z-39xyz2+3xy2+2xyz-20y2+17xz+44yz-39z2+3y+2z-34 39xy2+36xy-48y2-30y -20x2-31 |
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} | -39xyz2-36xz2+48yz2+30z2-33 48x2yz2+30x2z2-22x2+16xy+35y2-3xz+13yz-26z2 -31x2y2-48xy3+47y4-28x2yz-xy2z-13y3z+18x2z2-40xyz2+4y2z2-48x2z+47xyz-13xz2-yz-40z2+47z | {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 -27 |
3 : cokernel {7} | x3 z3-x 0 0 | <------------------------------------------------- cokernel {7} | x3 z3-x 0 0 | : 2
{9} | 0 0 x3 z3-x | {7} | -41 15x2+18xy+23y2-16xz-44yz-48z2+48z | {9} | 0 0 x3 z3-x |
{9} | 0 0 |
o15 : ComplexMap
|
i16 : assert isWellDefined h'
|
i17 : assert(degree h' === degree g + 1)
|
i18 : assert not isNullHomotopyOf(h', g)
|
For developers: when the source of $f$ is a free complex, a procedure, that is often faster, is attempted. In the general case this method uses the Hom complex.