category_theory.limits.preserves.basicMathlib.CategoryTheory.Limits.Preserves.Basic

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

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

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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 =>
Diff
@@ -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"
 
Diff
@@ -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.
 
Diff
@@ -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`
Diff
@@ -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
 -/
 
Diff
@@ -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
Diff
@@ -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
 -/
 
Diff
@@ -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:
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
 
Diff
@@ -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⟩⟩ }

Changes in mathlib4

mathlib3
mathlib4
feat: 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.

Zulip discussion

Diff
@@ -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]
chore(CategoryTheory): make 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>

Diff
@@ -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
 
chore: remove unnecessary cdots (#12417)

These · are scoping when there is a single active goal.

These were found using a modification of the linter at #12339.

Diff
@@ -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. -/
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

These notions on functors are now Functor.Full, Functor.Faithful, Functor.EssSurj, Functor.IsEquivalence, Functor.ReflectsIsomorphisms. Deprecated aliases are introduced for the previous names.

Diff
@@ -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} =>
chore(*): remove empty lines between variable statements (#11418)

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)
Diff
@@ -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] :
feat: preserves colimit if colimit.post is iso (#11421)
Diff
@@ -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]
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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. -/
chore: remove terminal, terminal refines (#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 refines, but maybe the current change is beneficial.

Diff
@@ -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
 
 /--
feat: switch to weaker UnivLE (#8556)

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>

Diff
@@ -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`. -/
chore: make fullyFaithfulReflects(Co)Limits instances (#8462)

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -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 =>
chore: remove some double spaces (#7983)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -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. -/
style: fix wrapping of where (#7149)
Diff
@@ -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 =>
style: a linter for colons (#6761)

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.

Diff
@@ -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
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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.
 
refactor: make pp_with_univ be an attribute (#5633)
Diff
@@ -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`.
chore: remove occurrences of semicolon after space (#5713)

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.

Diff
@@ -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
 
feat: use pp_with_univ (#5622)

Certain definitions do nothing except change universes. We might as well have the pretty printer always show us these universes!

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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`.
chore: fix grammar 1/3 (#5001)

All of these are doc fixes

Diff
@@ -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 :=
chore: review of automation in category theory (#4793)

Clean up of automation in the category theory library. Leaving out unnecessary proof steps, or fields done by aesop_cat, and making more use of available autoparameters.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -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. -/
chore: bye-bye, solo bys! (#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 bys".

Diff
@@ -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]
chore: fix #align lines (#3640)

This PR fixes two things:

  • Most 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.
  • All remaining more-than-one-line #align statements. (This was needed for a script I wrote for #3630.)
Diff
@@ -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) :
chore: port missing instance priorities (#3613)

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>

Diff
@@ -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
fix: use dot notation for mapCone/mapCocone (#2696)

Thanks to #2661 we have G.mapCone back. This swiches over globally.

Diff
@@ -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
chore: address some porting notes mentioning congr (#2595)

Switch to using congr! instead, which is analogous to mathlib 3's congr'.

Diff
@@ -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
-
feat: port/CategoryTheory.Limits.Preserves.Basic (#2377)

Dependencies 73

74 files ported (100.0%)
26003 lines ported (100.0%)

All dependencies are ported!