Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 54c2567

Browse files
committed
feat(category_theory/sites): The pushforward pullback adjunction (#11273)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 7af5e86 commit 54c2567

File tree

1 file changed

+92
-3
lines changed

1 file changed

+92
-3
lines changed

src/category_theory/sites/cover_preserving.lean

Lines changed: 92 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Andrew Yang
55
-/
6-
import category_theory.sites.sheaf
6+
import category_theory.sites.limits
7+
import category_theory.flat_functors
8+
import category_theory.limits.preserves.filtered
9+
import category_theory.sites.left_exact
710

811
/-!
912
# Cover-preserving functors between sites.
@@ -18,9 +21,13 @@ sheaves on `D` back to sheaves on `C` via `G.op ⋙ -`.
1821
pushes covering sieves to covering sieves
1922
* `category_theory.compatible_preserving`: a functor between sites is compatible-preserving
2023
if it pushes compatible families of elements to compatible families.
21-
* `category_theory.pullback_sheaf` : the pullback of a sheaf along a cover-preserving and
24+
* `category_theory.pullback_sheaf`: the pullback of a sheaf along a cover-preserving and
2225
compatible-preserving functor.
23-
* `category_theory.sites.pullback` : the induced functor `Sheaf K A ⥤ Sheaf J A` for a
26+
* `category_theory.sites.pullback`: the induced functor `Sheaf K A ⥤ Sheaf J A` for a
27+
cover-preserving and compatible-preserving functor `G : (C, J) ⥤ (D, K)`.
28+
* `category_theory.sites.pushforward`: the induced functor `Sheaf J A ⥤ Sheaf K A` for a
29+
cover-preserving and compatible-preserving functor `G : (C, J) ⥤ (D, K)`.
30+
* `category_theory.sites.pushforward`: the induced functor `Sheaf J A ⥤ Sheaf K A` for a
2431
cover-preserving and compatible-preserving functor `G : (C, J) ⥤ (D, K)`.
2532
2633
## Main results
@@ -118,6 +125,43 @@ end
118125

119126
omit h hG
120127

128+
open limits.walking_cospan
129+
130+
lemma compatible_preserving_of_flat {C : Type u₁} [category.{v₁} C] {D : Type u₁} [category.{v₁} D]
131+
(K : grothendieck_topology D) (G : C ⥤ D) [representably_flat G] : compatible_preserving K G :=
132+
begin
133+
constructor,
134+
intros ℱ Z T x hx Y₁ Y₂ X f₁ f₂ g₁ g₂ hg₁ hg₂ e,
135+
136+
/- First, `f₁` and `f₂` form a cone over `cospan g₁ g₂ ⋙ u`. -/
137+
let c : cone (cospan g₁ g₂ ⋙ G) :=
138+
(cones.postcompose (diagram_iso_cospan (cospan g₁ g₂ ⋙ G)).inv).obj
139+
(pullback_cone.mk f₁ f₂ e),
140+
141+
/-
142+
This can then be viewed as a cospan of structured arrows, and we may obtain an arbitrary cone
143+
over it since `structured_arrow W u` is cofiltered.
144+
Then, it suffices to prove that it is compatible when restricted onto `u(c'.X.right)`.
145+
-/
146+
let c' := is_cofiltered.cone (structured_arrow_cone.to_diagram c ⋙ structured_arrow.pre _ _ _),
147+
have eq₁ : f₁ = (c'.X.hom ≫ G.map (c'.π.app left).right) ≫ eq_to_hom (by simp),
148+
{ erw ← (c'.π.app left).w, dsimp, simp },
149+
have eq₂ : f₂ = (c'.X.hom ≫ G.map (c'.π.app right).right) ≫ eq_to_hom (by simp),
150+
{ erw ← (c'.π.app right).w, dsimp, simp },
151+
conv_lhs { rw eq₁ },
152+
conv_rhs { rw eq₂ },
153+
simp only [op_comp, functor.map_comp, types_comp_apply, eq_to_hom_op, eq_to_hom_map],
154+
congr' 1,
155+
156+
/-
157+
Since everything now falls in the image of `u`,
158+
the result follows from the compatibility of `x` in the image of `u`.
159+
-/
160+
injection c'.π.naturality walking_cospan.hom.inl with _ e₁,
161+
injection c'.π.naturality walking_cospan.hom.inr with _ e₂,
162+
exact hx (c'.π.app left).right (c'.π.app right).right hg₁ hg₂ (e₁.symm.trans e₂)
163+
end
164+
121165
/--
122166
If `G` is cover-preserving and compatible-preserving,
123167
then `G.op ⋙ _` pulls sheaves back to sheaves.
@@ -168,3 +212,48 @@ if `G` is cover-preserving and compatible-preserving.
168212
map_comp' := λ _ _ _ f g, by { ext1, apply (((whiskering_left _ _ _).obj G.op)).map_comp } }
169213

170214
end category_theory
215+
216+
namespace category_theory
217+
218+
variables {C : Type v₁} [small_category C] {D : Type v₁} [small_category D]
219+
variables (A : Type u₂) [category.{v₁} A]
220+
variables (J : grothendieck_topology C) (K : grothendieck_topology D)
221+
222+
instance [has_limits A] : creates_limits (Sheaf_to_presheaf J A) :=
223+
category_theory.Sheaf.category_theory.Sheaf_to_presheaf.category_theory.creates_limits.{u₂ v₁ v₁}
224+
225+
-- The assumptions so that we have sheafification
226+
variables [concrete_category.{v₁} A] [preserves_limits (forget A)] [has_colimits A] [has_limits A]
227+
variables [preserves_filtered_colimits (forget A)] [reflects_isomorphisms (forget A)]
228+
229+
local attribute [instance] reflects_limits_of_reflects_isomorphisms
230+
231+
instance {X : C} : is_cofiltered (J.cover X) := infer_instance
232+
233+
/-- The pushforward functor `Sheaf J A ⥤ Sheaf K A` associated to a functor `G : C ⥤ D` in the
234+
same direction as `G`. -/
235+
@[simps] def sites.pushforward (G : C ⥤ D) : Sheaf J A ⥤ Sheaf K A :=
236+
Sheaf_to_presheaf J A ⋙ Lan G.op ⋙ presheaf_to_Sheaf K A
237+
238+
instance (G : C ⥤ D) [representably_flat G] :
239+
preserves_finite_limits (sites.pushforward A J K G) :=
240+
begin
241+
apply_with comp_preserves_finite_limits { instances := ff },
242+
{ apply_instance },
243+
apply_with comp_preserves_finite_limits { instances := ff },
244+
{ apply category_theory.Lan_preserves_finite_limits_of_flat },
245+
{ apply category_theory.presheaf_to_Sheaf.limits.preserves_finite_limits.{u₂ v₁ v₁},
246+
apply_instance }
247+
end
248+
249+
/-- The pushforward functor is left adjoint to the pullback functor. -/
250+
def sites.pullback_pushforward_adjunction {G : C ⥤ D} (hG₁ : compatible_preserving K G)
251+
(hG₂ : cover_preserving J K G) : sites.pushforward A J K G ⊣ sites.pullback A hG₁ hG₂ :=
252+
((Lan.adjunction A G.op).comp _ _ (sheafification_adjunction K A)).restrict_fully_faithful
253+
(Sheaf_to_presheaf J A) (𝟭 _)
254+
(nat_iso.of_components (λ _, iso.refl _)
255+
(λ _ _ _,(category.comp_id _).trans (category.id_comp _).symm))
256+
(nat_iso.of_components (λ _, iso.refl _)
257+
(λ _ _ _,(category.comp_id _).trans (category.id_comp _).symm))
258+
259+
end category_theory

0 commit comments

Comments
 (0)