Finite global presentations give finitely presented sheaves #
SheafOfModules.Presentation.quasicoherentData turns a global presentation into quasicoherent
data on the trivial cover. This file records that the data is finite when the presentation
is, and hence that a sheaf of modules with a finite global presentation is of finite
presentation.
Together with presentationOfIsCokernelFree, this is what concrete constructions need:
anything exhibited as the cokernel of a map between finitely generated free sheaves is of
finite presentation, hence coherent on a locally noetherian scheme.
The one non-obvious step #
Presentation.isFinite_map is stated for a functor into sheaves of modules over a second
sheaf of rings S on a second site J'. Applying it here without pinning S leaves J' a
metavariable, and Lean then tries to synthesise HasSheafify J' AddCommGrpCat against that
metavariable and fails outright rather than postponing. Supplying (S := R.over x) makes J'
ground and everything resolves.
The failure this produces is thoroughly misleading: it reports a missing
HasSheafify (J.over x) AddCommGrpCat even though [∀ X, HasSheafify (J.over X) AddCommGrpCat]
is in scope and prints identically under pp.universes. It is not a universe problem, not a
variable-inclusion problem, and not a limitation on ∀-quantified instance hypotheses —
those all check out in isolation.
Main results #
Destined for Mathlib/Algebra/Category/ModuleCat/Sheaf/Quasicoherent.lean.
Note for callers #
Applying of_presentation at a concrete presentation is fiddlier than it looks, and the
symptom is always a universe defaulted to 0. Both this theorem and Mathlib's
Presentation.IsFinite carry universe parameters that a goal phrased in other terms — say
Scheme.Modules.IsCoherent … — does not pin, and Lean then elaborates them at .{0, 0, 0}
and reports a type mismatch at Type 1 rather than an ambiguity. (M := …) does not fix it,
because the universes bind before M; Presentation.IsFinite.{u, u, u} does. Expect to
annotate.
Quasicoherent data built from a finite global presentation is finite.
quasicoherentData covers by the terminal object alone and sets each local presentation to
P.map (pushforward (𝟙 _)) _, so this is Presentation.isFinite_map.
A sheaf of modules with a finite global presentation is of finite presentation.