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

isNullHomotopyOf(ComplexMap,ComplexMap) -- whether the first map of chain complexes is a null homotopy for the second

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. \]

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

See also

Ways to use this method: