category_theory.limits.preserves.basic
⟷
Mathlib.CategoryTheory.Limits.Preserves.Basic
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/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -773,8 +773,9 @@ def reflectsSmallestLimitsOfReflectsLimits (F : C ⥤ D) [ReflectsLimitsOfSize.{
/-- If the limit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the limit of `F`.
-/
-def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
- [HasLimit F] [PreservesLimit F G] : ReflectsLimit F G
+def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D)
+ [CategoryTheory.Functor.ReflectsIsomorphisms G] [HasLimit F] [PreservesLimit F G] :
+ ReflectsLimit F G
where reflects c t := by
apply is_limit.of_point_iso (limit.is_limit F)
change is_iso ((cones.forget _).map ((limit.is_limit F).liftConeMorphism c))
@@ -788,8 +789,9 @@ def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIso
/-- If `C` has limits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects limits of shape `J`.
-/
-def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
- [HasLimitsOfShape J C] [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G
+def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D}
+ [CategoryTheory.Functor.ReflectsIsomorphisms G] [HasLimitsOfShape J C]
+ [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G
where ReflectsLimit F := reflectsLimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_limits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsIsomorphisms
-/
@@ -798,7 +800,7 @@ def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphi
/-- If `C` has limits and `G` preserves limits, then if `G` reflects isomorphisms then it reflects
limits.
-/
-def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
+def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [CategoryTheory.Functor.ReflectsIsomorphisms G]
[HasLimitsOfSize.{w', w} C] [PreservesLimitsOfSize.{w', w} G] : ReflectsLimitsOfSize.{w', w} G
where ReflectsLimitsOfShape J 𝒥₁ := reflects_limits_of_shape_of_reflects_isomorphisms
#align category_theory.limits.reflects_limits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfReflectsIsomorphisms
@@ -904,8 +906,9 @@ def reflectsSmallestColimitsOfReflectsColimits (F : C ⥤ D) [ReflectsColimitsOf
/-- If the colimit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the colimit of `F`.
-/
-def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
- [HasColimit F] [PreservesColimit F G] : ReflectsColimit F G
+def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D)
+ [CategoryTheory.Functor.ReflectsIsomorphisms G] [HasColimit F] [PreservesColimit F G] :
+ ReflectsColimit F G
where reflects c t :=
by
apply is_colimit.of_point_iso (colimit.is_colimit F)
@@ -921,8 +924,9 @@ def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsI
If `C` has colimits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects colimits of shape `J`.
-/
-def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
- [HasColimitsOfShape J C] [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G
+def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D}
+ [CategoryTheory.Functor.ReflectsIsomorphisms G] [HasColimitsOfShape J C]
+ [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G
where ReflectsColimit F := reflectsColimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsIsomorphisms
-/
@@ -932,9 +936,9 @@ def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorp
If `C` has colimits and `G` preserves colimits, then if `G` reflects isomorphisms then it reflects
colimits.
-/
-def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
- [HasColimitsOfSize.{w', w} C] [PreservesColimitsOfSize.{w', w} G] :
- ReflectsColimitsOfSize.{w', w} G
+def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D}
+ [CategoryTheory.Functor.ReflectsIsomorphisms G] [HasColimitsOfSize.{w', w} C]
+ [PreservesColimitsOfSize.{w', w} G] : ReflectsColimitsOfSize.{w', w} G
where ReflectsColimitsOfShape J 𝒥₁ := reflects_colimits_of_shape_of_reflects_isomorphisms
#align category_theory.limits.reflects_colimits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfReflectsIsomorphisms
-/
@@ -945,7 +949,8 @@ variable (F : C ⥤ D)
#print CategoryTheory.Limits.fullyFaithfulReflectsLimits /-
/-- A fully faithful functor reflects limits. -/
-def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F
+def fullyFaithfulReflectsLimits [CategoryTheory.Functor.Full F]
+ [CategoryTheory.Functor.Faithful F] : ReflectsLimitsOfSize.{w, w'} F
where ReflectsLimitsOfShape J 𝒥₁ :=
{
ReflectsLimit := fun K =>
@@ -962,7 +967,8 @@ def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w,
#print CategoryTheory.Limits.fullyFaithfulReflectsColimits /-
/-- A fully faithful functor reflects colimits. -/
-def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F
+def fullyFaithfulReflectsColimits [CategoryTheory.Functor.Full F]
+ [CategoryTheory.Functor.Faithful F] : ReflectsColimitsOfSize.{w, w'} F
where ReflectsColimitsOfShape J 𝒥₁ :=
{
ReflectsColimit := fun K =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Reid Barton, Bhavik Mehta, Jakob von Raumer
-/
-import Mathbin.CategoryTheory.Limits.HasLimits
+import CategoryTheory.Limits.HasLimits
#align_import category_theory.limits.preserves.basic from "leanprover-community/mathlib"@"832f7b9162039c28b9361289c8681f155cae758f"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Reid Barton, Bhavik Mehta, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.limits.preserves.basic
-! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.HasLimits
+#align_import category_theory.limits.preserves.basic from "leanprover-community/mathlib"@"832f7b9162039c28b9361289c8681f155cae758f"
+
/-!
# Preservation and reflection of (co)limits.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -132,6 +132,7 @@ attribute [instance 100] preserves_limits_of_shape.preserves_limit
preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit
preserves_colimits_of_size.preserves_colimits_of_shape
+#print CategoryTheory.Limits.isLimitOfPreserves /-
-- see Note [lower instance priority]
/-- A convenience function for `preserves_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -140,7 +141,9 @@ def isLimitOfPreserves (F : C ⥤ D) {c : Cone K} (t : IsLimit c) [PreservesLimi
IsLimit (F.mapCone c) :=
PreservesLimit.preserves t
#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreserves
+-/
+#print CategoryTheory.Limits.isColimitOfPreserves /-
/--
A convenience function for `preserves_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -149,6 +152,7 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
IsColimit (F.mapCocone c) :=
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
+-/
#print CategoryTheory.Limits.preservesLimit_subsingleton /-
instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F) :=
@@ -260,12 +264,14 @@ instance compPreservesColimits [PreservesColimitsOfSize.{w', w} F]
end
+#print CategoryTheory.Limits.preservesLimitOfPreservesLimitCone /-
/-- If F preserves one limit cone for the diagram K,
then it preserves any limit cone for K. -/
def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t)
(hF : IsLimit (F.mapCone t)) : PreservesLimit K F :=
⟨fun t' h' => IsLimit.ofIsoLimit hF (Functor.mapIso _ (IsLimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitCone
+-/
#print CategoryTheory.Limits.preservesLimitOfIsoDiagram /-
/-- Transfer preservation of limits along a natural isomorphism in the diagram. -/
@@ -302,6 +308,7 @@ def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize
#align category_theory.limits.preserves_limits_of_nat_iso CategoryTheory.Limits.preservesLimitsOfNatIso
-/
+#print CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv /-
/-- Transfer preservation of limits along a equivalence in the shape. -/
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F
@@ -314,6 +321,7 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
refine' cones.ext (iso.refl _) fun j => _
· dsimp; simp [← functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
+-/
#print CategoryTheory.Limits.preservesLimitsOfSizeShrink /-
-- See library note [dsimp, simp].
@@ -334,12 +342,14 @@ def preservesSmallestLimitsOfPreservesLimits (F : C ⥤ D) [PreservesLimitsOfSiz
#align category_theory.limits.preserves_smallest_limits_of_preserves_limits CategoryTheory.Limits.preservesSmallestLimitsOfPreservesLimits
-/
+#print CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone /-
/-- If F preserves one colimit cocone for the diagram K,
then it preserves any colimit cocone for K. -/
def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : IsColimit t)
(hF : IsColimit (F.mapCocone t)) : PreservesColimit K F :=
⟨fun t' h' => IsColimit.ofIsoColimit hF (Functor.mapIso _ (IsColimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone
+-/
#print CategoryTheory.Limits.preservesColimitOfIsoDiagram /-
/-- Transfer preservation of colimits along a natural isomorphism in the shape. -/
@@ -377,6 +387,7 @@ def preservesColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOf
#align category_theory.limits.preserves_colimits_of_nat_iso CategoryTheory.Limits.preservesColimitsOfNatIso
-/
+#print CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv /-
/-- Transfer preservation of colimits along a equivalence in the shape. -/
def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F
@@ -389,6 +400,7 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
refine' cocones.ext (iso.refl _) fun j => _
· dsimp; simp [← functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
+-/
#print CategoryTheory.Limits.preservesColimitsOfSizeShrink /-
-- See library note [dsimp, simp].
@@ -505,6 +517,7 @@ abbrev ReflectsColimits (F : C ⥤ D) :=
#align category_theory.limits.reflects_colimits CategoryTheory.Limits.ReflectsColimits
-/
+#print CategoryTheory.Limits.isLimitOfReflects /-
/-- A convenience function for `reflects_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
@@ -512,7 +525,9 @@ def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (F.mapCone c)) [Re
IsLimit c :=
ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
+-/
+#print CategoryTheory.Limits.isColimitOfReflects /-
/--
A convenience function for `reflects_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -521,6 +536,7 @@ def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (F.mapCocone
[ReflectsColimit K F] : IsColimit c :=
ReflectsColimit.reflects t
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
+-/
#print CategoryTheory.Limits.reflectsLimit_subsingleton /-
instance reflectsLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsLimit K F) := by
@@ -724,6 +740,7 @@ def reflectsLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfSize.{
#align category_theory.limits.reflects_limits_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfNatIso
-/
+#print CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv /-
/-- Transfer reflection of limits along a equivalence in the shape. -/
def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F
@@ -735,6 +752,7 @@ def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
apply is_limit.of_iso_limit _ (functor.map_cone_whisker _).symm
exact is_limit.whisker_equivalence t _ }
#align category_theory.limits.reflects_limits_of_shape_of_equiv CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv
+-/
#print CategoryTheory.Limits.reflectsLimitsOfSizeShrink /-
/-- `reflects_limits_of_size_shrink.{w w'} F` tries to obtain `reflects_limits_of_size.{w w'} F`
@@ -853,6 +871,7 @@ def reflectsColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfSi
#align category_theory.limits.reflects_colimits_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfNatIso
-/
+#print CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv /-
/-- Transfer reflection of colimits along a equivalence in the shape. -/
def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F
@@ -864,6 +883,7 @@ def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
apply is_colimit.of_iso_colimit _ (functor.map_cocone_whisker _).symm
exact is_colimit.whisker_equivalence t _ }
#align category_theory.limits.reflects_colimits_of_shape_of_equiv CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv
+-/
#print CategoryTheory.Limits.reflectsColimitsOfSizeShrink /-
/-- `reflects_colimits_of_size_shrink.{w w'} F` tries to obtain `reflects_colimits_of_size.{w w'} F`
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -128,8 +128,9 @@ abbrev PreservesColimits (F : C ⥤ D) :=
#align category_theory.limits.preserves_colimits CategoryTheory.Limits.PreservesColimits
-/
-attribute [instance 100]
- preserves_limits_of_shape.preserves_limit preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit preserves_colimits_of_size.preserves_colimits_of_shape
+attribute [instance 100] preserves_limits_of_shape.preserves_limit
+ preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit
+ preserves_colimits_of_size.preserves_colimits_of_shape
-- see Note [lower instance priority]
/-- A convenience function for `preserves_limit`, which takes the functor as an explicit argument to
@@ -163,26 +164,25 @@ instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
#print CategoryTheory.Limits.preservesLimitsOfShape_subsingleton /-
instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (PreservesLimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
+ Subsingleton (PreservesLimitsOfShape J F) := by constructor; intros; cases a; cases b; congr
#align category_theory.limits.preserves_limits_of_shape_subsingleton CategoryTheory.Limits.preservesLimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.preservesColimitsOfShape_subsingleton /-
instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (PreservesColimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
+ Subsingleton (PreservesColimitsOfShape J F) := by constructor; intros; cases a; cases b; congr
#align category_theory.limits.preserves_colimits_of_shape_subsingleton CategoryTheory.Limits.preservesColimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.preserves_limits_subsingleton /-
instance preserves_limits_subsingleton (F : C ⥤ D) :
- Subsingleton (PreservesLimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b; cc
+ Subsingleton (PreservesLimitsOfSize.{w', w} F) := by constructor; intros; cases a; cases b; cc
#align category_theory.limits.preserves_limits_subsingleton CategoryTheory.Limits.preserves_limits_subsingleton
-/
#print CategoryTheory.Limits.preserves_colimits_subsingleton /-
instance preserves_colimits_subsingleton (F : C ⥤ D) :
- Subsingleton (PreservesColimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b;
- cc
+ Subsingleton (PreservesColimitsOfSize.{w', w} F) := by constructor; intros; cases a; cases b; cc
#align category_theory.limits.preserves_colimits_subsingleton CategoryTheory.Limits.preserves_colimits_subsingleton
-/
@@ -536,25 +536,25 @@ instance reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
#print CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton /-
instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (ReflectsLimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
+ Subsingleton (ReflectsLimitsOfShape J F) := by constructor; intros; cases a; cases b; congr
#align category_theory.limits.reflects_limits_of_shape_subsingleton CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton /-
instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (ReflectsColimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
+ Subsingleton (ReflectsColimitsOfShape J F) := by constructor; intros; cases a; cases b; congr
#align category_theory.limits.reflects_colimits_of_shape_subsingleton CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.reflects_limits_subsingleton /-
instance reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimitsOfSize.{w', w} F) :=
- by constructor; intros ; cases a; cases b; cc
+ by constructor; intros; cases a; cases b; cc
#align category_theory.limits.reflects_limits_subsingleton CategoryTheory.Limits.reflects_limits_subsingleton
-/
#print CategoryTheory.Limits.reflects_colimits_subsingleton /-
instance reflects_colimits_subsingleton (F : C ⥤ D) :
- Subsingleton (ReflectsColimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b; cc
+ Subsingleton (ReflectsColimitsOfSize.{w', w} F) := by constructor; intros; cases a; cases b; cc
#align category_theory.limits.reflects_colimits_subsingleton CategoryTheory.Limits.reflects_colimits_subsingleton
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -131,12 +131,6 @@ abbrev PreservesColimits (F : C ⥤ D) :=
attribute [instance 100]
preserves_limits_of_shape.preserves_limit preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit preserves_colimits_of_size.preserves_colimits_of_shape
-/- warning: category_theory.limits.is_limit_of_preserves -> CategoryTheory.Limits.isLimitOfPreserves is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c))
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreservesₓ'. -/
-- see Note [lower instance priority]
/-- A convenience function for `preserves_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -146,12 +140,6 @@ def isLimitOfPreserves (F : C ⥤ D) {c : Cone K} (t : IsLimit c) [PreservesLimi
PreservesLimit.preserves t
#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreserves
-/- warning: category_theory.limits.is_colimit_of_preserves -> CategoryTheory.Limits.isColimitOfPreserves is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c))
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreservesₓ'. -/
/--
A convenience function for `preserves_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -272,12 +260,6 @@ instance compPreservesColimits [PreservesColimitsOfSize.{w', w} F]
end
-/- warning: category_theory.limits.preserves_limit_of_preserves_limit_cone -> CategoryTheory.Limits.preservesLimitOfPreservesLimitCone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F t)) -> (CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K t)) -> (CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitConeₓ'. -/
/-- If F preserves one limit cone for the diagram K,
then it preserves any limit cone for K. -/
def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t)
@@ -320,12 +302,6 @@ def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize
#align category_theory.limits.preserves_limits_of_nat_iso CategoryTheory.Limits.preservesLimitsOfNatIso
-/
-/- warning: category_theory.limits.preserves_limits_of_shape_of_equiv -> CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-but is expected to have type
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquivₓ'. -/
/-- Transfer preservation of limits along a equivalence in the shape. -/
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F
@@ -358,12 +334,6 @@ def preservesSmallestLimitsOfPreservesLimits (F : C ⥤ D) [PreservesLimitsOfSiz
#align category_theory.limits.preserves_smallest_limits_of_preserves_limits CategoryTheory.Limits.preservesSmallestLimitsOfPreservesLimits
-/
-/- warning: category_theory.limits.preserves_colimit_of_preserves_colimit_cocone -> CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F t)) -> (CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K t)) -> (CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCoconeₓ'. -/
/-- If F preserves one colimit cocone for the diagram K,
then it preserves any colimit cocone for K. -/
def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : IsColimit t)
@@ -407,12 +377,6 @@ def preservesColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOf
#align category_theory.limits.preserves_colimits_of_nat_iso CategoryTheory.Limits.preservesColimitsOfNatIso
-/
-/- warning: category_theory.limits.preserves_colimits_of_shape_of_equiv -> CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-but is expected to have type
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquivₓ'. -/
/-- Transfer preservation of colimits along a equivalence in the shape. -/
def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F
@@ -541,12 +505,6 @@ abbrev ReflectsColimits (F : C ⥤ D) :=
#align category_theory.limits.reflects_colimits CategoryTheory.Limits.ReflectsColimits
-/
-/- warning: category_theory.limits.is_limit_of_reflects -> CategoryTheory.Limits.isLimitOfReflects is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflectsₓ'. -/
/-- A convenience function for `reflects_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
@@ -555,12 +513,6 @@ def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (F.mapCone c)) [Re
ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
-/- warning: category_theory.limits.is_colimit_of_reflects -> CategoryTheory.Limits.isColimitOfReflects is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
-but is expected to have type
- forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflectsₓ'. -/
/--
A convenience function for `reflects_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -772,12 +724,6 @@ def reflectsLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfSize.{
#align category_theory.limits.reflects_limits_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfNatIso
-/
-/- warning: category_theory.limits.reflects_limits_of_shape_of_equiv -> CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-but is expected to have type
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.reflects_limits_of_shape_of_equiv CategoryTheory.Limits.reflectsLimitsOfShapeOfEquivₓ'. -/
/-- Transfer reflection of limits along a equivalence in the shape. -/
def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F
@@ -907,12 +853,6 @@ def reflectsColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfSi
#align category_theory.limits.reflects_colimits_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfNatIso
-/
-/- warning: category_theory.limits.reflects_colimits_of_shape_of_equiv -> CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-but is expected to have type
- forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.reflects_colimits_of_shape_of_equiv CategoryTheory.Limits.reflectsColimitsOfShapeOfEquivₓ'. -/
/-- Transfer reflection of colimits along a equivalence in the shape. -/
def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -175,48 +175,25 @@ instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
#print CategoryTheory.Limits.preservesLimitsOfShape_subsingleton /-
instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (PreservesLimitsOfShape J F) :=
- by
- constructor
- intros
- cases a
- cases b
- congr
+ Subsingleton (PreservesLimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
#align category_theory.limits.preserves_limits_of_shape_subsingleton CategoryTheory.Limits.preservesLimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.preservesColimitsOfShape_subsingleton /-
instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (PreservesColimitsOfShape J F) :=
- by
- constructor
- intros
- cases a
- cases b
- congr
+ Subsingleton (PreservesColimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
#align category_theory.limits.preserves_colimits_of_shape_subsingleton CategoryTheory.Limits.preservesColimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.preserves_limits_subsingleton /-
instance preserves_limits_subsingleton (F : C ⥤ D) :
- Subsingleton (PreservesLimitsOfSize.{w', w} F) :=
- by
- constructor
- intros
- cases a
- cases b
- cc
+ Subsingleton (PreservesLimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b; cc
#align category_theory.limits.preserves_limits_subsingleton CategoryTheory.Limits.preserves_limits_subsingleton
-/
#print CategoryTheory.Limits.preserves_colimits_subsingleton /-
instance preserves_colimits_subsingleton (F : C ⥤ D) :
- Subsingleton (PreservesColimitsOfSize.{w', w} F) :=
- by
- constructor
- intros
- cases a
- cases b
+ Subsingleton (PreservesColimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b;
cc
#align category_theory.limits.preserves_colimits_subsingleton CategoryTheory.Limits.preserves_colimits_subsingleton
-/
@@ -359,8 +336,7 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
have := (is_limit_of_preserves F (t.whisker_equivalence e)).whiskerEquivalence e.symm
apply ((is_limit.postcompose_hom_equiv equ _).symm this).ofIsoLimit
refine' cones.ext (iso.refl _) fun j => _
- · dsimp
- simp [← functor.map_comp] }
+ · dsimp; simp [← functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
#print CategoryTheory.Limits.preservesLimitsOfSizeShrink /-
@@ -447,8 +423,7 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
have := (is_colimit_of_preserves F (t.whisker_equivalence e)).whiskerEquivalence e.symm
apply ((is_colimit.precompose_inv_equiv equ _).symm this).ofIsoColimit
refine' cocones.ext (iso.refl _) fun j => _
- · dsimp
- simp [← functor.map_comp] }
+ · dsimp; simp [← functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
#print CategoryTheory.Limits.preservesColimitsOfSizeShrink /-
@@ -609,48 +584,25 @@ instance reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
#print CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton /-
instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (ReflectsLimitsOfShape J F) :=
- by
- constructor
- intros
- cases a
- cases b
- congr
+ Subsingleton (ReflectsLimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
#align category_theory.limits.reflects_limits_of_shape_subsingleton CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton /-
instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
- Subsingleton (ReflectsColimitsOfShape J F) :=
- by
- constructor
- intros
- cases a
- cases b
- congr
+ Subsingleton (ReflectsColimitsOfShape J F) := by constructor; intros ; cases a; cases b; congr
#align category_theory.limits.reflects_colimits_of_shape_subsingleton CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton
-/
#print CategoryTheory.Limits.reflects_limits_subsingleton /-
instance reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimitsOfSize.{w', w} F) :=
- by
- constructor
- intros
- cases a
- cases b
- cc
+ by constructor; intros ; cases a; cases b; cc
#align category_theory.limits.reflects_limits_subsingleton CategoryTheory.Limits.reflects_limits_subsingleton
-/
#print CategoryTheory.Limits.reflects_colimits_subsingleton /-
instance reflects_colimits_subsingleton (F : C ⥤ D) :
- Subsingleton (ReflectsColimitsOfSize.{w', w} F) :=
- by
- constructor
- intros
- cases a
- cases b
- cc
+ Subsingleton (ReflectsColimitsOfSize.{w', w} F) := by constructor; intros ; cases a; cases b; cc
#align category_theory.limits.reflects_colimits_subsingleton CategoryTheory.Limits.reflects_colimits_subsingleton
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -128,7 +128,7 @@ abbrev PreservesColimits (F : C ⥤ D) :=
#align category_theory.limits.preserves_colimits CategoryTheory.Limits.PreservesColimits
-/
-attribute [instance]
+attribute [instance 100]
preserves_limits_of_shape.preserves_limit preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit preserves_colimits_of_size.preserves_colimits_of_shape
/- warning: category_theory.limits.is_limit_of_preserves -> CategoryTheory.Limits.isLimitOfPreserves is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -131,7 +131,12 @@ abbrev PreservesColimits (F : C ⥤ D) :=
attribute [instance]
preserves_limits_of_shape.preserves_limit preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit preserves_colimits_of_size.preserves_colimits_of_shape
-#print CategoryTheory.Limits.isLimitOfPreserves /-
+/- warning: category_theory.limits.is_limit_of_preserves -> CategoryTheory.Limits.isLimitOfPreserves is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c))
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreservesₓ'. -/
-- see Note [lower instance priority]
/-- A convenience function for `preserves_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -140,9 +145,13 @@ def isLimitOfPreserves (F : C ⥤ D) {c : Cone K} (t : IsLimit c) [PreservesLimi
IsLimit (F.mapCone c) :=
PreservesLimit.preserves t
#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreserves
--/
-#print CategoryTheory.Limits.isColimitOfPreserves /-
+/- warning: category_theory.limits.is_colimit_of_preserves -> CategoryTheory.Limits.isColimitOfPreserves is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c))
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c) -> (forall [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreservesₓ'. -/
/--
A convenience function for `preserves_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -151,7 +160,6 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
IsColimit (F.mapCocone c) :=
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
--/
#print CategoryTheory.Limits.preservesLimit_subsingleton /-
instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F) :=
@@ -287,14 +295,18 @@ instance compPreservesColimits [PreservesColimitsOfSize.{w', w} F]
end
-#print CategoryTheory.Limits.preservesLimitOfPreservesLimitCone /-
+/- warning: category_theory.limits.preserves_limit_of_preserves_limit_cone -> CategoryTheory.Limits.preservesLimitOfPreservesLimitCone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F t)) -> (CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K t)) -> (CategoryTheory.Limits.PreservesLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitConeₓ'. -/
/-- If F preserves one limit cone for the diagram K,
then it preserves any limit cone for K. -/
def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t)
(hF : IsLimit (F.mapCone t)) : PreservesLimit K F :=
⟨fun t' h' => IsLimit.ofIsoLimit hF (Functor.mapIso _ (IsLimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitCone
--/
#print CategoryTheory.Limits.preservesLimitOfIsoDiagram /-
/-- Transfer preservation of limits along a natural isomorphism in the diagram. -/
@@ -370,14 +382,18 @@ def preservesSmallestLimitsOfPreservesLimits (F : C ⥤ D) [PreservesLimitsOfSiz
#align category_theory.limits.preserves_smallest_limits_of_preserves_limits CategoryTheory.Limits.preservesSmallestLimitsOfPreservesLimits
-/
-#print CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone /-
+/- warning: category_theory.limits.preserves_colimit_of_preserves_colimit_cocone -> CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F t)) -> (CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} {F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2} {t : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K t) -> (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K t)) -> (CategoryTheory.Limits.PreservesColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCoconeₓ'. -/
/-- If F preserves one colimit cocone for the diagram K,
then it preserves any colimit cocone for K. -/
def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : IsColimit t)
(hF : IsColimit (F.mapCocone t)) : PreservesColimit K F :=
⟨fun t' h' => IsColimit.ofIsoColimit hF (Functor.mapIso _ (IsColimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone
--/
#print CategoryTheory.Limits.preservesColimitOfIsoDiagram /-
/-- Transfer preservation of colimits along a natural isomorphism in the shape. -/
@@ -550,7 +566,12 @@ abbrev ReflectsColimits (F : C ⥤ D) :=
#align category_theory.limits.reflects_colimits CategoryTheory.Limits.ReflectsColimits
-/
-#print CategoryTheory.Limits.isLimitOfReflects /-
+/- warning: category_theory.limits.is_limit_of_reflects -> CategoryTheory.Limits.isLimitOfReflects is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsLimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsLimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflectsₓ'. -/
/-- A convenience function for `reflects_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
@@ -558,9 +579,13 @@ def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (F.mapCone c)) [Re
IsLimit c :=
ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
--/
-#print CategoryTheory.Limits.isColimitOfReflects /-
+/- warning: category_theory.limits.is_colimit_of_reflects -> CategoryTheory.Limits.isColimitOfReflects is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
+but is expected to have type
+ forall {C : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u3, u5} C] {D : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u4, u6} D] {J : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} J] {K : CategoryTheory.Functor.{u1, u3, u2, u5} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u3, u4, u5, u6} C _inst_1 D _inst_2) {c : CategoryTheory.Limits.Cocone.{u1, u3, u2, u5} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsColimit.{u1, u4, u2, u6} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCocone.{u1, u3, u4, u2, u5, u6} J _inst_3 C _inst_1 D _inst_2 F K c)) -> (forall [_inst_4 : CategoryTheory.Limits.ReflectsColimit.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 J _inst_3 K F], CategoryTheory.Limits.IsColimit.{u1, u3, u2, u5} J _inst_3 C _inst_1 K c)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflectsₓ'. -/
/--
A convenience function for `reflects_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -569,7 +594,6 @@ def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (F.mapCocone
[ReflectsColimit K F] : IsColimit c :=
ReflectsColimit.reflects t
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
--/
#print CategoryTheory.Limits.reflectsLimit_subsingleton /-
instance reflectsLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsLimit K F) := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/62e8311c791f02c47451bf14aa2501048e7c2f33
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Reid Barton, Bhavik Mehta, Jakob von Raumer
! This file was ported from Lean 3 source module category_theory.limits.preserves.basic
-! leanprover-community/mathlib commit 024a4231815538ac739f52d08dd20a55da0d6b23
+! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.CategoryTheory.Limits.HasLimits
/-!
# Preservation and reflection of (co)limits.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
There are various distinct notions of "preserving limits". The one we
aim to capture here is: A functor F : C → D "preserves limits" if it
sends every limit cone in C to a limit cone in D. Informally, F
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -53,32 +53,41 @@ variable {D : Type u₂} [Category.{v₂} D]
variable {J : Type w} [Category.{w'} J] {K : J ⥤ C}
+#print CategoryTheory.Limits.PreservesLimit /-
/-- A functor `F` preserves limits of `K` (written as `preserves_limit K F`)
if `F` maps any limit cone over `K` to a limit cone.
-/
class PreservesLimit (K : J ⥤ C) (F : C ⥤ D) where
preserves : ∀ {c : Cone K}, IsLimit c → IsLimit (F.mapCone c)
#align category_theory.limits.preserves_limit CategoryTheory.Limits.PreservesLimit
+-/
+#print CategoryTheory.Limits.PreservesColimit /-
/-- A functor `F` preserves colimits of `K` (written as `preserves_colimit K F`)
if `F` maps any colimit cocone over `K` to a colimit cocone.
-/
class PreservesColimit (K : J ⥤ C) (F : C ⥤ D) where
preserves : ∀ {c : Cocone K}, IsColimit c → IsColimit (F.mapCocone c)
#align category_theory.limits.preserves_colimit CategoryTheory.Limits.PreservesColimit
+-/
+#print CategoryTheory.Limits.PreservesLimitsOfShape /-
/-- We say that `F` preserves limits of shape `J` if `F` preserves limits for every diagram
`K : J ⥤ C`, i.e., `F` maps limit cones over `K` to limit cones. -/
class PreservesLimitsOfShape (J : Type w) [Category.{w'} J] (F : C ⥤ D) where
PreservesLimit : ∀ {K : J ⥤ C}, PreservesLimit K F := by infer_instance
#align category_theory.limits.preserves_limits_of_shape CategoryTheory.Limits.PreservesLimitsOfShape
+-/
+#print CategoryTheory.Limits.PreservesColimitsOfShape /-
/-- We say that `F` preserves colimits of shape `J` if `F` preserves colimits for every diagram
`K : J ⥤ C`, i.e., `F` maps colimit cocones over `K` to colimit cocones. -/
class PreservesColimitsOfShape (J : Type w) [Category.{w'} J] (F : C ⥤ D) where
PreservesColimit : ∀ {K : J ⥤ C}, PreservesColimit K F := by infer_instance
#align category_theory.limits.preserves_colimits_of_shape CategoryTheory.Limits.PreservesColimitsOfShape
+-/
+#print CategoryTheory.Limits.PreservesLimitsOfSize /-
-- This should be used with explicit universe variables.
/-- `preserves_limits_of_size.{v u} F` means that `F` sends all limit cones over any
diagram `J ⥤ C` to limit cones, where `J : Type u` with `[category.{v} J]`. -/
@@ -87,13 +96,17 @@ class PreservesLimitsOfSize (F : C ⥤ D) where
PreservesLimitsOfShape : ∀ {J : Type w} [Category.{w'} J], PreservesLimitsOfShape J F := by
infer_instance
#align category_theory.limits.preserves_limits_of_size CategoryTheory.Limits.PreservesLimitsOfSize
+-/
+#print CategoryTheory.Limits.PreservesLimits /-
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesLimits (F : C ⥤ D) :=
PreservesLimitsOfSize.{v₂, v₂} F
#align category_theory.limits.preserves_limits CategoryTheory.Limits.PreservesLimits
+-/
+#print CategoryTheory.Limits.PreservesColimitsOfSize /-
-- This should be used with explicit universe variables.
/-- `preserves_colimits_of_size.{v u} F` means that `F` sends all colimit cocones over any
diagram `J ⥤ C` to colimit cocones, where `J : Type u` with `[category.{v} J]`. -/
@@ -102,16 +115,20 @@ class PreservesColimitsOfSize (F : C ⥤ D) where
PreservesColimitsOfShape : ∀ {J : Type w} [Category.{w'} J], PreservesColimitsOfShape J F := by
infer_instance
#align category_theory.limits.preserves_colimits_of_size CategoryTheory.Limits.PreservesColimitsOfSize
+-/
+#print CategoryTheory.Limits.PreservesColimits /-
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesColimits (F : C ⥤ D) :=
PreservesColimitsOfSize.{v₂, v₂} F
#align category_theory.limits.preserves_colimits CategoryTheory.Limits.PreservesColimits
+-/
attribute [instance]
preserves_limits_of_shape.preserves_limit preserves_limits_of_size.preserves_limits_of_shape preserves_colimits_of_shape.preserves_colimit preserves_colimits_of_size.preserves_colimits_of_shape
+#print CategoryTheory.Limits.isLimitOfPreserves /-
-- see Note [lower instance priority]
/-- A convenience function for `preserves_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -120,7 +137,9 @@ def isLimitOfPreserves (F : C ⥤ D) {c : Cone K} (t : IsLimit c) [PreservesLimi
IsLimit (F.mapCone c) :=
PreservesLimit.preserves t
#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreserves
+-/
+#print CategoryTheory.Limits.isColimitOfPreserves /-
/--
A convenience function for `preserves_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -129,15 +148,21 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
IsColimit (F.mapCocone c) :=
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
+-/
+#print CategoryTheory.Limits.preservesLimit_subsingleton /-
instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F) :=
by constructor <;> rintro ⟨a⟩ ⟨b⟩ <;> congr
#align category_theory.limits.preserves_limit_subsingleton CategoryTheory.Limits.preservesLimit_subsingleton
+-/
+#print CategoryTheory.Limits.preservesColimit_subsingleton /-
instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
Subsingleton (PreservesColimit K F) := by constructor <;> rintro ⟨a⟩ ⟨b⟩ <;> congr
#align category_theory.limits.preserves_colimit_subsingleton CategoryTheory.Limits.preservesColimit_subsingleton
+-/
+#print CategoryTheory.Limits.preservesLimitsOfShape_subsingleton /-
instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfShape J F) :=
by
@@ -147,7 +172,9 @@ instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F :
cases b
congr
#align category_theory.limits.preserves_limits_of_shape_subsingleton CategoryTheory.Limits.preservesLimitsOfShape_subsingleton
+-/
+#print CategoryTheory.Limits.preservesColimitsOfShape_subsingleton /-
instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfShape J F) :=
by
@@ -157,7 +184,9 @@ instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F
cases b
congr
#align category_theory.limits.preserves_colimits_of_shape_subsingleton CategoryTheory.Limits.preservesColimitsOfShape_subsingleton
+-/
+#print CategoryTheory.Limits.preserves_limits_subsingleton /-
instance preserves_limits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfSize.{w', w} F) :=
by
@@ -167,7 +196,9 @@ instance preserves_limits_subsingleton (F : C ⥤ D) :
cases b
cc
#align category_theory.limits.preserves_limits_subsingleton CategoryTheory.Limits.preserves_limits_subsingleton
+-/
+#print CategoryTheory.Limits.preserves_colimits_subsingleton /-
instance preserves_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfSize.{w', w} F) :=
by
@@ -177,7 +208,9 @@ instance preserves_colimits_subsingleton (F : C ⥤ D) :
cases b
cc
#align category_theory.limits.preserves_colimits_subsingleton CategoryTheory.Limits.preserves_colimits_subsingleton
+-/
+#print CategoryTheory.Limits.idPreservesLimits /-
instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C)
where PreservesLimitsOfShape J 𝒥 :=
{
@@ -188,7 +221,9 @@ instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C)
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_preserves_limits CategoryTheory.Limits.idPreservesLimits
+-/
+#print CategoryTheory.Limits.idPreservesColimits /-
instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C)
where PreservesColimitsOfShape J 𝒥 :=
{
@@ -199,6 +234,7 @@ instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C)
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_preserves_colimits CategoryTheory.Limits.idPreservesColimits
+-/
section
@@ -208,41 +244,56 @@ variable (F : C ⥤ D) (G : D ⥤ E)
attribute [local elab_without_expected_type] preserves_limit.preserves preserves_colimit.preserves
+#print CategoryTheory.Limits.compPreservesLimit /-
instance compPreservesLimit [PreservesLimit K F] [PreservesLimit (K ⋙ F) G] :
PreservesLimit K (F ⋙ G) :=
⟨fun c h => PreservesLimit.preserves (PreservesLimit.preserves h)⟩
#align category_theory.limits.comp_preserves_limit CategoryTheory.Limits.compPreservesLimit
+-/
+#print CategoryTheory.Limits.compPreservesLimitsOfShape /-
instance compPreservesLimitsOfShape [PreservesLimitsOfShape J F] [PreservesLimitsOfShape J G] :
PreservesLimitsOfShape J (F ⋙ G) where
#align category_theory.limits.comp_preserves_limits_of_shape CategoryTheory.Limits.compPreservesLimitsOfShape
+-/
+#print CategoryTheory.Limits.compPreservesLimits /-
instance compPreservesLimits [PreservesLimitsOfSize.{w', w} F] [PreservesLimitsOfSize.{w', w} G] :
PreservesLimitsOfSize.{w', w} (F ⋙ G) where
#align category_theory.limits.comp_preserves_limits CategoryTheory.Limits.compPreservesLimits
+-/
+#print CategoryTheory.Limits.compPreservesColimit /-
instance compPreservesColimit [PreservesColimit K F] [PreservesColimit (K ⋙ F) G] :
PreservesColimit K (F ⋙ G) :=
⟨fun c h => PreservesColimit.preserves (PreservesColimit.preserves h)⟩
#align category_theory.limits.comp_preserves_colimit CategoryTheory.Limits.compPreservesColimit
+-/
+#print CategoryTheory.Limits.compPreservesColimitsOfShape /-
instance compPreservesColimitsOfShape [PreservesColimitsOfShape J F]
[PreservesColimitsOfShape J G] : PreservesColimitsOfShape J (F ⋙ G) where
#align category_theory.limits.comp_preserves_colimits_of_shape CategoryTheory.Limits.compPreservesColimitsOfShape
+-/
+#print CategoryTheory.Limits.compPreservesColimits /-
instance compPreservesColimits [PreservesColimitsOfSize.{w', w} F]
[PreservesColimitsOfSize.{w', w} G] : PreservesColimitsOfSize.{w', w} (F ⋙ G) where
#align category_theory.limits.comp_preserves_colimits CategoryTheory.Limits.compPreservesColimits
+-/
end
+#print CategoryTheory.Limits.preservesLimitOfPreservesLimitCone /-
/-- If F preserves one limit cone for the diagram K,
then it preserves any limit cone for K. -/
def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t)
(hF : IsLimit (F.mapCone t)) : PreservesLimit K F :=
⟨fun t' h' => IsLimit.ofIsoLimit hF (Functor.mapIso _ (IsLimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitCone
+-/
+#print CategoryTheory.Limits.preservesLimitOfIsoDiagram /-
/-- Transfer preservation of limits along a natural isomorphism in the diagram. -/
def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [PreservesLimit K₁ F] :
PreservesLimit K₂ F
@@ -253,23 +304,36 @@ def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
apply is_limit.of_iso_limit (is_limit_of_preserves F this)
refine' cones.ext (iso.refl _) fun j => by tidy
#align category_theory.limits.preserves_limit_of_iso_diagram CategoryTheory.Limits.preservesLimitOfIsoDiagram
+-/
+#print CategoryTheory.Limits.preservesLimitOfNatIso /-
/-- Transfer preservation of a limit along a natural isomorphism in the functor. -/
def preservesLimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [PreservesLimit K F] :
PreservesLimit K G where preserves c t := IsLimit.mapConeEquiv h (PreservesLimit.preserves t)
#align category_theory.limits.preserves_limit_of_nat_iso CategoryTheory.Limits.preservesLimitOfNatIso
+-/
+#print CategoryTheory.Limits.preservesLimitsOfShapeOfNatIso /-
/-- Transfer preservation of limits of shape along a natural isomorphism in the functor. -/
def preservesLimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfShape J F] :
PreservesLimitsOfShape J G where PreservesLimit K := preservesLimitOfNatIso K h
#align category_theory.limits.preserves_limits_of_shape_of_nat_iso CategoryTheory.Limits.preservesLimitsOfShapeOfNatIso
+-/
+#print CategoryTheory.Limits.preservesLimitsOfNatIso /-
/-- Transfer preservation of limits along a natural isomorphism in the functor. -/
def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize.{w, w'} F] :
PreservesLimitsOfSize.{w, w'} G
where PreservesLimitsOfShape J 𝒥₁ := preserves_limits_of_shape_of_nat_iso h
#align category_theory.limits.preserves_limits_of_nat_iso CategoryTheory.Limits.preservesLimitsOfNatIso
+-/
+/- warning: category_theory.limits.preserves_limits_of_shape_of_equiv -> CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+but is expected to have type
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquivₓ'. -/
/-- Transfer preservation of limits along a equivalence in the shape. -/
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F
@@ -284,6 +348,7 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
simp [← functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
+#print CategoryTheory.Limits.preservesLimitsOfSizeShrink /-
-- See library note [dsimp, simp].
/-- `preserves_limits_of_size_shrink.{w w'} F` tries to obtain `preserves_limits_of_size.{w w'} F`
from some other `preserves_limits_of_size F`.
@@ -292,20 +357,26 @@ def preservesLimitsOfSizeShrink (F : C ⥤ D) [PreservesLimitsOfSize.{max w w₂
PreservesLimitsOfSize.{w, w'} F :=
⟨fun J hJ => preserves_limits_of_shape_of_equiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
#align category_theory.limits.preserves_limits_of_size_shrink CategoryTheory.Limits.preservesLimitsOfSizeShrink
+-/
+#print CategoryTheory.Limits.preservesSmallestLimitsOfPreservesLimits /-
/-- Preserving limits at any universe level implies preserving limits in universe `0`. -/
def preservesSmallestLimitsOfPreservesLimits (F : C ⥤ D) [PreservesLimitsOfSize.{v₃, u₃} F] :
PreservesLimitsOfSize.{0, 0} F :=
preservesLimitsOfSizeShrink F
#align category_theory.limits.preserves_smallest_limits_of_preserves_limits CategoryTheory.Limits.preservesSmallestLimitsOfPreservesLimits
+-/
+#print CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone /-
/-- If F preserves one colimit cocone for the diagram K,
then it preserves any colimit cocone for K. -/
def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : IsColimit t)
(hF : IsColimit (F.mapCocone t)) : PreservesColimit K F :=
⟨fun t' h' => IsColimit.ofIsoColimit hF (Functor.mapIso _ (IsColimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone
+-/
+#print CategoryTheory.Limits.preservesColimitOfIsoDiagram /-
/-- Transfer preservation of colimits along a natural isomorphism in the shape. -/
def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [PreservesColimit K₁ F] :
PreservesColimit K₂ F
@@ -316,24 +387,37 @@ def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
apply is_colimit.of_iso_colimit (is_colimit_of_preserves F this)
refine' cocones.ext (iso.refl _) fun j => by tidy
#align category_theory.limits.preserves_colimit_of_iso_diagram CategoryTheory.Limits.preservesColimitOfIsoDiagram
+-/
+#print CategoryTheory.Limits.preservesColimitOfNatIso /-
/-- Transfer preservation of a colimit along a natural isomorphism in the functor. -/
def preservesColimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [PreservesColimit K F] :
PreservesColimit K G
where preserves c t := IsColimit.mapCoconeEquiv h (PreservesColimit.preserves t)
#align category_theory.limits.preserves_colimit_of_nat_iso CategoryTheory.Limits.preservesColimitOfNatIso
+-/
+#print CategoryTheory.Limits.preservesColimitsOfShapeOfNatIso /-
/-- Transfer preservation of colimits of shape along a natural isomorphism in the functor. -/
def preservesColimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOfShape J F] :
PreservesColimitsOfShape J G where PreservesColimit K := preservesColimitOfNatIso K h
#align category_theory.limits.preserves_colimits_of_shape_of_nat_iso CategoryTheory.Limits.preservesColimitsOfShapeOfNatIso
+-/
+#print CategoryTheory.Limits.preservesColimitsOfNatIso /-
/-- Transfer preservation of colimits along a natural isomorphism in the functor. -/
def preservesColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOfSize.{w, w'} F] :
PreservesColimitsOfSize.{w, w'} G
where PreservesColimitsOfShape J 𝒥₁ := preserves_colimits_of_shape_of_nat_iso h
#align category_theory.limits.preserves_colimits_of_nat_iso CategoryTheory.Limits.preservesColimitsOfNatIso
+-/
+/- warning: category_theory.limits.preserves_colimits_of_shape_of_equiv -> CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+but is expected to have type
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.PreservesColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.PreservesColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquivₓ'. -/
/-- Transfer preservation of colimits along a equivalence in the shape. -/
def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F
@@ -348,6 +432,7 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
simp [← functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
+#print CategoryTheory.Limits.preservesColimitsOfSizeShrink /-
-- See library note [dsimp, simp].
/--
`preserves_colimits_of_size_shrink.{w w'} F` tries to obtain `preserves_colimits_of_size.{w w'} F`
@@ -358,13 +443,17 @@ def preservesColimitsOfSizeShrink (F : C ⥤ D) [PreservesColimitsOfSize.{max w
⟨fun J hJ =>
preserves_colimits_of_shape_of_equiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
#align category_theory.limits.preserves_colimits_of_size_shrink CategoryTheory.Limits.preservesColimitsOfSizeShrink
+-/
+#print CategoryTheory.Limits.preservesSmallestColimitsOfPreservesColimits /-
/-- Preserving colimits at any universe implies preserving colimits at universe `0`. -/
def preservesSmallestColimitsOfPreservesColimits (F : C ⥤ D) [PreservesColimitsOfSize.{v₃, u₃} F] :
PreservesColimitsOfSize.{0, 0} F :=
preservesColimitsOfSizeShrink F
#align category_theory.limits.preserves_smallest_colimits_of_preserves_colimits CategoryTheory.Limits.preservesSmallestColimitsOfPreservesColimits
+-/
+#print CategoryTheory.Limits.ReflectsLimit /-
/-- A functor `F : C ⥤ D` reflects limits for `K : J ⥤ C` if
whenever the image of a cone over `K` under `F` is a limit cone in `D`,
the cone was already a limit cone in `C`.
@@ -373,7 +462,9 @@ Note that we do not assume a priori that `D` actually has any limits.
class ReflectsLimit (K : J ⥤ C) (F : C ⥤ D) where
reflects : ∀ {c : Cone K}, IsLimit (F.mapCone c) → IsLimit c
#align category_theory.limits.reflects_limit CategoryTheory.Limits.ReflectsLimit
+-/
+#print CategoryTheory.Limits.ReflectsColimit /-
/-- A functor `F : C ⥤ D` reflects colimits for `K : J ⥤ C` if
whenever the image of a cocone over `K` under `F` is a colimit cocone in `D`,
the cocone was already a colimit cocone in `C`.
@@ -382,7 +473,9 @@ Note that we do not assume a priori that `D` actually has any colimits.
class ReflectsColimit (K : J ⥤ C) (F : C ⥤ D) where
reflects : ∀ {c : Cocone K}, IsColimit (F.mapCocone c) → IsColimit c
#align category_theory.limits.reflects_colimit CategoryTheory.Limits.ReflectsColimit
+-/
+#print CategoryTheory.Limits.ReflectsLimitsOfShape /-
/-- A functor `F : C ⥤ D` reflects limits of shape `J` if
whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone in `D`,
the cone was already a limit cone in `C`.
@@ -391,7 +484,9 @@ Note that we do not assume a priori that `D` actually has any limits.
class ReflectsLimitsOfShape (J : Type w) [Category.{w'} J] (F : C ⥤ D) where
ReflectsLimit : ∀ {K : J ⥤ C}, ReflectsLimit K F := by infer_instance
#align category_theory.limits.reflects_limits_of_shape CategoryTheory.Limits.ReflectsLimitsOfShape
+-/
+#print CategoryTheory.Limits.ReflectsColimitsOfShape /-
/-- A functor `F : C ⥤ D` reflects colimits of shape `J` if
whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit cocone in `D`,
the cocone was already a colimit cocone in `C`.
@@ -400,7 +495,9 @@ Note that we do not assume a priori that `D` actually has any colimits.
class ReflectsColimitsOfShape (J : Type w) [Category.{w'} J] (F : C ⥤ D) where
ReflectsColimit : ∀ {K : J ⥤ C}, ReflectsColimit K F := by infer_instance
#align category_theory.limits.reflects_colimits_of_shape CategoryTheory.Limits.ReflectsColimitsOfShape
+-/
+#print CategoryTheory.Limits.ReflectsLimitsOfSize /-
-- This should be used with explicit universe variables.
/-- A functor `F : C ⥤ D` reflects limits if
whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone in `D`,
@@ -412,7 +509,9 @@ class ReflectsLimitsOfSize (F : C ⥤ D) where
ReflectsLimitsOfShape : ∀ {J : Type w} [Category.{w'} J], ReflectsLimitsOfShape J F := by
infer_instance
#align category_theory.limits.reflects_limits_of_size CategoryTheory.Limits.ReflectsLimitsOfSize
+-/
+#print CategoryTheory.Limits.ReflectsLimits /-
/-- A functor `F : C ⥤ D` reflects (small) limits if
whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone in `D`,
the cone was already a limit cone in `C`.
@@ -421,7 +520,9 @@ Note that we do not assume a priori that `D` actually has any limits.
abbrev ReflectsLimits (F : C ⥤ D) :=
ReflectsLimitsOfSize.{v₂, v₂} F
#align category_theory.limits.reflects_limits CategoryTheory.Limits.ReflectsLimits
+-/
+#print CategoryTheory.Limits.ReflectsColimitsOfSize /-
-- This should be used with explicit universe variables.
/-- A functor `F : C ⥤ D` reflects colimits if
whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit cocone in `D`,
@@ -433,7 +534,9 @@ class ReflectsColimitsOfSize (F : C ⥤ D) where
ReflectsColimitsOfShape : ∀ {J : Type w} [Category.{w'} J], ReflectsColimitsOfShape J F := by
infer_instance
#align category_theory.limits.reflects_colimits_of_size CategoryTheory.Limits.ReflectsColimitsOfSize
+-/
+#print CategoryTheory.Limits.ReflectsColimits /-
/-- A functor `F : C ⥤ D` reflects (small) colimits if
whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit cocone in `D`,
the cocone was already a colimit cocone in `C`.
@@ -442,7 +545,9 @@ Note that we do not assume a priori that `D` actually has any colimits.
abbrev ReflectsColimits (F : C ⥤ D) :=
ReflectsColimitsOfSize.{v₂, v₂} F
#align category_theory.limits.reflects_colimits CategoryTheory.Limits.ReflectsColimits
+-/
+#print CategoryTheory.Limits.isLimitOfReflects /-
/-- A convenience function for `reflects_limit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
@@ -450,7 +555,9 @@ def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (F.mapCone c)) [Re
IsLimit c :=
ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
+-/
+#print CategoryTheory.Limits.isColimitOfReflects /-
/--
A convenience function for `reflects_colimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
@@ -459,15 +566,21 @@ def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (F.mapCocone
[ReflectsColimit K F] : IsColimit c :=
ReflectsColimit.reflects t
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
+-/
+#print CategoryTheory.Limits.reflectsLimit_subsingleton /-
instance reflectsLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsLimit K F) := by
constructor <;> rintro ⟨a⟩ ⟨b⟩ <;> congr
#align category_theory.limits.reflects_limit_subsingleton CategoryTheory.Limits.reflectsLimit_subsingleton
+-/
+#print CategoryTheory.Limits.reflectsColimit_subsingleton /-
instance reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
Subsingleton (ReflectsColimit K F) := by constructor <;> rintro ⟨a⟩ ⟨b⟩ <;> congr
#align category_theory.limits.reflects_colimit_subsingleton CategoryTheory.Limits.reflectsColimit_subsingleton
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton /-
instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsLimitsOfShape J F) :=
by
@@ -477,7 +590,9 @@ instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F :
cases b
congr
#align category_theory.limits.reflects_limits_of_shape_subsingleton CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton /-
instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfShape J F) :=
by
@@ -487,7 +602,9 @@ instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F
cases b
congr
#align category_theory.limits.reflects_colimits_of_shape_subsingleton CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton
+-/
+#print CategoryTheory.Limits.reflects_limits_subsingleton /-
instance reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimitsOfSize.{w', w} F) :=
by
constructor
@@ -496,7 +613,9 @@ instance reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimi
cases b
cc
#align category_theory.limits.reflects_limits_subsingleton CategoryTheory.Limits.reflects_limits_subsingleton
+-/
+#print CategoryTheory.Limits.reflects_colimits_subsingleton /-
instance reflects_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfSize.{w', w} F) :=
by
@@ -506,31 +625,41 @@ instance reflects_colimits_subsingleton (F : C ⥤ D) :
cases b
cc
#align category_theory.limits.reflects_colimits_subsingleton CategoryTheory.Limits.reflects_colimits_subsingleton
+-/
+#print CategoryTheory.Limits.reflectsLimitOfReflectsLimitsOfShape /-
-- see Note [lower instance priority]
instance (priority := 100) reflectsLimitOfReflectsLimitsOfShape (K : J ⥤ C) (F : C ⥤ D)
[H : ReflectsLimitsOfShape J F] : ReflectsLimit K F :=
ReflectsLimitsOfShape.reflectsLimit
#align category_theory.limits.reflects_limit_of_reflects_limits_of_shape CategoryTheory.Limits.reflectsLimitOfReflectsLimitsOfShape
+-/
+#print CategoryTheory.Limits.reflectsColimitOfReflectsColimitsOfShape /-
-- see Note [lower instance priority]
instance (priority := 100) reflectsColimitOfReflectsColimitsOfShape (K : J ⥤ C) (F : C ⥤ D)
[H : ReflectsColimitsOfShape J F] : ReflectsColimit K F :=
ReflectsColimitsOfShape.reflectsColimit
#align category_theory.limits.reflects_colimit_of_reflects_colimits_of_shape CategoryTheory.Limits.reflectsColimitOfReflectsColimitsOfShape
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsLimits /-
-- see Note [lower instance priority]
instance (priority := 100) reflectsLimitsOfShapeOfReflectsLimits (J : Type w) [Category.{w'} J]
(F : C ⥤ D) [H : ReflectsLimitsOfSize.{w', w} F] : ReflectsLimitsOfShape J F :=
ReflectsLimitsOfSize.reflectsLimitsOfShape
#align category_theory.limits.reflects_limits_of_shape_of_reflects_limits CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsLimits
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsColimits /-
-- see Note [lower instance priority]
instance (priority := 100) reflectsColimitsOfShapeOfReflectsColimits (J : Type w) [Category.{w'} J]
(F : C ⥤ D) [H : ReflectsColimitsOfSize.{w', w} F] : ReflectsColimitsOfShape J F :=
ReflectsColimitsOfSize.reflectsColimitsOfShape
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_colimits CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsColimits
+-/
+#print CategoryTheory.Limits.idReflectsLimits /-
instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C)
where ReflectsLimitsOfShape J 𝒥 :=
{
@@ -541,7 +670,9 @@ instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C)
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_reflects_limits CategoryTheory.Limits.idReflectsLimits
+-/
+#print CategoryTheory.Limits.idReflectsColimits /-
instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C)
where ReflectsColimitsOfShape J 𝒥 :=
{
@@ -552,6 +683,7 @@ instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C)
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_reflects_colimits CategoryTheory.Limits.idReflectsColimits
+-/
section
@@ -559,32 +691,45 @@ variable {E : Type u₃} [ℰ : Category.{v₃} E]
variable (F : C ⥤ D) (G : D ⥤ E)
+#print CategoryTheory.Limits.compReflectsLimit /-
instance compReflectsLimit [ReflectsLimit K F] [ReflectsLimit (K ⋙ F) G] :
ReflectsLimit K (F ⋙ G) :=
⟨fun c h => ReflectsLimit.reflects (ReflectsLimit.reflects h)⟩
#align category_theory.limits.comp_reflects_limit CategoryTheory.Limits.compReflectsLimit
+-/
+#print CategoryTheory.Limits.compReflectsLimitsOfShape /-
instance compReflectsLimitsOfShape [ReflectsLimitsOfShape J F] [ReflectsLimitsOfShape J G] :
ReflectsLimitsOfShape J (F ⋙ G) where
#align category_theory.limits.comp_reflects_limits_of_shape CategoryTheory.Limits.compReflectsLimitsOfShape
+-/
+#print CategoryTheory.Limits.compReflectsLimits /-
instance compReflectsLimits [ReflectsLimitsOfSize.{w', w} F] [ReflectsLimitsOfSize.{w', w} G] :
ReflectsLimitsOfSize.{w', w} (F ⋙ G) where
#align category_theory.limits.comp_reflects_limits CategoryTheory.Limits.compReflectsLimits
+-/
+#print CategoryTheory.Limits.compReflectsColimit /-
instance compReflectsColimit [ReflectsColimit K F] [ReflectsColimit (K ⋙ F) G] :
ReflectsColimit K (F ⋙ G) :=
⟨fun c h => ReflectsColimit.reflects (ReflectsColimit.reflects h)⟩
#align category_theory.limits.comp_reflects_colimit CategoryTheory.Limits.compReflectsColimit
+-/
+#print CategoryTheory.Limits.compReflectsColimitsOfShape /-
instance compReflectsColimitsOfShape [ReflectsColimitsOfShape J F] [ReflectsColimitsOfShape J G] :
ReflectsColimitsOfShape J (F ⋙ G) where
#align category_theory.limits.comp_reflects_colimits_of_shape CategoryTheory.Limits.compReflectsColimitsOfShape
+-/
+#print CategoryTheory.Limits.compReflectsColimits /-
instance compReflectsColimits [ReflectsColimitsOfSize.{w', w} F]
[ReflectsColimitsOfSize.{w', w} G] : ReflectsColimitsOfSize.{w', w} (F ⋙ G) where
#align category_theory.limits.comp_reflects_colimits CategoryTheory.Limits.compReflectsColimits
+-/
+#print CategoryTheory.Limits.preservesLimitOfReflectsOfPreserves /-
/-- If `F ⋙ G` preserves limits for `K`, and `G` reflects limits for `K ⋙ F`,
then `F` preserves limits for `K`. -/
def preservesLimitOfReflectsOfPreserves [PreservesLimit K (F ⋙ G)] [ReflectsLimit (K ⋙ F) G] :
@@ -593,7 +738,9 @@ def preservesLimitOfReflectsOfPreserves [PreservesLimit K (F ⋙ G)] [ReflectsLi
apply is_limit_of_reflects G
apply is_limit_of_preserves (F ⋙ G) h⟩
#align category_theory.limits.preserves_limit_of_reflects_of_preserves CategoryTheory.Limits.preservesLimitOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.preservesLimitsOfShapeOfReflectsOfPreserves /-
/--
If `F ⋙ G` preserves limits of shape `J` and `G` reflects limits of shape `J`, then `F` preserves
limits of shape `J`.
@@ -602,13 +749,17 @@ def preservesLimitsOfShapeOfReflectsOfPreserves [PreservesLimitsOfShape J (F ⋙
[ReflectsLimitsOfShape J G] : PreservesLimitsOfShape J F
where PreservesLimit K := preservesLimitOfReflectsOfPreserves F G
#align category_theory.limits.preserves_limits_of_shape_of_reflects_of_preserves CategoryTheory.Limits.preservesLimitsOfShapeOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.preservesLimitsOfReflectsOfPreserves /-
/-- If `F ⋙ G` preserves limits and `G` reflects limits, then `F` preserves limits. -/
def preservesLimitsOfReflectsOfPreserves [PreservesLimitsOfSize.{w', w} (F ⋙ G)]
[ReflectsLimitsOfSize.{w', w} G] : PreservesLimitsOfSize.{w', w} F
where PreservesLimitsOfShape J 𝒥₁ := preserves_limits_of_shape_of_reflects_of_preserves F G
#align category_theory.limits.preserves_limits_of_reflects_of_preserves CategoryTheory.Limits.preservesLimitsOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.reflectsLimitOfIsoDiagram /-
/-- Transfer reflection of limits along a natural isomorphism in the diagram. -/
def reflectsLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [ReflectsLimit K₁ F] :
ReflectsLimit K₂ F
@@ -618,23 +769,36 @@ def reflectsLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
apply ((is_limit.postcompose_inv_equiv (iso_whisker_right h F : _) _).symm t).ofIsoLimit _
exact cones.ext (iso.refl _) (by tidy)
#align category_theory.limits.reflects_limit_of_iso_diagram CategoryTheory.Limits.reflectsLimitOfIsoDiagram
+-/
+#print CategoryTheory.Limits.reflectsLimitOfNatIso /-
/-- Transfer reflection of a limit along a natural isomorphism in the functor. -/
def reflectsLimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimit K F] :
ReflectsLimit K G where reflects c t := ReflectsLimit.reflects (IsLimit.mapConeEquiv h.symm t)
#align category_theory.limits.reflects_limit_of_nat_iso CategoryTheory.Limits.reflectsLimitOfNatIso
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfShapeOfNatIso /-
/-- Transfer reflection of limits of shape along a natural isomorphism in the functor. -/
def reflectsLimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfShape J F] :
ReflectsLimitsOfShape J G where ReflectsLimit K := reflectsLimitOfNatIso K h
#align category_theory.limits.reflects_limits_of_shape_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfShapeOfNatIso
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfNatIso /-
/-- Transfer reflection of limits along a natural isomorphism in the functor. -/
def reflectsLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfSize.{w', w} F] :
ReflectsLimitsOfSize.{w', w} G
where ReflectsLimitsOfShape J 𝒥₁ := reflects_limits_of_shape_of_nat_iso h
#align category_theory.limits.reflects_limits_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfNatIso
+-/
+/- warning: category_theory.limits.reflects_limits_of_shape_of_equiv -> CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+but is expected to have type
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsLimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsLimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.reflects_limits_of_shape_of_equiv CategoryTheory.Limits.reflectsLimitsOfShapeOfEquivₓ'. -/
/-- Transfer reflection of limits along a equivalence in the shape. -/
def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F
@@ -647,6 +811,7 @@ def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
exact is_limit.whisker_equivalence t _ }
#align category_theory.limits.reflects_limits_of_shape_of_equiv CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv
+#print CategoryTheory.Limits.reflectsLimitsOfSizeShrink /-
/-- `reflects_limits_of_size_shrink.{w w'} F` tries to obtain `reflects_limits_of_size.{w w'} F`
from some other `reflects_limits_of_size F`.
-/
@@ -654,13 +819,17 @@ def reflectsLimitsOfSizeShrink (F : C ⥤ D) [ReflectsLimitsOfSize.{max w w₂,
ReflectsLimitsOfSize.{w, w'} F :=
⟨fun J hJ => reflects_limits_of_shape_of_equiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
#align category_theory.limits.reflects_limits_of_size_shrink CategoryTheory.Limits.reflectsLimitsOfSizeShrink
+-/
+#print CategoryTheory.Limits.reflectsSmallestLimitsOfReflectsLimits /-
/-- Reflecting limits at any universe implies reflecting limits at universe `0`. -/
def reflectsSmallestLimitsOfReflectsLimits (F : C ⥤ D) [ReflectsLimitsOfSize.{v₃, u₃} F] :
ReflectsLimitsOfSize.{0, 0} F :=
reflectsLimitsOfSizeShrink F
#align category_theory.limits.reflects_smallest_limits_of_reflects_limits CategoryTheory.Limits.reflectsSmallestLimitsOfReflectsLimits
+-/
+#print CategoryTheory.Limits.reflectsLimitOfReflectsIsomorphisms /-
/-- If the limit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the limit of `F`.
-/
@@ -673,7 +842,9 @@ def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIso
apply is_iso_of_reflects_iso _ (cones.functoriality F G)
refine' t.hom_is_iso (is_limit_of_preserves G (limit.is_limit F)) _
#align category_theory.limits.reflects_limit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitOfReflectsIsomorphisms
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsIsomorphisms /-
/-- If `C` has limits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects limits of shape `J`.
-/
@@ -681,7 +852,9 @@ def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphi
[HasLimitsOfShape J C] [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G
where ReflectsLimit F := reflectsLimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_limits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsIsomorphisms
+-/
+#print CategoryTheory.Limits.reflectsLimitsOfReflectsIsomorphisms /-
/-- If `C` has limits and `G` preserves limits, then if `G` reflects isomorphisms then it reflects
limits.
-/
@@ -689,7 +862,9 @@ def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
[HasLimitsOfSize.{w', w} C] [PreservesLimitsOfSize.{w', w} G] : ReflectsLimitsOfSize.{w', w} G
where ReflectsLimitsOfShape J 𝒥₁ := reflects_limits_of_shape_of_reflects_isomorphisms
#align category_theory.limits.reflects_limits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfReflectsIsomorphisms
+-/
+#print CategoryTheory.Limits.preservesColimitOfReflectsOfPreserves /-
/-- If `F ⋙ G` preserves colimits for `K`, and `G` reflects colimits for `K ⋙ F`,
then `F` preserves colimits for `K`. -/
def preservesColimitOfReflectsOfPreserves [PreservesColimit K (F ⋙ G)] [ReflectsColimit (K ⋙ F) G] :
@@ -698,7 +873,9 @@ def preservesColimitOfReflectsOfPreserves [PreservesColimit K (F ⋙ G)] [Reflec
apply is_colimit_of_reflects G
apply is_colimit_of_preserves (F ⋙ G) h⟩
#align category_theory.limits.preserves_colimit_of_reflects_of_preserves CategoryTheory.Limits.preservesColimitOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.preservesColimitsOfShapeOfReflectsOfPreserves /-
/-- If `F ⋙ G` preserves colimits of shape `J` and `G` reflects colimits of shape `J`, then `F`
preserves colimits of shape `J`.
-/
@@ -706,13 +883,17 @@ def preservesColimitsOfShapeOfReflectsOfPreserves [PreservesColimitsOfShape J (F
[ReflectsColimitsOfShape J G] : PreservesColimitsOfShape J F
where PreservesColimit K := preservesColimitOfReflectsOfPreserves F G
#align category_theory.limits.preserves_colimits_of_shape_of_reflects_of_preserves CategoryTheory.Limits.preservesColimitsOfShapeOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.preservesColimitsOfReflectsOfPreserves /-
/-- If `F ⋙ G` preserves colimits and `G` reflects colimits, then `F` preserves colimits. -/
def preservesColimitsOfReflectsOfPreserves [PreservesColimitsOfSize.{w', w} (F ⋙ G)]
[ReflectsColimitsOfSize.{w', w} G] : PreservesColimitsOfSize.{w', w} F
where PreservesColimitsOfShape J 𝒥₁ := preserves_colimits_of_shape_of_reflects_of_preserves F G
#align category_theory.limits.preserves_colimits_of_reflects_of_preserves CategoryTheory.Limits.preservesColimitsOfReflectsOfPreserves
+-/
+#print CategoryTheory.Limits.reflectsColimitOfIsoDiagram /-
/-- Transfer reflection of colimits along a natural isomorphism in the diagram. -/
def reflectsColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [ReflectsColimit K₁ F] :
ReflectsColimit K₂ F
@@ -722,24 +903,37 @@ def reflectsColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
apply ((is_colimit.precompose_hom_equiv (iso_whisker_right h F : _) _).symm t).ofIsoColimit _
exact cocones.ext (iso.refl _) (by tidy)
#align category_theory.limits.reflects_colimit_of_iso_diagram CategoryTheory.Limits.reflectsColimitOfIsoDiagram
+-/
+#print CategoryTheory.Limits.reflectsColimitOfNatIso /-
/-- Transfer reflection of a colimit along a natural isomorphism in the functor. -/
def reflectsColimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimit K F] :
ReflectsColimit K G
where reflects c t := ReflectsColimit.reflects (IsColimit.mapCoconeEquiv h.symm t)
#align category_theory.limits.reflects_colimit_of_nat_iso CategoryTheory.Limits.reflectsColimitOfNatIso
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfShapeOfNatIso /-
/-- Transfer reflection of colimits of shape along a natural isomorphism in the functor. -/
def reflectsColimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfShape J F] :
ReflectsColimitsOfShape J G where ReflectsColimit K := reflectsColimitOfNatIso K h
#align category_theory.limits.reflects_colimits_of_shape_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfShapeOfNatIso
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfNatIso /-
/-- Transfer reflection of colimits along a natural isomorphism in the functor. -/
def reflectsColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfSize.{w, w'} F] :
ReflectsColimitsOfSize.{w, w'} G
where ReflectsColimitsOfShape J 𝒥₁ := reflects_colimits_of_shape_of_nat_iso h
#align category_theory.limits.reflects_colimits_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfNatIso
+-/
+/- warning: category_theory.limits.reflects_colimits_of_shape_of_equiv -> CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J _inst_3 J' _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+but is expected to have type
+ forall {C : Type.{u7}} [_inst_1 : CategoryTheory.Category.{u5, u7} C] {D : Type.{u8}} [_inst_2 : CategoryTheory.Category.{u6, u8} D] {J : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u1, u3} J] {J' : Type.{u4}} [_inst_4 : CategoryTheory.Category.{u2, u4} J'], (CategoryTheory.Equivalence.{u1, u2, u3, u4} J J' _inst_3 _inst_4) -> (forall (F : CategoryTheory.Functor.{u5, u6, u7, u8} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.Limits.ReflectsColimitsOfShape.{u1, u3, u5, u6, u7, u8} C _inst_1 D _inst_2 J _inst_3 F], CategoryTheory.Limits.ReflectsColimitsOfShape.{u2, u4, u5, u6, u7, u8} C _inst_1 D _inst_2 J' _inst_4 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.reflects_colimits_of_shape_of_equiv CategoryTheory.Limits.reflectsColimitsOfShapeOfEquivₓ'. -/
/-- Transfer reflection of colimits along a equivalence in the shape. -/
def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F
@@ -752,6 +946,7 @@ def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
exact is_colimit.whisker_equivalence t _ }
#align category_theory.limits.reflects_colimits_of_shape_of_equiv CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv
+#print CategoryTheory.Limits.reflectsColimitsOfSizeShrink /-
/-- `reflects_colimits_of_size_shrink.{w w'} F` tries to obtain `reflects_colimits_of_size.{w w'} F`
from some other `reflects_colimits_of_size F`.
-/
@@ -759,13 +954,17 @@ def reflectsColimitsOfSizeShrink (F : C ⥤ D) [ReflectsColimitsOfSize.{max w w
ReflectsColimitsOfSize.{w, w'} F :=
⟨fun J hJ => reflects_colimits_of_shape_of_equiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
#align category_theory.limits.reflects_colimits_of_size_shrink CategoryTheory.Limits.reflectsColimitsOfSizeShrink
+-/
+#print CategoryTheory.Limits.reflectsSmallestColimitsOfReflectsColimits /-
/-- Reflecting colimits at any universe implies reflecting colimits at universe `0`. -/
def reflectsSmallestColimitsOfReflectsColimits (F : C ⥤ D) [ReflectsColimitsOfSize.{v₃, u₃} F] :
ReflectsColimitsOfSize.{0, 0} F :=
reflectsColimitsOfSizeShrink F
#align category_theory.limits.reflects_smallest_colimits_of_reflects_colimits CategoryTheory.Limits.reflectsSmallestColimitsOfReflectsColimits
+-/
+#print CategoryTheory.Limits.reflectsColimitOfReflectsIsomorphisms /-
/-- If the colimit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the colimit of `F`.
-/
@@ -779,7 +978,9 @@ def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsI
apply is_iso_of_reflects_iso _ (cocones.functoriality F G)
refine' (is_colimit_of_preserves G (colimit.is_colimit F)).hom_isIso t _
#align category_theory.limits.reflects_colimit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitOfReflectsIsomorphisms
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsIsomorphisms /-
/--
If `C` has colimits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects colimits of shape `J`.
@@ -788,7 +989,9 @@ def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorp
[HasColimitsOfShape J C] [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G
where ReflectsColimit F := reflectsColimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsIsomorphisms
+-/
+#print CategoryTheory.Limits.reflectsColimitsOfReflectsIsomorphisms /-
/--
If `C` has colimits and `G` preserves colimits, then if `G` reflects isomorphisms then it reflects
colimits.
@@ -798,11 +1001,13 @@ def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G
ReflectsColimitsOfSize.{w', w} G
where ReflectsColimitsOfShape J 𝒥₁ := reflects_colimits_of_shape_of_reflects_isomorphisms
#align category_theory.limits.reflects_colimits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfReflectsIsomorphisms
+-/
end
variable (F : C ⥤ D)
+#print CategoryTheory.Limits.fullyFaithfulReflectsLimits /-
/-- A fully faithful functor reflects limits. -/
def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F
where ReflectsLimitsOfShape J 𝒥₁ :=
@@ -817,7 +1022,9 @@ def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w,
rw [functor.image_preimage]
apply t.uniq_cone_morphism } }
#align category_theory.limits.fully_faithful_reflects_limits CategoryTheory.Limits.fullyFaithfulReflectsLimits
+-/
+#print CategoryTheory.Limits.fullyFaithfulReflectsColimits /-
/-- A fully faithful functor reflects colimits. -/
def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F
where ReflectsColimitsOfShape J 𝒥₁ :=
@@ -832,6 +1039,7 @@ def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize
rw [functor.image_preimage]
apply t.uniq_cocone_morphism } }
#align category_theory.limits.fully_faithful_reflects_colimits CategoryTheory.Limits.fullyFaithfulReflectsColimits
+-/
end CategoryTheory.Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -183,7 +183,7 @@ instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C)
{
PreservesLimit := fun K =>
⟨fun c h =>
- ⟨fun s => h.lift ⟨s.x, fun j => s.π.app j, fun j j' f => s.π.naturality f⟩, by
+ ⟨fun s => h.lift ⟨s.pt, fun j => s.π.app j, fun j j' f => s.π.naturality f⟩, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s j <;> cases s <;> exact h.fac _ j, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
@@ -194,7 +194,7 @@ instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C)
{
PreservesColimit := fun K =>
⟨fun c h =>
- ⟨fun s => h.desc ⟨s.x, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
+ ⟨fun s => h.desc ⟨s.pt, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s j <;> cases s <;> exact h.fac _ j, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
@@ -536,7 +536,7 @@ instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C)
{
ReflectsLimit := fun K =>
⟨fun c h =>
- ⟨fun s => h.lift ⟨s.x, fun j => s.π.app j, fun j j' f => s.π.naturality f⟩, by
+ ⟨fun s => h.lift ⟨s.pt, fun j => s.π.app j, fun j j' f => s.π.naturality f⟩, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s j <;> cases s <;> exact h.fac _ j, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
@@ -547,7 +547,7 @@ instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C)
{
ReflectsColimit := fun K =>
⟨fun c h =>
- ⟨fun s => h.desc ⟨s.x, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
+ ⟨fun s => h.desc ⟨s.pt, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s j <;> cases s <;> exact h.fac _ j, by
cases K <;> rcases c with ⟨_, _, _⟩ <;> intro s m w <;> rcases s with ⟨_, _, _⟩ <;>
exact h.uniq _ m w⟩⟩ }
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
FastSubsingleton
and FastIsEmpty
to speed up congr!
/convert
(#12495)
This is a PR that's a temporary measure to improve performance of congr!
/convert
, and the implementation may change in a future PR with a new version of congr!
.
Introduces two typeclasses that are meant to quickly evaluate in common cases of Subsingleton
and IsEmpty
. Makes congr!
use these typeclasses rather than Subsingleton
.
Local Subsingleton
/IsEmpty
instances are included as Fast
instances. To get congr!
/convert
to reason about subsingleton types, you can add such instances to the local context. Or, you can apply Subsingleton.elim
yourself.
@@ -134,32 +134,32 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
Subsingleton (PreservesLimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_limit_subsingleton CategoryTheory.Limits.preservesLimit_subsingleton
instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
Subsingleton (PreservesColimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_colimit_subsingleton CategoryTheory.Limits.preservesColimit_subsingleton
instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_limits_of_shape_subsingleton CategoryTheory.Limits.preservesLimitsOfShape_subsingleton
instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_colimits_of_shape_subsingleton CategoryTheory.Limits.preservesColimitsOfShape_subsingleton
instance preserves_limits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_limits_subsingleton CategoryTheory.Limits.preserves_limits_subsingleton
instance preserves_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!; apply Subsingleton.elim
#align category_theory.limits.preserves_colimits_subsingleton CategoryTheory.Limits.preserves_colimits_subsingleton
instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C) where
@@ -460,32 +460,32 @@ def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (F.mapCocone
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
instance reflectsLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsLimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_limit_subsingleton CategoryTheory.Limits.reflectsLimit_subsingleton
instance
reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsColimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_colimit_subsingleton CategoryTheory.Limits.reflectsColimit_subsingleton
instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsLimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_limits_of_shape_subsingleton CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton
instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_colimits_of_shape_subsingleton CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton
instance
reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_limits_subsingleton CategoryTheory.Limits.reflects_limits_subsingleton
instance reflects_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!; apply Subsingleton.elim
#align category_theory.limits.reflects_colimits_subsingleton CategoryTheory.Limits.reflects_colimits_subsingleton
-- see Note [lower instance priority]
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>
@@ -811,7 +811,7 @@ instance fullyFaithfulReflectsLimits [F.Full] [F.Faithful] : ReflectsLimitsOfSiz
(Cones.functoriality K F).preimage (t.liftConeMorphism _)) <| by
apply fun s m => (Cones.functoriality K F).map_injective _
intro s m
- rw [Functor.image_preimage]
+ rw [Functor.map_preimage]
apply t.uniq_cone_morphism } }
#align category_theory.limits.fully_faithful_reflects_limits CategoryTheory.Limits.fullyFaithfulReflectsLimits
@@ -825,7 +825,7 @@ instance fullyFaithfulReflectsColimits [F.Full] [F.Faithful] :
(Cocones.functoriality K F).preimage (t.descCoconeMorphism _)) <| by
apply fun s m => (Cocones.functoriality K F).map_injective _
intro s m
- rw [Functor.image_preimage]
+ rw [Functor.map_preimage]
apply t.uniq_cocone_morphism }}
#align category_theory.limits.fully_faithful_reflects_colimits CategoryTheory.Limits.fullyFaithfulReflectsColimits
@@ -271,8 +271,8 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
have := (isLimitOfPreserves F (t.whiskerEquivalence e)).whiskerEquivalence e.symm
apply ((IsLimit.postcomposeHomEquiv equ _).symm this).ofIsoLimit
refine' Cones.ext (Iso.refl _) fun j => _
- · dsimp
- simp [equ, ← Functor.map_comp] }
+ dsimp
+ simp [equ, ← Functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
/-- A functor preserving larger limits also preserves smaller limits. -/
@@ -340,8 +340,8 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
have := (isColimitOfPreserves F (t.whiskerEquivalence e)).whiskerEquivalence e.symm
apply ((IsColimit.precomposeInvEquiv equ _).symm this).ofIsoColimit
refine' Cocones.ext (Iso.refl _) fun j => _
- · dsimp
- simp [equ, ← Functor.map_comp] }
+ dsimp
+ simp [equ, ← Functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
/-- A functor preserving larger colimits also preserves smaller colimits. -/
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -650,7 +650,7 @@ def reflectsSmallestLimitsOfReflectsLimits (F : C ⥤ D) [ReflectsLimitsOfSize.{
/-- If the limit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the limit of `F`.
-/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
-def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
+def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [G.ReflectsIsomorphisms]
[HasLimit F] [PreservesLimit F G] : ReflectsLimit F G where
reflects {c} t := by
suffices IsIso (IsLimit.lift (limit.isLimit F) c) from by
@@ -667,7 +667,7 @@ def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIso
/-- If `C` has limits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects limits of shape `J`.
-/
-def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
+def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [G.ReflectsIsomorphisms]
[HasLimitsOfShape J C] [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G where
reflectsLimit {F} := reflectsLimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_limits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsIsomorphisms
@@ -675,7 +675,7 @@ def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphi
/-- If `C` has limits and `G` preserves limits, then if `G` reflects isomorphisms then it reflects
limits.
-/
-def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
+def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [G.ReflectsIsomorphisms]
[HasLimitsOfSize.{w', w} C] [PreservesLimitsOfSize.{w', w} G] : ReflectsLimitsOfSize.{w', w} G
where
reflectsLimitsOfShape := reflectsLimitsOfShapeOfReflectsIsomorphisms
@@ -765,7 +765,7 @@ def reflectsSmallestColimitsOfReflectsColimits (F : C ⥤ D) [ReflectsColimitsOf
/-- If the colimit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the colimit of `F`.
-/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
-def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
+def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [G.ReflectsIsomorphisms]
[HasColimit F] [PreservesColimit F G] : ReflectsColimit F G where
reflects {c} t := by
suffices IsIso (IsColimit.desc (colimit.isColimit F) c) from by
@@ -783,7 +783,7 @@ def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsI
If `C` has colimits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
reflects colimits of shape `J`.
-/
-def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
+def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [G.ReflectsIsomorphisms]
[HasColimitsOfShape J C] [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G where
reflectsColimit {F} := reflectsColimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsIsomorphisms
@@ -792,7 +792,7 @@ def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorp
If `C` has colimits and `G` preserves colimits, then if `G` reflects isomorphisms then it reflects
colimits.
-/
-def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
+def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D} [G.ReflectsIsomorphisms]
[HasColimitsOfSize.{w', w} C] [PreservesColimitsOfSize.{w', w} G] :
ReflectsColimitsOfSize.{w', w} G where
reflectsColimitsOfShape := reflectsColimitsOfShapeOfReflectsIsomorphisms
@@ -803,7 +803,7 @@ end
variable (F : C ⥤ D)
/-- A fully faithful functor reflects limits. -/
-instance fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F where
+instance fullyFaithfulReflectsLimits [F.Full] [F.Faithful] : ReflectsLimitsOfSize.{w, w'} F where
reflectsLimitsOfShape {J} 𝒥₁ :=
{ reflectsLimit := fun {K} =>
{ reflects := fun {c} t =>
@@ -816,7 +816,7 @@ instance fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSiz
#align category_theory.limits.fully_faithful_reflects_limits CategoryTheory.Limits.fullyFaithfulReflectsLimits
/-- A fully faithful functor reflects colimits. -/
-instance fullyFaithfulReflectsColimits [Full F] [Faithful F] :
+instance fullyFaithfulReflectsColimits [F.Full] [F.Faithful] :
ReflectsColimitsOfSize.{w, w'} F where
reflectsColimitsOfShape {J} 𝒥₁ :=
{ reflectsColimit := fun {K} =>
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -45,9 +45,7 @@ namespace CategoryTheory.Limits
universe w' w₂' w w₂ v₁ v₂ v₃ u₁ u₂ u₃
variable {C : Type u₁} [Category.{v₁} C]
-
variable {D : Type u₂} [Category.{v₂} D]
-
variable {J : Type w} [Category.{w'} J] {K : J ⥤ C}
/-- A functor `F` preserves limits of `K` (written as `PreservesLimit K F`)
@@ -196,7 +194,6 @@ instance [HasColimit K] {F : C ⥤ D} [PreservesColimit K F] : HasColimit (K ⋙
section
variable {E : Type u₃} [ℰ : Category.{v₃} E]
-
variable (F : C ⥤ D) (G : D ⥤ E)
-- Porting note: made this global by removing local
@@ -540,7 +537,6 @@ instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C) where
section
variable {E : Type u₃} [ℰ : Category.{v₃} E]
-
variable (F : C ⥤ D) (G : D ⥤ E)
instance compReflectsLimit [ReflectsLimit K F] [ReflectsLimit (K ⋙ F) G] :
@@ -11,7 +11,7 @@ import Mathlib.CategoryTheory.Limits.HasLimits
# Preservation and reflection of (co)limits.
There are various distinct notions of "preserving limits". The one we
-aim to capture here is: A functor F : C → D "preserves limits" if it
+aim to capture here is: A functor F : C ⥤ D "preserves limits" if it
sends every limit cone in C to a limit cone in D. Informally, F
preserves all the limits which exist in C.
@@ -186,6 +186,13 @@ instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C) where
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_preserves_colimits CategoryTheory.Limits.idPreservesColimits
+instance [HasLimit K] {F : C ⥤ D} [PreservesLimit K F] : HasLimit (K ⋙ F) where
+ exists_limit := ⟨⟨F.mapCone (limit.cone K), PreservesLimit.preserves (limit.isLimit K)⟩⟩
+
+instance [HasColimit K] {F : C ⥤ D} [PreservesColimit K F] : HasColimit (K ⋙ F) where
+ exists_colimit :=
+ ⟨⟨F.mapCocone (colimit.cocone K), PreservesColimit.preserves (colimit.isColimit K)⟩⟩
+
section
variable {E : Type u₃} [ℰ : Category.{v₃} E]
@@ -268,7 +268,7 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
apply ((IsLimit.postcomposeHomEquiv equ _).symm this).ofIsoLimit
refine' Cones.ext (Iso.refl _) fun j => _
· dsimp
- simp [← Functor.map_comp] }
+ simp [equ, ← Functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
/-- A functor preserving larger limits also preserves smaller limits. -/
@@ -337,7 +337,7 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
apply ((IsColimit.precomposeInvEquiv equ _).symm this).ofIsoColimit
refine' Cocones.ext (Iso.refl _) fun j => _
· dsimp
- simp [← Functor.map_comp] }
+ simp [equ, ← Functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
/-- A functor preserving larger colimits also preserves smaller colimits. -/
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -237,7 +237,7 @@ def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
apply IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _ _
have := (IsLimit.postcomposeInvEquiv h c).symm t
apply IsLimit.ofIsoLimit (isLimitOfPreserves F this)
- refine' Cones.ext (Iso.refl _)
+ exact Cones.ext (Iso.refl _)
#align category_theory.limits.preserves_limit_of_iso_diagram CategoryTheory.Limits.preservesLimitOfIsoDiagram
/-- Transfer preservation of a limit along a natural isomorphism in the functor. -/
@@ -305,7 +305,7 @@ def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
apply IsColimit.precomposeHomEquiv (isoWhiskerRight h F : _) _ _
have := (IsColimit.precomposeHomEquiv h c).symm t
apply IsColimit.ofIsoColimit (isColimitOfPreserves F this)
- refine' Cocones.ext (Iso.refl _)
+ exact Cocones.ext (Iso.refl _)
#align category_theory.limits.preserves_colimit_of_iso_diagram CategoryTheory.Limits.preservesColimitOfIsoDiagram
/-- Transfer preservation of a colimit along a natural isomorphism in the functor. -/
@@ -658,7 +658,7 @@ def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIso
suffices IsIso (Prefunctor.map (Cones.functoriality F G).toPrefunctor
(IsLimit.liftConeMorphism (limit.isLimit F) c)) from by
apply isIso_of_reflects_iso _ (Cones.functoriality F G)
- refine' t.hom_isIso (isLimitOfPreserves G (limit.isLimit F)) _
+ exact t.hom_isIso (isLimitOfPreserves G (limit.isLimit F)) _
#align category_theory.limits.reflects_limit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitOfReflectsIsomorphisms
/-- If `C` has limits of shape `J` and `G` preserves them, then if `G` reflects isomorphisms then it
@@ -773,7 +773,7 @@ def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsI
suffices IsIso (Prefunctor.map (Cocones.functoriality F G).toPrefunctor
(IsColimit.descCoconeMorphism (colimit.isColimit F) c)) from by
apply isIso_of_reflects_iso _ (Cocones.functoriality F G)
- refine' (isColimitOfPreserves G (colimit.isColimit F)).hom_isIso t _
+ exact (isColimitOfPreserves G (colimit.isColimit F)).hom_isIso t _
#align category_theory.limits.reflects_colimit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitOfReflectsIsomorphisms
/--
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>
@@ -271,13 +271,18 @@ def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
simp [← Functor.map_comp] }
#align category_theory.limits.preserves_limits_of_shape_of_equiv CategoryTheory.Limits.preservesLimitsOfShapeOfEquiv
+/-- A functor preserving larger limits also preserves smaller limits. -/
+def preservesLimitsOfSizeOfUnivLE (F : C ⥤ D) [UnivLE.{w, w'}] [UnivLE.{w₂, w₂'}]
+ [PreservesLimitsOfSize.{w', w₂'} F] : PreservesLimitsOfSize.{w, w₂} F where
+ preservesLimitsOfShape {J} := preservesLimitsOfShapeOfEquiv
+ ((ShrinkHoms.equivalence J).trans <| Shrink.equivalence _).symm F
+
-- See library note [dsimp, simp].
/-- `PreservesLimitsOfSizeShrink.{w w'} F` tries to obtain `PreservesLimitsOfSize.{w w'} F`
from some other `PreservesLimitsOfSize F`.
-/
def preservesLimitsOfSizeShrink (F : C ⥤ D) [PreservesLimitsOfSize.{max w w₂, max w' w₂'} F] :
- PreservesLimitsOfSize.{w, w'} F :=
- ⟨fun {J} _ => preservesLimitsOfShapeOfEquiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
+ PreservesLimitsOfSize.{w, w'} F := preservesLimitsOfSizeOfUnivLE.{max w w₂, max w' w₂'} F
#align category_theory.limits.preserves_limits_of_size_shrink CategoryTheory.Limits.preservesLimitsOfSizeShrink
/-- Preserving limits at any universe level implies preserving limits in universe `0`. -/
@@ -335,15 +340,19 @@ def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e :
simp [← Functor.map_comp] }
#align category_theory.limits.preserves_colimits_of_shape_of_equiv CategoryTheory.Limits.preservesColimitsOfShapeOfEquiv
+/-- A functor preserving larger colimits also preserves smaller colimits. -/
+def preservesColimitsOfSizeOfUnivLE (F : C ⥤ D) [UnivLE.{w, w'}] [UnivLE.{w₂, w₂'}]
+ [PreservesColimitsOfSize.{w', w₂'} F] : PreservesColimitsOfSize.{w, w₂} F where
+ preservesColimitsOfShape {J} := preservesColimitsOfShapeOfEquiv
+ ((ShrinkHoms.equivalence J).trans <| Shrink.equivalence _).symm F
+
-- See library note [dsimp, simp].
/--
`PreservesColimitsOfSizeShrink.{w w'} F` tries to obtain `PreservesColimitsOfSize.{w w'} F`
from some other `PreservesColimitsOfSize F`.
-/
def preservesColimitsOfSizeShrink (F : C ⥤ D) [PreservesColimitsOfSize.{max w w₂, max w' w₂'} F] :
- PreservesColimitsOfSize.{w, w'} F :=
- ⟨fun {J} =>
- preservesColimitsOfShapeOfEquiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
+ PreservesColimitsOfSize.{w, w'} F := preservesColimitsOfSizeOfUnivLE.{max w w₂, max w' w₂'} F
#align category_theory.limits.preserves_colimits_of_size_shrink CategoryTheory.Limits.preservesColimitsOfSizeShrink
/-- Preserving colimits at any universe implies preserving colimits at universe `0`. -/
@@ -616,12 +625,17 @@ def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
exact IsLimit.whiskerEquivalence t _ }
#align category_theory.limits.reflects_limits_of_shape_of_equiv CategoryTheory.Limits.reflectsLimitsOfShapeOfEquiv
+/-- A functor reflecting larger limits also reflects smaller limits. -/
+def reflectsLimitsOfSizeOfUnivLE (F : C ⥤ D) [UnivLE.{w, w'}] [UnivLE.{w₂, w₂'}]
+ [ReflectsLimitsOfSize.{w', w₂'} F] : ReflectsLimitsOfSize.{w, w₂} F where
+ reflectsLimitsOfShape {J} := reflectsLimitsOfShapeOfEquiv
+ ((ShrinkHoms.equivalence J).trans <| Shrink.equivalence _).symm F
+
/-- `reflectsLimitsOfSizeShrink.{w w'} F` tries to obtain `reflectsLimitsOfSize.{w w'} F`
from some other `reflectsLimitsOfSize F`.
-/
def reflectsLimitsOfSizeShrink (F : C ⥤ D) [ReflectsLimitsOfSize.{max w w₂, max w' w₂'} F] :
- ReflectsLimitsOfSize.{w, w'} F :=
- ⟨fun {J} => reflectsLimitsOfShapeOfEquiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
+ ReflectsLimitsOfSize.{w, w'} F := reflectsLimitsOfSizeOfUnivLE.{max w w₂, max w' w₂'} F
#align category_theory.limits.reflects_limits_of_size_shrink CategoryTheory.Limits.reflectsLimitsOfSizeShrink
/-- Reflecting limits at any universe implies reflecting limits at universe `0`. -/
@@ -726,12 +740,17 @@ def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J
exact IsColimit.whiskerEquivalence t _ }
#align category_theory.limits.reflects_colimits_of_shape_of_equiv CategoryTheory.Limits.reflectsColimitsOfShapeOfEquiv
+/-- A functor reflecting larger colimits also reflects smaller colimits. -/
+def reflectsColimitsOfSizeOfUnivLE (F : C ⥤ D) [UnivLE.{w, w'}] [UnivLE.{w₂, w₂'}]
+ [ReflectsColimitsOfSize.{w', w₂'} F] : ReflectsColimitsOfSize.{w, w₂} F where
+ reflectsColimitsOfShape {J} := reflectsColimitsOfShapeOfEquiv
+ ((ShrinkHoms.equivalence J).trans <| Shrink.equivalence _).symm F
+
/-- `reflectsColimitsOfSizeShrink.{w w'} F` tries to obtain `reflectsColimitsOfSize.{w w'} F`
from some other `reflectsColimitsOfSize F`.
-/
def reflectsColimitsOfSizeShrink (F : C ⥤ D) [ReflectsColimitsOfSize.{max w w₂, max w' w₂'} F] :
- ReflectsColimitsOfSize.{w, w'} F :=
- ⟨fun {J} => reflectsColimitsOfShapeOfEquiv (ULiftHomULiftCategory.equiv.{w₂, w₂'} J).symm F⟩
+ ReflectsColimitsOfSize.{w, w'} F := reflectsColimitsOfSizeOfUnivLE.{max w w₂, max w' w₂'} F
#align category_theory.limits.reflects_colimits_of_size_shrink CategoryTheory.Limits.reflectsColimitsOfSizeShrink
/-- Reflecting colimits at any universe implies reflecting colimits at universe `0`. -/
@@ -781,7 +781,7 @@ end
variable (F : C ⥤ D)
/-- A fully faithful functor reflects limits. -/
-def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F where
+instance fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F where
reflectsLimitsOfShape {J} 𝒥₁ :=
{ reflectsLimit := fun {K} =>
{ reflects := fun {c} t =>
@@ -794,7 +794,8 @@ def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w,
#align category_theory.limits.fully_faithful_reflects_limits CategoryTheory.Limits.fullyFaithfulReflectsLimits
/-- A fully faithful functor reflects colimits. -/
-def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F where
+instance fullyFaithfulReflectsColimits [Full F] [Faithful F] :
+ ReflectsColimitsOfSize.{w, w'} F where
reflectsColimitsOfShape {J} 𝒥₁ :=
{ reflectsColimit := fun {K} =>
{ reflects := fun {c} t =>
@@ -312,7 +312,7 @@ def preservesColimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [Preser
/-- Transfer preservation of colimits of shape along a natural isomorphism in the functor. -/
def preservesColimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOfShape J F] :
PreservesColimitsOfShape J G where
- preservesColimit {K} := preservesColimitOfNatIso K h
+ preservesColimit {K} := preservesColimitOfNatIso K h
#align category_theory.limits.preserves_colimits_of_shape_of_nat_iso CategoryTheory.Limits.preservesColimitsOfShapeOfNatIso
/-- Transfer preservation of colimits along a natural isomorphism in the functor. -/
@@ -762,8 +762,8 @@ If `C` has colimits of shape `J` and `G` preserves them, then if `G` reflects is
reflects colimits of shape `J`.
-/
def reflectsColimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
- [HasColimitsOfShape J C] [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G
- where reflectsColimit {F} := reflectsColimitOfReflectsIsomorphisms F G
+ [HasColimitsOfShape J C] [PreservesColimitsOfShape J G] : ReflectsColimitsOfShape J G where
+ reflectsColimit {F} := reflectsColimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsIsomorphisms
/--
@@ -772,8 +772,8 @@ colimits.
-/
def reflectsColimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
[HasColimitsOfSize.{w', w} C] [PreservesColimitsOfSize.{w', w} G] :
- ReflectsColimitsOfSize.{w', w} G
- where reflectsColimitsOfShape := reflectsColimitsOfShapeOfReflectsIsomorphisms
+ ReflectsColimitsOfSize.{w', w} G where
+ reflectsColimitsOfShape := reflectsColimitsOfShapeOfReflectsIsomorphisms
#align category_theory.limits.reflects_colimits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitsOfReflectsIsomorphisms
end
@@ -781,8 +781,8 @@ end
variable (F : C ⥤ D)
/-- A fully faithful functor reflects limits. -/
-def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F
- where reflectsLimitsOfShape {J} 𝒥₁ :=
+def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w, w'} F where
+ reflectsLimitsOfShape {J} 𝒥₁ :=
{ reflectsLimit := fun {K} =>
{ reflects := fun {c} t =>
(IsLimit.mkConeMorphism fun s =>
@@ -794,8 +794,8 @@ def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w,
#align category_theory.limits.fully_faithful_reflects_limits CategoryTheory.Limits.fullyFaithfulReflectsLimits
/-- A fully faithful functor reflects colimits. -/
-def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F
- where reflectsColimitsOfShape {J} 𝒥₁ :=
+def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F where
+ reflectsColimitsOfShape {J} 𝒥₁ :=
{ reflectsColimit := fun {K} =>
{ reflects := fun {c} t =>
(IsColimit.mkCoconeMorphism fun s =>
A linter that throws on seeing a colon at the start of a line, according to the style guideline that says these operators should go before linebreaks.
@@ -134,8 +134,8 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
-instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F)
- := by
+instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
+ Subsingleton (PreservesLimit K F) := by
constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.preserves_limit_subsingleton CategoryTheory.Limits.preservesLimit_subsingleton
@@ -2,14 +2,11 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Reid Barton, Bhavik Mehta, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.limits.preserves.basic
-! 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.HasLimits
+#align_import category_theory.limits.preserves.basic from "leanprover-community/mathlib"@"e97cf15cd1aec9bd5c193b2ffac5a6dc9118912b"
+
/-!
# Preservation and reflection of (co)limits.
@@ -84,15 +84,13 @@ class PreservesColimitsOfShape (J : Type w) [Category.{w'} J] (F : C ⥤ D) wher
-- This should be used with explicit universe variables.
/-- `PreservesLimitsOfSize.{v u} F` means that `F` sends all limit cones over any
diagram `J ⥤ C` to limit cones, where `J : Type u` with `[Category.{v} J]`. -/
-@[nolint checkUnivs]
+@[nolint checkUnivs, pp_with_univ]
class PreservesLimitsOfSize (F : C ⥤ D) where
preservesLimitsOfShape : ∀ {J : Type w} [Category.{w'} J], PreservesLimitsOfShape J F := by
infer_instance
#align category_theory.limits.preserves_limits_of_size CategoryTheory.Limits.PreservesLimitsOfSize
#align category_theory.limits.preserves_limits_of_size.preserves_limits_of_shape CategoryTheory.Limits.PreservesLimitsOfSize.preservesLimitsOfShape
-pp_with_univ PreservesLimitsOfSize
-
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesLimits (F : C ⥤ D) :=
@@ -102,15 +100,13 @@ abbrev PreservesLimits (F : C ⥤ D) :=
-- This should be used with explicit universe variables.
/-- `PreservesColimitsOfSize.{v u} F` means that `F` sends all colimit cocones over any
diagram `J ⥤ C` to colimit cocones, where `J : Type u` with `[Category.{v} J]`. -/
-@[nolint checkUnivs]
+@[nolint checkUnivs, pp_with_univ]
class PreservesColimitsOfSize (F : C ⥤ D) where
preservesColimitsOfShape : ∀ {J : Type w} [Category.{w'} J], PreservesColimitsOfShape J F := by
infer_instance
#align category_theory.limits.preserves_colimits_of_size CategoryTheory.Limits.PreservesColimitsOfSize
#align category_theory.limits.preserves_colimits_of_size.preserves_colimits_of_shape CategoryTheory.Limits.PreservesColimitsOfSize.preservesColimitsOfShape
-pp_with_univ PreservesColimitsOfSize
-
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesColimits (F : C ⥤ D) :=
@@ -401,14 +397,12 @@ whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone i
the cone was already a limit cone in `C`.
Note that we do not assume a priori that `D` actually has any limits.
-/
-@[nolint checkUnivs]
+@[nolint checkUnivs, pp_with_univ]
class ReflectsLimitsOfSize (F : C ⥤ D) where
reflectsLimitsOfShape : ∀ {J : Type w} [Category.{w'} J], ReflectsLimitsOfShape J F := by
infer_instance
#align category_theory.limits.reflects_limits_of_size CategoryTheory.Limits.ReflectsLimitsOfSize
-pp_with_univ ReflectsLimitsOfSize
-
/-- A functor `F : C ⥤ D` reflects (small) limits if
whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone in `D`,
the cone was already a limit cone in `C`.
@@ -424,14 +418,12 @@ whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit co
the cocone was already a colimit cocone in `C`.
Note that we do not assume a priori that `D` actually has any colimits.
-/
-@[nolint checkUnivs]
+@[nolint checkUnivs, pp_with_univ]
class ReflectsColimitsOfSize (F : C ⥤ D) where
reflectsColimitsOfShape : ∀ {J : Type w} [Category.{w'} J], ReflectsColimitsOfShape J F := by
infer_instance
#align category_theory.limits.reflects_colimits_of_size CategoryTheory.Limits.ReflectsColimitsOfSize
-pp_with_univ ReflectsColimitsOfSize
-
/-- A functor `F : C ⥤ D` reflects (small) colimits if
whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit cocone in `D`,
the cocone was already a colimit cocone in `C`.
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -188,8 +188,8 @@ instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C) where
preservesColimit := fun {K} =>
⟨fun {c} h =>
⟨fun s => h.desc ⟨s.pt, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s j ; cases s ; exact h.fac _ j, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s m w ; rcases s with ⟨_, _, _⟩ ;
+ cases K; rcases c with ⟨_, _, _⟩; intro s j; cases s; exact h.fac _ j, by
+ cases K; rcases c with ⟨_, _, _⟩; intro s m w; rcases s with ⟨_, _, _⟩;
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_preserves_colimits CategoryTheory.Limits.idPreservesColimits
@@ -516,8 +516,8 @@ instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C) where
reflectsLimit := fun {K} =>
⟨fun {c} h =>
⟨fun s => h.lift ⟨s.pt, fun j => s.π.app j, fun j j' f => s.π.naturality f⟩, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s j ; cases s ; exact h.fac _ j, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s m w ; rcases s with ⟨_, _, _⟩ ;
+ cases K; rcases c with ⟨_, _, _⟩; intro s j; cases s; exact h.fac _ j, by
+ cases K; rcases c with ⟨_, _, _⟩; intro s m w; rcases s with ⟨_, _, _⟩;
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_reflects_limits CategoryTheory.Limits.idReflectsLimits
@@ -527,8 +527,8 @@ instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C) where
reflectsColimit := fun {K} =>
⟨fun {c} h =>
⟨fun s => h.desc ⟨s.pt, fun j => s.ι.app j, fun j j' f => s.ι.naturality f⟩, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s j ; cases s ; exact h.fac _ j, by
- cases K ; rcases c with ⟨_, _, _⟩ ; intro s m w ; rcases s with ⟨_, _, _⟩ ;
+ cases K; rcases c with ⟨_, _, _⟩; intro s j; cases s; exact h.fac _ j, by
+ cases K; rcases c with ⟨_, _, _⟩; intro s m w; rcases s with ⟨_, _, _⟩;
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_reflects_colimits CategoryTheory.Limits.idReflectsColimits
@@ -91,6 +91,8 @@ class PreservesLimitsOfSize (F : C ⥤ D) where
#align category_theory.limits.preserves_limits_of_size CategoryTheory.Limits.PreservesLimitsOfSize
#align category_theory.limits.preserves_limits_of_size.preserves_limits_of_shape CategoryTheory.Limits.PreservesLimitsOfSize.preservesLimitsOfShape
+pp_with_univ PreservesLimitsOfSize
+
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesLimits (F : C ⥤ D) :=
@@ -107,6 +109,8 @@ class PreservesColimitsOfSize (F : C ⥤ D) where
#align category_theory.limits.preserves_colimits_of_size CategoryTheory.Limits.PreservesColimitsOfSize
#align category_theory.limits.preserves_colimits_of_size.preserves_colimits_of_shape CategoryTheory.Limits.PreservesColimitsOfSize.preservesColimitsOfShape
+pp_with_univ PreservesColimitsOfSize
+
/-- We say that `F` preserves (small) limits if it sends small
limit cones over any diagram to limit cones. -/
abbrev PreservesColimits (F : C ⥤ D) :=
@@ -403,6 +407,8 @@ class ReflectsLimitsOfSize (F : C ⥤ D) where
infer_instance
#align category_theory.limits.reflects_limits_of_size CategoryTheory.Limits.ReflectsLimitsOfSize
+pp_with_univ ReflectsLimitsOfSize
+
/-- A functor `F : C ⥤ D` reflects (small) limits if
whenever the image of a cone over some `K : J ⥤ C` under `F` is a limit cone in `D`,
the cone was already a limit cone in `C`.
@@ -424,6 +430,8 @@ class ReflectsColimitsOfSize (F : C ⥤ D) where
infer_instance
#align category_theory.limits.reflects_colimits_of_size CategoryTheory.Limits.ReflectsColimitsOfSize
+pp_with_univ ReflectsColimitsOfSize
+
/-- A functor `F : C ⥤ D` reflects (small) colimits if
whenever the image of a cocone over some `K : J ⥤ C` under `F` is a colimit cocone in `D`,
the cocone was already a colimit cocone in `C`.
@@ -261,7 +261,7 @@ def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize
preservesLimitsOfShape {_J} _𝒥₁ := preservesLimitsOfShapeOfNatIso h
#align category_theory.limits.preserves_limits_of_nat_iso CategoryTheory.Limits.preservesLimitsOfNatIso
-/-- Transfer preservation of limits along a equivalence in the shape. -/
+/-- Transfer preservation of limits along an equivalence in the shape. -/
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F where
preservesLimit {K} :=
@@ -324,7 +324,7 @@ def preservesColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOf
preservesColimitsOfShape {_J} _𝒥₁ := preservesColimitsOfShapeOfNatIso h
#align category_theory.limits.preserves_colimits_of_nat_iso CategoryTheory.Limits.preservesColimitsOfNatIso
-/-- Transfer preservation of colimits along a equivalence in the shape. -/
+/-- Transfer preservation of colimits along an equivalence in the shape. -/
def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F where
preservesColimit {K} :=
@@ -607,7 +607,7 @@ def reflectsLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfSize.{
reflectsLimitsOfShape := reflectsLimitsOfShapeOfNatIso h
#align category_theory.limits.reflects_limits_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfNatIso
-/-- Transfer reflection of limits along a equivalence in the shape. -/
+/-- Transfer reflection of limits along an equivalence in the shape. -/
def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F where
reflectsLimit {K} :=
@@ -717,7 +717,7 @@ def reflectsColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfSi
reflectsColimitsOfShape := reflectsColimitsOfShapeOfNatIso h
#align category_theory.limits.reflects_colimits_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfNatIso
-/-- Transfer reflection of colimits along a equivalence in the shape. -/
+/-- Transfer reflection of colimits along an equivalence in the shape. -/
def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F where
reflectsColimit :=
@@ -236,17 +236,17 @@ def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t
/-- Transfer preservation of limits along a natural isomorphism in the diagram. -/
def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [PreservesLimit K₁ F] :
PreservesLimit K₂ F where
- preserves {c} t := by
- apply IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _ _
- have := (IsLimit.postcomposeInvEquiv h c).symm t
- apply IsLimit.ofIsoLimit (isLimitOfPreserves F this)
- refine' Cones.ext (Iso.refl _) fun j => by aesop_cat
+ preserves {c} t := by
+ apply IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _ _
+ have := (IsLimit.postcomposeInvEquiv h c).symm t
+ apply IsLimit.ofIsoLimit (isLimitOfPreserves F this)
+ refine' Cones.ext (Iso.refl _)
#align category_theory.limits.preserves_limit_of_iso_diagram CategoryTheory.Limits.preservesLimitOfIsoDiagram
/-- Transfer preservation of a limit along a natural isomorphism in the functor. -/
def preservesLimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [PreservesLimit K F] :
PreservesLimit K G where
- preserves t := IsLimit.mapConeEquiv h (PreservesLimit.preserves t)
+ preserves t := IsLimit.mapConeEquiv h (PreservesLimit.preserves t)
#align category_theory.limits.preserves_limit_of_nat_iso CategoryTheory.Limits.preservesLimitOfNatIso
/-- Transfer preservation of limits of shape along a natural isomorphism in the functor. -/
@@ -265,8 +265,7 @@ def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
[PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F where
preservesLimit {K} :=
- {
- preserves := fun {c} t => by
+ { preserves := fun {c} t => by
let equ := e.invFunIdAssoc (K ⋙ F)
have := (isLimitOfPreserves F (t.whiskerEquivalence e)).whiskerEquivalence e.symm
apply ((IsLimit.postcomposeHomEquiv equ _).symm this).ofIsoLimit
@@ -304,7 +303,7 @@ def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
apply IsColimit.precomposeHomEquiv (isoWhiskerRight h F : _) _ _
have := (IsColimit.precomposeHomEquiv h c).symm t
apply IsColimit.ofIsoColimit (isColimitOfPreserves F this)
- refine' Cocones.ext (Iso.refl _) fun j => by aesop_cat
+ refine' Cocones.ext (Iso.refl _)
#align category_theory.limits.preserves_colimit_of_iso_diagram CategoryTheory.Limits.preservesColimitOfIsoDiagram
/-- Transfer preservation of a colimit along a natural isomorphism in the functor. -/
@@ -587,7 +586,7 @@ def reflectsLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
reflects {c} t := by
apply IsLimit.postcomposeInvEquiv h c (isLimitOfReflects F _)
apply ((IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _).symm t).ofIsoLimit _
- exact Cones.ext (Iso.refl _) (by aesop_cat)
+ exact Cones.ext (Iso.refl _)
#align category_theory.limits.reflects_limit_of_iso_diagram CategoryTheory.Limits.reflectsLimitOfIsoDiagram
/-- Transfer reflection of a limit along a natural isomorphism in the functor. -/
@@ -697,7 +696,7 @@ def reflectsColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
reflects {c} t := by
apply IsColimit.precomposeHomEquiv h c (isColimitOfReflects F _)
apply ((IsColimit.precomposeHomEquiv (isoWhiskerRight h F : _) _).symm t).ofIsoColimit _
- exact Cocones.ext (Iso.refl _) (by aesop_cat)
+ exact Cocones.ext (Iso.refl _)
#align category_theory.limits.reflects_colimit_of_iso_diagram CategoryTheory.Limits.reflectsColimitOfIsoDiagram
/-- Transfer reflection of a colimit along a natural isomorphism in the functor. -/
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".
@@ -800,13 +800,10 @@ def fullyFaithfulReflectsLimits [Full F] [Faithful F] : ReflectsLimitsOfSize.{w,
/-- A fully faithful functor reflects colimits. -/
def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize.{w, w'} F
where reflectsColimitsOfShape {J} 𝒥₁ :=
- {
- reflectsColimit := fun {K} =>
- {
- reflects := fun {c} t =>
+ { reflectsColimit := fun {K} =>
+ { reflects := fun {c} t =>
(IsColimit.mkCoconeMorphism fun s =>
- (Cocones.functoriality K F).preimage (t.descCoconeMorphism _)) <|
- by
+ (Cocones.functoriality K F).preimage (t.descCoconeMorphism _)) <| by
apply fun s m => (Cocones.functoriality K F).map_injective _
intro s m
rw [Functor.image_preimage]
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -140,7 +140,6 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F)
:= by
constructor; rintro ⟨a⟩ ⟨b⟩; congr!
-
#align category_theory.limits.preserves_limit_subsingleton CategoryTheory.Limits.preservesLimit_subsingleton
instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mathport.20drops.20priorities.20in.20.60attribute.20.5Binstance.5D.60. mathport
has been dropping the priorities on instances when using the attribute
command.
This PR adds back all the priorities, except for local attribute
, and instances involving coercions, which I didn't want to mess with.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -113,7 +113,8 @@ abbrev PreservesColimits (F : C ⥤ D) :=
PreservesColimitsOfSize.{v₂, v₂} F
#align category_theory.limits.preserves_colimits CategoryTheory.Limits.PreservesColimits
-attribute [instance]
+-- see Note [lower instance priority]
+attribute [instance 100]
PreservesLimitsOfShape.preservesLimit PreservesLimitsOfSize.preservesLimitsOfShape
PreservesColimitsOfShape.preservesColimit
PreservesColimitsOfSize.preservesColimitsOfShape
@@ -57,14 +57,14 @@ variable {J : Type w} [Category.{w'} J] {K : J ⥤ C}
if `F` maps any limit cone over `K` to a limit cone.
-/
class PreservesLimit (K : J ⥤ C) (F : C ⥤ D) where
- preserves : ∀ {c : Cone K}, IsLimit c → IsLimit (Functor.mapCone F c)
+ preserves : ∀ {c : Cone K}, IsLimit c → IsLimit (F.mapCone c)
#align category_theory.limits.preserves_limit CategoryTheory.Limits.PreservesLimit
/-- A functor `F` preserves colimits of `K` (written as `PreservesColimit K F`)
if `F` maps any colimit cocone over `K` to a colimit cocone.
-/
class PreservesColimit (K : J ⥤ C) (F : C ⥤ D) where
- preserves : ∀ {c : Cocone K}, IsColimit c → IsColimit (Functor.mapCocone F c)
+ preserves : ∀ {c : Cocone K}, IsColimit c → IsColimit (F.mapCocone c)
#align category_theory.limits.preserves_colimit CategoryTheory.Limits.PreservesColimit
/-- We say that `F` preserves limits of shape `J` if `F` preserves limits for every diagram
@@ -123,7 +123,7 @@ attribute [instance]
guide typeclass resolution.
-/
def isLimitOfPreserves (F : C ⥤ D) {c : Cone K} (t : IsLimit c) [PreservesLimit K F] :
- IsLimit (Functor.mapCone F c) :=
+ IsLimit (F.mapCone c) :=
PreservesLimit.preserves t
#align category_theory.limits.is_limit_of_preserves CategoryTheory.Limits.isLimitOfPreserves
@@ -132,7 +132,7 @@ A convenience function for `PreservesColimit`, which takes the functor as an exp
guide typeclass resolution.
-/
def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [PreservesColimit K F] :
- IsColimit (Functor.mapCocone F c) :=
+ IsColimit (F.mapCocone c) :=
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
@@ -229,7 +229,7 @@ end
/-- If F preserves one limit cone for the diagram K,
then it preserves any limit cone for K. -/
def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t)
- (hF : IsLimit (Functor.mapCone F t)) : PreservesLimit K F :=
+ (hF : IsLimit (F.mapCone t)) : PreservesLimit K F :=
⟨fun h' => IsLimit.ofIsoLimit hF (Functor.mapIso _ (IsLimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_limit_of_preserves_limit_cone CategoryTheory.Limits.preservesLimitOfPreservesLimitCone
@@ -293,7 +293,7 @@ def preservesSmallestLimitsOfPreservesLimits (F : C ⥤ D) [PreservesLimitsOfSiz
/-- If F preserves one colimit cocone for the diagram K,
then it preserves any colimit cocone for K. -/
def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : IsColimit t)
- (hF : IsColimit (Functor.mapCocone F t)) : PreservesColimit K F :=
+ (hF : IsColimit (F.mapCocone t)) : PreservesColimit K F :=
⟨fun h' => IsColimit.ofIsoColimit hF (Functor.mapIso _ (IsColimit.uniqueUpToIso h h'))⟩
#align category_theory.limits.preserves_colimit_of_preserves_colimit_cocone CategoryTheory.Limits.preservesColimitOfPreservesColimitCocone
@@ -362,7 +362,7 @@ the cone was already a limit cone in `C`.
Note that we do not assume a priori that `D` actually has any limits.
-/
class ReflectsLimit (K : J ⥤ C) (F : C ⥤ D) where
- reflects : ∀ {c : Cone K}, IsLimit (Functor.mapCone F c) → IsLimit c
+ reflects : ∀ {c : Cone K}, IsLimit (F.mapCone c) → IsLimit c
#align category_theory.limits.reflects_limit CategoryTheory.Limits.ReflectsLimit
/-- A functor `F : C ⥤ D` reflects colimits for `K : J ⥤ C` if
@@ -371,7 +371,7 @@ the cocone was already a colimit cocone in `C`.
Note that we do not assume a priori that `D` actually has any colimits.
-/
class ReflectsColimit (K : J ⥤ C) (F : C ⥤ D) where
- reflects : ∀ {c : Cocone K}, IsColimit (Functor.mapCocone F c) → IsColimit c
+ reflects : ∀ {c : Cocone K}, IsColimit (F.mapCocone c) → IsColimit c
#align category_theory.limits.reflects_colimit CategoryTheory.Limits.ReflectsColimit
/-- A functor `F : C ⥤ D` reflects limits of shape `J` if
@@ -437,7 +437,7 @@ abbrev ReflectsColimits (F : C ⥤ D) :=
/-- A convenience function for `ReflectsLimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
-def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (Functor.mapCone F c))
+def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (F.mapCone c))
[ReflectsLimit K F] : IsLimit c := ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
@@ -445,7 +445,7 @@ def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (Functor.mapCone F
A convenience function for `ReflectsColimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
-def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (Functor.mapCocone F c))
+def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (F.mapCocone c))
[ReflectsColimit K F] : IsColimit c :=
ReflectsColimit.reflects t
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
congr
(#2595)
Switch to using congr!
instead, which is analogous to mathlib 3's congr'
.
@@ -114,8 +114,8 @@ abbrev PreservesColimits (F : C ⥤ D) :=
#align category_theory.limits.preserves_colimits CategoryTheory.Limits.PreservesColimits
attribute [instance]
- PreservesLimitsOfShape.preservesLimit PreservesLimitsOfSize.preservesLimitsOfShape
- PreservesColimitsOfShape.preservesColimit
+ PreservesLimitsOfShape.preservesLimit PreservesLimitsOfSize.preservesLimitsOfShape
+ PreservesColimitsOfShape.preservesColimit
PreservesColimitsOfSize.preservesColimitsOfShape
-- see Note [lower instance priority]
@@ -136,38 +136,38 @@ def isColimitOfPreserves (F : C ⥤ D) {c : Cocone K} (t : IsColimit c) [Preserv
PreservesColimit.preserves t
#align category_theory.limits.is_colimit_of_preserves CategoryTheory.Limits.isColimitOfPreserves
-instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F)
+instance preservesLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (PreservesLimit K F)
:= by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext c h; aesop -- Porting note: `congr` used to close this
-
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
+
#align category_theory.limits.preserves_limit_subsingleton CategoryTheory.Limits.preservesLimit_subsingleton
instance preservesColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) :
- Subsingleton (PreservesColimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext c h; aesop -- Porting note: `congr` used to close this
+ Subsingleton (PreservesColimit K F) := by
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.preserves_colimit_subsingleton CategoryTheory.Limits.preservesColimit_subsingleton
instance preservesLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.preserves_limits_of_shape_subsingleton CategoryTheory.Limits.preservesLimitsOfShape_subsingleton
instance preservesColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.preserves_colimits_of_shape_subsingleton CategoryTheory.Limits.preservesColimitsOfShape_subsingleton
instance preserves_limits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesLimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
#align category_theory.limits.preserves_limits_subsingleton CategoryTheory.Limits.preserves_limits_subsingleton
instance preserves_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (PreservesColimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
#align category_theory.limits.preserves_colimits_subsingleton CategoryTheory.Limits.preserves_colimits_subsingleton
-instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C) where
+instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C) where
preservesLimitsOfShape {J} 𝒥 :=
{
preservesLimit := fun {K} =>
@@ -178,7 +178,7 @@ instance idPreservesLimits : PreservesLimitsOfSize.{w', w} (𝟭 C) where
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_preserves_limits CategoryTheory.Limits.idPreservesLimits
-instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C) where
+instance idPreservesColimits : PreservesColimitsOfSize.{w', w} (𝟭 C) where
preservesColimitsOfShape {J} 𝒥 :=
{
preservesColimit := fun {K} =>
@@ -235,7 +235,7 @@ def preservesLimitOfPreservesLimitCone {F : C ⥤ D} {t : Cone K} (h : IsLimit t
/-- Transfer preservation of limits along a natural isomorphism in the diagram. -/
def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [PreservesLimit K₁ F] :
- PreservesLimit K₂ F where
+ PreservesLimit K₂ F where
preserves {c} t := by
apply IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _ _
have := (IsLimit.postcomposeInvEquiv h c).symm t
@@ -245,25 +245,25 @@ def preservesLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
/-- Transfer preservation of a limit along a natural isomorphism in the functor. -/
def preservesLimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [PreservesLimit K F] :
- PreservesLimit K G where
+ PreservesLimit K G where
preserves t := IsLimit.mapConeEquiv h (PreservesLimit.preserves t)
#align category_theory.limits.preserves_limit_of_nat_iso CategoryTheory.Limits.preservesLimitOfNatIso
/-- Transfer preservation of limits of shape along a natural isomorphism in the functor. -/
def preservesLimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfShape J F] :
- PreservesLimitsOfShape J G where
+ PreservesLimitsOfShape J G where
preservesLimit {K} := preservesLimitOfNatIso K h
#align category_theory.limits.preserves_limits_of_shape_of_nat_iso CategoryTheory.Limits.preservesLimitsOfShapeOfNatIso
/-- Transfer preservation of limits along a natural isomorphism in the functor. -/
def preservesLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesLimitsOfSize.{w, w'} F] :
- PreservesLimitsOfSize.{w, w'} G where
+ PreservesLimitsOfSize.{w, w'} G where
preservesLimitsOfShape {_J} _𝒥₁ := preservesLimitsOfShapeOfNatIso h
#align category_theory.limits.preserves_limits_of_nat_iso CategoryTheory.Limits.preservesLimitsOfNatIso
/-- Transfer preservation of limits along a equivalence in the shape. -/
def preservesLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
- [PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F where
+ [PreservesLimitsOfShape J F] : PreservesLimitsOfShape J' F where
preservesLimit {K} :=
{
preserves := fun {c} t => by
@@ -299,7 +299,7 @@ def preservesColimitOfPreservesColimitCocone {F : C ⥤ D} {t : Cocone K} (h : I
/-- Transfer preservation of colimits along a natural isomorphism in the shape. -/
def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [PreservesColimit K₁ F] :
- PreservesColimit K₂ F where
+ PreservesColimit K₂ F where
preserves {c} t := by
apply IsColimit.precomposeHomEquiv (isoWhiskerRight h F : _) _ _
have := (IsColimit.precomposeHomEquiv h c).symm t
@@ -309,25 +309,25 @@ def preservesColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
/-- Transfer preservation of a colimit along a natural isomorphism in the functor. -/
def preservesColimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [PreservesColimit K F] :
- PreservesColimit K G where
+ PreservesColimit K G where
preserves t := IsColimit.mapCoconeEquiv h (PreservesColimit.preserves t)
#align category_theory.limits.preserves_colimit_of_nat_iso CategoryTheory.Limits.preservesColimitOfNatIso
/-- Transfer preservation of colimits of shape along a natural isomorphism in the functor. -/
def preservesColimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOfShape J F] :
- PreservesColimitsOfShape J G where
+ PreservesColimitsOfShape J G where
preservesColimit {K} := preservesColimitOfNatIso K h
#align category_theory.limits.preserves_colimits_of_shape_of_nat_iso CategoryTheory.Limits.preservesColimitsOfShapeOfNatIso
/-- Transfer preservation of colimits along a natural isomorphism in the functor. -/
def preservesColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [PreservesColimitsOfSize.{w, w'} F] :
- PreservesColimitsOfSize.{w, w'} G where
+ PreservesColimitsOfSize.{w, w'} G where
preservesColimitsOfShape {_J} _𝒥₁ := preservesColimitsOfShapeOfNatIso h
#align category_theory.limits.preserves_colimits_of_nat_iso CategoryTheory.Limits.preservesColimitsOfNatIso
/-- Transfer preservation of colimits along a equivalence in the shape. -/
def preservesColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
- [PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F where
+ [PreservesColimitsOfShape J F] : PreservesColimitsOfShape J' F where
preservesColimit {K} :=
{
preserves := fun {c} t => by
@@ -437,7 +437,7 @@ abbrev ReflectsColimits (F : C ⥤ D) :=
/-- A convenience function for `ReflectsLimit`, which takes the functor as an explicit argument to
guide typeclass resolution.
-/
-def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (Functor.mapCone F c))
+def isLimitOfReflects (F : C ⥤ D) {c : Cone K} (t : IsLimit (Functor.mapCone F c))
[ReflectsLimit K F] : IsLimit c := ReflectsLimit.reflects t
#align category_theory.limits.is_limit_of_reflects CategoryTheory.Limits.isLimitOfReflects
@@ -451,32 +451,32 @@ def isColimitOfReflects (F : C ⥤ D) {c : Cocone K} (t : IsColimit (Functor.map
#align category_theory.limits.is_colimit_of_reflects CategoryTheory.Limits.isColimitOfReflects
instance reflectsLimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsLimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.reflects_limit_subsingleton CategoryTheory.Limits.reflectsLimit_subsingleton
-instance
- reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsColimit K F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+instance
+ reflectsColimit_subsingleton (K : J ⥤ C) (F : C ⥤ D) : Subsingleton (ReflectsColimit K F) := by
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.reflects_colimit_subsingleton CategoryTheory.Limits.reflectsColimit_subsingleton
instance reflectsLimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsLimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.reflects_limits_of_shape_subsingleton CategoryTheory.Limits.reflectsLimitsOfShape_subsingleton
instance reflectsColimitsOfShape_subsingleton (J : Type w) [Category.{w'} J] (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfShape J F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr!
#align category_theory.limits.reflects_colimits_of_shape_subsingleton CategoryTheory.Limits.reflectsColimitsOfShape_subsingleton
-instance
+instance
reflects_limits_subsingleton (F : C ⥤ D) : Subsingleton (ReflectsLimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
#align category_theory.limits.reflects_limits_subsingleton CategoryTheory.Limits.reflects_limits_subsingleton
instance reflects_colimits_subsingleton (F : C ⥤ D) :
Subsingleton (ReflectsColimitsOfSize.{w', w} F) := by
- constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; aesop -- Porting note: `congr` used to close this
+ constructor; rintro ⟨a⟩ ⟨b⟩; congr; funext; congr!
#align category_theory.limits.reflects_colimits_subsingleton CategoryTheory.Limits.reflects_colimits_subsingleton
-- see Note [lower instance priority]
@@ -503,7 +503,7 @@ instance (priority := 100) reflectsColimitsOfShapeOfReflectsColimits (J : Type w
ReflectsColimitsOfSize.reflectsColimitsOfShape
#align category_theory.limits.reflects_colimits_of_shape_of_reflects_colimits CategoryTheory.Limits.reflectsColimitsOfShapeOfReflectsColimits
-instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C) where
+instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C) where
reflectsLimitsOfShape {J} 𝒥 :=
{
reflectsLimit := fun {K} =>
@@ -514,7 +514,7 @@ instance idReflectsLimits : ReflectsLimitsOfSize.{w, w'} (𝟭 C) where
exact h.uniq _ m w⟩⟩ }
#align category_theory.limits.id_reflects_limits CategoryTheory.Limits.idReflectsLimits
-instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C) where
+instance idReflectsColimits : ReflectsColimitsOfSize.{w, w'} (𝟭 C) where
reflectsColimitsOfShape {J} 𝒥 :=
{
reflectsColimit := fun {K} =>
@@ -571,19 +571,19 @@ If `F ⋙ G` preserves limits of shape `J` and `G` reflects limits of shape `J`,
limits of shape `J`.
-/
def preservesLimitsOfShapeOfReflectsOfPreserves [PreservesLimitsOfShape J (F ⋙ G)]
- [ReflectsLimitsOfShape J G] : PreservesLimitsOfShape J F where
+ [ReflectsLimitsOfShape J G] : PreservesLimitsOfShape J F where
preservesLimit := preservesLimitOfReflectsOfPreserves F G
#align category_theory.limits.preserves_limits_of_shape_of_reflects_of_preserves CategoryTheory.Limits.preservesLimitsOfShapeOfReflectsOfPreserves
/-- If `F ⋙ G` preserves limits and `G` reflects limits, then `F` preserves limits. -/
def preservesLimitsOfReflectsOfPreserves [PreservesLimitsOfSize.{w', w} (F ⋙ G)]
- [ReflectsLimitsOfSize.{w', w} G] : PreservesLimitsOfSize.{w', w} F where
+ [ReflectsLimitsOfSize.{w', w} G] : PreservesLimitsOfSize.{w', w} F where
preservesLimitsOfShape := preservesLimitsOfShapeOfReflectsOfPreserves F G
#align category_theory.limits.preserves_limits_of_reflects_of_preserves CategoryTheory.Limits.preservesLimitsOfReflectsOfPreserves
/-- Transfer reflection of limits along a natural isomorphism in the diagram. -/
def reflectsLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [ReflectsLimit K₁ F] :
- ReflectsLimit K₂ F where
+ ReflectsLimit K₂ F where
reflects {c} t := by
apply IsLimit.postcomposeInvEquiv h c (isLimitOfReflects F _)
apply ((IsLimit.postcomposeInvEquiv (isoWhiskerRight h F : _) _).symm t).ofIsoLimit _
@@ -592,25 +592,25 @@ def reflectsLimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅
/-- Transfer reflection of a limit along a natural isomorphism in the functor. -/
def reflectsLimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimit K F] :
- ReflectsLimit K G where
+ ReflectsLimit K G where
reflects t := ReflectsLimit.reflects (IsLimit.mapConeEquiv h.symm t)
#align category_theory.limits.reflects_limit_of_nat_iso CategoryTheory.Limits.reflectsLimitOfNatIso
/-- Transfer reflection of limits of shape along a natural isomorphism in the functor. -/
def reflectsLimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfShape J F] :
- ReflectsLimitsOfShape J G where
+ ReflectsLimitsOfShape J G where
reflectsLimit {K} := reflectsLimitOfNatIso K h
#align category_theory.limits.reflects_limits_of_shape_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfShapeOfNatIso
/-- Transfer reflection of limits along a natural isomorphism in the functor. -/
def reflectsLimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsLimitsOfSize.{w', w} F] :
- ReflectsLimitsOfSize.{w', w} G where
+ ReflectsLimitsOfSize.{w', w} G where
reflectsLimitsOfShape := reflectsLimitsOfShapeOfNatIso h
#align category_theory.limits.reflects_limits_of_nat_iso CategoryTheory.Limits.reflectsLimitsOfNatIso
/-- Transfer reflection of limits along a equivalence in the shape. -/
def reflectsLimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
- [ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F where
+ [ReflectsLimitsOfShape J F] : ReflectsLimitsOfShape J' F where
reflectsLimit {K} :=
{
reflects := fun {c} t => by
@@ -636,17 +636,17 @@ def reflectsSmallestLimitsOfReflectsLimits (F : C ⥤ D) [ReflectsLimitsOfSize.{
/-- If the limit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the limit of `F`.
--/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
+-/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
- [HasLimit F] [PreservesLimit F G] : ReflectsLimit F G where
+ [HasLimit F] [PreservesLimit F G] : ReflectsLimit F G where
reflects {c} t := by
- suffices IsIso (IsLimit.lift (limit.isLimit F) c) from by
+ suffices IsIso (IsLimit.lift (limit.isLimit F) c) from by
apply IsLimit.ofPointIso (limit.isLimit F)
change IsIso ((Cones.forget _).map ((limit.isLimit F).liftConeMorphism c))
- suffices IsIso (IsLimit.liftConeMorphism (limit.isLimit F) c) from by
+ suffices IsIso (IsLimit.liftConeMorphism (limit.isLimit F) c) from by
apply (Cones.forget F).map_isIso _
- suffices IsIso (Prefunctor.map (Cones.functoriality F G).toPrefunctor
- (IsLimit.liftConeMorphism (limit.isLimit F) c)) from by
+ suffices IsIso (Prefunctor.map (Cones.functoriality F G).toPrefunctor
+ (IsLimit.liftConeMorphism (limit.isLimit F) c)) from by
apply isIso_of_reflects_iso _ (Cones.functoriality F G)
refine' t.hom_isIso (isLimitOfPreserves G (limit.isLimit F)) _
#align category_theory.limits.reflects_limit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitOfReflectsIsomorphisms
@@ -655,7 +655,7 @@ def reflectsLimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIso
reflects limits of shape `J`.
-/
def reflectsLimitsOfShapeOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
- [HasLimitsOfShape J C] [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G where
+ [HasLimitsOfShape J C] [PreservesLimitsOfShape J G] : ReflectsLimitsOfShape J G where
reflectsLimit {F} := reflectsLimitOfReflectsIsomorphisms F G
#align category_theory.limits.reflects_limits_of_shape_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfShapeOfReflectsIsomorphisms
@@ -664,7 +664,7 @@ limits.
-/
def reflectsLimitsOfReflectsIsomorphisms {G : C ⥤ D} [ReflectsIsomorphisms G]
[HasLimitsOfSize.{w', w} C] [PreservesLimitsOfSize.{w', w} G] : ReflectsLimitsOfSize.{w', w} G
- where
+ where
reflectsLimitsOfShape := reflectsLimitsOfShapeOfReflectsIsomorphisms
#align category_theory.limits.reflects_limits_of_reflects_isomorphisms CategoryTheory.Limits.reflectsLimitsOfReflectsIsomorphisms
@@ -681,19 +681,19 @@ def preservesColimitOfReflectsOfPreserves [PreservesColimit K (F ⋙ G)] [Reflec
preserves colimits of shape `J`.
-/
def preservesColimitsOfShapeOfReflectsOfPreserves [PreservesColimitsOfShape J (F ⋙ G)]
- [ReflectsColimitsOfShape J G] : PreservesColimitsOfShape J F where
+ [ReflectsColimitsOfShape J G] : PreservesColimitsOfShape J F where
preservesColimit := preservesColimitOfReflectsOfPreserves F G
#align category_theory.limits.preserves_colimits_of_shape_of_reflects_of_preserves CategoryTheory.Limits.preservesColimitsOfShapeOfReflectsOfPreserves
/-- If `F ⋙ G` preserves colimits and `G` reflects colimits, then `F` preserves colimits. -/
def preservesColimitsOfReflectsOfPreserves [PreservesColimitsOfSize.{w', w} (F ⋙ G)]
- [ReflectsColimitsOfSize.{w', w} G] : PreservesColimitsOfSize.{w', w} F where
+ [ReflectsColimitsOfSize.{w', w} G] : PreservesColimitsOfSize.{w', w} F where
preservesColimitsOfShape := preservesColimitsOfShapeOfReflectsOfPreserves F G
#align category_theory.limits.preserves_colimits_of_reflects_of_preserves CategoryTheory.Limits.preservesColimitsOfReflectsOfPreserves
/-- Transfer reflection of colimits along a natural isomorphism in the diagram. -/
def reflectsColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁ ≅ K₂) [ReflectsColimit K₁ F] :
- ReflectsColimit K₂ F where
+ ReflectsColimit K₂ F where
reflects {c} t := by
apply IsColimit.precomposeHomEquiv h c (isColimitOfReflects F _)
apply ((IsColimit.precomposeHomEquiv (isoWhiskerRight h F : _) _).symm t).ofIsoColimit _
@@ -702,25 +702,25 @@ def reflectsColimitOfIsoDiagram {K₁ K₂ : J ⥤ C} (F : C ⥤ D) (h : K₁
/-- Transfer reflection of a colimit along a natural isomorphism in the functor. -/
def reflectsColimitOfNatIso (K : J ⥤ C) {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimit K F] :
- ReflectsColimit K G where
+ ReflectsColimit K G where
reflects t := ReflectsColimit.reflects (IsColimit.mapCoconeEquiv h.symm t)
#align category_theory.limits.reflects_colimit_of_nat_iso CategoryTheory.Limits.reflectsColimitOfNatIso
/-- Transfer reflection of colimits of shape along a natural isomorphism in the functor. -/
def reflectsColimitsOfShapeOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfShape J F] :
- ReflectsColimitsOfShape J G where
+ ReflectsColimitsOfShape J G where
reflectsColimit {K} := reflectsColimitOfNatIso K h
#align category_theory.limits.reflects_colimits_of_shape_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfShapeOfNatIso
/-- Transfer reflection of colimits along a natural isomorphism in the functor. -/
def reflectsColimitsOfNatIso {F G : C ⥤ D} (h : F ≅ G) [ReflectsColimitsOfSize.{w, w'} F] :
- ReflectsColimitsOfSize.{w, w'} G where
+ ReflectsColimitsOfSize.{w, w'} G where
reflectsColimitsOfShape := reflectsColimitsOfShapeOfNatIso h
#align category_theory.limits.reflects_colimits_of_nat_iso CategoryTheory.Limits.reflectsColimitsOfNatIso
/-- Transfer reflection of colimits along a equivalence in the shape. -/
def reflectsColimitsOfShapeOfEquiv {J' : Type w₂} [Category.{w₂'} J'] (e : J ≌ J') (F : C ⥤ D)
- [ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F where
+ [ReflectsColimitsOfShape J F] : ReflectsColimitsOfShape J' F where
reflectsColimit :=
{
reflects := fun {c} t => by
@@ -746,17 +746,17 @@ def reflectsSmallestColimitsOfReflectsColimits (F : C ⥤ D) [ReflectsColimitsOf
/-- If the colimit of `F` exists and `G` preserves it, then if `G` reflects isomorphisms then it
reflects the colimit of `F`.
--/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
+-/ -- Porting note: previous behavior of apply pushed instance holes into hypotheses, this errors
def reflectsColimitOfReflectsIsomorphisms (F : J ⥤ C) (G : C ⥤ D) [ReflectsIsomorphisms G]
- [HasColimit F] [PreservesColimit F G] : ReflectsColimit F G where
+ [HasColimit F] [PreservesColimit F G] : ReflectsColimit F G where
reflects {c} t := by
- suffices IsIso (IsColimit.desc (colimit.isColimit F) c) from by
+ suffices IsIso (IsColimit.desc (colimit.isColimit F) c) from by
apply IsColimit.ofPointIso (colimit.isColimit F)
change IsIso ((Cocones.forget _).map ((colimit.isColimit F).descCoconeMorphism c))
- suffices IsIso (IsColimit.descCoconeMorphism (colimit.isColimit F) c) from by
+ suffices IsIso (IsColimit.descCoconeMorphism (colimit.isColimit F) c) from by
apply (Cocones.forget F).map_isIso _
- suffices IsIso (Prefunctor.map (Cocones.functoriality F G).toPrefunctor
- (IsColimit.descCoconeMorphism (colimit.isColimit F) c)) from by
+ suffices IsIso (Prefunctor.map (Cocones.functoriality F G).toPrefunctor
+ (IsColimit.descCoconeMorphism (colimit.isColimit F) c)) from by
apply isIso_of_reflects_iso _ (Cocones.functoriality F G)
refine' (isColimitOfPreserves G (colimit.isColimit F)).hom_isIso t _
#align category_theory.limits.reflects_colimit_of_reflects_isomorphisms CategoryTheory.Limits.reflectsColimitOfReflectsIsomorphisms
@@ -808,10 +808,9 @@ def fullyFaithfulReflectsColimits [Full F] [Faithful F] : ReflectsColimitsOfSize
(Cocones.functoriality K F).preimage (t.descCoconeMorphism _)) <|
by
apply fun s m => (Cocones.functoriality K F).map_injective _
- intro s m
+ intro s m
rw [Functor.image_preimage]
apply t.uniq_cocone_morphism }}
#align category_theory.limits.fully_faithful_reflects_colimits CategoryTheory.Limits.fullyFaithfulReflectsColimits
end CategoryTheory.Limits
-
All dependencies are ported!