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

isNullHomotopic(ComplexMap) -- whether a map of complexes is null-homotopic

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 : 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 {1} | x3 z3-x 0  0    0  0    | <-- cokernel {5} | x3 z3-x |
              | 0  0    x3 z3-x |              {2} | 0  0    x3 z3-x 0  0    |      
                                               {2} | 0  0    0  0    x3 z3-x |     2
     0                                 
                                      1

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 {1} | x3 z3-x 0  0    0  0    | : 0
                  | 0  0    x3 z3-x |    | -5y+30z 30x2+19xy-10y2-29yz-32z2-22x -29xy+6y2-38yz-16z2+15x       |            {2} | 0  0    x3 z3-x 0  0    |
                                         | 36y+48z 21x2-22y2+19xz-10yz+7z2      -16x2-33y2-29xz-24yz-38z2+36x |            {2} | 0  0    0  0    x3 z3-x |

     1 : cokernel {1} | x3 z3-x 0  0    0  0    | <---------------------------------------------------------------------------------- cokernel {5} | x3 z3-x | : 1
                  {2} | 0  0    x3 z3-x 0  0    |    {1} | 24x2y2+19xy3-10y4+38x2yz-29y3z-19y2z2-19x2z+10xyz+29xz2-29x2-24xy-38xz |
                  {2} | 0  0    0  0    x3 z3-x |    {2} | 16x2y-8y3+8xz-16x                                                      |
                                                     {2} | -39x2y-22y3+22xz+39x                                                   |

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 |    | 24        -30        |            | 0  0    x3 z3-x |
                                          | 39x2yz-36 -39x2y2-29 |

      1 : cokernel {1} | x3 z3-x 0  0    0  0    | <--------------------------------------- cokernel {1} | x3 z3-x 0  0    0  0    | : 0
                   {2} | 0  0    x3 z3-x 0  0    |    {1} | 19 19x-10y-29z -29x-24y-38z |            {2} | 0  0    x3 z3-x 0  0    |
                   {2} | 0  0    0  0    x3 z3-x |    {2} | 0  -8          -16          |            {2} | 0  0    0  0    x3 z3-x |
                                                      {2} | 0  -22         -39x2y2+39   |

      2 : cokernel {5} | x3 z3-x | <----- cokernel {5} | x3 z3-x | : 1
                                      0

o11 : ComplexMap
i12 : assert isNullHomotopyOf(h, f)
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 {1} | x3 z3-x 0  0    0  0    | : 0
                   | 0  0    x3 z3-x |    | 21x+34y+19z  -13x2-43xy-28y2-15xz-47yz+38z2 -47x2+47xy-16y2+19xz+7yz+15z2  |            {2} | 0  0    x3 z3-x 0  0    |
                                          | -47x-39y-18z 2x2+16xy+45y2+22xz-34yz-48z2   -23x2+39xy-17y2+43xz-11yz+48z2 |            {2} | 0  0    0  0    x3 z3-x |

      1 : cokernel {1} | x3 z3-x 0  0    0  0    | <---------------------------------------------------------------------- cokernel {5} | x3 z3-x | : 1
                   {2} | 0  0    x3 z3-x 0  0    |    {1} | 36x2y2-38xy3+11y4+35x2yz+33xy2z+46y3z+11x2z2+40xyz2-28y2z2 |
                   {2} | 0  0    0  0    x3 z3-x |    {2} | x2y+22xy2-7y3-3x2z-47xyz+2y2z-23xz2+29yz2                  |
                                                      {2} | -47x2y-37xy2+30y3+15x2z-13xyz-18y2z-10xz2+39yz2            |

o13 : ComplexMap
i14 : assert not isNullHomotopic g

This procedure also works for complex maps whose degree is non-zero.

i15 : f = randomComplexMap(C, C[2], Boundary => true, Degree => 1)

o15 = -1 : 0 <----- cokernel | x3 z3-x 0  0    | : -2
                0            | 0  0    x3 z3-x |

      0 : cokernel | x3 z3-x 0  0    | <---------------------------------------------------------------------- cokernel {1} | x3 z3-x 0  0    0  0    | : -1
                   | 0  0    x3 z3-x |    | -42y+32z 32x2+20xy-24y2+30yz-26z2+15x -39xy+32y2-33yz+49z2-41x |            {2} | 0  0    x3 z3-x 0  0    |
                                          | -22y+23z 39x2+15y2+20xz-24yz+8z2      49x2+24y2-39xz-33z2-22x  |            {2} | 0  0    0  0    x3 z3-x |

      1 : cokernel {1} | x3 z3-x 0  0    0  0    | <---------------------------------------------------------------------- cokernel {5} | x3 z3-x | : 0
                   {2} | 0  0    x3 z3-x 0  0    |    {1} | 20xy3-24y4+33x2yz+30y3z-32y2z2-20x2z+24xyz-30xz2-39x2-33xz |
                   {2} | 0  0    0  0    x3 z3-x |    {2} | -49x2y+48y3-48xz+49x                                       |
                                                      {2} | -33x2y+15y3-15xz+33x                                       |

o15 : ComplexMap
i16 : assert isNullHomotopic f
i17 : h = nullHomotopy f

o17 = 0 : cokernel | x3 z3-x 0  0    | <--------------------------- cokernel | x3 z3-x 0  0    | : -2
                   | 0  0    x3 z3-x |    | 27         32       |            | 0  0    x3 z3-x |
                                          | -33x2yz-22 33x2y2-9 |

      1 : cokernel {1} | x3 z3-x 0  0    0  0    | <-------------------------------------- cokernel {1} | x3 z3-x 0  0    0  0    | : -1
                   {2} | 0  0    x3 z3-x 0  0    |    {1} | -32 -20x+24y-30z 39x+33z   |            {2} | 0  0    x3 z3-x 0  0    |
                   {2} | 0  0    0  0    x3 z3-x |    {2} | 0   -48          -49       |            {2} | 0  0    0  0    x3 z3-x |
                                                      {2} | 0   -15          33x2y2-33 |

      2 : cokernel {5} | x3 z3-x | <----- cokernel {5} | x3 z3-x | : 0
                                      0

o17 : ComplexMap
i18 : assert isNullHomotopyOf(h, f)

See also