@@ -3,7 +3,10 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: 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
118125
119126omit 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/--
122166If `G` is cover-preserving and compatible-preserving,
123167then `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
170214end 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