Skip to content

Commit 7c14c7a

Browse files
smorel394morel
andcommitted
feat(Topology/Sheaves/Presheaf): pullback of a presheaf by an open map (leanprover-community#36057)
Prove that the pullback functor (on presheaves) by an open map `f : X ⟶ Y` is isomorphic to the "naive" pullback given by composing presheaves with the functor `(Open X)ᵒᵖ ⥤ (Open Y)ᵒᵖ` induced by `f`. Co-authored-by: morel <smorel@math.princeton.edu>
1 parent c0c380e commit 7c14c7a

1 file changed

Lines changed: 90 additions & 4 deletions

File tree

Mathlib/Topology/Sheaves/Presheaf.lean

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ public import Mathlib.Topology.Category.TopCat.Opens
99
public import Mathlib.CategoryTheory.Adjunction.Unique
1010
public import Mathlib.CategoryTheory.Functor.KanExtension.Adjunction
1111
public 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)`. -/
292291
def 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+
308331
end
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

Comments
 (0)