|
| 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