@@ -9,7 +9,6 @@ public import Mathlib.Topology.Category.TopCat.Opens
99public import Mathlib.CategoryTheory.Adjunction.Unique
1010public import Mathlib.CategoryTheory.Functor.KanExtension.Adjunction
1111public import Mathlib.Topology.Sheaves.Init
12- public import Mathlib.Data.Set.Subsingleton
1312
1413/-!
1514# Presheaves on a topological space
@@ -290,7 +289,7 @@ variable {C}
290289
291290/-- If `f '' U` is open, then `f⁻¹ℱ U ≅ ℱ (f '' U)`. -/
292291def pullbackObjObjOfImageOpen {X Y : TopCat.{v}} (f : X ⟶ Y) (ℱ : Y.Presheaf C) (U : Opens X)
293- (H : IsOpen (f '' SetLike.coe U)) : ((pullback C f).obj ℱ).obj (op U) ≅ ℱ.obj (op ⟨_, H⟩) := by
292+ (H : IsOpen (f '' U)) : ((pullback C f).obj ℱ).obj (op U) ≅ ℱ.obj (op ⟨_, H⟩) := by
294293 let x : CostructuredArrow (Opens.map f).op (op U) := CostructuredArrow.mk
295294 (@homOfLE _ _ _ ((Opens.map f).obj ⟨_, H⟩) (Set.image_preimage.le_u_l _)).op
296295 have hx : IsTerminal x :=
@@ -305,8 +304,95 @@ def pullbackObjObjOfImageOpen {X Y : TopCat.{v}} (f : X ⟶ Y) (ℱ : Y.Presheaf
305304 ((Opens.map f).op.isPointwiseLeftKanExtensionLeftKanExtensionUnit ℱ (op U))
306305 (colimitOfDiagramTerminal hx _)
307306
307+ set_option backward.isDefEq.respectTransparency false in
308+ /-- If `U ⊆ V` and `f '' U`, `f '' V` are open, then the isomorphisms `f⁻¹ℱ U ≅ ℱ (f '' U)`,
309+ `f⁻¹ℱ V ≅ ℱ (f '' V)` given by `pullbackObjObjOfImageOpen` are compatible with the restriction
310+ maps. -/
311+ theorem pullbackObjObjOfImageOpen_hom_naturality {X Y : TopCat.{v}} (f : X ⟶ Y) (ℱ : Y.Presheaf C)
312+ {U V : Opens X} (HU : IsOpen (f '' U)) (HV : IsOpen (f '' V)) (le : U ≤ V) :
313+ ((pullback C f).obj ℱ).map (homOfLE le).op ≫ (pullbackObjObjOfImageOpen f ℱ U HU).hom =
314+ (pullbackObjObjOfImageOpen f ℱ V HV).hom ≫ ℱ.map (IsOpenMap.functorMap HU HV le).op := by
315+ dsimp [pullbackObjObjOfImageOpen]
316+ refine ((Opens.map f).op.isPointwiseLeftKanExtensionLeftKanExtensionUnit ℱ (op V)).hom_ext
317+ (fun j ↦ ?_)
318+ have eq : ((LeftExtension.mk ((Opens.map f).op.leftKanExtension ℱ)
319+ ((Opens.map f).op.leftKanExtensionUnit ℱ)).coconeAt
320+ (op V)).ι.app j ≫ ((pullback C f).obj ℱ).map (homOfLE le).op =
321+ ((LeftExtension.mk ((Opens.map f).op.leftKanExtension ℱ)
322+ ((Opens.map f).op.leftKanExtensionUnit ℱ)).coconeAt
323+ (op U)).ι.app ((CostructuredArrow.map (homOfLE le).op).obj j) := by cat_disch
324+ rw [Limits.IsColimit.comp_coconePointUniqueUpToIso_hom_assoc, reassoc_of% eq,
325+ Limits.IsColimit.comp_coconePointUniqueUpToIso_hom,
326+ Limits.coconeOfDiagramTerminal_ι_app,Limits.coconeOfDiagramTerminal_ι_app]
327+ dsimp
328+ rw [← Functor.map_comp]
329+ cat_disch
330+
308331end
309332
310- end Presheaf
333+ end TopCat.Presheaf
334+
335+ namespace IsOpenMap
336+
337+ noncomputable section
338+
339+ variable {C} [Limits.HasColimits C]
340+
341+ open TopCat.Presheaf
342+
343+ /--
344+ If `f : X ⟶ Y` is an open map and `ℱ` is a presheaf on `Y`, then the pullback of `ℱ` by `f` is
345+ isomorphic to the composition of `ℱ` and of the functor `(Open X)ᵒᵖ ⥤ (Open Y)ᵒᵖ` induced by `f`.
346+ -/
347+ @[simps!]
348+ def pullbackObjIso {X Y : TopCat.{v}} {f : X ⟶ Y} (hf : IsOpenMap f) (ℱ : Y.Presheaf C) :
349+ (pullback C f).obj ℱ ≅ hf.functor.op ⋙ ℱ :=
350+ NatIso.ofComponents
351+ (fun U ↦ pullbackObjObjOfImageOpen f ℱ U.1 (hf (unop U).1 (unop U).2 ))
352+ (fun {U V} i ↦ (pullbackObjObjOfImageOpen_hom_naturality f ℱ (hf (unop V).1 (unop V).2 )
353+ (hf (unop U).1 (unop U).2 ) (leOfHom i.unop)))
354+
355+ set_option backward.isDefEq.respectTransparency false in
356+ /--
357+ If `f : X ⟶ Y` is an open map, this expresses the naturality of the isomorphism
358+ `IsOpenMap.pullbackObjIso` between the pullback by `f` of a presheaf and the composition
359+ of that presheaf and of the functor `(Open X)ᵒᵖ ⥤ (Open Y)ᵒᵖ` induced by `f`.
360+ -/
361+ lemma pullbackObjIso_hom_naturality {X Y : TopCat.{v}} {f : X ⟶ Y} (hf : IsOpenMap f)
362+ {ℱ 𝒢 : Y.Presheaf C} (u : ℱ ⟶ 𝒢) :
363+ (pullback C f).map u ≫ (hf.pullbackObjIso 𝒢).hom =
364+ (hf.pullbackObjIso ℱ).hom ≫ Functor.whiskerLeft hf.functor.op u := by
365+ ext U
366+ dsimp [pullbackObjIso, pullbackObjObjOfImageOpen]
367+ refine ((Opens.map f).op.isPointwiseLeftKanExtensionLeftKanExtensionUnit ℱ (op U)).hom_ext
368+ (fun j ↦ ?_)
369+ have eq : ((LeftExtension.mk ((Opens.map f).op.leftKanExtension ℱ)
370+ ((Opens.map f).op.leftKanExtensionUnit ℱ)).coconeAt (op U)).ι.app j
371+ ≫ ((pullback C f).map u).app (op U) = NatTrans.app (Functor.whiskerLeft _ u) j ≫
372+ ((LeftExtension.mk ((Opens.map f).op.leftKanExtension 𝒢)
373+ ((Opens.map f).op.leftKanExtensionUnit 𝒢)).coconeAt (op U)).ι.app j := by
374+ dsimp [pullback]
375+ simp only [Category.assoc, NatTrans.naturality]
376+ have := NatTrans.congr_app ((Opens.map f).op.lanUnit.naturality u) j.left
377+ dsimp [lanUnit] at this
378+ rw [reassoc_of% this]
379+ rfl
380+ rw [Limits.IsColimit.comp_coconePointUniqueUpToIso_hom_assoc, reassoc_of% eq,
381+ Limits.IsColimit.comp_coconePointUniqueUpToIso_hom]
382+ dsimp
383+ rw [← u.naturality]
384+ rfl
385+
386+ /--
387+ If `f : X ⟶ Y`, this is the isomorphism between the pullback functor by `f` and the
388+ "naive" pullback given by composing presheaves with the functor `(Open X)ᵒᵖ ⥤ (Open Y)ᵒᵖ`
389+ induced by `f`.
390+ -/
391+ @[simps!]
392+ def pullbackIso {X Y : TopCat.{v}} {f : X ⟶ Y} (hf : IsOpenMap f) :
393+ pullback C f ≅ (Functor.whiskeringLeft _ _ _).obj hf.functor.op :=
394+ NatIso.ofComponents hf.pullbackObjIso hf.pullbackObjIso_hom_naturality
395+
396+ end
311397
312- end TopCat
398+ end IsOpenMap
0 commit comments