Stacks in groupoids #
This file packages Mathlib's stack condition together with the additional
groupoid-valued requirement used in algebraic geometry. Covers and Čech
descent are the existing Sieve, Presieve, and Pseudofunctor.DescentData
objects: this layer does not replace them with parallel definitions.
The construction is owned by CategoryTheory/Sites: it is generic in a
category and a Grothendieck topology and imports no algebraic geometry. The
declarations use the matching CategoryTheory namespace.
StackInGroupoids deliberately contains no algebraicity, representability,
boundedness, or finiteness assertion. The only conditions are groupoid-valued
fibers and effective descent for a chosen Grothendieck topology.
A groupoid-valued pseudofunctor satisfying effective descent for J.
- presheaf : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat
The contravariant groupoid-valued pseudofunctor.
- fiberIsGroupoid (X : LocallyDiscrete Cᵒᵖ) : IsGroupoid ↑(self.presheaf.obj X)
Every fiber is a groupoid.
Objects and morphisms satisfy effective descent for
J.
Instances For
An explicitly indexed covering family for a Grothendieck topology.
- index : Type t
The indexing type of the covering family.
- obj : self.index → C
Schemes or site objects in the covering family.
The covering arrows.
The arrows generate a covering sieve.
Instances For
The category of Čech descent data for a covering family.
Equations
- F.CechDescent U = F.presheaf.DescentData U.hom
Instances For
Restrict an object and its morphisms to Čech descent data.
Equations
- F.toCechDescent U = F.presheaf.toDescentData U.hom
Instances For
The stack condition identifies a fiber with the category of Čech descent data for every covering family.
Equations
- F.cechDescentEquivalence U = (F.toCechDescent U).asEquivalence
Instances For
Morphisms satisfy descent: restriction to a cover is fully faithful.
Equations
Instances For
Objects satisfy effective descent: every Čech descent object comes from an object over the base, up to isomorphism.
Refining the Grothendieck topology #
Effective descent is antitone in the topology, and only in that direction.
Every J₁-covering sieve is a J₂-covering sieve when J₁ ≤ J₂, so a stack
for the finer topology is a stack for the coarser one. The converse is false
and nothing below asserts it: descent for a coarse topology says nothing about
the covers the finer topology adds. A consumer that needs the finer level has
to prove it there.
Effective descent for a finer topology gives effective descent for every coarser topology. This is the only implication between the two conditions; there is no reverse transport.
Restrict a stack in groupoids along J₁ ≤ J₂ to the coarser topology.
The pseudofunctor and its fibers are untouched; only the descent condition is
weakened, so this loses information and cannot be inverted.
Equations
- CategoryTheory.StackInGroupoids.ofLE h F = { presheaf := F.presheaf, fiberIsGroupoid := ⋯, isStack := ⋯ }
Instances For
A covering family for a coarser topology is a covering family for a finer one, with the same index type and the same arrows.
Equations
Instances For
Transport of the stack condition #
Descent-compatible equivalence data between two pseudofunctors.
Mathlib currently has the pseudofunctor and descent-data APIs but no general pseudonatural-equivalence API. This structure records exactly the two equivalences and comparison square needed to transport the stack condition; it does not hide them behind an unproved equivalence principle.
Equivalence on each fiber.
- descent {S : C} (R : Sieve S) : (F.DescentData fun (f : R.arrows.category) => f.obj.hom) ≌ G.DescentData fun (f : R.arrows.category) => f.obj.hom
Equivalence on descent data for every sieve.
- comparison {S : C} (R : Sieve S) : (F.toDescentData fun (f : R.arrows.category) => f.obj.hom).comp (self.descent R).functor ≅ (self.fiber S).functor.comp (G.toDescentData fun (f : R.arrows.category) => f.obj.hom)
Restriction to descent data commutes with the two equivalences.
Instances For
The stack condition is invariant under descent-compatible equivalence.
Transport a stack in groupoids across descent-compatible equivalence. The groupoid condition on the target fibers remains explicit.
Equations
- F.ofEquivalence G e hG = { presheaf := G, fiberIsGroupoid := hG, isStack := ⋯ }