Grothendieck topologies #
Definition and lemmas about Grothendieck topologies.
A Grothendieck topology for a category C
is a set of sieves on each object X
satisfying
certain closure conditions.
Alternate versions of the axioms (in arrow form) are also described. Two explicit examples of Grothendieck topologies are given:
- The dense topology
- The atomic topology as well as the complete lattice structure on Grothendieck topologies (which gives two additional explicit topologies: the discrete and trivial topologies.)
A pretopology, or a basis for a topology is defined in
Mathlib/CategoryTheory/Sites/Pretopology.lean
. The topology associated
to a topological space is defined in Mathlib/CategoryTheory/Sites/Spaces.lean
.
Tags #
Grothendieck topology, coverage, pretopology, site
References #
- nLab, Grothendieck topology
- [S. MacLane, I. Moerdijk, Sheaves in Geometry and Logic][MM92]
Implementation notes #
We use the definition of [nlab] and [MM92][] (Chapter III, Section 2), where Grothendieck topologies are saturated collections of morphisms, rather than the notions of the Stacks project (00VG) and the Elephant, in which topologies are allowed to be unsaturated, and are then completed. TODO (BM): Add the definition from Stacks, as a pretopology, and complete to a topology.
This is so that we can produce a bijective correspondence between Grothendieck topologies on a small category and Lawvere-Tierney topologies on its presheaf topos, as well as the equivalence between Grothendieck topoi and left exact reflective subcategories of presheaf toposes.
The definition of a Grothendieck topology: a set of sieves J X
on each object X
satisfying
three axioms:
- For every object
X
, the maximal sieve is inJ X
. - If
S ∈ J X
then its pullback along anyh : Y ⟶ X
is inJ Y
. - If
S ∈ J X
andR
is a sieve onX
, then provided that the pullback ofR
along any arrowf : Y ⟶ X
inS
is inJ Y
, we have thatR
itself is inJ X
.
A sieve S
on X
is referred to as J
-covering, (or just covering), if S ∈ J X
.
See https://stacks.math.columbia.edu/tag/00Z4, or [nlab], or [MM92][] Chapter III, Section 2, Definition 1.
- sieves : (X : C) → Set (CategoryTheory.Sieve X)
A Grothendieck topology on
C
consists of a set of sieves for each objectX
, which satisfy some axioms. The sieves associated to each object must contain the top sieve. Use
GrothendieckTopology.top_mem
.- pullback_stable' : ∀ ⦃X Y : C⦄ ⦃S : CategoryTheory.Sieve X⦄ (f : Y ⟶ X), S ∈ self.sieves X → CategoryTheory.Sieve.pullback f S ∈ self.sieves Y
Stability under pullback. Use
GrothendieckTopology.pullback_stable
. - transitive' : ∀ ⦃X : C⦄ ⦃S : CategoryTheory.Sieve X⦄, S ∈ self.sieves X → ∀ (R : CategoryTheory.Sieve X), (∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, S.arrows f → CategoryTheory.Sieve.pullback f R ∈ self.sieves Y) → R ∈ self.sieves X
Transitivity of sieves in a Grothendieck topology. Use
GrothendieckTopology.transitive
.
Instances For
Equations
- CategoryTheory.GrothendieckTopology.instDFunLikeSetSieve C = { coe := fun (J : CategoryTheory.GrothendieckTopology C) (X : C) => J.sieves X, coe_injective' := ⋯ }
An extensionality lemma in terms of the coercion to a pi-type.
We prove this explicitly rather than deriving it so that it is in terms of the coercion rather than
the projection .sieves
.
Also known as the maximality axiom.
Also known as the stability axiom.
If S
is a subset of R
, and S
is covering, then R
is covering as well.
See https://stacks.math.columbia.edu/tag/00Z5 (2), or discussion after [MM92] Chapter III, Section 2, Definition 1.
The intersection of two covering sieves is covering.
See https://stacks.math.columbia.edu/tag/00Z5 (1), or [MM92] Chapter III, Section 2, Definition 1 (iv).
The sieve S
on X
J
-covers an arrow f
to X
if S.pullback f ∈ J Y
.
This definition is an alternate way of presenting a Grothendieck topology.
Equations
- J.Covers S f = (CategoryTheory.Sieve.pullback f S ∈ J Y)
Instances For
The maximality axiom in 'arrow' form: Any arrow f
in S
is covered by S
.
The stability axiom in 'arrow' form: If S
covers f
then S
covers g ≫ f
for any g
.
The transitivity axiom in 'arrow' form: If S
covers f
and every arrow in S
is covered by
R
, then R
covers f
.
The trivial Grothendieck topology, in which only the maximal sieve is covering. This topology is also known as the indiscrete, coarse, or chaotic topology.
See [MM92] Chapter III, Section 2, example (a), or https://en.wikipedia.org/wiki/Grothendieck_topology#The_discrete_and_indiscrete_topologies
Equations
- CategoryTheory.GrothendieckTopology.trivial C = { sieves := fun (x : C) => {⊤}, top_mem' := ⋯, pullback_stable' := ⋯, transitive' := ⋯ }
Instances For
The discrete Grothendieck topology, in which every sieve is covering.
See https://en.wikipedia.org/wiki/Grothendieck_topology#The_discrete_and_indiscrete_topologies.
Equations
- CategoryTheory.GrothendieckTopology.discrete C = { sieves := fun (x : C) => Set.univ, top_mem' := ⋯, pullback_stable' := ⋯, transitive' := ⋯ }
Instances For
See https://stacks.math.columbia.edu/tag/00Z6
Equations
- CategoryTheory.GrothendieckTopology.instLEGrothendieckTopology = { le := fun (J₁ J₂ : CategoryTheory.GrothendieckTopology C) => ⇑J₁ ≤ ⇑J₂ }
See https://stacks.math.columbia.edu/tag/00Z6
Equations
- CategoryTheory.GrothendieckTopology.instPartialOrder = PartialOrder.mk ⋯
See https://stacks.math.columbia.edu/tag/00Z7
Equations
- One or more equations did not get rendered due to their size.
Construct a complete lattice from the Inf
, but make the trivial and discrete topologies
definitionally equal to the bottom and top respectively.
Equations
- One or more equations did not get rendered due to their size.
The dense Grothendieck topology.
See https://ncatlab.org/nlab/show/dense+topology, or [MM92] Chapter III, Section 2, example (e).
Equations
- One or more equations did not get rendered due to their size.
Instances For
A category satisfies the right Ore condition if any span can be completed to a commutative square.
NB. Any category with pullbacks obviously satisfies the right Ore condition, see
right_ore_of_pullbacks
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The atomic Grothendieck topology: a sieve is covering iff it is nonempty. For the pullback stability condition, we need the right Ore condition to hold.
See https://ncatlab.org/nlab/show/atomic+site, or [MM92] Chapter III, Section 2, example (f).
Equations
- One or more equations did not get rendered due to their size.
Instances For
J.Cover X
denotes the poset of covers of X
with respect to the
Grothendieck topology J
.
Equations
- J.Cover X = { S : CategoryTheory.Sieve X // S ∈ J X }
Instances For
Equations
- J.instPreorderCover X = inferInstance
Equations
- CategoryTheory.GrothendieckTopology.Cover.instCoeOutSieve = { coe := fun (S : J.Cover X) => ↑S }
Equations
- CategoryTheory.GrothendieckTopology.Cover.instCoeFunForallForallHomProp = { coe := fun (S : J.Cover X) => (↑S).arrows }
Equations
- CategoryTheory.GrothendieckTopology.Cover.instOrderTop = OrderTop.mk ⋯
Equations
- CategoryTheory.GrothendieckTopology.Cover.instSemilatticeInf = SemilatticeInf.mk (fun (S T : J.Cover X) => ⟨↑S ⊓ ↑T, ⋯⟩) ⋯ ⋯ ⋯
An auxiliary structure, used to define S.index
.
- Y : C
The source of the arrow.
- f : self.Y ⟶ X
The arrow itself.
- hf : (↑S).arrows self.f
The given arrow is contained in the given sieve.
Instances For
Relation between two elements in S.arrow
, the data of which
involves a commutative square.
- Z : C
The source of the arrows defining the relation.
- g₁ : self.Z ⟶ I₁.Y
The first arrow defining the relation.
- g₂ : self.Z ⟶ I₂.Y
The second arrow defining the relation.
- w : CategoryTheory.CategoryStruct.comp self.g₁ I₁.f = CategoryTheory.CategoryStruct.comp self.g₂ I₂.f
The relation itself.
Instances For
Given I : S.Arrow
and a morphism g : Z ⟶ I.Y
, this is the arrow in S.Arrow
corresponding to g ≫ I.f
.
Equations
- I.precomp g = { Y := Z, f := CategoryTheory.CategoryStruct.comp g I.f, hf := ⋯ }
Instances For
Given I : S.Arrow
and a morphism g : Z ⟶ I.Y
, this is the obvious relation
from I.precomp g
to I
.
Equations
- I.precompRelation g = { Z := (I.precomp g).Y, g₁ := CategoryTheory.CategoryStruct.id (I.precomp g).Y, g₂ := g, w := ⋯ }
Instances For
Map an Arrow
along a refinement S ⟶ T
.
Equations
- I.map f = { Y := I.Y, f := I.f, hf := ⋯ }
Instances For
Map an Arrow.Relation
along a refinement S ⟶ T
.
Equations
- r.map f = { Z := r.Z, g₁ := r.g₁, g₂ := r.g₂, w := ⋯ }
Instances For
Pull back a cover along a morphism.
Equations
- S.pullback f = ⟨CategoryTheory.Sieve.pullback f ↑S, ⋯⟩
Instances For
An arrow of S.pullback f
gives rise to an arrow of S
.
Equations
- I.base = { Y := I.Y, f := CategoryTheory.CategoryStruct.comp I.f f, hf := ⋯ }
Instances For
A relation of S.pullback f
gives rise to a relation of S
.
Equations
- r.base = { Z := r.Z, g₁ := r.g₁, g₂ := r.g₂, w := ⋯ }
Instances For
The isomorphism between S
and the pullback of S
w.r.t. the identity.
Equations
- S.pullbackId = CategoryTheory.eqToIso ⋯
Instances For
Pulling back with respect to a composition is the composition of the pullbacks.
Equations
- S.pullbackComp f g = CategoryTheory.eqToIso ⋯
Instances For
Combine a family of covers over a cover.
Equations
- S.bind T = ⟨CategoryTheory.Sieve.bind (↑S).arrows fun (Y : C) (f : Y ⟶ X) (hf : (↑S).arrows f) => ↑(T { Y := Y, f := f, hf := hf }), ⋯⟩
Instances For
The canonical morphism from S.bind T
to T
.
Equations
- S.bindToBase T = CategoryTheory.homOfLE ⋯
Instances For
An arrow in bind has the form A ⟶ B ⟶ X
where A ⟶ B
is an arrow in T I
for some I
.
and B ⟶ X
is an arrow of S
. This is the object B
.
Equations
- I.middle = Exists.choose ⋯
Instances For
An arrow in bind has the form A ⟶ B ⟶ X
where A ⟶ B
is an arrow in T I
for some I
.
and B ⟶ X
is an arrow of S
. This is the hom A ⟶ B
.
Equations
- I.toMiddleHom = ⋯.choose
Instances For
An arrow in bind has the form A ⟶ B ⟶ X
where A ⟶ B
is an arrow in T I
for some I
.
and B ⟶ X
is an arrow of S
. This is the hom B ⟶ X
.
Equations
- I.fromMiddleHom = ⋯.choose
Instances For
An arrow in bind has the form A ⟶ B ⟶ X
where A ⟶ B
is an arrow in T I
for some I
.
and B ⟶ X
is an arrow of S
. This is the hom B ⟶ X
, as an arrow.
Equations
- I.fromMiddle = { Y := I.middle, f := I.fromMiddleHom, hf := ⋯ }
Instances For
An arrow in bind has the form A ⟶ B ⟶ X
where A ⟶ B
is an arrow in T I
for some I
.
and B ⟶ X
is an arrow of S
. This is the hom A ⟶ B
, as an arrow.
Equations
- I.toMiddle = { Y := I.Y, f := I.toMiddleHom, hf := ⋯ }
Instances For
An auxiliary structure, used to define S.index
.
- fst : S.Arrow
The first arrow.
- snd : S.Arrow
The second arrow.
- r : self.fst.Relation self.snd
The relation between the two arrows.
Instances For
Constructor for Cover.Relation
which takes as an input
r : I₁.Relation I₂
with I₁ I₂ : S.Arrow
.
Equations
- CategoryTheory.GrothendieckTopology.Cover.Relation.mk' r = { fst := fst, snd := snd, r := r }
Instances For
To every S : J.Cover X
and presheaf P
, associate a MulticospanIndex
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The natural multifork associated to S : J.Cover X
for a presheaf P
.
Saying that this multifork is a limit is essentially equivalent to the sheaf condition at the
given object for the given covering sieve. See Sheaf.lean
for an equivalent sheaf condition
using this.
Equations
- S.multifork P = CategoryTheory.Limits.Multifork.ofι (S.index P) (P.obj (Opposite.op X)) (fun (I : (S.index P).L) => P.map I.f.op) ⋯
Instances For
The canonical map from P.obj (op X)
to the multiequalizer associated to a covering sieve,
assuming such a multiequalizer exists. This will be used in Sheaf.lean
to provide an equivalent
sheaf condition in terms of multiequalizers.
Equations
- S.toMultiequalizer P = CategoryTheory.Limits.Multiequalizer.lift (S.index P) (P.obj (Opposite.op X)) (fun (I : (S.index P).L) => P.map I.f.op) ⋯
Instances For
Pull back a cover along a morphism.
Equations
Instances For
Pulling back along the identity is naturally isomorphic to the identity functor.
Equations
- J.pullbackId X = CategoryTheory.NatIso.ofComponents (fun (S : J.Cover X) => S.pullbackId) ⋯
Instances For
Pulling back along a composition is naturally isomorphic to the composition of the pullbacks.
Equations
- J.pullbackComp f g = CategoryTheory.NatIso.ofComponents (fun (S : J.Cover Z) => S.pullbackComp f g) ⋯