Dense subsites #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We define cover_dense
functors into sites as functors such that there exists a covering sieve
that factors through images of the functor for each object in D
.
We will primarily consider cover-dense functors that are also full, since this notion is in general not well-behaved otherwise. Note that https://ncatlab.org/nlab/show/dense+sub-site indeed has a weaker notion of cover-dense that loosens this requirement, but it would not have all the properties we would need, and some sheafification would be needed for here and there.
Main results #
category_theory.cover_dense.presheaf_hom
: IfG : C ⥤ (D, K)
is full and cover-dense, then given any presheafℱ
and sheafℱ'
onD
, and a morphismα : G ⋙ ℱ ⟶ G ⋙ ℱ'
, we may glue them together to obtain a morphism of presheavesℱ ⟶ ℱ'
.category_theory.cover_dense.sheaf_iso
: Ifℱ
above is a sheaf andα
is an iso, then the result is also an iso.category_theory.cover_dense.iso_of_restrict_iso
: IfG : C ⥤ (D, K)
is full and cover-dense, then given any sheavesℱ, ℱ'
onD
, and a morphismα : ℱ ⟶ ℱ'
, thenα
is an iso ifG ⋙ ℱ ⟶ G ⋙ ℱ'
is iso.category_theory.cover_dense.Sheaf_equiv_of_cover_preserving_cover_lifting
: IfG : (C, J) ⥤ (D, K)
is fully-faithful, cover-lifting, cover-preserving, and cover-dense, then it will induce an equivalence of categories of sheaves valued in a complete category.
References #
- [Joh02]: Sketches of an Elephant, ℱ. T. Johnstone: C2.2.
- https://ncatlab.org/nlab/show/dense+sub-site
- https://ncatlab.org/nlab/show/comparison+lemma
- obj : C
- lift : V ⟶ G.obj self.obj
- map : G.obj self.obj ⟶ U
- fac' : self.lift ≫ self.map = f . "obviously"
An auxiliary structure that witnesses the fact that f
factors through an image object of G
.
Instances for category_theory.presieve.cover_by_image_structure
- category_theory.presieve.cover_by_image_structure.has_sizeof_inst
For a functor G : C ⥤ D
, and an object U : D
, presieve.cover_by_image G U
is the presieve
of U
consisting of those arrows that factor through images of G
.
Equations
- category_theory.presieve.cover_by_image G U = λ (Y : D) (f : Y ⟶ U), nonempty (category_theory.presieve.cover_by_image_structure G f)
For a functor G : C ⥤ D
, and an object U : D
, sieve.cover_by_image G U
is the sieve of U
consisting of those arrows that factor through images of G
.
Equations
- is_cover : ∀ (U : D), category_theory.sieve.cover_by_image G U ∈ ⇑K U
A functor G : (C, J) ⥤ (D, K)
is called cover_dense
if for each object in D
,
there exists a covering sieve in D
that factors through images of G
.
This definition can be found in https://ncatlab.org/nlab/show/dense+sub-site Definition 2.2.
(Implementation). Given an hom between the pullbacks of two sheaves, we can whisker it with
coyoneda
to obtain an hom between the pullbacks of the sheaves of maps from X
.
Equations
(Implementation). Given an iso between the pullbacks of two sheaves, we can whisker it with
coyoneda
to obtain an iso between the pullbacks of the sheaves of maps from X
.
Equations
(Implementation). Given a section of ℱ
on X
, we can obtain a family of elements valued in ℱ'
that is defined on a cover generated by the images of G
.
Equations
- category_theory.cover_dense.types.pushforward_family α x = λ (Y : D) (f : Y ⟶ X) (hf : category_theory.presieve.cover_by_image G X f), ℱ'.val.map (nonempty.some hf).lift.op (α.app (opposite.op (nonempty.some hf).obj) (ℱ.map (nonempty.some hf).map.op x))
(Implementation). The pushforward_family
defined is compatible.
(Implementation). The morphism ℱ(X) ⟶ ℱ'(X)
given by gluing the pushforward_family
.
Equations
- category_theory.cover_dense.types.app_hom H α X = λ (x : ℱ.obj (opposite.op X)), _.amalgamate (category_theory.cover_dense.types.pushforward_family α x) _
(Implementation). The maps given in app_iso
is inverse to each other and gives a ℱ(X) ≅ ℱ'(X)
.
Equations
- category_theory.cover_dense.types.app_iso H i X = {hom := category_theory.cover_dense.types.app_hom H i.hom X, inv := category_theory.cover_dense.types.app_hom H i.inv X, hom_inv_id' := _, inv_hom_id' := _}
Given an natural transformation G ⋙ ℱ ⟶ G ⋙ ℱ'
between presheaves of types, where G
is full
and cover-dense, and ℱ'
is a sheaf, we may obtain a natural transformation between sheaves.
Equations
- category_theory.cover_dense.types.presheaf_hom H α = {app := λ (X : Dᵒᵖ), category_theory.cover_dense.types.app_hom H α (opposite.unop X), naturality' := _}
Given an natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ'
between presheaves of types, where G
is full and
cover-dense, and ℱ, ℱ'
are sheaves, we may obtain a natural isomorphism between presheaves.
Equations
Given an natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ'
between presheaves of types, where G
is full and
cover-dense, and ℱ, ℱ'
are sheaves, we may obtain a natural isomorphism between sheaves.
Equations
- category_theory.cover_dense.types.sheaf_iso H i = {hom := {val := (category_theory.cover_dense.types.presheaf_iso H i).hom}, inv := {val := (category_theory.cover_dense.types.presheaf_iso H i).inv}, hom_inv_id' := _, inv_hom_id' := _}
(Implementation). The sheaf map given in types.sheaf_hom
is natural in terms of X
.
Equations
- H.sheaf_coyoneda_hom α = {app := λ (X : Aᵒᵖ), category_theory.cover_dense.types.presheaf_hom H (category_theory.cover_dense.hom_over α (opposite.unop X)), naturality' := _}
(Implementation). sheaf_coyoneda_hom
but the order of the arguments of the functor are swapped.
Equations
- H.sheaf_yoneda_hom α = let α_1 : category_theory.coyoneda ⋙ (category_theory.whiskering_left Dᵒᵖ A (Type u_8)).obj ℱ ⟶ category_theory.coyoneda ⋙ (category_theory.whiskering_left Dᵒᵖ A (Type u_8)).obj ℱ'.val := H.sheaf_coyoneda_hom α in {app := λ (U : Dᵒᵖ), {app := λ (X : Aᵒᵖ), (α_1.app X).app U, naturality' := _}, naturality' := _}
Given an natural transformation G ⋙ ℱ ⟶ G ⋙ ℱ'
between presheaves of arbitrary category,
where G
is full and cover-dense, and ℱ'
is a sheaf, we may obtain a natural transformation
between presheaves.
Equations
- H.sheaf_hom α = let α' : ℱ ⋙ category_theory.yoneda ⟶ ℱ'.val ⋙ category_theory.yoneda := H.sheaf_yoneda_hom α in {app := λ (X : Dᵒᵖ), category_theory.yoneda.preimage (α'.app X), naturality' := _}
Given an natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ'
between presheaves of arbitrary category,
where G
is full and cover-dense, and ℱ', ℱ
are sheaves,
we may obtain a natural isomorphism between presheaves.
Equations
- H.presheaf_iso i = category_theory.as_iso (H.sheaf_hom i.hom)
Given an natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ'
between presheaves of arbitrary category,
where G
is full and cover-dense, and ℱ', ℱ
are sheaves,
we may obtain a natural isomorphism between presheaves.
Equations
- H.sheaf_iso i = {hom := {val := (H.presheaf_iso i).hom}, inv := {val := (H.presheaf_iso i).inv}, hom_inv_id' := _, inv_hom_id' := _}
The constructed sheaf_hom α
is equal to α
when restricted onto C
.
If the pullback map is obtained via whiskering,
then the result sheaf_hom (whisker_left G.op α)
is equal to α
.
A full and cover-dense functor G
induces an equivalence between morphisms into a sheaf and
morphisms over the restrictions via G
.
Given a full and cover-dense functor G
and a natural transformation of sheaves α : ℱ ⟶ ℱ'
,
if the pullback of α
along G
is iso, then α
is also iso.
A fully faithful cover-dense functor preserves compatible families.
Equations
- category_theory.cover_dense.sites.pullback.full J H Hp = {preimage := λ (ℱ ℱ' : category_theory.Sheaf K A) (α : (category_theory.sites.pullback A _ Hp).obj ℱ ⟶ (category_theory.sites.pullback A _ Hp).obj ℱ'), {val := H.sheaf_hom α.val}, witness' := _}
Given a functor between small sites that is cover-dense, cover-preserving, and cover-lifting, it induces an equivalence of category of sheaves valued in a complete category.
Equations
- Hd.Sheaf_equiv_of_cover_preserving_cover_lifting Hp Hl = (let α : category_theory.sites.pullback A _ Hp ⊣ category_theory.sites.copullback A Hl := category_theory.sites.pullback_copullback_adjunction A Hp Hl _ in {functor := category_theory.sites.pullback A _ Hp, inverse := category_theory.sites.copullback A Hl, unit_iso := category_theory.as_iso α.unit _, counit_iso := category_theory.as_iso α.counit _, functor_unit_iso_comp' := _}).symm