Any sheaf on P1 is the direct sum of line bundles-- and cyclic skyscraper sheaves represented by modules of the form k[x,y]/(l^{m}) where l is an kirreducible homogeneous polynomial and m is a non-negative integer. The routine "analyze" computes the twists and the annihilators l^{m} that appear in the decomposition, starting from a coherent sheaf on P1 or a graded module over a polynomial ring on 2 variables.

i1 : k = ZZ/5 o1 = k o1 : QuotientRing |

i2 : S = k[a,b] o2 = S o2 : PolynomialRing |

i3 : M = S^1/ideal(a^3)++S^{-1}/(ideal b^2)++S^1/(ideal b^2)++ S^{-1,1} o3 = cokernel {0} | a3 0 0 | {1} | 0 b2 0 | {0} | 0 0 b2 | {1} | 0 0 0 | {-1} | 0 0 0 | 5 o3 : S-module, quotient of S |

i4 : L = analyze M; |

i5 : twists = L_0 o5 = {1, -1} o5 : List |

i6 : anns = L_1 3 2 2 o6 = {-2a , b , b } o6 : List |

i7 : analyze sheaf M 3 2 2 o7 = {{1, -1}, {a , b , b }, {1} | 0 0 0 1 0 |, | a3 0 0 |} {-1} | 0 0 0 0 1 | | 0 b2 0 | | 0 0 b2 | o7 : List |

The script uses a linear nonzerodivisor, which would not exist over a finite field in the case where every point of P1 is the support of one of the skyscraper components.

- Functions and commands
- analyze -- Compute the decomposition of a sheaf on P1
- doubleDualMap -- map from a module to its double dual
- isNZD -- tests whether a ring element is a non zerodivisor on a module
- killH0 -- removes 0-dimensional torsion
- showSheafOnP1 -- Prints the analysis of a sheaf on P1