next | previous | forward | backward | up | top | index | toc | Macaulay2 website
Complexes :: nullHomotopy(ComplexMap)

nullHomotopy(ComplexMap) -- a map which is a candidate for being a null homotopy

Synopsis

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.

Caveat

The output is only a null homotopy when one exists.

See also

Ways to use this method: