File tree Expand file tree Collapse file tree
CategoryTheory/Limits/Shapes Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -316,4 +316,7 @@ open ZeroObject
316316theorem Functor.isZero_iff [HasZeroObject D] (F : C ⥤ D) : IsZero F ↔ ∀ X, IsZero (F.obj X) :=
317317 ⟨fun hF X => hF.obj X, Functor.isZero _⟩
318318
319+ instance {C : Type *} [Category* C] (A : C) [HasZeroObject C] : Epi (terminalIsTerminal.from A) :=
320+ (((isZero_zero C).of_iso HasZeroObject.zeroIsoTerminal.symm).epi _)
321+
319322end CategoryTheory
Original file line number Diff line number Diff line change @@ -185,3 +185,31 @@ theorem of_shortExact_of_isFlasque₁₂ {S : ShortComplex (Sheaf AddCommGrpCat
185185 exact CategoryTheory.epi_of_epi (S.g.1 .app U) (S.X₃.obj.map i)
186186
187187end TopCat.Sheaf.IsFlasque
188+
189+ /--
190+ If the unique map from `A` to the terminal object is an epimorphism, then the skyscraper sheaf
191+ valued in `A` supported at an arbitrary point is a flasque sheaf.
192+ -/
193+ theorem isFlasque_skyscraperSheaf_of_epi_from {X : TopCat} (p₀ : ↑X)
194+ [(U : Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type *} [Category* C] (A : C) [HasTerminal C]
195+ [Epi <| terminalIsTerminal.from A] :
196+ (skyscraperSheaf p₀ A).IsFlasque where
197+ epi {U V} r := by
198+ by_cases h1 : p₀ ∈ unop U
199+ · by_cases h2 : p₀ ∈ unop V
200+ · simp_all only [skyscraperSheaf_obj_obj, skyscraperSheaf_obj_map, ↓reduceDIte]
201+ infer_instance
202+ · simp
203+ grind
204+ · have h2 : p₀ ∉ unop V := fun hV => h1 (r.unop.le hV)
205+ have := isIso_of_isTerminal (isTerminalSkyscraperSheafObjObjOfNotMem h1)
206+ (isTerminalSkyscraperSheafObjObjOfNotMem h2) ((skyscraperSheaf p₀ A).obj.map r)
207+ infer_instance
208+
209+ /--
210+ If the target category has a zero object, then any skyscraper sheaf valued in this category is a
211+ flasque sheaf.
212+ -/
213+ theorem isFlasque_skyscraperSheaf_of_hasZeroObject {X : TopCat} (p₀ : ↑X)
214+ [(U : Opens ↑X) → Decidable (p₀ ∈ U)] {C : Type *} [Category* C] (A : C) [HasZeroObject C] :
215+ (skyscraperSheaf p₀ A).IsFlasque := isFlasque_skyscraperSheaf_of_epi_from p₀ A
Original file line number Diff line number Diff line change @@ -240,6 +240,7 @@ theorem skyscraperPresheaf_isSheaf : (skyscraperPresheaf p₀ A).IsSheaf := by
240240The skyscraper presheaf supported at `p₀` with value `A` is the sheaf that assigns `A` to all opens
241241`U` that contain `p₀` and assigns `*` otherwise.
242242-/
243+ @[simps!]
243244def skyscraperSheaf : Sheaf C X :=
244245 ⟨skyscraperPresheaf p₀ A, skyscraperPresheaf_isSheaf _ _⟩
245246
@@ -410,6 +411,18 @@ noncomputable def skyscraperSheafForgetAdjunction [HasColimits C] :
410411 Presheaf.stalkFunctor C p₀ ⊣ skyscraperSheafFunctor p₀ ⋙ Sheaf.forget C X :=
411412 skyscraperPresheafStalkAdjunction p₀
412413
414+ variable {A p₀} in
415+ /--
416+ On an open set not containing `p₀`, the value of skyscraper sheaf supported at `p₀` is a terminal
417+ object.
418+ -/
419+ noncomputable
420+ def isTerminalSkyscraperSheafObjObjOfNotMem {U : (Opens X)ᵒᵖ} (h : p₀ ∉ unop U) :
421+ IsTerminal ((skyscraperSheaf p₀ A).obj.obj U) := by
422+ dsimp
423+ rw [if_neg h]
424+ exact terminalIsTerminal
425+
413426end
414427
415428end
You can’t perform that action at this time.
0 commit comments