Skip to content

Commit 8a68a74

Browse files
committed
feat(CategoryTheory/Sites): chosen finite products on sheaves (#18633)
Introduce a `ChosenFiniteProduct` instance on sheaves on a category `C` with a Grothendieck topology `J` whenever the coefficient category `A` has a `ChosenFiniteProduct` instance. We also provide some basic `simp` lemmas to relate this structure to the one on `Cᵒᵖ ⥤ A`.
1 parent ce554f5 commit 8a68a74

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,7 @@ import Mathlib.CategoryTheory.Sites.Abelian
19681968
import Mathlib.CategoryTheory.Sites.Adjunction
19691969
import Mathlib.CategoryTheory.Sites.Canonical
19701970
import Mathlib.CategoryTheory.Sites.CartesianClosed
1971+
import Mathlib.CategoryTheory.Sites.ChosenFiniteProducts
19711972
import Mathlib.CategoryTheory.Sites.Closed
19721973
import Mathlib.CategoryTheory.Sites.Coherent.Basic
19731974
import Mathlib.CategoryTheory.Sites.Coherent.CoherentSheaves
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/-
2+
Copyright (c) 2024 Robin Carlier. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Robin Carlier
5+
-/
6+
import Mathlib.CategoryTheory.Sites.Limits
7+
import Mathlib.CategoryTheory.ChosenFiniteProducts.FunctorCategory
8+
9+
/-!
10+
# Chosen finite products on sheaves
11+
12+
In this file, we put a `ChosenFiniteProducts` instance on `A`-valued sheaves for a
13+
`GrothendieckTopology` whenever `A` has a `ChosenFiniteProducts` instance.
14+
-/
15+
16+
17+
universe v₁ v₂ u₁ u₂
18+
19+
namespace CategoryTheory
20+
21+
open Opposite CategoryTheory Category Limits Sieve MonoidalCategory
22+
23+
variable {C : Type u₁} [Category.{v₁} C]
24+
variable {A : Type u₂} [Category.{v₂} A]
25+
variable (J : GrothendieckTopology C)
26+
variable [ChosenFiniteProducts A]
27+
28+
namespace Sheaf
29+
30+
variable (X Y : Sheaf J A)
31+
32+
lemma tensorProd_isSheaf : Presheaf.IsSheaf J (X.val ⊗ Y.val) := by
33+
apply isSheaf_of_isLimit (E := (Cones.postcompose (pairComp X Y (sheafToPresheaf J A)).inv).obj
34+
(ChosenFiniteProducts.product X.val Y.val).cone)
35+
exact (IsLimit.postcomposeInvEquiv _ _).invFun (ChosenFiniteProducts.product X.val Y.val).isLimit
36+
37+
lemma tensorUnit_isSheaf : Presheaf.IsSheaf J (𝟙_ (Cᵒᵖ ⥤ A)) := by
38+
apply isSheaf_of_isLimit (E := (Cones.postcompose (Functor.uniqueFromEmpty _).inv).obj
39+
ChosenFiniteProducts.terminal.cone)
40+
· exact (IsLimit.postcomposeInvEquiv _ _).invFun ChosenFiniteProducts.terminal.isLimit
41+
· exact Functor.empty _
42+
43+
/-- Any `ChosenFiniteProducts` on `A` induce a `ChosenFiniteProducts` structures on `A`-valued
44+
sheaves. -/
45+
@[simps! product_cone_pt_val terminal_cone_pt_val_obj terminal_cone_pt_val_map]
46+
noncomputable instance chosenFiniteProducts: ChosenFiniteProducts (Sheaf J A) where
47+
product X Y :=
48+
{ cone := BinaryFan.mk
49+
(P := { val := X.val ⊗ Y.val
50+
cond := tensorProd_isSheaf J X Y})
51+
⟨(ChosenFiniteProducts.fst _ _)⟩ ⟨(ChosenFiniteProducts.snd _ _)⟩
52+
isLimit :=
53+
{ lift := fun f ↦ ⟨ChosenFiniteProducts.lift (BinaryFan.fst f).val (BinaryFan.snd f).val⟩
54+
fac := by rintro s ⟨⟨j⟩⟩ <;> apply Sheaf.hom_ext <;> simp
55+
uniq := by
56+
intro x f h
57+
apply Sheaf.hom_ext
58+
apply ChosenFiniteProducts.hom_ext
59+
· specialize h ⟨WalkingPair.left⟩
60+
rw [Sheaf.hom_ext_iff] at h
61+
simpa using h
62+
· specialize h ⟨WalkingPair.right⟩
63+
rw [Sheaf.hom_ext_iff] at h
64+
simpa using h } }
65+
terminal :=
66+
{ cone := asEmptyCone { val := 𝟙_ (Cᵒᵖ ⥤ A)
67+
cond := tensorUnit_isSheaf _}
68+
isLimit :=
69+
{ lift := fun f ↦ ⟨ChosenFiniteProducts.toUnit f.pt.val⟩
70+
fac := by intro s ⟨e⟩; cases e
71+
uniq := by
72+
intro x f h
73+
apply Sheaf.hom_ext
74+
exact ChosenFiniteProducts.toUnit_unique f.val _} }
75+
76+
@[simp]
77+
lemma chosenFiniteProducts_fst_val : (ChosenFiniteProducts.fst X Y).val =
78+
ChosenFiniteProducts.fst X.val Y.val := rfl
79+
80+
@[simp]
81+
lemma chosenFiniteProducts_snd_val : (ChosenFiniteProducts.snd X Y).val =
82+
ChosenFiniteProducts.snd X.val Y.val := rfl
83+
84+
variable {X Y}
85+
variable {W : Sheaf J A} (f : W ⟶ X) (g : W ⟶ Y)
86+
87+
@[simp]
88+
lemma chosenFiniteProducts_lift_val : (ChosenFiniteProducts.lift f g).val =
89+
ChosenFiniteProducts.lift f.val g.val := rfl
90+
91+
@[simp]
92+
lemma chosenFiniteProducts_whiskerLeft_val : (X ◁ f).val = (X.val ◁ f.val) := rfl
93+
@[simp]
94+
lemma chosenFiniteProducts_whiskerRight_val : (f ▷ X).val = (f.val ▷ X.val) := rfl
95+
96+
/-- The inclusion from sheaves to presheaves is monoidal with respect to the cartesian monoidal
97+
structures. -/
98+
@[simps!]
99+
noncomputable def monoidalSheafToPresheaf : MonoidalFunctor (Sheaf J A) (Cᵒᵖ ⥤ A) :=
100+
Functor.toMonoidalFunctorOfChosenFiniteProducts (sheafToPresheaf J A)
101+
102+
end CategoryTheory.Sheaf

0 commit comments

Comments
 (0)