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 #

• CategoryTheory.GrothendieckTopology.close: Sends a sieve S on X to the set of arrows which it covers. This has all the usual properties of a closure operator, as well as commuting with pullback.
• CategoryTheory.GrothendieckTopology.closureOperator: The bundled ClosureOperator given by CategoryTheory.GrothendieckTopology.close.
• CategoryTheory.GrothendieckTopology.IsClosed: A sieve S on X is closed for the topology J if it contains every arrow it covers.
• CategoryTheory.Functor.closedSieves: The presheaf sending X to the collection of J-closed sieves on X. This is additionally shown to be a sheaf for J, and if this is a sheaf for a different topology J', then J' ≤ J.
• CategoryTheory.topologyOfClosureOperator: A closure operator on the set of sieves on every object which commutes with pullback additionally induces a Grothendieck topology, giving a bijection with CategoryTheory.GrothendieckTopology.closureOperator.

Tags #

closed sieve, closure, Grothendieck topology

References #

@[simp]
theorem CategoryTheory.GrothendieckTopology.close_apply {C : Type u} {X : C} (S : ) :
∀ (x : C) (f : x X), (J₁.close S).arrows f = J₁.Covers S f
def CategoryTheory.GrothendieckTopology.close {C : Type u} {X : C} (S : ) :

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 := }
Instances For
theorem CategoryTheory.GrothendieckTopology.le_close {C : Type u} {X : C} (S : ) :
S J₁.close S

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
• J₁.IsClosed S = ∀ ⦃Y : C⦄ (f : Y X), J₁.Covers S fS.arrows f
Instances For
theorem CategoryTheory.GrothendieckTopology.covers_iff_mem_of_isClosed {C : Type u} {X : C} {S : } (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} {X : C} {Y : C} (f : Y X) (S : ) :
J₁.IsClosed SJ₁.IsClosed

Being J-closed is stable under pullback.

theorem CategoryTheory.GrothendieckTopology.le_close_of_isClosed {C : Type u} {X : C} {S : } {T : } (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").

theorem CategoryTheory.GrothendieckTopology.close_isClosed {C : Type u} {X : C} (S : ) :
J₁.IsClosed (J₁.close S)

The closure of a sieve is closed.

@[simp]
theorem CategoryTheory.GrothendieckTopology.closureOperator_isClosed {C : Type u} (X : C) (S : ) :
(J₁.closureOperator X).IsClosed S = J₁.IsClosed S

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

Equations
Instances For
theorem CategoryTheory.GrothendieckTopology.isClosed_iff_close_eq_self {C : Type u} {X : C} (S : ) :
J₁.IsClosed S J₁.close S = S

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

theorem CategoryTheory.GrothendieckTopology.close_eq_self_of_isClosed {C : Type u} {X : C} {S : } (hS : J₁.IsClosed S) :
J₁.close S = S
theorem CategoryTheory.GrothendieckTopology.pullback_close {C : Type u} {X : C} {Y : C} (f : Y X) (S : ) :
J₁.close = CategoryTheory.Sieve.pullback f (J₁.close S)

Closing under J is stable under pullback.

@[simp]
theorem CategoryTheory.GrothendieckTopology.close_close {C : Type u} {X : C} (S : ) :
J₁.close (J₁.close S) = J₁.close S
theorem CategoryTheory.GrothendieckTopology.close_eq_top_iff_mem {C : Type u} {X : C} (S : ) :
J₁.close S = S J₁.sieves X

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

@[simp]
theorem CategoryTheory.Functor.closedSieves_map_coe {C : Type u} :
∀ {X Y : Cᵒᵖ} (f : X Y) (S : { S : // J₁.IsClosed S }), (.map f S) = CategoryTheory.Sieve.pullback f.unop S
@[simp]
theorem CategoryTheory.Functor.closedSieves_obj {C : Type u} (X : Cᵒᵖ) :
.obj X = { S : // J₁.IsClosed S }

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.
Instances For

The presheaf of J-closed sieves is a J-sheaf. The proof of this is adapted from [MLM92], 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} :
J₁ = J₂ ∀ (P : CategoryTheory.Functor Cᵒᵖ (Type (max v u))),

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

@[simp]
theorem CategoryTheory.topologyOfClosureOperator_sieves {C : Type u} (c : (X : C) → ) (hc : ∀ ⦃X Y : C⦄ (f : Y X) (S : ), (c Y) = CategoryTheory.Sieve.pullback f ((c X) S)) (X : C) :
.sieves X = {S : | (c X) S = }
def CategoryTheory.topologyOfClosureOperator {C : Type u} (c : (X : C) → ) (hc : ∀ ⦃X Y : C⦄ (f : Y X) (S : ), (c Y) = CategoryTheory.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
• = { sieves := fun (X : C) => {S : | (c X) S = }, top_mem' := , pullback_stable' := , transitive' := }
Instances For

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} (c : (X : C) → ) (pb : ∀ ⦃X Y : C⦄ (f : Y X) (S : ), (c Y) = CategoryTheory.Sieve.pullback f ((c X) S)) (X : C) (S : ) :
.close S = (c X) S