category_theory.sites.limits
⟷
Mathlib.CategoryTheory.Sites.Limits
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -204,7 +204,7 @@ variable [∀ X : C, HasColimitsOfShape (J.cover X)ᵒᵖ D]
variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
-variable [ReflectsIsomorphisms (forget D)]
+variable [CategoryTheory.Functor.ReflectsIsomorphisms (forget D)]
#print CategoryTheory.Sheaf.sheafifyCocone /-
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-/
import CategoryTheory.Limits.Creates
-import CategoryTheory.Sites.Sheafification
+import CategoryTheory.Sites.ConcreteSheafification
#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 Adam Topaz. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-/
-import Mathbin.CategoryTheory.Limits.Creates
-import Mathbin.CategoryTheory.Sites.Sheafification
+import CategoryTheory.Limits.Creates
+import CategoryTheory.Sites.Sheafification
#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Adam Topaz. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-
-! This file was ported from Lean 3 source module category_theory.sites.limits
-! leanprover-community/mathlib commit 86d1873c01a723aba6788f0b9051ae3d23b4c1c3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.Creates
import Mathbin.CategoryTheory.Sites.Sheafification
+#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
+
/-!
# Limits and colimits of sheaves
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -57,6 +57,7 @@ noncomputable section
section
+#print CategoryTheory.Sheaf.multiforkEvaluationCone /-
/-- An auxiliary definition to be used below.
Whenever `E` is a cone of shape `K` of sheaves, and `S` is the multifork associated to a
@@ -94,6 +95,7 @@ def multiforkEvaluationCone (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPreshe
erw [category.assoc, ← E.w f]
tidy }
#align category_theory.Sheaf.multifork_evaluation_cone CategoryTheory.Sheaf.multiforkEvaluationCone
+-/
variable [HasLimitsOfShape K D]
@@ -207,6 +209,7 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
+#print CategoryTheory.Sheaf.sheafifyCocone /-
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
over a functor which factors through sheaves.
In `is_colimit_sheafify_cocone`, we show that this is a colimit cocone when `E` is a colimit. -/
@@ -218,7 +221,9 @@ def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)
{ app := fun k => ⟨E.ι.app k ≫ J.toSheafify E.pt⟩
naturality' := fun i j f => by ext1; dsimp; erw [category.comp_id, ← category.assoc, E.w f] }
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
+-/
+#print CategoryTheory.Sheaf.isColimitSheafifyCocone /-
/-- If `E` is a colimit cocone of presheaves, over a diagram factoring through sheaves,
then `sheafify_cocone E` is a colimit cocone. -/
@[simps]
@@ -241,6 +246,7 @@ def isColimitSheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPres
dsimp
simpa only [← category.assoc, ← hm]
#align category_theory.Sheaf.is_colimit_sheafify_cocone CategoryTheory.Sheaf.isColimitSheafifyCocone
+-/
instance [HasColimitsOfShape K D] : HasColimitsOfShape K (Sheaf J D) :=
⟨fun F =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -180,7 +180,7 @@ instance [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
⟨⟩
instance [HasLimits D] : HasLimits (Sheaf J D) :=
- has_limits_of_has_limits_creates_limits (sheafToPresheaf J D)
+ hasLimits_of_hasLimits_createsLimits (sheafToPresheaf J D)
end Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -57,9 +57,6 @@ noncomputable section
section
-/- warning: category_theory.Sheaf.multifork_evaluation_cone -> CategoryTheory.Sheaf.multiforkEvaluationCone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.multifork_evaluation_cone CategoryTheory.Sheaf.multiforkEvaluationConeₓ'. -/
/-- An auxiliary definition to be used below.
Whenever `E` is a cone of shape `K` of sheaves, and `S` is the multifork associated to a
@@ -210,12 +207,6 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
-/- warning: category_theory.Sheaf.sheafify_cocone -> CategoryTheory.Sheaf.sheafifyCocone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u2 u3} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, u1} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)}, (CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))) -> (CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) F)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u3 u2} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u3 u2, max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)}, (CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))) -> (CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) F)
-Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCoconeₓ'. -/
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
over a functor which factors through sheaves.
In `is_colimit_sheafify_cocone`, we show that this is a colimit cocone when `E` is a colimit. -/
@@ -228,9 +219,6 @@ def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)
naturality' := fun i j f => by ext1; dsimp; erw [category.comp_id, ← category.assoc, E.w f] }
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
-/- warning: category_theory.Sheaf.is_colimit_sheafify_cocone -> CategoryTheory.Sheaf.isColimitSheafifyCocone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.is_colimit_sheafify_cocone CategoryTheory.Sheaf.isColimitSheafifyCoconeₓ'. -/
/-- If `E` is a colimit cocone of presheaves, over a diagram factoring through sheaves,
then `sheafify_cocone E` is a colimit cocone. -/
@[simps]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -162,15 +162,10 @@ instance (F : K ⥤ Sheaf J D) : CreatesLimit F (sheafToPresheaf J D) :=
{ liftedCone :=
⟨⟨E.pt, is_sheaf_of_is_limit _ _ hE⟩,
⟨fun t => ⟨E.π.app _⟩, fun u v e => Sheaf.Hom.ext _ _ <| E.π.naturality _⟩⟩
- validLift :=
- Cones.ext (eqToIso rfl) fun j => by
- dsimp
- simp
+ validLift := Cones.ext (eqToIso rfl) fun j => by dsimp; simp
makesLimit :=
{ lift := fun S => ⟨hE.lift ((sheafToPresheaf J D).mapCone S)⟩
- fac := fun S j => by
- ext1
- apply hE.fac ((Sheaf_to_presheaf J D).mapCone S) j
+ fac := fun S j => by ext1; apply hE.fac ((Sheaf_to_presheaf J D).mapCone S) j
uniq := fun S m hm => by
ext1
exact
@@ -230,10 +225,7 @@ def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)
pt := ⟨J.sheafify E.pt, GrothendieckTopology.Plus.isSheaf_plus_plus _ _⟩
ι :=
{ app := fun k => ⟨E.ι.app k ≫ J.toSheafify E.pt⟩
- naturality' := fun i j f => by
- ext1
- dsimp
- erw [category.comp_id, ← category.assoc, E.w f] }
+ naturality' := fun i j f => by ext1; dsimp; erw [category.comp_id, ← category.assoc, E.w f] }
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
/- warning: category_theory.Sheaf.is_colimit_sheafify_cocone -> CategoryTheory.Sheaf.isColimitSheafifyCocone is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -58,10 +58,7 @@ noncomputable section
section
/- warning: category_theory.Sheaf.multifork_evaluation_cone -> CategoryTheory.Sheaf.multiforkEvaluationCone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{u4}} [_inst_3 : CategoryTheory.SmallCategory.{u4} K] (F : CategoryTheory.Functor.{u4, max u2 u3, u4, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) (E : CategoryTheory.Limits.Cone.{u4, max u2 u3, u4, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))) (X : C) (W : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), (CategoryTheory.Limits.Multifork.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 W (CategoryTheory.Limits.Cone.pt.{u4, max u2 u3, u4, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) E))) -> (CategoryTheory.Limits.Cone.{u4, max u2 u3, u4, u1} K _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) D _inst_2 F (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2 (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.obj.{u2, max (max u2 (max u2 u3) u3 u1) u2 u3, u3, max (max u2 u3) (max u2 (max u2 u3) u3 u1) u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (Opposite.op.{succ u3} C X)))))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{u4}} [_inst_3 : CategoryTheory.SmallCategory.{u4} K] (F : CategoryTheory.Functor.{u4, max u3 u2, u4, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) (E : CategoryTheory.Limits.Cone.{u4, max u3 u2, u4, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))) (X : C) (W : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), (CategoryTheory.Limits.Multifork.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 W (CategoryTheory.Limits.Cone.pt.{u4, max u3 u2, u4, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) E))) -> (CategoryTheory.Limits.Cone.{u4, max u3 u2, u4, u1} K _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) D _inst_2 F (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1, u1} (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2 (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (Prefunctor.obj.{succ u2, max (max (succ u3) (succ u2)) (succ u1), u3, max (max u3 u2) u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{max (max u3 u2) u1, max (max u3 u2) u1} (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Category.toCategoryStruct.{max (max u3 u2) u1, max (max u3 u2) u1} (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, max u3 u2, max (max (max u3 u1) u2) u3 u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u2, max (max u3 u2) u1, u3, max (max u3 u2) u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, max u3 u2, max (max (max u3 u1) u2) u3 u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2)) (Opposite.op.{succ u3} C X)))))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.multifork_evaluation_cone CategoryTheory.Sheaf.multiforkEvaluationConeₓ'. -/
/-- An auxiliary definition to be used below.
@@ -240,10 +237,7 @@ def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
/- warning: category_theory.Sheaf.is_colimit_sheafify_cocone -> CategoryTheory.Sheaf.isColimitSheafifyCocone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u2 u3} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, u1} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)} (E : CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))), (CategoryTheory.Limits.IsColimit.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) E) -> (CategoryTheory.Limits.IsColimit.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) F (CategoryTheory.Sheaf.sheafifyCocone.{u1, u2, u3} C _inst_1 J D _inst_2 K _inst_3 _inst_4 (CategoryTheory.Sheaf.isColimitSheafifyCocone._proof_1.{u3, u2, u1} C _inst_1 J D _inst_2 _inst_5) _inst_6 (CategoryTheory.Sheaf.isColimitSheafifyCocone._proof_2.{u3, u2, u1} C _inst_1 J D _inst_2 _inst_7) (fun (X : C) => _inst_8 X) _inst_9 F E))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u3 u2} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u3 u2, max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)} (E : CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))), (CategoryTheory.Limits.IsColimit.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) E) -> (CategoryTheory.Limits.IsColimit.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) F (CategoryTheory.Sheaf.sheafifyCocone.{u1, u2, u3} C _inst_1 J D _inst_2 K _inst_3 _inst_4 (fun (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) => _inst_5 P X S) _inst_6 (fun (X : C) => _inst_7 X) (fun (X : C) => _inst_8 X) _inst_9 F E))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.is_colimit_sheafify_cocone CategoryTheory.Sheaf.isColimitSheafifyCoconeₓ'. -/
/-- If `E` is a colimit cocone of presheaves, over a diagram factoring through sheaves,
then `sheafify_cocone E` is a colimit cocone. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/52932b3a083d4142e78a15dc928084a22fea9ba0
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
! This file was ported from Lean 3 source module category_theory.sites.limits
-! leanprover-community/mathlib commit 95e83ced9542828815f53a1096a4d373c1b08a77
+! leanprover-community/mathlib commit 86d1873c01a723aba6788f0b9051ae3d23b4c1c3
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Sites.Sheafification
# Limits and colimits of sheaves
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
## Limits
We prove that the forgetful functor from `Sheaf J D` to presheaves creates limits.
mathlib commit https://github.com/leanprover-community/mathlib/commit/cd8fafa2fac98e1a67097e8a91ad9901cfde48af
@@ -54,6 +54,12 @@ noncomputable section
section
+/- warning: category_theory.Sheaf.multifork_evaluation_cone -> CategoryTheory.Sheaf.multiforkEvaluationCone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{u4}} [_inst_3 : CategoryTheory.SmallCategory.{u4} K] (F : CategoryTheory.Functor.{u4, max u2 u3, u4, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) (E : CategoryTheory.Limits.Cone.{u4, max u2 u3, u4, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))) (X : C) (W : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), (CategoryTheory.Limits.Multifork.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 W (CategoryTheory.Limits.Cone.pt.{u4, max u2 u3, u4, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) E))) -> (CategoryTheory.Limits.Cone.{u4, max u2 u3, u4, u1} K _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u4, max u2 u3, max u2 u3, u4, max u3 u1 u2 u3, u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) D _inst_2 F (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2 (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.obj.{u2, max (max u2 (max u2 u3) u3 u1) u2 u3, u3, max (max u2 u3) (max u2 (max u2 u3) u3 u1) u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1, u1} (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (Opposite.op.{succ u3} C X)))))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{u4}} [_inst_3 : CategoryTheory.SmallCategory.{u4} K] (F : CategoryTheory.Functor.{u4, max u3 u2, u4, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) (E : CategoryTheory.Limits.Cone.{u4, max u3 u2, u4, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))) (X : C) (W : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), (CategoryTheory.Limits.Multifork.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 W (CategoryTheory.Limits.Cone.pt.{u4, max u3 u2, u4, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) E))) -> (CategoryTheory.Limits.Cone.{u4, max u3 u2, u4, u1} K _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u4, max u3 u2, max u3 u2, u4, max (max u3 u2) u1, u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) D _inst_2 F (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1, u1} (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2 (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (Prefunctor.obj.{succ u2, max (max (succ u3) (succ u2)) (succ u1), u3, max (max u3 u2) u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{max (max u3 u2) u1, max (max u3 u2) u1} (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Category.toCategoryStruct.{max (max u3 u2) u1, max (max u3 u2) u1} (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, max u3 u2, max (max (max u3 u1) u2) u3 u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u2, max (max u3 u2) u1, u3, max (max u3 u2) u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, max u3 u2, max (max (max u3 u1) u2) u3 u2, u1} (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2)) (Opposite.op.{succ u3} C X)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.multifork_evaluation_cone CategoryTheory.Sheaf.multiforkEvaluationConeₓ'. -/
/-- An auxiliary definition to be used below.
Whenever `E` is a cone of shape `K` of sheaves, and `S` is the multifork associated to a
@@ -94,6 +100,7 @@ def multiforkEvaluationCone (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPreshe
variable [HasLimitsOfShape K D]
+#print CategoryTheory.Sheaf.isLimitMultiforkOfIsLimit /-
/-- If `E` is a cone of shape `K` of sheaves, which is a limit on the level of presheves,
this definition shows that the limit presheaf satisfies the multifork variant of the sheaf
condition, at a given covering `W`.
@@ -133,7 +140,9 @@ def isLimitMultiforkOfIsLimit (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPres
erw [← hm, category.assoc, ← (E.π.app k).naturality, category.assoc]
rfl)
#align category_theory.Sheaf.is_limit_multifork_of_is_limit CategoryTheory.Sheaf.isLimitMultiforkOfIsLimit
+-/
+#print CategoryTheory.Sheaf.isSheaf_of_isLimit /-
/-- If `E` is a cone which is a limit on the level of presheaves,
then the limit presheaf is again a sheaf.
@@ -146,6 +155,7 @@ theorem isSheaf_of_isLimit (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPreshea
intro X S
exact ⟨is_limit_multifork_of_is_limit _ _ hE _ _⟩
#align category_theory.Sheaf.is_sheaf_of_is_limit CategoryTheory.Sheaf.isSheaf_of_isLimit
+-/
instance (F : K ⥤ Sheaf J D) : CreatesLimit F (sheafToPresheaf J D) :=
createsLimitOfReflectsIso fun E hE =>
@@ -205,6 +215,12 @@ variable [∀ X : C, PreservesColimitsOfShape (J.cover X)ᵒᵖ (forget D)]
variable [ReflectsIsomorphisms (forget D)]
+/- warning: category_theory.Sheaf.sheafify_cocone -> CategoryTheory.Sheaf.sheafifyCocone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u2 u3} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, u1} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)}, (CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))) -> (CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) F)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u3 u2} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u3 u2, max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)}, (CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))) -> (CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) F)
+Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCoconeₓ'. -/
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
over a functor which factors through sheaves.
In `is_colimit_sheafify_cocone`, we show that this is a colimit cocone when `E` is a colimit. -/
@@ -220,6 +236,12 @@ def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)
erw [category.comp_id, ← category.assoc, E.w f] }
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
+/- warning: category_theory.Sheaf.is_colimit_sheafify_cocone -> CategoryTheory.Sheaf.isColimitSheafifyCocone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u2 u3} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u2 u3, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, u1} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (Opposite.{succ (max u3 u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u2 u3, max u2 u3, u1, succ (max u2 u3)} D _inst_2 Type.{max u2 u3} CategoryTheory.types.{max u2 u3} (CategoryTheory.forget.{u1, max u2 u3, max u2 u3} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)} (E : CategoryTheory.Limits.Cocone.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2))), (CategoryTheory.Limits.IsColimit.{max u2 u3, max u2 u3, max u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u2 u3, max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3, max u2 (max u2 u3) u3 u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2)) E) -> (CategoryTheory.Limits.IsColimit.{max u2 u3, max u2 u3, max u2 u3, max u3 u1 u2 u3} K _inst_3 (CategoryTheory.Sheaf.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.CategoryTheory.category.{u2, max u2 u3, u3, u1} C _inst_1 J D _inst_2) F (CategoryTheory.Sheaf.sheafifyCocone.{u1, u2, u3} C _inst_1 J D _inst_2 K _inst_3 _inst_4 (CategoryTheory.Sheaf.isColimitSheafifyCocone._proof_1.{u3, u2, u1} C _inst_1 J D _inst_2 _inst_5) _inst_6 (CategoryTheory.Sheaf.isColimitSheafifyCocone._proof_2.{u3, u2, u1} C _inst_1 J D _inst_2 _inst_7) (fun (X : C) => _inst_8 X) _inst_9 F E))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] {K : Type.{max u2 u3}} [_inst_3 : CategoryTheory.SmallCategory.{max u3 u2} K] [_inst_4 : CategoryTheory.ConcreteCategory.{max u2 u3, max u3 u2, u1} D _inst_2] [_inst_5 : forall (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X), CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)] [_inst_6 : CategoryTheory.Limits.PreservesLimits.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_7 : forall (X : C), CategoryTheory.Limits.HasColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, u1} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) D _inst_2] [_inst_8 : forall (X : C), CategoryTheory.Limits.PreservesColimitsOfShape.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (Opposite.{max (succ u3) (succ u2)} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X)) (CategoryTheory.Category.opposite.{max u3 u2, max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (Preorder.smallCategory.{max u3 u2} (CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u2, u3} C _inst_1 J X))) (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] [_inst_9 : CategoryTheory.ReflectsIsomorphisms.{max u3 u2, max u3 u2, u1, max (succ u3) (succ u2)} D _inst_2 Type.{max u3 u2} CategoryTheory.types.{max u3 u2} (CategoryTheory.forget.{u1, max u3 u2, max u3 u2} D _inst_2 _inst_4)] {F : CategoryTheory.Functor.{max u3 u2, max u3 u2, max u3 u2, max (max (max u1 u3) u3 u2) u2} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)} (E : CategoryTheory.Limits.Cocone.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2))), (CategoryTheory.Limits.IsColimit.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.comp.{max u3 u2, max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (CategoryTheory.Functor.category.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) F (CategoryTheory.sheafToPresheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2)) E) -> (CategoryTheory.Limits.IsColimit.{max u3 u2, max u3 u2, max u3 u2, max (max u3 u2) u1} K _inst_3 (CategoryTheory.Sheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) (CategoryTheory.Sheaf.instCategorySheaf.{u2, max u3 u2, u3, u1} C _inst_1 J D _inst_2) F (CategoryTheory.Sheaf.sheafifyCocone.{u1, u2, u3} C _inst_1 J D _inst_2 K _inst_3 _inst_4 (fun (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) (X : C) (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) => _inst_5 P X S) _inst_6 (fun (X : C) => _inst_7 X) (fun (X : C) => _inst_8 X) _inst_9 F E))
+Case conversion may be inaccurate. Consider using '#align category_theory.Sheaf.is_colimit_sheafify_cocone CategoryTheory.Sheaf.isColimitSheafifyCoconeₓ'. -/
/-- If `E` is a colimit cocone of presheaves, over a diagram factoring through sheaves,
then `sheafify_cocone E` is a colimit cocone. -/
@[simps]
mathlib commit https://github.com/leanprover-community/mathlib/commit/49b7f94aab3a3bdca1f9f34c5d818afb253b3993
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
! This file was ported from Lean 3 source module category_theory.sites.limits
-! leanprover-community/mathlib commit 94b2c2cba7d64557ac30df4df8a25e9bdfa50911
+! leanprover-community/mathlib commit 95e83ced9542828815f53a1096a4d373c1b08a77
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -44,7 +44,7 @@ section Limits
universe w v u z
-variable {C : Type max v u} [Category.{v} C] {J : GrothendieckTopology C}
+variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
variable {D : Type w} [Category.{max v u} D]
@@ -186,7 +186,7 @@ section Colimits
universe w v u
-variable {C : Type max v u} [Category.{v} C] {J : GrothendieckTopology C}
+variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
variable {D : Type w} [Category.{max v u} D]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -63,14 +63,14 @@ shape `K` of objects in `D`, with cone point `S.X`.
See `is_limit_multifork_of_is_limit` for more on how this definition is used.
-/
def multiforkEvaluationCone (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPresheaf J D)) (X : C)
- (W : J.cover X) (S : Multifork (W.index E.x)) :
+ (W : J.cover X) (S : Multifork (W.index E.pt)) :
Cone (F ⋙ sheafToPresheaf J D ⋙ (evaluation Cᵒᵖ D).obj (op X))
where
- x := S.x
+ pt := S.pt
π :=
{ app := fun k =>
(Presheaf.isLimitOfIsSheaf J (F.obj k).1 W (F.obj k).2).lift <|
- Multifork.ofι _ S.x (fun i => S.ι i ≫ (E.π.app k).app (op i.y))
+ Multifork.ofι _ S.pt (fun i => S.ι i ≫ (E.π.app k).app (op i.y))
(by
intro i
simp only [category.assoc]
@@ -101,7 +101,7 @@ condition, at a given covering `W`.
This is used below in `is_sheaf_of_is_limit` to show that the limit presheaf is indeed a sheaf.
-/
def isLimitMultiforkOfIsLimit (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPresheaf J D))
- (hE : IsLimit E) (X : C) (W : J.cover X) : IsLimit (W.Multifork E.x) :=
+ (hE : IsLimit E) (X : C) (W : J.cover X) : IsLimit (W.Multifork E.pt) :=
Multifork.IsLimit.mk _
(fun S =>
(isLimitOfPreserves ((evaluation Cᵒᵖ D).obj (op X)) hE).lift <|
@@ -140,7 +140,7 @@ then the limit presheaf is again a sheaf.
This is used to show that the forgetful functor from sheaves to presheaves creates limits.
-/
theorem isSheaf_of_isLimit (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPresheaf J D))
- (hE : IsLimit E) : Presheaf.IsSheaf J E.x :=
+ (hE : IsLimit E) : Presheaf.IsSheaf J E.pt :=
by
rw [presheaf.is_sheaf_iff_multifork]
intro X S
@@ -150,7 +150,7 @@ theorem isSheaf_of_isLimit (F : K ⥤ Sheaf J D) (E : Cone (F ⋙ sheafToPreshea
instance (F : K ⥤ Sheaf J D) : CreatesLimit F (sheafToPresheaf J D) :=
createsLimitOfReflectsIso fun E hE =>
{ liftedCone :=
- ⟨⟨E.x, is_sheaf_of_is_limit _ _ hE⟩,
+ ⟨⟨E.pt, is_sheaf_of_is_limit _ _ hE⟩,
⟨fun t => ⟨E.π.app _⟩, fun u v e => Sheaf.Hom.ext _ _ <| E.π.naturality _⟩⟩
validLift :=
Cones.ext (eqToIso rfl) fun j => by
@@ -211,9 +211,9 @@ In `is_colimit_sheafify_cocone`, we show that this is a colimit cocone when `E`
@[simps]
def sheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D)) : Cocone F
where
- x := ⟨J.sheafify E.x, GrothendieckTopology.Plus.isSheaf_plus_plus _ _⟩
+ pt := ⟨J.sheafify E.pt, GrothendieckTopology.Plus.isSheaf_plus_plus _ _⟩
ι :=
- { app := fun k => ⟨E.ι.app k ≫ J.toSheafify E.x⟩
+ { app := fun k => ⟨E.ι.app k ≫ J.toSheafify E.pt⟩
naturality' := fun i j f => by
ext1
dsimp
@@ -226,7 +226,7 @@ then `sheafify_cocone E` is a colimit cocone. -/
def isColimitSheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPresheaf J D))
(hE : IsColimit E) : IsColimit (sheafify_cocone E)
where
- desc S := ⟨J.sheafifyLift (hE.desc ((sheafToPresheaf J D).mapCocone S)) S.x.2⟩
+ desc S := ⟨J.sheafifyLift (hE.desc ((sheafToPresheaf J D).mapCocone S)) S.pt.2⟩
fac := by
intro S j
ext1
@@ -246,7 +246,7 @@ def isColimitSheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPres
instance [HasColimitsOfShape K D] : HasColimitsOfShape K (Sheaf J D) :=
⟨fun F =>
HasColimit.mk
- ⟨sheafify_cocone (Colimit.cocone _), is_colimit_sheafify_cocone _ (colimit.isColimit _)⟩⟩
+ ⟨sheafify_cocone (colimit.cocone _), is_colimit_sheafify_cocone _ (colimit.isColimit _)⟩⟩
instance [HasColimits D] : HasColimits (Sheaf J D) :=
⟨inferInstance⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -158,10 +158,10 @@ instance (F : K ⥤ Sheaf J D) : CreatesLimit F (sheafToPresheaf J D) :=
simp
makesLimit :=
{ lift := fun S => ⟨hE.lift ((sheafToPresheaf J D).mapCone S)⟩
- fac' := fun S j => by
+ fac := fun S j => by
ext1
apply hE.fac ((Sheaf_to_presheaf J D).mapCone S) j
- uniq' := fun S m hm => by
+ uniq := fun S m hm => by
ext1
exact
hE.uniq ((Sheaf_to_presheaf J D).mapCone S) m.val fun j =>
@@ -170,7 +170,7 @@ instance (F : K ⥤ Sheaf J D) : CreatesLimit F (sheafToPresheaf J D) :=
instance : CreatesLimitsOfShape K (sheafToPresheaf J D) where
instance : HasLimitsOfShape K (Sheaf J D) :=
- hasLimitsOfShapeOfHasLimitsOfShapeCreatesLimitsOfShape (sheafToPresheaf J D)
+ hasLimitsOfShape_of_hasLimitsOfShape_createsLimitsOfShape (sheafToPresheaf J D)
end
@@ -178,7 +178,7 @@ instance [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
⟨⟩
instance [HasLimits D] : HasLimits (Sheaf J D) :=
- hasLimitsOfHasLimitsCreatesLimits (sheafToPresheaf J D)
+ has_limits_of_has_limits_creates_limits (sheafToPresheaf J D)
end Limits
@@ -227,13 +227,13 @@ def isColimitSheafifyCocone {F : K ⥤ Sheaf J D} (E : Cocone (F ⋙ sheafToPres
(hE : IsColimit E) : IsColimit (sheafify_cocone E)
where
desc S := ⟨J.sheafifyLift (hE.desc ((sheafToPresheaf J D).mapCocone S)) S.x.2⟩
- fac' := by
+ fac := by
intro S j
ext1
dsimp [sheafify_cocone]
erw [category.assoc, J.to_sheafify_sheafify_lift, hE.fac]
rfl
- uniq' := by
+ uniq := by
intro S m hm
ext1
apply J.sheafify_lift_unique
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
We prove that sheaf categories have limits and colimits of the same size as the target category. Before, the universe levels were too restrictive. We change the construction of the colimit: it now uses the formal properties of sheafification instead of an explicit construction.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-/
import Mathlib.CategoryTheory.Limits.Creates
-import Mathlib.CategoryTheory.Sites.ConcreteSheafification
+import Mathlib.CategoryTheory.Sites.Sheafification
import Mathlib.CategoryTheory.Limits.Shapes.FiniteProducts
#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"95e83ced9542828815f53a1096a4d373c1b08a77"
@@ -38,14 +38,14 @@ open CategoryTheory.Limits
open Opposite
-section Limits
-
-universe w v u z z'
+universe w w' v u z z' u₁ u₂
variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
-variable {D : Type w} [Category.{max v u} D]
+variable {D : Type w} [Category.{w'} D]
variable {K : Type z} [Category.{z'} K]
+section Limits
+
noncomputable section
section
@@ -168,71 +168,47 @@ instance : HasLimitsOfShape K (Sheaf J D) :=
instance [HasFiniteProducts D] : HasFiniteProducts (Sheaf J D) :=
⟨inferInstance⟩
+instance [HasFiniteLimits D] : HasFiniteLimits (Sheaf J D) :=
+ ⟨fun _ ↦ inferInstance⟩
+
end
-instance createsLimits [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
+instance createsLimits [HasLimitsOfSize.{u₁, u₂} D] :
+ CreatesLimitsOfSize.{u₁, u₂} (sheafToPresheaf J D) :=
⟨createsLimitsOfShape⟩
-instance [HasLimits D] : HasLimits (Sheaf J D) :=
+instance hasLimitsOfSize [HasLimitsOfSize.{u₁, u₂} D] : HasLimitsOfSize.{u₁, u₂} (Sheaf J D) :=
hasLimits_of_hasLimits_createsLimits (sheafToPresheaf J D)
+variable {D : Type w} [Category.{max v u} D]
+
+example [HasLimits D] : HasLimits (Sheaf J D) := inferInstance
+
end
end Limits
section Colimits
-universe w v u z z'
-
-variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
-variable {D : Type w} [Category.{max v u} D]
-variable {K : Type z} [Category.{z'} K]
-
--- Now we need a handful of instances to obtain sheafification...
-variable [ConcreteCategory.{max v u} D]
-variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)]
-variable [PreservesLimits (forget D)]
-variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
-variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-variable [(forget D).ReflectsIsomorphisms]
+variable [HasWeakSheafify J D]
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
over a functor which factors through sheaves.
In `isColimitSheafifyCocone`, we show that this is a colimit cocone when `E` is a colimit. -/
-@[simps]
noncomputable def sheafifyCocone {F : K ⥤ Sheaf J D}
- (E : Cocone (F ⋙ sheafToPresheaf J D)) : Cocone F where
- pt := ⟨J.sheafify E.pt, GrothendieckTopology.Plus.isSheaf_plus_plus _ _⟩
- ι :=
- { app := fun k => ⟨E.ι.app k ≫ J.toSheafify E.pt⟩
- naturality := fun i j f => by
- ext1
- dsimp
- erw [Category.comp_id, ← Category.assoc, E.w f] }
+ (E : Cocone (F ⋙ sheafToPresheaf J D)) : Cocone F :=
+ (Cocones.precompose
+ (isoWhiskerLeft F (asIso (sheafificationAdjunction J D).counit).symm).hom).obj
+ ((presheafToSheaf J D).mapCocone E)
set_option linter.uppercaseLean3 false in
#align category_theory.Sheaf.sheafify_cocone CategoryTheory.Sheaf.sheafifyCocone
/-- If `E` is a colimit cocone of presheaves, over a diagram factoring through sheaves,
then `sheafifyCocone E` is a colimit cocone. -/
-@[simps]
noncomputable def isColimitSheafifyCocone {F : K ⥤ Sheaf J D}
- (E : Cocone (F ⋙ sheafToPresheaf J D)) (hE : IsColimit E) : IsColimit (sheafifyCocone E) where
- desc S := ⟨J.sheafifyLift (hE.desc ((sheafToPresheaf J D).mapCocone S)) S.pt.2⟩
- fac := by
- intro S j
- ext1
- dsimp [sheafifyCocone]
- erw [Category.assoc, J.toSheafify_sheafifyLift, hE.fac]
- rfl
- uniq := by
- intro S m hm
- ext1
- apply J.sheafifyLift_unique
- apply hE.uniq ((sheafToPresheaf J D).mapCocone S)
- intro j
- dsimp
- simp only [← Category.assoc, ← hm] -- Porting note: was `simpa only [...]`
- rfl
+ (E : Cocone (F ⋙ sheafToPresheaf J D)) (hE : IsColimit E) : IsColimit (sheafifyCocone E) :=
+ (IsColimit.precomposeHomEquiv _ ((presheafToSheaf J D).mapCocone E)).symm
+ (isColimitOfPreserves _ hE)
set_option linter.uppercaseLean3 false in
#align category_theory.Sheaf.is_colimit_sheafify_cocone CategoryTheory.Sheaf.isColimitSheafifyCocone
@@ -243,9 +219,16 @@ instance [HasColimitsOfShape K D] : HasColimitsOfShape K (Sheaf J D) :=
instance [HasFiniteCoproducts D] : HasFiniteCoproducts (Sheaf J D) :=
⟨inferInstance⟩
-instance [HasColimits D] : HasColimits (Sheaf J D) :=
+instance [HasFiniteColimits D] : HasFiniteColimits (Sheaf J D) :=
+ ⟨fun _ ↦ inferInstance⟩
+
+instance [HasColimitsOfSize.{u₁, u₂} D] : HasColimitsOfSize.{u₁, u₂} (Sheaf J D) :=
⟨inferInstance⟩
+variable {D : Type w} [Category.{max v u} D]
+
+example [HasLimits D] : HasLimits (Sheaf J D) := inferInstance
+
end Colimits
end Sheaf
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -194,7 +194,7 @@ variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.
variable [PreservesLimits (forget D)]
variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-variable [ReflectsIsomorphisms (forget D)]
+variable [(forget D).ReflectsIsomorphisms]
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
over a functor which factors through sheaves.
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -43,9 +43,7 @@ section Limits
universe w v u z z'
variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
-
variable {D : Type w} [Category.{max v u} D]
-
variable {K : Type z} [Category.{z'} K]
noncomputable section
@@ -187,22 +185,15 @@ section Colimits
universe w v u z z'
variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
-
variable {D : Type w} [Category.{max v u} D]
-
variable {K : Type z} [Category.{z'} K]
-- Now we need a handful of instances to obtain sheafification...
variable [ConcreteCategory.{max v u} D]
-
variable [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)]
-
variable [PreservesLimits (forget D)]
-
variable [∀ X : C, HasColimitsOfShape (J.Cover X)ᵒᵖ D]
-
variable [∀ X : C, PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)]
-
variable [ReflectsIsomorphisms (forget D)]
/-- Construct a cocone by sheafifying a cocone point of a cocone `E` of presheaves
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-/
import Mathlib.CategoryTheory.Limits.Creates
-import Mathlib.CategoryTheory.Sites.Sheafification
+import Mathlib.CategoryTheory.Sites.ConcreteSheafification
import Mathlib.CategoryTheory.Limits.Shapes.FiniteProducts
#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"95e83ced9542828815f53a1096a4d373c1b08a77"
Port of https://github.com/leanprover-community/mathlib/pull/17637
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
@@ -5,6 +5,7 @@ Authors: Adam Topaz
-/
import Mathlib.CategoryTheory.Limits.Creates
import Mathlib.CategoryTheory.Sites.Sheafification
+import Mathlib.CategoryTheory.Limits.Shapes.FiniteProducts
#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"95e83ced9542828815f53a1096a4d373c1b08a77"
@@ -39,13 +40,13 @@ open Opposite
section Limits
-universe w v u z
+universe w v u z z'
variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
variable {D : Type w} [Category.{max v u} D]
-variable {K : Type z} [SmallCategory K]
+variable {K : Type z} [Category.{z'} K]
noncomputable section
@@ -166,6 +167,9 @@ instance createsLimitsOfShape : CreatesLimitsOfShape K (sheafToPresheaf J D) whe
instance : HasLimitsOfShape K (Sheaf J D) :=
hasLimitsOfShape_of_hasLimitsOfShape_createsLimitsOfShape (sheafToPresheaf J D)
+instance [HasFiniteProducts D] : HasFiniteProducts (Sheaf J D) :=
+ ⟨inferInstance⟩
+
end
instance createsLimits [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
@@ -180,13 +184,13 @@ end Limits
section Colimits
-universe w v u
+universe w v u z z'
variable {C : Type u} [Category.{v} C] {J : GrothendieckTopology C}
variable {D : Type w} [Category.{max v u} D]
-variable {K : Type max v u} [SmallCategory K]
+variable {K : Type z} [Category.{z'} K]
-- Now we need a handful of instances to obtain sheafification...
variable [ConcreteCategory.{max v u} D]
@@ -245,6 +249,9 @@ instance [HasColimitsOfShape K D] : HasColimitsOfShape K (Sheaf J D) :=
⟨fun _ => HasColimit.mk
⟨sheafifyCocone (colimit.cocone _), isColimitSheafifyCocone _ (colimit.isColimit _)⟩⟩
+instance [HasFiniteCoproducts D] : HasFiniteCoproducts (Sheaf J D) :=
+ ⟨inferInstance⟩
+
instance [HasColimits D] : HasColimits (Sheaf J D) :=
⟨inferInstance⟩
@@ -2,15 +2,12 @@
Copyright (c) 2021 Adam Topaz. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Adam Topaz
-
-! This file was ported from Lean 3 source module category_theory.sites.limits
-! leanprover-community/mathlib commit 95e83ced9542828815f53a1096a4d373c1b08a77
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.Creates
import Mathlib.CategoryTheory.Sites.Sheafification
+#align_import category_theory.sites.limits from "leanprover-community/mathlib"@"95e83ced9542828815f53a1096a4d373c1b08a77"
+
/-!
# Limits and colimits of sheaves
@@ -175,7 +175,7 @@ instance createsLimits [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
⟨createsLimitsOfShape⟩
instance [HasLimits D] : HasLimits (Sheaf J D) :=
- has_limits_of_has_limits_creates_limits (sheafToPresheaf J D)
+ hasLimits_of_hasLimits_createsLimits (sheafToPresheaf J D)
end
@@ -171,7 +171,7 @@ instance : HasLimitsOfShape K (Sheaf J D) :=
end
-instance [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
+instance createsLimits [HasLimits D] : CreatesLimits (sheafToPresheaf J D) :=
⟨createsLimitsOfShape⟩
instance [HasLimits D] : HasLimits (Sheaf J D) :=
Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: adamtopaz <github@adamtopaz.com>
The unported dependencies are