Macaulay2 » Documentation
Packages » DGAlgebras » Low-level differential computations and validity checks » getBoundaryPreimage(DGModule,Vector)
next | previous | forward | backward | up | index | toc

getBoundaryPreimage(DGModule,Vector) -- Lift a boundary in a DG module to a preimage under the differential

Description

getBoundaryPreimage for DG modules is the module analogue of getBoundaryPreimage(DGAlgebra,RingElement): it attempts to solve d_M(x) = b for x, using the matrix moduleDifferential(homDegree(b) + 1, M) and a single // solve. Over a general ring such a solve may fail to find a preimage even when one exists, so a true answer is a guarantee but a false answer only says "the particular preimage candidate we tried left a residue". The returned residue is b - d_M(liftAttempt).

i1 : R = QQ[x, y] / ideal(x^2, y^2)

o1 = R

o1 : QuotientRing
i2 : A = koszulComplexDGA R

o2 = {Ring => R                          }
      Underlying algebra => R[T   ..T   ]
                               1,1   1,2
      Differential => {x, y}

o2 : DGAlgebra
i3 : M = freeDGModule(A, {0, 1})

o3 = {Base ring => R                       }
      DG algebra => R[T   ..T   ]
                       1,1   1,2
                                       2
      Natural module => (R[T   ..T   ])
                            1,1   1,2
      Generator degrees => {{0, 0}, {1, 0}}
      Differentials on gens => {0, 0}

o3 : DGModule
i4 : natGens = apply(rank M.natural, i -> (M.natural)_i)

o4 = {| 1 |, | 0 |}
      | 0 |  | 1 |

o4 : List
i5 : setDiff(M, {0, x * natGens#0})

o5 = {Base ring => R                       }
      DG algebra => R[T   ..T   ]
                       1,1   1,2
                                       2
      Natural module => (R[T   ..T   ])
                            1,1   1,2
      Generator degrees => {{0, 0}, {1, 0}}
      Differentials on gens => {0, | x |}
                                   | 0 |

o5 : DGModule
i6 : b = x * natGens#0

o6 = | x |
     | 0 |

                    2
o6 : (R[T   ..T   ])
         1,1   1,2
i7 : (ok, pre) = getBoundaryPreimage(M, b)

o7 = (true, | T_(1,1) |)
            |    0    |

o7 : Sequence
i8 : assert(ok === true)
i9 : assert(diff(M, pre) == b)

On a non-boundary, the first coordinate is false and the second coordinate records the residue:

i10 : M2 = freeDGModule(A, {0})

o10 = {Base ring => R                    }
       DG algebra => R[T   ..T   ]
                        1,1   1,2
                                        1
       Natural module => (R[T   ..T   ])
                             1,1   1,2
       Generator degrees => {{0, 0}}
       Differentials on gens => {0}

o10 : DGModule
i11 : ng2 = apply(rank M2.natural, i -> (M2.natural)_i)

o11 = {| 1 |}

o11 : List
i12 : (ok2, residue) = getBoundaryPreimage(M2, ng2#0)

o12 = (false, | 1 |)

o12 : Sequence
i13 : assert(ok2 === false)
i14 : assert(residue != 0)

See also

Ways to use this method:


The source of this document is in /build/reproducible-path/macaulay2-1.26.05+ds/M2/Macaulay2/packages/DGAlgebras/doc.m2:7162:0.