The following functions provide an interface to conveniently extract the basic data
from a coherent sheaf.
Computes and returns the maximal module Mmax giving sheaf S. The nth
graded piece of
this is equal to the global sections of the Serre twist S(n) as a finite
dimensional vector space over k, the base field of the scheme X of S. Thus
Mmax isomorphic to direct-sum n ∈Z H0(X, S(n)) as in [Har77]. Here, it
is implicitly assumed that the exact support of S on X has no irreducible
components of dimension 0 and that there are no embedded associated prime places
of dimension 0. More concretely, if M is a defining module for S with a
possible non-zero finite torsion module for the redundant maximal ideal having
been divided out, then no (homogeneous) associated prime of M has dimension
1. This assumption means that the terms in the above direct sum are 0 for
n ll 0 or equivalently that Mmax is a finitely-generated module.
As mentioned in the introduction, a further assumption, which isn't checked,
for the computation of Mmax is that S is equidimensional, so that M
actually has no embedded associated primes and the irreducible components of
its exact support have the same dimension (> 0). It may be possible to
avoid this assumption with more complex (and computationally heavy) code
that works with an equidimensional decomposition of the defining module, but
it suffices for many cases of interest (eg, sheaves with trivial annihilator
on a variety or equidimensional scheme).
The method used is basically the computation of the double dual of the defining
module over an appropriate polynomial algebra A. One way would be to take A as
the exact "supporting" algebra k[x0, ..., xn]/I where the polynomial
ring is the coordinate ring of the ambient of X and I is the exact annihilator
of M. This would involve stronger assumptions on the support of S and the
computation of the dualising module for this A. We choose instead to work
with A as a Noether normalisation of the above A, which means that A
is a simple polynomial ring and is its own dualising module (up to a shift
in grading). M is reexpressed as a module over this A, Mmax is computed
as a module over A and then is recovered as a module over k[x0, ..., xn]
by keeping track of the multiplcation maps by the xi variables which don't
occur in A.
Mmax is stored so that it is only computed once.