Macaulay2 » Documentation
Packages » DirectSummands » directSummands
next | previous | forward | backward | up | index | toc

directSummands -- compute the direct summands of a module or coherent sheaf

Description

split a module or coherent sheaf

  • Usage:
    summands M
  • Inputs:
  • Outputs:
    • a list, containing modules or coherent sheaves which are direct summands of $M$

This function attempts to find the indecomposable summands of a module or coherent sheaf $M$. The output is a list of modules or sheaves that are direct summands of $M$. The algorithm is probabilistic, and so the output may not necessarily consist of indecomposable summands, particularly in small characteristics. The user can query whether a summand is certifiably indecomposable using isIndecomposable.

i1 : S = QQ[x,y]

o1 = S

o1 : PolynomialRing
i2 : M = coker matrix{{x,y},{x,x}}

o2 = cokernel | x y |
              | x x |

                            2
o2 : S-module, quotient of S
i3 : L = summands M

o3 = {cokernel | x |, cokernel | x-y |}

o3 : List
i4 : apply(L, isIndecomposable)

o4 = {true, true}

o4 : List
i5 : assert isIsomorphic(M, directSum L)

Note that when the input module is not homogeneous, the calculation is treated as occurring over the local ring at the origin. That is, the resulting modules will have direct summand isomorphic to M after localizing at the origin.

split prescribed summands from a module or coherent sheaf with

If a candidates summand, or list of candidates, is provided as the first argument, the algorithm will split off only summands isomorphic to these modules. This can often be much faster than a full decomposition when the user has some guess for the summands, and the remaining summands can then be found by applying summands again to the final leftover piece.

i6 : R = ZZ/3[x,y,z]/(y^2-x*z)

o6 = R

o6 : QuotientRing
i7 : M = frobeniusPushforward(1, R)

o7 = cokernel {0} | 0  0  0  0  0  0  0  0  |
              {3} | -z -y 0  0  0  0  0  0  |
              {3} | 0  0  -z -y 0  0  0  0  |
              {3} | y  x  0  0  0  0  0  0  |
              {3} | 0  0  y  x  0  0  0  0  |
              {1} | 0  0  0  0  0  0  0  0  |
              {1} | 0  0  0  0  0  0  0  0  |
              {1} | 0  0  0  0  0  0  0  0  |
              {2} | 0  0  0  0  -z -y 0  0  |
              {2} | 0  0  0  0  0  0  -z -y |
              {2} | 0  0  0  0  0  0  0  0  |
              {2} | 0  0  0  0  y  x  0  0  |
              {2} | 0  0  0  0  0  0  y  x  |

     ZZ                           /ZZ      \
     --[x..z]                     |--[x..z]|
      3                           | 3      |13
o7 : ---------module, quotient of |--------|
      2                           | 2      |
     y  - x*z                     \y  - x*z/
i8 : R1 = ring M

o8 = R1

o8 : QuotientRing
i9 : L = summands(R1^1, M) -- check for free summands only

        1                                  3
o9 = {R1 , cokernel {3} | -z -y 0  0  |, R1 , cokernel {2} | -z -y 0  0  |}
                    {3} | 0  0  -z -y |                {2} | 0  0  -z -y |
                    {3} | y  x  0  0  |                {2} | 0  0  0  0  |
                    {3} | 0  0  y  x  |                {2} | y  x  0  0  |
                                                       {2} | 0  0  y  x  |

o9 : List
i10 : summands \ select(L, not isFreeModule) -- decompose remaining pieces

                                                            1
o10 = {{cokernel {3} | -z -y |, cokernel {3} | -z -y |}, {R1 , cokernel {2} |
                 {3} | y  x  |           {3} | y  x  |                  {2} |
      -----------------------------------------------------------------------
      -z -y |, cokernel {2} | -z -y |}}
      y  x  |           {2} | y  x  |

o10 : List

See also

Ways to use directSummands:

  • directSummands(List,Module)
  • directSummands(Module)
  • directSummands(Module,Module)

For the programmer

The object directSummands is a method function with options.


The source of this document is in DirectSummands/docs.m2:680:0.