Macaulay2 » Documentation
Packages » Complexes :: RingMap ** Complex
next | previous | forward | backward | up | index | toc

RingMap ** Complex -- tensor a complex along a ring map

Synopsis

Description

These methods implement the base change of rings. As input, one can either give a ring map $\phi$, or the ring $S$ (when there is a canonical map from $R$ to $S$).

We illustrate the tensor product of a complex along a ring map.

i1 : R = QQ[x,y,z];
i2 : S = QQ[s,t];
i3 : phi = map(S, R, {s, s+t, t})

o3 = map (S, R, {s, s + t, t})

o3 : RingMap S <-- R
i4 : I = ideal(x^3, x^2*y, x*y^4, y*z^5)

             3   2      4     5
o4 = ideal (x , x y, x*y , y*z )

o4 : Ideal of R
i5 : C = freeResolution I

      1      4      4      1
o5 = R  <-- R  <-- R  <-- R
                           
     0      1      2      3

o5 : Complex
i6 : D = phi ** C

      1      4      4      1
o6 = S  <-- S  <-- S  <-- S
                           
     0      1      2      3

o6 : Complex
i7 : assert isWellDefined D
i8 : dd^D

          1                                                    4
o8 = 0 : S  <------------------------------------------------ S  : 1
               | s3 s3+s2t s5+4s4t+6s3t2+4s2t3+st4 st5+t6 |

          4                                                           4
     1 : S  <------------------------------------------------------- S  : 2
               {3} | -s-t 0                0   0                 |
               {3} | s    -s3-3s2t-3st2-t3 -t5 0                 |
               {5} | 0    s                0   -t5               |
               {6} | 0    0                s2  s4+3s3t+3s2t2+st3 |

          4                                 1
     2 : S  <----------------------------- S  : 3
               {4}  | 0                |
               {6}  | t5               |
               {8}  | -s3-3s2t-3st2-t3 |
               {10} | s                |

o8 : ComplexMap
i9 : prune HH D

o9 = cokernel | s2t s3 st4 t6 | <-- cokernel {7} | s t3 |
                                     
     0                              1

o9 : Complex

If a ring is used rather than a ring map, then the implicit map from the underlying ring of the complex to the given ring is used.

i10 : A = R/(x^2+y^2+z^2);
i11 : C ** A

       1      4      4      1
o11 = A  <-- A  <-- A  <-- A
                            
      0      1      2      3

o11 : Complex
i12 : assert(map(A,R) ** C == C ** A)

The commutativity of tensor product is witnessed as follows.

i13 : assert(D == C ** phi)
i14 : assert(C ** A == A ** C)

When the modules in the complex are not free modules, this is different than the image of a complex under a ring map.

i15 : use R

o15 = R

o15 : PolynomialRing
i16 : I = ideal(x*y, x*z, y*z);

o16 : Ideal of R
i17 : J = I + ideal(x^2, y^2);

o17 : Ideal of R
i18 : g = inducedMap(module J, module I)

o18 = {2} | 1 0 0 |
      {2} | 0 1 0 |
      {2} | 0 0 1 |
      {2} | 0 0 0 |
      {2} | 0 0 0 |

o18 : Matrix
i19 : assert isWellDefined g
i20 : C = complex {g}

o20 = image | xy xz yz x2 y2 | <-- image | xy xz yz |
                                    
      0                            1

o20 : Complex
i21 : D1 = phi C

o21 = image | s2+st st st+t2 s2 s2+2st+t2 | <-- image | s2+st st st+t2 |
                                                 
      0                                         1

o21 : Complex
i22 : assert isWellDefined D1
i23 : D2 = phi ** C

o23 = image | s2+st st st+t2 s2 s2+2st+t2 | <-- image | s2+st st st+t2 |
                                                 
      0                                         1

o23 : Complex
i24 : assert isWellDefined D2
i25 : prune D1

o25 = cokernel {2} | s+t t    | <-- cokernel {2} | -t  -t |
               {2} | 0   -s-t |              {2} | s+t 0  |
               {2} | -t  s-t  |              {2} | 0   s  |
                                     
      0                             1

o25 : Complex
i26 : prune D2

o26 = cokernel {2} | s+t t    | <-- cokernel {2} | -t  -t |
               {2} | 0   -s-t |              {2} | s+t 0  |
               {2} | -t  s-t  |              {2} | 0   s  |
                                     
      0                             1

o26 : Complex

When the ring map doesn't preserve homogeneity, the DegreeMap option is needed to determine the degrees of the image free modules in the complex.

i27 : R = ZZ/101[a..d];
i28 : S = ZZ/101[s,t];
i29 : f = map(S, R, {s^4, s^3*t, s*t^3, t^4}, DegreeMap => i -> 4*i)

                   4   3      3   4
o29 = map (S, R, {s , s t, s*t , t })

o29 : RingMap S <-- R
i30 : C = freeResolution coker vars R

       1      4      6      4      1
o30 = R  <-- R  <-- R  <-- R  <-- R
                                   
      0      1      2      3      4

o30 : Complex
i31 : D = f ** C

       1      4      6      4      1
o31 = S  <-- S  <-- S  <-- S  <-- S
                                   
      0      1      2      3      4

o31 : Complex
i32 : D == f C

o32 = true
i33 : assert isWellDefined D
i34 : assert isHomogeneous D
i35 : prune HH D

o35 = cokernel | t4 st3 s3t s4 | <-- cokernel {5} | s3 0  t3 0   0  st2 | <-- cokernel {10} | s2 0 0 t2 |
                                              {5} | 0  t3 s3 s2t 0  0   |              {11} | t  s 0 0  |
      0                                       {6} | 0  0  0  t2  st s2  |              {11} | 0  0 t s  |
                                                                               
                                     1                                        2

o35 : Complex
i36 : C1 = Hom(C, image vars R)

o36 = image {-4} | d c b a | <-- image {-3} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {-2} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {-1} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image | d c b a |
                                       {-3} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 |           {-2} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |           {-1} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 |      
      -4                               {-3} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 |           {-2} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 0 0 0 0 |           {-1} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 |     0
                                       {-3} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a |           {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 |           {-1} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a |
                                                                                          {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 |      
                                 -3                                                       {-2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b a |     -1
                                                                                     
                                                                                    -2

o36 : Complex
i37 : D1 = f ** C1

o37 = image {-16} | t4 st3 s3t s4 | <-- image {-12} | t4 st3 s3t s4 0  0   0   0  0  0   0   0  0  0   0   0  | <-- image {-8} | t4 st3 s3t s4 0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  | <-- image {-4} | t4 st3 s3t s4 0  0   0   0  0  0   0   0  0  0   0   0  | <-- image | t4 st3 s3t s4 |
                                              {-12} | 0  0   0   0  t4 st3 s3t s4 0  0   0   0  0  0   0   0  |           {-8} | 0  0   0   0  t4 st3 s3t s4 0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  |           {-4} | 0  0   0   0  t4 st3 s3t s4 0  0   0   0  0  0   0   0  |      
      -4                                      {-12} | 0  0   0   0  0  0   0   0  t4 st3 s3t s4 0  0   0   0  |           {-8} | 0  0   0   0  0  0   0   0  t4 st3 s3t s4 0  0   0   0  0  0   0   0  0  0   0   0  |           {-4} | 0  0   0   0  0  0   0   0  t4 st3 s3t s4 0  0   0   0  |     0
                                              {-12} | 0  0   0   0  0  0   0   0  0  0   0   0  t4 st3 s3t s4 |           {-8} | 0  0   0   0  0  0   0   0  0  0   0   0  t4 st3 s3t s4 0  0   0   0  0  0   0   0  |           {-4} | 0  0   0   0  0  0   0   0  0  0   0   0  t4 st3 s3t s4 |
                                                                                                                          {-8} | 0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  t4 st3 s3t s4 0  0   0   0  |      
                                        -3                                                                                {-8} | 0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  0  0   0   0  t4 st3 s3t s4 |     -1
                                                                                                                     
                                                                                                                    -2

o37 : Complex
i38 : isWellDefined D1

o38 = true
i39 : assert isHomogeneous D1

See also

Ways to use this method: