Documentation

Mathlib.CategoryTheory.Sites.Closed

Closed sieves #

A natural closure operator on sieves is a closure operator on Sieve X for each X which commutes with pullback. We show that a Grothendieck topology J induces a natural closure operator, and define what the closed sieves are. The collection of J-closed sieves forms a presheaf which is a sheaf for J, and further this presheaf can be used to determine the Grothendieck topology from the sheaf predicate. Finally we show that a natural closure operator on sieves induces a Grothendieck topology, and hence that natural closure operators are in bijection with Grothendieck topologies.

Main definitions #

Tags #

closed sieve, closure, Grothendieck topology

References #

The J-closure of a sieve is the collection of arrows which it covers.

Equations
  • J₁.close S = { arrows := fun (x : C) (f : x X) => J₁.Covers S f, downward_closed := }
@[simp]
theorem CategoryTheory.GrothendieckTopology.close_apply {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X : C} (S : Sieve X) (x✝ : C) (f : x✝ X) :
(J₁.close S).arrows f = J₁.Covers S f

Any sieve is smaller than its closure.

A sieve is closed for the Grothendieck topology if it contains every arrow it covers. In the case of the usual topology on a topological space, this means that the open cover contains every open set which it covers.

Note this has no relation to a closed subset of a topological space.

Equations
theorem CategoryTheory.GrothendieckTopology.covers_iff_mem_of_isClosed {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X : C} {S : Sieve X} (h : J₁.IsClosed S) {Y : C} (f : Y X) :
J₁.Covers S f S.arrows f

If S is J₁-closed, then S covers exactly the arrows it contains.

theorem CategoryTheory.GrothendieckTopology.isClosed_pullback {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X Y : C} (f : Y X) (S : Sieve X) :
J₁.IsClosed SJ₁.IsClosed (Sieve.pullback f S)

Being J-closed is stable under pullback.

theorem CategoryTheory.GrothendieckTopology.le_close_of_isClosed {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X : C} {S T : Sieve X} (h : S T) (hT : J₁.IsClosed T) :
J₁.close S T

The closure of a sieve S is the largest closed sieve which contains S (justifying the name "closure").

The closure of a sieve is closed.

A Grothendieck topology induces a natural family of closure operators on sieves.

Equations

The sieve S is closed iff its closure is equal to itself.

theorem CategoryTheory.GrothendieckTopology.pullback_close {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X Y : C} (f : Y X) (S : Sieve X) :
J₁.close (Sieve.pullback f S) = Sieve.pullback f (J₁.close S)

Closing under J is stable under pullback.

@[simp]
theorem CategoryTheory.GrothendieckTopology.close_close {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X : C} (S : Sieve X) :
J₁.close (J₁.close S) = J₁.close S

The sieve S is in the topology iff its closure is the maximal sieve. This shows that the closure operator determines the topology.

The presheaf sending each object to the set of J-closed sieves on it. This presheaf is a J-sheaf (and will turn out to be a subobject classifier for the category of J-sheaves).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.closedSieves_map_coe {C : Type u} [Category.{v, u} C] (J₁ : GrothendieckTopology C) {X✝ Y✝ : Cᵒᵖ} (f : X✝ Y✝) (S : { S : Sieve (Opposite.unop X✝) // J₁.IsClosed S }) :
((closedSieves J₁).map f S) = Sieve.pullback f.unop S

The presheaf of J-closed sieves is a J-sheaf. The proof of this is adapted from [MM92], Chapter III, Section 7, Lemma 1.

If presheaf of J₁-closed sieves is a J₂-sheaf then J₁ ≤ J₂. Note the converse is true by classifier_isSheaf and isSheaf_of_le.

theorem CategoryTheory.topology_eq_iff_same_sheaves {C : Type u} [Category.{v, u} C] {J₁ J₂ : GrothendieckTopology C} :
J₁ = J₂ ∀ (P : Functor Cᵒᵖ (Type (max v u))), Presieve.IsSheaf J₁ P Presieve.IsSheaf J₂ P

If being a sheaf for J₁ is equivalent to being a sheaf for J₂, then J₁ = J₂.

def CategoryTheory.topologyOfClosureOperator {C : Type u} [Category.{v, u} C] (c : (X : C) → ClosureOperator (Sieve X)) (hc : ∀ ⦃X Y : C⦄ (f : Y X) (S : Sieve X), (c Y) (Sieve.pullback f S) = Sieve.pullback f ((c X) S)) :

A closure (increasing, inflationary and idempotent) operation on sieves that commutes with pullback induces a Grothendieck topology. In fact, such operations are in bijection with Grothendieck topologies.

Equations
@[simp]
theorem CategoryTheory.topologyOfClosureOperator_sieves {C : Type u} [Category.{v, u} C] (c : (X : C) → ClosureOperator (Sieve X)) (hc : ∀ ⦃X Y : C⦄ (f : Y X) (S : Sieve X), (c Y) (Sieve.pullback f S) = Sieve.pullback f ((c X) S)) (X : C) :

The topology given by the closure operator J.close on a Grothendieck topology is the same as J.

theorem CategoryTheory.topologyOfClosureOperator_close {C : Type u} [Category.{v, u} C] (c : (X : C) → ClosureOperator (Sieve X)) (pb : ∀ ⦃X Y : C⦄ (f : Y X) (S : Sieve X), (c Y) (Sieve.pullback f S) = Sieve.pullback f ((c X) S)) (X : C) (S : Sieve X) :