next | previous | forward | backward | up | top | index | toc | Macaulay2 website
DGAlgebras > Basic operations on DG Algebra Maps

Basic operations on DG Algebra Maps -- Outlines some basic operations on DGAlgebraMaps

An algebra map between the underlying graded algebras that satisfies the Leibniz rule is a morphism of DG algebras. Such objects are created using the DGAlgebraMap class. As with DGAlgebras, one can define a DGAlgebraMap 'from scratch' using dgAlgebraMap.

i1 : R = ZZ/101[a,b,c]/ideal{a^3+b^3+c^3,a*b*c}

o1 = R

o1 : QuotientRing
i2 : K1 = koszulComplexDGA(ideal vars R,Variable=>"Y")

o2 = {Ring => R                      }
      Underlying algebra => R[Y ..Y ]
                               1   3
      Differential => {a, b, c}

o2 : DGAlgebra
i3 : K2 = koszulComplexDGA(ideal {b,c},Variable=>"T")

o3 = {Ring => R                      }
      Underlying algebra => R[T ..T ]
                               1   2
      Differential => {b, c}

o3 : DGAlgebra
i4 : f = dgAlgebraMap(K2,K1,matrix{{0,T_1,T_2}})

o4 = map (R[T ..T ], R[Y ..Y ], {0, T , T , a, b, c})
             1   2      1   3        1   2

o4 : DGAlgebraMap

Once we define the DGAlgebraMap, it is a good idea to check to see if it indeed satisfies the Leibniz rule. This can be checked by using isWellDefined.

i5 : isWellDefined f

o5 = false

Oops! Let's try that again.

i6 : g = dgAlgebraMap(K1,K2,matrix{{Y_2,Y_3}})

o6 = map (R[Y ..Y ], R[T ..T ], {Y , Y , a, b, c})
             1   3      1   2     2   3

o6 : DGAlgebraMap
i7 : isWellDefined g

o7 = true

One can lift a ring homomorphism in degree zero to a map of DGAlgebras (up to a specified degree) using liftToDGMap. This is helpful in some of the internal functions of the DGAlgebras package, such as computing the map induced on Tor algebras by a RingMap.

i8 : R = ZZ/101[a,b,c]/ideal{a^3,b^3,c^3}

o8 = R

o8 : QuotientRing
i9 : S = R/ideal{a^2*b^2*c^2}

o9 = S

o9 : QuotientRing
i10 : f = map(S,R)

o10 = map (S, R, {a, b, c})

o10 : RingMap S <--- R
i11 : A = acyclicClosure(R,EndDegree=>3)

o11 = {Ring => R                                  }
       Underlying algebra => R[T ..T ]
                                1   6
                                  2     2     2
       Differential => {a, b, c, a T , b T , c T }
                                    1     2     3

o11 : DGAlgebra
i12 : B = acyclicClosure(S,EndDegree=>3)

o12 = {Ring => S                                                                                                                              }
       Underlying algebra => S[T ..T  ]
                                1   16
                                  2     2     2       2 2     2 2      2 2      2 2     2 2        2 2       2 2        2       2       2
       Differential => {a, b, c, a T , b T , c T , a*b c T , b c T , -a b T , -a c T , b c T T , -a c T T , b c T T , -a T T , c T T , b T T }
                                    1     2     3         1       4        6        5       3 4        3 5       2 4      1 7     3 7     2 7

o12 : DGAlgebra
i13 : phi = liftToDGMap(B,A,f)

o13 = map (S[T ..T  ], R[T ..T ], {T , T , T , T , T , T , a, b, c})
              1   16      1   6     1   2   3   4   5   6

o13 : DGAlgebraMap

Once one has a DGAlgebraMap, one can also obtain the underlying map of complexes via toComplexMap.

i14 : cmPhi = toComplexMap(phi,EndDegree=>3)

                                          1
o14 = 0 : cokernel | a2b2c2 | <--------- R  : 0
                                 | 1 |

                                                                    3
      1 : cokernel {1} | a2b2c2 0      0      | <----------------- R  : 1
                   {1} | 0      a2b2c2 0      |    {1} | 1 0 0 |
                   {1} | 0      0      a2b2c2 |    {1} | 0 1 0 |
                                                   {1} | 0 0 1 |

                                                                                                      6
      2 : cokernel {2} | a2b2c2 0      0      0      0      0      0      | <----------------------- R  : 2
                   {2} | 0      a2b2c2 0      0      0      0      0      |    {2} | 1 0 0 0 0 0 |
                   {2} | 0      0      a2b2c2 0      0      0      0      |    {2} | 0 1 0 0 0 0 |
                   {3} | 0      0      0      a2b2c2 0      0      0      |    {2} | 0 0 1 0 0 0 |
                   {3} | 0      0      0      0      a2b2c2 0      0      |    {3} | 0 0 0 1 0 0 |
                   {3} | 0      0      0      0      0      a2b2c2 0      |    {3} | 0 0 0 0 1 0 |
                   {6} | 0      0      0      0      0      0      a2b2c2 |    {3} | 0 0 0 0 0 1 |
                                                                               {6} | 0 0 0 0 0 0 |

                                                                                                                                                                             10
      3 : cokernel {3} | a2b2c2 0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      | <------------------------------- R   : 3
                   {4} | 0      a2b2c2 0      0      0      0      0      0      0      0      0      0      0      0      0      0      |    {3} | 1 0 0 0 0 0 0 0 0 0 |
                   {4} | 0      0      a2b2c2 0      0      0      0      0      0      0      0      0      0      0      0      0      |    {4} | 0 1 0 0 0 0 0 0 0 0 |
                   {4} | 0      0      0      a2b2c2 0      0      0      0      0      0      0      0      0      0      0      0      |    {4} | 0 0 1 0 0 0 0 0 0 0 |
                   {4} | 0      0      0      0      a2b2c2 0      0      0      0      0      0      0      0      0      0      0      |    {4} | 0 0 0 1 0 0 0 0 0 0 |
                   {4} | 0      0      0      0      0      a2b2c2 0      0      0      0      0      0      0      0      0      0      |    {4} | 0 0 0 0 1 0 0 0 0 0 |
                   {4} | 0      0      0      0      0      0      a2b2c2 0      0      0      0      0      0      0      0      0      |    {4} | 0 0 0 0 0 1 0 0 0 0 |
                   {4} | 0      0      0      0      0      0      0      a2b2c2 0      0      0      0      0      0      0      0      |    {4} | 0 0 0 0 0 0 1 0 0 0 |
                   {4} | 0      0      0      0      0      0      0      0      a2b2c2 0      0      0      0      0      0      0      |    {4} | 0 0 0 0 0 0 0 1 0 0 |
                   {4} | 0      0      0      0      0      0      0      0      0      a2b2c2 0      0      0      0      0      0      |    {4} | 0 0 0 0 0 0 0 0 1 0 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      a2b2c2 0      0      0      0      0      |    {4} | 0 0 0 0 0 0 0 0 0 1 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      0      a2b2c2 0      0      0      0      |    {7} | 0 0 0 0 0 0 0 0 0 0 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      0      0      a2b2c2 0      0      0      |    {7} | 0 0 0 0 0 0 0 0 0 0 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      0      0      0      a2b2c2 0      0      |    {7} | 0 0 0 0 0 0 0 0 0 0 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      0      0      0      0      a2b2c2 0      |    {7} | 0 0 0 0 0 0 0 0 0 0 |
                   {7} | 0      0      0      0      0      0      0      0      0      0      0      0      0      0      0      a2b2c2 |    {7} | 0 0 0 0 0 0 0 0 0 0 |
                                                                                                                                              {7} | 0 0 0 0 0 0 0 0 0 0 |

o14 : ChainComplexMap

There are also some auxiliary commands associated with DGAlgebraMaps

i15 : source phi

o15 = {Ring => R                                  }
       Underlying algebra => R[T ..T ]
                                1   6
                                  2     2     2
       Differential => {a, b, c, a T , b T , c T }
                                    1     2     3

o15 : DGAlgebra
i16 : target phi

o16 = {Ring => S                                                                                                                              }
       Underlying algebra => S[T ..T  ]
                                1   16
                                  2     2     2       2 2     2 2      2 2      2 2     2 2        2 2       2 2        2       2       2
       Differential => {a, b, c, a T , b T , c T , a*b c T , b c T , -a b T , -a c T , b c T T , -a c T T , b c T T , -a T T , c T T , b T T }
                                    1     2     3         1       4        6        5       3 4        3 5       2 4      1 7     3 7     2 7

o16 : DGAlgebra

One can also obtain the map on homology induced by a DGAlgebra map.

i17 : HHg = HH g
Finding easy relations           :      -- used 0.01652 seconds

                          ZZ
                         ---[a..c]
            ZZ           101
o17 = map (---[X ..X ], ----------[X ], {X , 0, 0, 0})
           101  1   2           3   1     1
                        (c, b, a )

                                 ZZ
                                ---[a..c]
               ZZ               101
o17 : RingMap ---[X ..X ] <--- ----------[X ]
              101  1   2               3   1
                               (c, b, a )
i18 : matrix HHg

o18 = | X_1 0 0 0 |

               ZZ         1        ZZ         4
o18 : Matrix (---[X ..X ])  <--- (---[X ..X ])
              101  1   2          101  1   2