EDIT: As the article was put on hold, because it was unclear what I am asking, here I put again my two questions:

1) Is the argument I used to derive the algorithm valid?

The second question is a bit vague and not of the same importance:

2) How do you consider its usefulness as an extension to existing algorithms where A=k is a field?


In 2015 I was thinking on the problem of explicitly computing the cohomology group $H^i(X,\mathcal{F})$ where $X = \mathbb{P}^n_A$ is a projective space over a noetherian computable ring $A$, that is not necessary a field and $\mathcal{F}$ is a coherent sheaf on $X$.

I found a solution that used only the known values of $H^i(\mathbb{P}^n_A, \mathcal{O}_{\mathbb{P}^n}(d))$ to justify the calculation.

As I could not find the argument given below in the literature I would be happy to get some comments on its correctness and the value of the algorithm that I derived from it:

The sheaf $\mathcal{F}$ is given as $\tilde{M}$ for a finitely presented module $M$ over the graded coordinate ring $S=A[x_0..x_n]$ of $X$.

I used a very simple approach using the fact, that $\mathcal{F} = \tilde{M_{\geqslant d}}$ and $M_{\geqslant d} = M_d \oplus M_{d+1} \oplus \cdots$ can be resolved by a resolution

$$ (*) \cdots \to F_i \to F_{i-1} \to \cdots \to F_0 \to M \to 0 $$

where $F_i = \bigoplus_j S(-d_{ij})$ with $d_{ij} > 0$.

Now I read the long exact sequence of cohomology of coherent sheafs over $\mathbb{P}^n_A$ backwards to conclude that

$$ \mathcal{F} \mapsto H^n(X,\mathcal{F}) $$

is a right exact covariant functor with $H^{n-i}(X,\mathcal{F})$ ($i > 0$) as $i$-th satellite functor, all together forming an effaceable $\delta$-functor.

Effaceable it is, by starting with $\mathcal{F} = \tilde{M}$ and choosing a surjection of $S$-modules $N = \bigoplus_j S(-d_j) \to M \to 0$ and considering $\tilde{N} \to \tilde{M} \to 0$ as the effacement.

So I can compute $H^{n-i}(X,\mathcal{F})$ by applying $H^n(X,-)$ on the (for $H^{n-i}(X,-)$) acyclic resolution (*) and taking cohomology.

I get

$$ H^{n-p}(X,\tilde{M}) = h_p(H^n(X,\tilde{F_\bullet})) $$

But $H^n(X,\tilde{F_i})$ is, by simple duality for projective space, equal to $$ \mathrm{Hom}_A(\mathrm{Hom}_S(F_i,S(-n-1))_0,A) $$

so I take with Macaulay 2 simply

transpose basis(0, Hom(F_.,S(-n-1)))

(the actual command is a bit more complicated) and get a complex of free $A$-modules whose homology computes the $H^{n-i}(X,\tilde{M})$.

I had to overcome some technical obstacles in implementing this in Macaulay 2, but can now for two running examples compute correct values for the cohomology nearly automatically (I just need to enter the initial d in truncate(d, M) by hand).

The code for the full procedure is:

-- compute the H^i(proj S, moM~) for S=A[x_1,...,x_n]

compCohX = (moM, d) ->
S := ring moM;
A := coefficientRing S;
n := numgens S;
moMt := truncate(d, moM);
-- the number 10 must be chosen accordingly with n
C := presX (moMt, 10);
C1 := Hom(C, S^{-n});
Dlis := {};
for i from min(C1) to max (C1) do
    Dlis = prepend( transpose lift(matrix basis(0, C1.dd_(i)), A), Dlis);
D:= chainComplex(Dlis);
D, C, prune HH(D)

-- compute a free resolution of moM with S(-d_{i,1}) + .. + S(-d_{i,j_i}) terms

presX = (moM, k) ->
moN := moM;
philis := {};
moN = prune moN;
i := 0;
phi := presentation moN;
degs := degrees target phi;
print degs;
philis = append(philis, phi);
moN = ker phi;
while (((prune moN) != 0) and (i <= k)) do
    phi = presentation moN;
    psi := gens moN;
    philis = append(philis, psi);
    philis = append(philis, phi);
    moN = ker phi;
    i = i + 1;  
D := chainComplex(philis);
return D;