Macaulay2 » Documentation
Packages » DGAlgebras :: displayBlockDiff
next | previous | forward | backward | up | index | toc

displayBlockDiff -- Shows natural decomposition of a map in the Tate resolution

Synopsis

Description

For example, consider the first five steps in the resolution of the residue field in the following example:

i1 : R = QQ[x,y,z]/(ideal(x^3,y^3,z^3,x*y*z))

o1 = R

o1 : QuotientRing
i2 : G = betti res (coker vars R, LengthLimit => 5)

            0 1 2  3  4  5
o2 = total: 1 3 7 16 37 86
         0: 1 3 3  1  .  .
         1: . . 4 12 12  4
         2: . . .  3 22 48
         3: . . .  .  3 33
         4: . . .  .  .  1

o2 : BettiTally

It is a free graded-commutative divided power algebra on generator of each degree starting with 1. We can compute the beginning of the complex corresponding to the first 3 factors with as

i3 : A = acyclicClosure(R,EndDegree => 2)

o3 = {Ring => R                                                                }
      Underlying algebra => R[T ..T  ]
                               1   10
                                         2     2     2     2
      Differential => {x, y, z, y*z*T , x T , y T , z T , z T , y*z*T , x*z*T }
                                     1     1     2     3     4       5       6

o3 : DGAlgebra
i4 : F = toComplex(A, 5);
i5 : betti F

            0 1 2  3  4  5
o5 = total: 1 3 7 16 31 55
         0: 1 3 3  1  .  .
         1: . . 4 12 12  4
         2: . . .  3 19 39
         3: . . .  .  . 12

o5 : BettiTally
i6 : betti F

            0 1 2  3  4  5
o6 = total: 1 3 7 16 31 55
         0: 1 3 3  1  .  .
         1: . . 4 12 12  4
         2: . . .  3 19 39
         3: . . .  .  . 12

o6 : BettiTally

Since we gave acyclicClosure the EndDegree 2, the complex produced is exact up to step 2; that is betti F and betti G agree up to the column 3. There are 3 chunks of generators in A, of homological degrees 1,2,3.

From the betti table of F we see the three generators of the exterior algebra K as the linear part of the resolution. The second strand, 4,12,12,4 is the tensor product of K with the 4 generators of A that have homological degree 2 and correspond to the 4 generators of I; thus they have internal degree 3. We also see that A has three generators in homological degree 3 and internal degree 5. K multiplied by these generators accounts for 3,9,9 of the 3rd strand, while the symmetric square of the 4 generators of homological degree 2, account for 0,10,0 and the product of these with the generators of degree 1 account for the remaining 0,0,30. Finally the 12 in the 4th row represents the product of the 4 generators of A in homological degree with the 3 in degree 3.

The native display of the differentials of this complex does not distinguish these pieces, but displayBlockDiff allows one to look at them in various ways:

i7 : F.dd_3

o7 = {2} | z  0 yz 0  0 x2 0  -y2 0 0  0   0   0 0  0  0  |
     {2} | -y 0 0  yz 0 0  x2 0   0 0  -z2 0   0 0  0  0  |
     {2} | x  0 0  0  0 0  0  0   0 y2 0   -z2 0 0  0  0  |
     {3} | 0  x y  z  0 0  0  0   0 0  0   0   0 z2 0  0  |
     {3} | 0  0 0  0  x y  z  0   0 0  0   0   0 0  yz 0  |
     {3} | 0  0 0  0  0 0  0  x   y z  0   0   0 0  0  xz |
     {3} | 0  0 0  0  0 0  0  0   0 0  x   y   z 0  0  0  |

             7      16
o7 : Matrix R  <-- R
i8 : displayBlockDiff(A,3)

     +---------+----------------+------------------------------------------+----------+
o8 = |    .    |    {0, 0, 3}   |                 {1, 2, 0}                | {3, 0, 0}|
     +---------+----------------+------------------------------------------+----------+
     |{0, 2, 0}|{3} | z2 0  0  ||      {3} | x 0 0 0 y 0 0 0 z 0 0 0 |     |     0    |
     |         |{3} | 0  yz 0  ||      {3} | 0 x 0 0 0 y 0 0 0 z 0 0 |     |          |
     |         |{3} | 0  0  xz ||      {3} | 0 0 x 0 0 0 y 0 0 0 z 0 |     |          |
     |         |{3} | 0  0  0  ||      {3} | 0 0 0 x 0 0 0 y 0 0 0 z |     |          |
     +---------+----------------+------------------------------------------+----------+
     |{2, 0, 0}|        0       |{2} | 0 0 -y2 0   yz x2 0 0   0  0  0  0 ||{2} | z  ||
     |         |                |{2} | 0 0 0   -z2 0  0  0 0   yz x2 0  0 ||{2} | -y ||
     |         |                |{2} | 0 0 0   0   0  0  0 -z2 0  0  y2 0 ||{2} | x  ||
     +---------+----------------+------------------------------------------+----------+

Here the triples of numbers represent the number of factors from the generators of each of the three chunks of variables: the first index gives the number from the Koszul complex, the second from the 4 variable in homological degree 2 and the third the number from the 3 variables of homological degree 3. Thus the sum of the three indices is the homological degree. The sources of the blocks are listed on the top row, the targets are given by the columns. We can see the lists of indices of the source and target with Example indices source blockDiff(A,5) indices target blockDiff(A,5)

We can extract one or several blocks from F.dd_3 as follows:

i9 : R = QQ[x,y,z]/(ideal(x^3,y^3,z^3,x*y*z))

o9 = R

o9 : QuotientRing
i10 : A = acyclicClosure(R,EndDegree => 2)

o10 = {Ring => R                                                                }
       Underlying algebra => R[T ..T  ]
                                1   10
                                          2     2     2     2
       Differential => {x, y, z, y*z*T , x T , y T , z T , z T , y*z*T , x*z*T }
                                      1     1     2     3     4       5       6

o10 : DGAlgebra

We can specify a lists of source and target degrees, either as lists representing an index for th source and an index for the target:

i11 : displayBlockDiff(A,  {0,2,3}, {0,4,0})

o11 = {6} | z2 0  0  0  0  0  0  0  0  0  0  0  |
      {6} | 0  yz 0  z2 0  0  0  0  0  0  0  0  |
      {6} | 0  0  xz 0  0  0  z2 0  0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  z2 0  0  |
      {6} | 0  0  0  0  yz 0  0  0  0  0  0  0  |
      {6} | 0  0  0  0  0  xz 0  yz 0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  yz 0  |
      {6} | 0  0  0  0  0  0  0  0  xz 0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  0  xz |
      {6} | 0  0  0  0  0  0  0  0  0  0  0  0  |

              10      12
o11 : Matrix R   <-- R

or as a pair of arrays of such lists

i12 : displayBlockDiff(A,  [{0,2,3}], [{1,0,3},{0,4,0}])

o12 = {6} | yz 0  0  x2 0  0  0  0  0  0  0  0  |
      {6} | 0  yz 0  0  x2 0  0  0  0  0  0  0  |
      {6} | 0  0  yz 0  0  x2 0  0  0  0  0  0  |
      {6} | 0  0  0  0  0  0  y2 0  0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  y2 0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  y2 0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  z2 0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  z2 0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  0  z2 |
      {6} | z2 0  0  0  0  0  0  0  0  0  0  0  |
      {6} | 0  yz 0  z2 0  0  0  0  0  0  0  0  |
      {6} | 0  0  xz 0  0  0  z2 0  0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  z2 0  0  |
      {6} | 0  0  0  0  yz 0  0  0  0  0  0  0  |
      {6} | 0  0  0  0  0  xz 0  yz 0  0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  yz 0  |
      {6} | 0  0  0  0  0  0  0  0  xz 0  0  0  |
      {6} | 0  0  0  0  0  0  0  0  0  0  0  xz |
      {6} | 0  0  0  0  0  0  0  0  0  0  0  0  |

              19      12
o12 : Matrix R   <-- R

or look at all the blocks with a given target summand with:

i13 : displayBlockDiff(A,  (1,0,3) )

o13 = {6} | yz 0  0  x2 0  0  0  0  0  0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  yz 0  0  x2 0  0  0  0  0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  yz 0  0  x2 0  0  0  0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  y2 0  0  0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  0  y2 0  0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  0  0  y2 0  0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  0  0  0  z2 0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  0  0  0  0  z2 0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      {6} | 0  0  0  0  0  0  0  0  0  0  0  z2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      -----------------------------------------------------------------------
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -y 0  0  -z 0  0  0  0  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  -y 0  0  -z 0  0  0  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  -y 0  0  -z 0  0  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x  0  0  0  0  0  -z 0  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  x  0  0  0  0  0  -z 0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  x  0  0  0  0  0  -z 0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  0  x  0  0  y  0  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  0  0  x  0  0  y  0  0 0 0 0 |
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  0  0  0  x  0  0  y  0 0 0 0 |

              9      55
o13 : Matrix R  <-- R

See also

Ways to use displayBlockDiff:

For the programmer

The object displayBlockDiff is a method function.