category_theory.limits.yoneda
⟷
Mathlib.CategoryTheory.Limits.Yoneda
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-/
-import Mathbin.CategoryTheory.Limits.FunctorCategory
-import Mathbin.Tactic.AssertExists
+import CategoryTheory.Limits.FunctorCategory
+import Tactic.AssertExists
#align_import category_theory.limits.yoneda from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.limits.yoneda
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.FunctorCategory
import Mathbin.Tactic.AssertExists
+#align_import category_theory.limits.yoneda from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+
/-!
# Limit properties relating to the (co)yoneda embedding.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -38,6 +38,7 @@ namespace Coyoneda
variable {C : Type v} [SmallCategory C]
+#print CategoryTheory.Coyoneda.colimitCocone /-
/-- The colimit cocone over `coyoneda.obj X`, with cocone point `punit`.
-/
@[simps]
@@ -46,7 +47,9 @@ def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X)
pt := PUnit
ι := { app := by tidy }
#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCocone
+-/
+#print CategoryTheory.Coyoneda.colimitCoconeIsColimit /-
/-- The proposed colimit cocone over `coyoneda.obj X` is a colimit cocone.
-/
@[simps]
@@ -56,12 +59,14 @@ def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
fac s Y := by ext f; convert congr_fun (s.w f).symm (𝟙 (unop X)); simp
uniq s m w := by ext ⟨⟩; rw [← w]; simp
#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.Coyoneda.colimitCoconeIsColimit
+-/
instance (X : Cᵒᵖ) : HasColimit (coyoneda.obj X) :=
HasColimit.mk
{ Cocone := _
IsColimit := colimitCoconeIsColimit X }
+#print CategoryTheory.Coyoneda.colimitCoyonedaIso /-
/-- The colimit of `coyoneda.obj X` is isomorphic to `punit`.
-/
noncomputable def colimitCoyonedaIso (X : Cᵒᵖ) : colimit (coyoneda.obj X) ≅ PUnit :=
@@ -69,6 +74,7 @@ noncomputable def colimitCoyonedaIso (X : Cᵒᵖ) : colimit (coyoneda.obj X)
{ Cocone := _
IsColimit := colimitCoconeIsColimit X }
#align category_theory.coyoneda.colimit_coyoneda_iso CategoryTheory.Coyoneda.colimitCoyonedaIso
+-/
end Coyoneda
@@ -76,6 +82,7 @@ variable {C : Type u} [Category.{v} C]
open Limits
+#print CategoryTheory.yonedaPreservesLimits /-
/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -94,7 +101,9 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
-- See library note [dsimp, simp]
· exact Quiver.Hom.unop_inj (congr_fun (w j) x) } } }
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
+-/
+#print CategoryTheory.coyonedaPreservesLimits /-
/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -111,7 +120,9 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
refine' t.uniq ⟨unop X, _⟩ _ fun j => _
exact congr_fun (w j) x } } }
#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimits
+-/
+#print CategoryTheory.yonedaJointlyReflectsLimits /-
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
(t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
@@ -128,7 +139,9 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
ext
exact Quiver.Hom.op_inj (w j) }
#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimits
+-/
+#print CategoryTheory.coyonedaJointlyReflectsLimits /-
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
(t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
@@ -143,6 +156,7 @@ def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (
ext
exact w j }
#align category_theory.coyoneda_jointly_reflects_limits CategoryTheory.coyonedaJointlyReflectsLimits
+-/
variable {D : Type u} [SmallCategory D]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -38,12 +38,6 @@ namespace Coyoneda
variable {C : Type v} [SmallCategory C]
-/- warning: category_theory.coyoneda.colimit_cocone -> CategoryTheory.Coyoneda.colimitCocone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.Cocone.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X)
-but is expected to have type
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.Cocone.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X)
-Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCoconeₓ'. -/
/-- The colimit cocone over `coyoneda.obj X`, with cocone point `punit`.
-/
@[simps]
@@ -53,12 +47,6 @@ def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X)
ι := { app := by tidy }
#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCocone
-/- warning: category_theory.coyoneda.colimit_cocone_is_colimit -> CategoryTheory.Coyoneda.colimitCoconeIsColimit is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.IsColimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X) (CategoryTheory.Coyoneda.colimitCocone.{u1} C _inst_1 X)
-but is expected to have type
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.IsColimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X) (CategoryTheory.Coyoneda.colimitCocone.{u1} C _inst_1 X)
-Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.Coyoneda.colimitCoconeIsColimitₓ'. -/
/-- The proposed colimit cocone over `coyoneda.obj X` is a colimit cocone.
-/
@[simps]
@@ -74,12 +62,6 @@ instance (X : Cᵒᵖ) : HasColimit (coyoneda.obj X) :=
{ Cocone := _
IsColimit := colimitCoconeIsColimit X }
-/- warning: category_theory.coyoneda.colimit_coyoneda_iso -> CategoryTheory.Coyoneda.colimitCoyonedaIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X) (CategoryTheory.coyoneda.Obj.CategoryTheory.Limits.hasColimit.{u1} C _inst_1 X)) PUnit.{succ u1}
-but is expected to have type
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} C _inst_1 X)) PUnit.{succ u1}
-Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_coyoneda_iso CategoryTheory.Coyoneda.colimitCoyonedaIsoₓ'. -/
/-- The colimit of `coyoneda.obj X` is isomorphic to `punit`.
-/
noncomputable def colimitCoyonedaIso (X : Cᵒᵖ) : colimit (coyoneda.obj X) ≅ PUnit :=
@@ -94,12 +76,6 @@ variable {C : Type u} [Category.{v} C]
open Limits
-/- warning: category_theory.yoneda_preserves_limits -> CategoryTheory.yonedaPreservesLimits is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X)
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X)
-Case conversion may be inaccurate. Consider using '#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimitsₓ'. -/
/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -119,12 +95,6 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
· exact Quiver.Hom.unop_inj (congr_fun (w j) x) } } }
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
-/- warning: category_theory.coyoneda_preserves_limits -> CategoryTheory.coyonedaPreservesLimits is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : Opposite.{succ u2} C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u2} C _inst_1) X)
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : Opposite.{succ u2} C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u2} C _inst_1)) X)
-Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimitsₓ'. -/
/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -142,12 +112,6 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
exact congr_fun (w j) x } } }
#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimits
-/- warning: category_theory.yoneda_jointly_reflects_limits -> CategoryTheory.yonedaJointlyReflectsLimits is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X) K c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
-Case conversion may be inaccurate. Consider using '#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimitsₓ'. -/
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
(t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
@@ -165,12 +129,6 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
exact Quiver.Hom.op_inj (w j) }
#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimits
-/- warning: category_theory.coyoneda_jointly_reflects_limits -> CategoryTheory.coyonedaJointlyReflectsLimits is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X) K c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
-Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda_jointly_reflects_limits CategoryTheory.coyonedaJointlyReflectsLimitsₓ'. -/
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
(t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -65,14 +65,8 @@ Case conversion may be inaccurate. Consider using '#align category_theory.coyone
def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
where
desc s x := s.ι.app (unop X) (𝟙 _)
- fac s Y := by
- ext f
- convert congr_fun (s.w f).symm (𝟙 (unop X))
- simp
- uniq s m w := by
- ext ⟨⟩
- rw [← w]
- simp
+ fac s Y := by ext f; convert congr_fun (s.w f).symm (𝟙 (unop X)); simp
+ uniq s m w := by ext ⟨⟩; rw [← w]; simp
#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.Coyoneda.colimitCoconeIsColimit
instance (X : Cᵒᵖ) : HasColimit (coyoneda.obj X) :=
@@ -120,8 +114,7 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
funext fun x =>
by
refine' Quiver.Hom.op_inj (t.uniq ⟨op X, _, _⟩ _ fun j => _)
- · dsimp
- simp [← s.w α]
+ · dsimp; simp [← s.w α]
-- See library note [dsimp, simp]
· exact Quiver.Hom.unop_inj (congr_fun (w j) x) } } }
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
@@ -140,11 +133,7 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
{
preserves := fun c t =>
{ lift := fun s x =>
- t.lift
- ⟨unop X, fun j => s.π.app j x, fun j₁ j₂ α =>
- by
- dsimp
- simp [← s.w α]⟩
+ t.lift ⟨unop X, fun j => s.π.app j x, fun j₁ j₂ α => by dsimp; simp [← s.w α]⟩
-- See library note [dsimp, simp]
fac := fun s j => funext fun x => t.fac _ _
uniq := fun s m w =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
! This file was ported from Lean 3 source module category_theory.limits.yoneda
-! leanprover-community/mathlib commit e83fa8324dbec147a1d1f6d11751361235ce3806
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Tactic.AssertExists
/-!
# Limit properties relating to the (co)yoneda embedding.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We calculate the colimit of `Y ↦ (X ⟶ Y)`, which is just `punit`.
(This is used in characterising cofinal functors.)
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -154,7 +154,7 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
lean 3 declaration is
forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X) K c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
Case conversion may be inaccurate. Consider using '#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimitsₓ'. -/
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
@@ -177,7 +177,7 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
lean 3 declaration is
forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X) K c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda_jointly_reflects_limits CategoryTheory.coyonedaJointlyReflectsLimitsₓ'. -/
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -35,6 +35,12 @@ namespace Coyoneda
variable {C : Type v} [SmallCategory C]
+/- warning: category_theory.coyoneda.colimit_cocone -> CategoryTheory.Coyoneda.colimitCocone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.Cocone.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X)
+but is expected to have type
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.Cocone.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X)
+Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCoconeₓ'. -/
/-- The colimit cocone over `coyoneda.obj X`, with cocone point `punit`.
-/
@[simps]
@@ -42,8 +48,14 @@ def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X)
where
pt := PUnit
ι := { app := by tidy }
-#align category_theory.coyoneda.colimit_cocone CategoryTheory.coyoneda.colimitCocone
-
+#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCocone
+
+/- warning: category_theory.coyoneda.colimit_cocone_is_colimit -> CategoryTheory.Coyoneda.colimitCoconeIsColimit is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.IsColimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X) (CategoryTheory.Coyoneda.colimitCocone.{u1} C _inst_1 X)
+but is expected to have type
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Limits.IsColimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X) (CategoryTheory.Coyoneda.colimitCocone.{u1} C _inst_1 X)
+Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.Coyoneda.colimitCoconeIsColimitₓ'. -/
/-- The proposed colimit cocone over `coyoneda.obj X` is a colimit cocone.
-/
@[simps]
@@ -58,20 +70,26 @@ def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
ext ⟨⟩
rw [← w]
simp
-#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.coyoneda.colimitCoconeIsColimit
+#align category_theory.coyoneda.colimit_cocone_is_colimit CategoryTheory.Coyoneda.colimitCoconeIsColimit
instance (X : Cᵒᵖ) : HasColimit (coyoneda.obj X) :=
HasColimit.mk
{ Cocone := _
IsColimit := colimitCoconeIsColimit X }
+/- warning: category_theory.coyoneda.colimit_coyoneda_iso -> CategoryTheory.Coyoneda.colimitCoyonedaIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1) X) (CategoryTheory.coyoneda.Obj.CategoryTheory.Limits.hasColimit.{u1} C _inst_1 X)) PUnit.{succ u1}
+but is expected to have type
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] (X : Opposite.{succ u1} C), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} C) (CategoryTheory.Category.opposite.{u1, u1} C _inst_1) (CategoryTheory.Functor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} C _inst_1)) X) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} C _inst_1 X)) PUnit.{succ u1}
+Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda.colimit_coyoneda_iso CategoryTheory.Coyoneda.colimitCoyonedaIsoₓ'. -/
/-- The colimit of `coyoneda.obj X` is isomorphic to `punit`.
-/
noncomputable def colimitCoyonedaIso (X : Cᵒᵖ) : colimit (coyoneda.obj X) ≅ PUnit :=
colimit.isoColimitCocone
{ Cocone := _
IsColimit := colimitCoconeIsColimit X }
-#align category_theory.coyoneda.colimit_coyoneda_iso CategoryTheory.coyoneda.colimitCoyonedaIso
+#align category_theory.coyoneda.colimit_coyoneda_iso CategoryTheory.Coyoneda.colimitCoyonedaIso
end Coyoneda
@@ -79,6 +97,12 @@ variable {C : Type u} [Category.{v} C]
open Limits
+/- warning: category_theory.yoneda_preserves_limits -> CategoryTheory.yonedaPreservesLimits is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X)
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X)
+Case conversion may be inaccurate. Consider using '#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimitsₓ'. -/
/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -99,6 +123,12 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
· exact Quiver.Hom.unop_inj (congr_fun (w j) x) } } }
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
+/- warning: category_theory.coyoneda_preserves_limits -> CategoryTheory.coyonedaPreservesLimits is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : Opposite.{succ u2} C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u2} C _inst_1) X)
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (X : Opposite.{succ u2} C), CategoryTheory.Limits.PreservesLimits.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Functor.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u2} C _inst_1)) X)
+Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimitsₓ'. -/
/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X)
where PreservesLimitsOfShape J 𝒥 :=
@@ -120,6 +150,12 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
exact congr_fun (w j) x } } }
#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimits
+/- warning: category_theory.yoneda_jointly_reflects_limits -> CategoryTheory.yonedaJointlyReflectsLimits is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1)) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K), (forall (X : C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u2) (succ u3), u3, max (succ u2) u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} C _inst_1 (CategoryTheory.Functor.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.yoneda.{u2, u3} C _inst_1)) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) K c)
+Case conversion may be inaccurate. Consider using '#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimitsₓ'. -/
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
(t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
@@ -137,6 +173,12 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
exact Quiver.Hom.op_inj (w j) }
#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimits
+/- warning: category_theory.coyoneda_jointly_reflects_limits -> CategoryTheory.coyonedaJointlyReflectsLimits is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (CategoryTheory.Functor.obj.{u2, max u3 u2, u3, max u2 u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (J : Type.{u1}) [_inst_2 : CategoryTheory.SmallCategory.{u1} J] (K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_2 C _inst_1) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_2 C _inst_1 K), (forall (X : Opposite.{succ u3} C), CategoryTheory.Limits.IsLimit.{u1, u2, u1, succ u2} J _inst_2 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X)) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, succ u2} J _inst_2 C _inst_1 Type.{u2} CategoryTheory.types.{u2} K (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, max u3 (succ u2)} (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.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Category.toCategoryStruct.{max u3 u2, max u3 (succ u2)} (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}))) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, max u3 (succ u2)} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) (CategoryTheory.Functor.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.Functor.category.{u2, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2}) (CategoryTheory.coyoneda.{u2, u3} C _inst_1)) X) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u3} J _inst_2 C _inst_1 K c)
+Case conversion may be inaccurate. Consider using '#align category_theory.coyoneda_jointly_reflects_limits CategoryTheory.coyonedaJointlyReflectsLimitsₓ'. -/
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
(t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
@@ -154,6 +196,7 @@ def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (
variable {D : Type u} [SmallCategory D]
+#print CategoryTheory.yonedaFunctorPreservesLimits /-
instance yonedaFunctorPreservesLimits : PreservesLimits (@yoneda D _) :=
by
apply preserves_limits_of_evaluation
@@ -161,7 +204,9 @@ instance yonedaFunctorPreservesLimits : PreservesLimits (@yoneda D _) :=
change preserves_limits (coyoneda.obj K)
infer_instance
#align category_theory.yoneda_functor_preserves_limits CategoryTheory.yonedaFunctorPreservesLimits
+-/
+#print CategoryTheory.coyonedaFunctorPreservesLimits /-
instance coyonedaFunctorPreservesLimits : PreservesLimits (@coyoneda D _) :=
by
apply preserves_limits_of_evaluation
@@ -169,14 +214,19 @@ instance coyonedaFunctorPreservesLimits : PreservesLimits (@coyoneda D _) :=
change preserves_limits (yoneda.obj K)
infer_instance
#align category_theory.coyoneda_functor_preserves_limits CategoryTheory.coyonedaFunctorPreservesLimits
+-/
+#print CategoryTheory.yonedaFunctorReflectsLimits /-
instance yonedaFunctorReflectsLimits : ReflectsLimits (@yoneda D _) :=
Limits.fullyFaithfulReflectsLimits _
#align category_theory.yoneda_functor_reflects_limits CategoryTheory.yonedaFunctorReflectsLimits
+-/
+#print CategoryTheory.coyonedaFunctorReflectsLimits /-
instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) :=
Limits.fullyFaithfulReflectsLimits _
#align category_theory.coyoneda_functor_reflects_limits CategoryTheory.coyonedaFunctorReflectsLimits
+-/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -40,7 +40,7 @@ variable {C : Type v} [SmallCategory C]
@[simps]
def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X)
where
- x := PUnit
+ pt := PUnit
ι := { app := by tidy }
#align category_theory.coyoneda.colimit_cocone CategoryTheory.coyoneda.colimitCocone
@@ -123,11 +123,11 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
(t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
- let s' : ∀ s : Cone K, Cone (K ⋙ yoneda.obj s.x.unop) := fun s =>
+ let s' : ∀ s : Cone K, Cone (K ⋙ yoneda.obj s.pt.unop) := fun s =>
⟨PUnit, fun j _ => (s.π.app j).unop, fun j₁ j₂ α =>
funext fun _ => Quiver.Hom.op_inj (s.w α).symm⟩
- { lift := fun s => ((t s.x.unop).lift (s' s) PUnit.unit).op
- fac := fun s j => Quiver.Hom.unop_inj (congr_fun ((t s.x.unop).fac (s' s) j) PUnit.unit)
+ { lift := fun s => ((t s.pt.unop).lift (s' s) PUnit.unit).op
+ fac := fun s j => Quiver.Hom.unop_inj (congr_fun ((t s.pt.unop).fac (s' s) j) PUnit.unit)
uniq := fun s m w => by
apply Quiver.Hom.unop_inj
suffices (fun x : PUnit => m.unop) = (t s.X.unop).lift (s' s) by
@@ -140,9 +140,9 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
(t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
- let s' : ∀ s : Cone K, Cone (K ⋙ coyoneda.obj (op s.x)) := fun s =>
+ let s' : ∀ s : Cone K, Cone (K ⋙ coyoneda.obj (op s.pt)) := fun s =>
⟨PUnit, fun j _ => s.π.app j, fun j₁ j₂ α => funext fun _ => (s.w α).symm⟩
- { lift := fun s => (t (op s.x)).lift (s' s) PUnit.unit
+ { lift := fun s => (t (op s.pt)).lift (s' s) PUnit.unit
fac := fun s j => congr_fun ((t _).fac (s' s) j) PUnit.unit
uniq := fun s m w =>
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -50,11 +50,11 @@ def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X)
def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
where
desc s x := s.ι.app (unop X) (𝟙 _)
- fac' s Y := by
+ fac s Y := by
ext f
convert congr_fun (s.w f).symm (𝟙 (unop X))
simp
- uniq' s m w := by
+ uniq s m w := by
ext ⟨⟩
rw [← w]
simp
@@ -88,8 +88,8 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
preserves := fun c t =>
{ lift := fun s x =>
Quiver.Hom.unop (t.lift ⟨op X, fun j => (s.π.app j x).op, fun j₁ j₂ α => _⟩)
- fac' := fun s j => funext fun x => Quiver.Hom.op_inj (t.fac _ _)
- uniq' := fun s m w =>
+ fac := fun s j => funext fun x => Quiver.Hom.op_inj (t.fac _ _)
+ uniq := fun s m w =>
funext fun x =>
by
refine' Quiver.Hom.op_inj (t.uniq ⟨op X, _, _⟩ _ fun j => _)
@@ -113,8 +113,8 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
dsimp
simp [← s.w α]⟩
-- See library note [dsimp, simp]
- fac' := fun s j => funext fun x => t.fac _ _
- uniq' := fun s m w =>
+ fac := fun s j => funext fun x => t.fac _ _
+ uniq := fun s m w =>
funext fun x => by
refine' t.uniq ⟨unop X, _⟩ _ fun j => _
exact congr_fun (w j) x } } }
@@ -127,8 +127,8 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
⟨PUnit, fun j _ => (s.π.app j).unop, fun j₁ j₂ α =>
funext fun _ => Quiver.Hom.op_inj (s.w α).symm⟩
{ lift := fun s => ((t s.x.unop).lift (s' s) PUnit.unit).op
- fac' := fun s j => Quiver.Hom.unop_inj (congr_fun ((t s.x.unop).fac (s' s) j) PUnit.unit)
- uniq' := fun s m w => by
+ fac := fun s j => Quiver.Hom.unop_inj (congr_fun ((t s.x.unop).fac (s' s) j) PUnit.unit)
+ uniq := fun s m w => by
apply Quiver.Hom.unop_inj
suffices (fun x : PUnit => m.unop) = (t s.X.unop).lift (s' s) by
apply congr_fun this PUnit.unit
@@ -143,8 +143,8 @@ def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (
let s' : ∀ s : Cone K, Cone (K ⋙ coyoneda.obj (op s.x)) := fun s =>
⟨PUnit, fun j _ => s.π.app j, fun j₁ j₂ α => funext fun _ => (s.w α).symm⟩
{ lift := fun s => (t (op s.x)).lift (s' s) PUnit.unit
- fac' := fun s j => congr_fun ((t _).fac (s' s) j) PUnit.unit
- uniq' := fun s m w =>
+ fac := fun s j => congr_fun ((t _).fac (s' s) j) PUnit.unit
+ uniq := fun s m w =>
by
suffices (fun x : PUnit => m) = (t _).lift (s' s) by apply congr_fun this PUnit.unit
apply (t _).uniq (s' s) _ fun j => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Functor.Full
a Prop (#12449)
Before this PR, Functor.Full
contained the data of the preimage of maps by a full functor F
. This PR makes Functor.Full
a proposition. This is to prevent any diamond to appear.
The lemma Functor.image_preimage
is also renamed Functor.map_preimage
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -175,11 +175,11 @@ noncomputable instance coyonedaFunctorPreservesLimits :
infer_instance
#align category_theory.coyoneda_functor_preserves_limits CategoryTheory.coyonedaFunctorPreservesLimits
-instance yonedaFunctorReflectsLimits :
+noncomputable instance yonedaFunctorReflectsLimits :
ReflectsLimitsOfSize.{t, w} (@yoneda C _) := inferInstance
#align category_theory.yoneda_functor_reflects_limits CategoryTheory.yonedaFunctorReflectsLimits
-instance coyonedaFunctorReflectsLimits :
+noncomputable instance coyonedaFunctorReflectsLimits :
ReflectsLimitsOfSize.{t, w} (@coyoneda C _) := inferInstance
#align category_theory.coyoneda_functor_reflects_limits CategoryTheory.coyonedaFunctorReflectsLimits
In this PR, it is shown that if a functor G : J ⥤ C
to a concrete category has a limit and that forget C
is corepresentable, then G ⋙ forget C).sections
is small. As the corepresentability property holds in many concrete categories (e.g. groups, abelian groups) and that we already know since #11420 that limits exist under the smallness assumption in such categories, then this lemma may be used in future PR in order to show that usual forgetful functors preserve all limits (regardless of universe assumptions). This shall be convenient in the development of sheaves of modules.
In this PR, universes assumptions have also been generalized in the file Limits.Yoneda
. In order to do this, a small refactor of the file Limits.Types
was necessary. This introduces bijections like compCoyonedaSectionsEquiv (F : J ⥤ C) (X : C) : (F ⋙ coyoneda.obj (op X)).sections ≃ ((const J).obj X ⟶ F)
with general universe parameters. In order to reduce imports in Limits.Yoneda
, part of the file Limits.Types
was moved to a new file Limits.TypesFiltered
.
Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-/
import Mathlib.CategoryTheory.Limits.FunctorCategory
+import Mathlib.CategoryTheory.Limits.Types
import Mathlib.Util.AssertExists
#align_import category_theory.limits.yoneda from "leanprover-community/mathlib"@"e97cf15cd1aec9bd5c193b2ffac5a6dc9118912b"
@@ -19,7 +20,7 @@ We also show the (co)yoneda embeddings preserve limits and jointly reflect them.
open Opposite CategoryTheory Limits
-universe w v u
+universe t w v u
namespace CategoryTheory
@@ -72,94 +73,154 @@ variable {C : Type u} [Category.{v} C]
open Limits
-/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
-instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X) where
- preservesLimitsOfShape {J} 𝒥 :=
- { preservesLimit := fun {K} =>
- { preserves := fun {c} t =>
- { lift := fun s x =>
- Quiver.Hom.unop (t.lift ⟨op X, fun j => (s.π.app j x).op, fun j₁ j₂ α => by
- simp [← s.w α]⟩)
- fac := fun s j => funext fun x => Quiver.Hom.op_inj (t.fac _ _)
- uniq := fun s m w =>
- funext fun x => by
- refine Quiver.Hom.op_inj (t.uniq ⟨op X, _, _⟩ _ fun j => ?_)
- exact Quiver.Hom.unop_inj (congrFun (w j) x) } } }
-#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
+section
-/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
-instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X) where
- preservesLimitsOfShape {J} 𝒥 :=
- { preservesLimit := fun {K} =>
- { preserves := fun {c} t =>
- { lift := fun s x =>
- t.lift
- ⟨unop X, fun j => s.π.app j x, fun j₁ j₂ α => by
- dsimp
- simp [← s.w α]⟩
- -- See library note [dsimp, simp]
- fac := fun s j => funext fun x => t.fac _ _
- uniq := fun s m w =>
- funext fun x => by
- refine' t.uniq ⟨unop X, _⟩ _ fun j => _
- exact congrFun (w j) x } } }
-#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimits
+variable {J : Type w} [Category.{t} J]
+
+/-- The cone of `F` corresponding to an element in `(F ⋙ yoneda.obj X).sections`. -/
+@[simps]
+def Limits.coneOfSectionCompYoneda (F : J ⥤ Cᵒᵖ) (X : C)
+ (s : (F ⋙ yoneda.obj X).sections) : Cone F where
+ pt := Opposite.op X
+ π := compYonedaSectionsEquiv F X s
+
+noncomputable instance yonedaPreservesLimit (F : J ⥤ Cᵒᵖ) (X : C) :
+ PreservesLimit F (yoneda.obj X) where
+ preserves {c} hc := Nonempty.some (by
+ rw [Types.isLimit_iff]
+ intro s hs
+ exact ⟨(hc.lift (Limits.coneOfSectionCompYoneda F X ⟨s, hs⟩)).unop,
+ fun j => Quiver.Hom.op_inj (hc.fac (Limits.coneOfSectionCompYoneda F X ⟨s, hs⟩) j),
+ fun m hm => Quiver.Hom.op_inj
+ (hc.uniq (Limits.coneOfSectionCompYoneda F X ⟨s, hs⟩) _
+ (fun j => Quiver.Hom.unop_inj (hm j)))⟩)
+
+variable (J) in
+noncomputable instance yonedaPreservesLimitsOfShape (X : C) :
+ PreservesLimitsOfShape J (yoneda.obj X) where
/-- The yoneda embeddings jointly reflect limits. -/
-def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
- (t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
- let s' : ∀ s : Cone K, Cone (K ⋙ yoneda.obj s.pt.unop) := fun s =>
- ⟨PUnit, fun j _ => (s.π.app j).unop, fun j₁ j₂ α =>
- funext fun _ => Quiver.Hom.op_inj (s.w α).symm⟩
- { lift := fun s => ((t s.pt.unop).lift (s' s) PUnit.unit).op
- fac := fun s j => Quiver.Hom.unop_inj (congr_fun ((t s.pt.unop).fac (s' s) j) PUnit.unit)
- uniq := fun s m w => by
- apply Quiver.Hom.unop_inj
- suffices (fun _ : PUnit => m.unop) = (t s.pt.unop).lift (s' s) by
- apply congr_fun this PUnit.unit
- apply (t _).uniq (s' s) _ fun j => _
- intro j
- funext
- exact Quiver.Hom.op_inj (w j) }
+def yonedaJointlyReflectsLimits (F : J ⥤ Cᵒᵖ) (c : Cone F)
+ (hc : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c where
+ lift s := ((hc s.pt.unop).lift ((yoneda.obj s.pt.unop).mapCone s) (𝟙 _)).op
+ fac s j := Quiver.Hom.unop_inj (by
+ simpa using congr_fun ((hc s.pt.unop).fac ((yoneda.obj s.pt.unop).mapCone s) j) (𝟙 _))
+ uniq s m hm := Quiver.Hom.unop_inj (by
+ apply (Types.isLimitEquivSections (hc s.pt.unop)).injective
+ ext j
+ have eq := congr_fun ((hc s.pt.unop).fac ((yoneda.obj s.pt.unop).mapCone s) j) (𝟙 _)
+ dsimp at eq
+ dsimp [Types.isLimitEquivSections, Types.sectionOfCone]
+ rw [eq, Category.comp_id, ← hm, unop_comp])
#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimits
+/-- The cone of `F` corresponding to an element in `(F ⋙ coyoneda.obj X).sections`. -/
+@[simps]
+def Limits.coneOfSectionCompCoyoneda (F : J ⥤ C) (X : Cᵒᵖ)
+ (s : (F ⋙ coyoneda.obj X).sections) : Cone F where
+ pt := X.unop
+ π := compCoyonedaSectionsEquiv F X.unop s
+
+noncomputable instance coyonedaPreservesLimit (F : J ⥤ C) (X : Cᵒᵖ) :
+ PreservesLimit F (coyoneda.obj X) where
+ preserves {c} hc := Nonempty.some (by
+ rw [Types.isLimit_iff]
+ intro s hs
+ exact ⟨hc.lift (Limits.coneOfSectionCompCoyoneda F X ⟨s, hs⟩), hc.fac _,
+ hc.uniq (Limits.coneOfSectionCompCoyoneda F X ⟨s, hs⟩)⟩)
+
+variable (J) in
+noncomputable instance coyonedaPreservesLimitsOfShape (X : Cᵒᵖ) :
+ PreservesLimitsOfShape J (coyoneda.obj X) where
+
/-- The coyoneda embeddings jointly reflect limits. -/
-def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
- (t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
- let s' : ∀ s : Cone K, Cone (K ⋙ coyoneda.obj (op s.pt)) := fun s =>
- ⟨PUnit, fun j _ => s.π.app j, fun j₁ j₂ α => funext fun _ => (s.w α).symm⟩
- { lift := fun s => (t (op s.pt)).lift (s' s) PUnit.unit
- fac := fun s j => congr_fun ((t _).fac (s' s) j) PUnit.unit
- uniq := fun s m w => by
- suffices (fun _ : PUnit => m) = (t _).lift (s' s) by apply congr_fun this PUnit.unit
- apply (t _).uniq (s' s) _ fun j => _
- intro j
- funext
- exact w j }
+def coyonedaJointlyReflectsLimits (F : J ⥤ C) (c : Cone F)
+ (hc : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c where
+ lift s := (hc (op s.pt)).lift ((coyoneda.obj (op s.pt)).mapCone s) (𝟙 _)
+ fac s j := by simpa using congr_fun ((hc (op s.pt)).fac
+ ((coyoneda.obj (op s.pt)).mapCone s) j) (𝟙 _)
+ uniq s m hm := by
+ apply (Types.isLimitEquivSections (hc (op s.pt))).injective
+ ext j
+ dsimp [Types.isLimitEquivSections, Types.sectionOfCone]
+ have eq := congr_fun ((hc (op s.pt)).fac ((coyoneda.obj (op s.pt)).mapCone s) j) (𝟙 _)
+ dsimp at eq
+ rw [eq, Category.id_comp, ← hm]
#align category_theory.coyoneda_jointly_reflects_limits CategoryTheory.coyonedaJointlyReflectsLimits
-variable {D : Type u} [SmallCategory D]
+end
-instance yonedaFunctorPreservesLimits : PreservesLimits (@yoneda D _) := by
+/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
+noncomputable instance yonedaPreservesLimits (X : C) :
+ PreservesLimitsOfSize.{t, w} (yoneda.obj X) where
+
+/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
+noncomputable instance coyonedaPreservesLimits (X : Cᵒᵖ) :
+ PreservesLimitsOfSize.{t, w} (coyoneda.obj X) where
+#align category_theory.coyoneda_preserves_limits CategoryTheory.coyonedaPreservesLimits
+
+noncomputable instance yonedaFunctorPreservesLimits :
+ PreservesLimitsOfSize.{t, w} (@yoneda C _) := by
apply preservesLimitsOfEvaluation
intro K
- change PreservesLimits (coyoneda.obj K)
+ change PreservesLimitsOfSize (coyoneda.obj K)
infer_instance
#align category_theory.yoneda_functor_preserves_limits CategoryTheory.yonedaFunctorPreservesLimits
-instance coyonedaFunctorPreservesLimits : PreservesLimits (@coyoneda D _) := by
+noncomputable instance coyonedaFunctorPreservesLimits :
+ PreservesLimitsOfSize.{t, w} (@coyoneda C _) := by
apply preservesLimitsOfEvaluation
intro K
- change PreservesLimits (yoneda.obj K)
+ change PreservesLimitsOfSize (yoneda.obj K)
infer_instance
#align category_theory.coyoneda_functor_preserves_limits CategoryTheory.coyonedaFunctorPreservesLimits
-instance yonedaFunctorReflectsLimits : ReflectsLimits (@yoneda D _) := inferInstance
+instance yonedaFunctorReflectsLimits :
+ ReflectsLimitsOfSize.{t, w} (@yoneda C _) := inferInstance
#align category_theory.yoneda_functor_reflects_limits CategoryTheory.yonedaFunctorReflectsLimits
-instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) := inferInstance
+instance coyonedaFunctorReflectsLimits :
+ ReflectsLimitsOfSize.{t, w} (@coyoneda C _) := inferInstance
#align category_theory.coyoneda_functor_reflects_limits CategoryTheory.coyonedaFunctorReflectsLimits
+namespace Functor
+
+section Representable
+
+variable (F : Cᵒᵖ ⥤ Type v) [F.Representable] {J : Type*} [Category J]
+
+noncomputable instance representablePreservesLimit (G : J ⥤ Cᵒᵖ) :
+ PreservesLimit G F :=
+ preservesLimitOfNatIso _ F.reprW
+
+variable (J) in
+noncomputable instance representablePreservesLimitsOfShape :
+ PreservesLimitsOfShape J F where
+
+noncomputable instance representablePreservesLimits :
+ PreservesLimitsOfSize.{t, w} F where
+
+end Representable
+
+section Corepresentable
+
+variable (F : C ⥤ Type v) [F.Corepresentable] {J : Type*} [Category J]
+
+noncomputable instance corepresentablePreservesLimit (G : J ⥤ C) :
+ PreservesLimit G F :=
+ preservesLimitOfNatIso _ F.coreprW
+
+variable (J) in
+noncomputable instance corepresentablePreservesLimitsOfShape :
+ PreservesLimitsOfShape J F where
+
+noncomputable instance corepresentablePreservesLimits :
+ PreservesLimitsOfSize.{t, w} F where
+
+end Corepresentable
+
+end Functor
+
end CategoryTheory
assert_not_exists AddCommMonoid
@@ -25,7 +25,7 @@ namespace CategoryTheory
namespace Coyoneda
-variable {C : Type v} [SmallCategory C]
+variable {C : Type u} [Category.{v} C]
/-- The colimit cocone over `coyoneda.obj X`, with cocone point `PUnit`.
-/
Switch from the strong version of UnivLE ∀ α : Type max u v, Small.{v} α
to the weaker version ∀ α : Type u, Small.{v} α
.
Transfer Has/Preserves/Reflects(Co)limitsOfSize from a larger size (higher universe) to a smaller size.
In a few places it's now necessary to make the type explicit (for Lean to infer the Small
instance, I think).
Also prove a characterization of UnivLE and the totality of the UnivLE relation.
A pared down version of #7695.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -162,7 +162,4 @@ instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) := infer
end CategoryTheory
-assert_not_exists Set.range
-
--- Porting note: after the port see if this import can be removed
--- assert_not_exists AddCommMonoid
+assert_not_exists AddCommMonoid
@@ -154,12 +154,10 @@ instance coyonedaFunctorPreservesLimits : PreservesLimits (@coyoneda D _) := by
infer_instance
#align category_theory.coyoneda_functor_preserves_limits CategoryTheory.coyonedaFunctorPreservesLimits
-instance yonedaFunctorReflectsLimits : ReflectsLimits (@yoneda D _) :=
- Limits.fullyFaithfulReflectsLimits _
+instance yonedaFunctorReflectsLimits : ReflectsLimits (@yoneda D _) := inferInstance
#align category_theory.yoneda_functor_reflects_limits CategoryTheory.yonedaFunctorReflectsLimits
-instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) :=
- Limits.fullyFaithfulReflectsLimits _
+instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) := inferInstance
#align category_theory.coyoneda_functor_reflects_limits CategoryTheory.coyonedaFunctorReflectsLimits
end CategoryTheory
@@ -78,16 +78,13 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X) where
{ preservesLimit := fun {K} =>
{ preserves := fun {c} t =>
{ lift := fun s x =>
- Quiver.Hom.unop (t.lift ⟨op X, fun j => (s.π.app j x).op, fun j₁ j₂ α => _⟩)
+ Quiver.Hom.unop (t.lift ⟨op X, fun j => (s.π.app j x).op, fun j₁ j₂ α => by
+ simp [← s.w α]⟩)
fac := fun s j => funext fun x => Quiver.Hom.op_inj (t.fac _ _)
uniq := fun s m w =>
funext fun x => by
- refine' Quiver.Hom.op_inj (t.uniq ⟨op X, _, _⟩ _ fun j => _)
- · intro X _ _ _ _ _ s _ _ _ α -- Porting note: refine' gave a crazy goal
- dsimp
- simp [← s.w α]
- -- See library note [dsimp, simp]
- · exact Quiver.Hom.unop_inj (congrFun (w j) x) } } }
+ refine Quiver.Hom.op_inj (t.uniq ⟨op X, _, _⟩ _ fun j => ?_)
+ exact Quiver.Hom.unop_inj (congrFun (w j) x) } } }
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
@@ -73,8 +73,8 @@ variable {C : Type u} [Category.{v} C]
open Limits
/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
-instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
- where preservesLimitsOfShape {J} 𝒥 :=
+instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X) where
+ preservesLimitsOfShape {J} 𝒥 :=
{ preservesLimit := fun {K} =>
{ preserves := fun {c} t =>
{ lift := fun s x =>
@@ -91,8 +91,8 @@ instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
#align category_theory.yoneda_preserves_limits CategoryTheory.yonedaPreservesLimits
/-- The coyoneda embedding `coyoneda.obj X : C ⥤ Type v` for `X : Cᵒᵖ` preserves limits. -/
-instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X)
- where preservesLimitsOfShape {J} 𝒥 :=
+instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X) where
+ preservesLimitsOfShape {J} 𝒥 :=
{ preservesLimit := fun {K} =>
{ preserves := fun {c} t =>
{ lift := fun s x =>
@@ -72,7 +72,7 @@ variable {C : Type u} [Category.{v} C]
open Limits
-/--n The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
+/-- The yoneda embedding `yoneda.obj X : Cᵒᵖ ⥤ Type v` for `X : C` preserves limits. -/
instance yonedaPreservesLimits (X : C) : PreservesLimits (yoneda.obj X)
where preservesLimitsOfShape {J} 𝒥 :=
{ preservesLimit := fun {K} =>
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.limits.yoneda
-! leanprover-community/mathlib commit e97cf15cd1aec9bd5c193b2ffac5a6dc9118912b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.FunctorCategory
import Mathlib.Util.AssertExists
+#align_import category_theory.limits.yoneda from "leanprover-community/mathlib"@"e97cf15cd1aec9bd5c193b2ffac5a6dc9118912b"
+
/-!
# Limit properties relating to the (co)yoneda embedding.
@@ -35,8 +35,7 @@ variable {C : Type v} [SmallCategory C]
@[simps]
def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X) where
pt := PUnit
- ι := { app := by aesop_cat
- naturality := by aesop_cat }
+ ι := { app := by aesop_cat }
#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCocone
/-- The proposed colimit cocone over `coyoneda.obj X` is a colimit cocone.
@@ -20,13 +20,7 @@ We calculate the colimit of `Y ↦ (X ⟶ Y)`, which is just `PUnit`.
We also show the (co)yoneda embeddings preserve limits and jointly reflect them.
-/
--- import Mathlib.Tactic.AssertExists -- Porting note: see end of file
-
-open Opposite
-
-open CategoryTheory
-
-open CategoryTheory.Limits
+open Opposite CategoryTheory Limits
universe w v u
fix-comments.py
on all files.@@ -36,7 +36,7 @@ namespace Coyoneda
variable {C : Type v} [SmallCategory C]
-/-- The colimit cocone over `coyoneda.obj X`, with cocone point `punit`.
+/-- The colimit cocone over `coyoneda.obj X`, with cocone point `PUnit`.
-/
@[simps]
def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X) where
@@ -68,7 +68,7 @@ instance (X : Cᵒᵖ) : HasColimit (coyoneda.obj X) :=
{ cocone := _
isColimit := colimitCoconeIsColimit X }
-/-- The colimit of `coyoneda.obj X` is isomorphic to `punit`.
+/-- The colimit of `coyoneda.obj X` is isomorphic to `PUnit`.
-/
noncomputable def colimitCoyonedaIso (X : Cᵒᵖ) : colimit (coyoneda.obj X) ≅ PUnit := by
apply colimit.isoColimitCocone
@@ -9,6 +9,7 @@ Authors: Scott Morrison, Bhavik Mehta
! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.FunctorCategory
+import Mathlib.Util.AssertExists
/-!
# Limit properties relating to the (co)yoneda embedding.
@@ -176,9 +177,7 @@ instance coyonedaFunctorReflectsLimits : ReflectsLimits (@coyoneda D _) :=
end CategoryTheory
--- Porting note: assert_not_exists doesn't exist in Lean 4 now. Is there value in keeping this?
--- We don't need to have developed any algebra or set theory to reach (at least) this point
--- in the category theory hierarchy.
--- assert_not_exists Set.range
+assert_not_exists Set.range
+-- Porting note: after the port see if this import can be removed
-- assert_not_exists AddCommMonoid
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -106,8 +106,7 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
{ preserves := fun {c} t =>
{ lift := fun s x =>
t.lift
- ⟨unop X, fun j => s.π.app j x, fun j₁ j₂ α =>
- by
+ ⟨unop X, fun j => s.π.app j x, fun j₁ j₂ α => by
dsimp
simp [← s.w α]⟩
-- See library note [dsimp, simp]
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -53,7 +53,8 @@ def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
fac s Y := by
funext f
convert congr_fun (s.w f).symm (𝟙 (unop X))
- simp
+ simp only [coyoneda_obj_obj, Functor.const_obj_obj, types_comp_apply,
+ coyoneda_obj_map, Category.id_comp]
uniq s m w := by
apply funext; rintro ⟨⟩
dsimp
vscode is already configured by .vscode/settings.json
to trim these on save. It's not clear how they've managed to stick around.
By doing this all in one PR now, it avoids getting random whitespace diffs in PRs later.
This was done with a regex search in vscode,
@@ -55,7 +55,7 @@ def colimitCoconeIsColimit (X : Cᵒᵖ) : IsColimit (colimitCocone X)
convert congr_fun (s.w f).symm (𝟙 (unop X))
simp
uniq s m w := by
- apply funext; rintro ⟨⟩
+ apply funext; rintro ⟨⟩
dsimp
rw [← w]
simp
@@ -130,7 +130,7 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
suffices (fun _ : PUnit => m.unop) = (t s.pt.unop).lift (s' s) by
apply congr_fun this PUnit.unit
apply (t _).uniq (s' s) _ fun j => _
- intro j
+ intro j
funext
exact Quiver.Hom.op_inj (w j) }
#align category_theory.yoneda_jointly_reflects_limits CategoryTheory.yonedaJointlyReflectsLimits
@@ -182,4 +182,3 @@ end CategoryTheory
-- assert_not_exists Set.range
-- assert_not_exists AddCommMonoid
-
@@ -40,9 +40,7 @@ variable {C : Type v} [SmallCategory C]
@[simps]
def colimitCocone (X : Cᵒᵖ) : Cocone (coyoneda.obj X) where
pt := PUnit
- ι := { app := fun {Y} _ => by
- aesop_cat
- exact ⟨⟩
+ ι := { app := by aesop_cat
naturality := by aesop_cat }
#align category_theory.coyoneda.colimit_cocone CategoryTheory.Coyoneda.colimitCocone
@@ -121,7 +121,7 @@ instance coyonedaPreservesLimits (X : Cᵒᵖ) : PreservesLimits (coyoneda.obj X
/-- The yoneda embeddings jointly reflect limits. -/
def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒᵖ) (c : Cone K)
- (t : ∀ X : C, IsLimit (Functor.mapCone (yoneda.obj X) c)) : IsLimit c :=
+ (t : ∀ X : C, IsLimit ((yoneda.obj X).mapCone c)) : IsLimit c :=
let s' : ∀ s : Cone K, Cone (K ⋙ yoneda.obj s.pt.unop) := fun s =>
⟨PUnit, fun j _ => (s.π.app j).unop, fun j₁ j₂ α =>
funext fun _ => Quiver.Hom.op_inj (s.w α).symm⟩
@@ -139,7 +139,7 @@ def yonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ Cᵒ
/-- The coyoneda embeddings jointly reflect limits. -/
def coyonedaJointlyReflectsLimits (J : Type w) [SmallCategory J] (K : J ⥤ C) (c : Cone K)
- (t : ∀ X : Cᵒᵖ, IsLimit (Functor.mapCone (coyoneda.obj X) c)) : IsLimit c :=
+ (t : ∀ X : Cᵒᵖ, IsLimit ((coyoneda.obj X).mapCone c)) : IsLimit c :=
let s' : ∀ s : Cone K, Cone (K ⋙ coyoneda.obj (op s.pt)) := fun s =>
⟨PUnit, fun j _ => s.π.app j, fun j₁ j₂ α => funext fun _ => (s.w α).symm⟩
{ lift := fun s => (t (op s.pt)).lift (s' s) PUnit.unit
All dependencies are ported!