category_theory.limits.finalMathlib.CategoryTheory.Limits.Final

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -332,7 +332,6 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 -/
 
-#print CategoryTheory.Functor.Final.colimit_pre_is_iso_aux /-
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
   by
@@ -341,7 +340,6 @@ theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
   intro j
   dsimp; simp
 #align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_aux
--/
 
 #print CategoryTheory.Functor.Final.colimit_pre_isIso /-
 instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) :=
@@ -630,7 +628,6 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 -/
 
-#print CategoryTheory.Functor.Initial.limit_pre_is_iso_aux /-
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
   by
@@ -639,7 +636,6 @@ theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
   intro j
   simp
 #align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_aux
--/
 
 #print CategoryTheory.Functor.Initial.limit_pre_isIso /-
 instance limit_pre_isIso [HasLimit G] : IsIso (limit.pre G F) :=
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import CategoryTheory.Punit
-import CategoryTheory.StructuredArrow
+import CategoryTheory.PUnit
+import CategoryTheory.Comma.StructuredArrow
 import CategoryTheory.IsConnected
 import CategoryTheory.Limits.Yoneda
 import CategoryTheory.Limits.Types
Diff
@@ -257,7 +257,7 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w, z]
             · intro Z₁ Z₂ k₁ k₂ g a z
-              rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w] at z 
+              rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w] at z
               rw [z]
             · rw [← functor.map_comp_assoc] } }
   map X Y f := { Hom := f.Hom }
@@ -272,8 +272,8 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => G.map k ≫ s.ι.app X = (s.ι.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← w]; rw [← s.w f] at h ; simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h ; rw [← s.w f]; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w]; rw [← s.w f] at h; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h; rw [← s.w f]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_aux
 -/
@@ -553,7 +553,7 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
                   c.π.app (lift F X) ≫ G.map (hom_to_lift F X) ≫ G.map f
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, ← functor.comp_map, ← category.assoc, ← category.assoc,
-                c.w] at z 
+                c.w] at z
               rw [z, category.assoc]
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, ← functor.comp_map, ← category.assoc, ← category.assoc,
@@ -571,8 +571,8 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => s.π.app X ≫ G.map k = (s.π.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f]; rw [← w] at h ; simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h ; rw [← w]; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f]; rw [← w] at h; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h; rw [← w]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_aux
 -/
Diff
@@ -3,11 +3,11 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathbin.CategoryTheory.Punit
-import Mathbin.CategoryTheory.StructuredArrow
-import Mathbin.CategoryTheory.IsConnected
-import Mathbin.CategoryTheory.Limits.Yoneda
-import Mathbin.CategoryTheory.Limits.Types
+import CategoryTheory.Punit
+import CategoryTheory.StructuredArrow
+import CategoryTheory.IsConnected
+import CategoryTheory.Limits.Yoneda
+import CategoryTheory.Limits.Types
 
 #align_import category_theory.limits.final from "leanprover-community/mathlib"@"10bf4f825ad729c5653adc039dafa3622e7f93c9"
 
Diff
@@ -450,10 +450,10 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : Σ X, d ⟶
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
 -/
 
-#print CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit /-
+#print CategoryTheory.Functor.cofinal_of_colimit_comp_coyoneda_iso_pUnit /-
 /-- If `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit` for all `d : D`, then `F` is cofinal.
 -/
-theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
+theorem CategoryTheory.Functor.cofinal_of_colimit_comp_coyoneda_iso_pUnit
     (I : ∀ d, colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit) : Final F :=
   ⟨fun d =>
     by
@@ -471,7 +471,7 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
     have t := Types.colimit_eq.{v, v} e
     clear e y₁ y₂
     exact zigzag_of_eqv_gen_quot_rel t⟩
-#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit
+#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.cofinal_of_colimit_comp_coyoneda_iso_pUnit
 -/
 
 end Final
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.limits.final
-! leanprover-community/mathlib commit 10bf4f825ad729c5653adc039dafa3622e7f93c9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Punit
 import Mathbin.CategoryTheory.StructuredArrow
@@ -14,6 +9,8 @@ import Mathbin.CategoryTheory.IsConnected
 import Mathbin.CategoryTheory.Limits.Yoneda
 import Mathbin.CategoryTheory.Limits.Types
 
+#align_import category_theory.limits.final from "leanprover-community/mathlib"@"10bf4f825ad729c5653adc039dafa3622e7f93c9"
+
 /-!
 # Final and initial functors
 
Diff
@@ -202,13 +202,16 @@ def lift (d : D) : C :=
 #align category_theory.functor.final.lift CategoryTheory.Functor.Final.lift
 -/
 
+#print CategoryTheory.Functor.Final.homToLift /-
 /-- When `F : C ⥤ D` is cofinal, we denote by `hom_to_lift` an arbitrary choice of morphism
 `d ⟶ F.obj (lift F d)`.
 -/
 def homToLift (d : D) : d ⟶ F.obj (lift F d) :=
   (Classical.arbitrary (StructuredArrow d F)).Hom
 #align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLift
+-/
 
+#print CategoryTheory.Functor.Final.induction /-
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -233,6 +236,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : d ⟶ F.obj X), Sort _)
   · intro j₁ j₂ f a; fapply h₁ _ _ _ _ f.right _ a; convert f.w.symm; dsimp; simp
   · intro j₁ j₂ f a; fapply h₂ _ _ _ _ f.right _ a; convert f.w.symm; dsimp; simp
 #align category_theory.functor.final.induction CategoryTheory.Functor.Final.induction
+-/
 
 variable {F G}
 
@@ -263,6 +267,7 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
 #align category_theory.functor.final.extend_cocone CategoryTheory.Functor.Final.extendCocone
 -/
 
+#print CategoryTheory.Functor.Final.colimit_cocone_comp_aux /-
 @[simp]
 theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
     G.map (homToLift F (F.obj j)) ≫ s.ι.app (lift F (F.obj j)) = s.ι.app j :=
@@ -274,9 +279,11 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
   · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h ; rw [← s.w f]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_aux
+-/
 
 variable (F G)
 
+#print CategoryTheory.Functor.Final.coconesEquiv /-
 /-- If `F` is cofinal,
 the category of cocones on `F ⋙ G` is equivalent to the category of cocones on `G`,
 for any `G : D ⥤ E`.
@@ -289,6 +296,7 @@ def coconesEquiv : Cocone (F ⋙ G) ≌ Cocone G
   unitIso := NatIso.ofComponents (fun c => Cocones.ext (Iso.refl _) (by tidy)) (by tidy)
   counitIso := NatIso.ofComponents (fun c => Cocones.ext (Iso.refl _) (by tidy)) (by tidy)
 #align category_theory.functor.final.cocones_equiv CategoryTheory.Functor.Final.coconesEquiv
+-/
 
 variable {G}
 
@@ -301,6 +309,7 @@ def isColimitWhiskerEquiv (t : Cocone G) : IsColimit (t.whisker F) ≃ IsColimit
 #align category_theory.functor.final.is_colimit_whisker_equiv CategoryTheory.Functor.Final.isColimitWhiskerEquiv
 -/
 
+#print CategoryTheory.Functor.Final.isColimitExtendCoconeEquiv /-
 /-- When `F` is cofinal, and `t : cocone (F ⋙ G)`,
 `extend_cocone.obj t` is a colimit coconne exactly when `t` is.
 -/
@@ -308,6 +317,7 @@ def isColimitExtendCoconeEquiv (t : Cocone (F ⋙ G)) :
     IsColimit (extendCocone.obj t) ≃ IsColimit t :=
   IsColimit.ofCoconeEquiv (coconesEquiv F G)
 #align category_theory.functor.final.is_colimit_extend_cocone_equiv CategoryTheory.Functor.Final.isColimitExtendCoconeEquiv
+-/
 
 #print CategoryTheory.Functor.Final.colimitCoconeComp /-
 /-- Given a colimit cocone over `G : D ⥤ E` we can construct a colimit cocone over `F ⋙ G`. -/
@@ -325,6 +335,7 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 -/
 
+#print CategoryTheory.Functor.Final.colimit_pre_is_iso_aux /-
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
   by
@@ -333,6 +344,7 @@ theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
   intro j
   dsimp; simp
 #align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_aux
+-/
 
 #print CategoryTheory.Functor.Final.colimit_pre_isIso /-
 instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) :=
@@ -407,6 +419,7 @@ namespace Final
 
 variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D) [Final F]
 
+#print CategoryTheory.Functor.Final.colimitCompCoyonedaIso /-
 /-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
 is an isomorphism (as it always is when `F` is cofinal),
 then `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit`
@@ -416,7 +429,9 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
     colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit :=
   asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
+-/
 
+#print CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel /-
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : Σ X, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
     Zigzag (StructuredArrow.mk f₁.2) (StructuredArrow.mk f₂.2) :=
@@ -436,7 +451,9 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : Σ X, d ⟶
     apply Relation.ReflTransGen.trans
     exact ih₁; exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
+-/
 
+#print CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit /-
 /-- If `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit` for all `d : D`, then `F` is cofinal.
 -/
 theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
@@ -458,6 +475,7 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
     clear e y₁ y₂
     exact zigzag_of_eqv_gen_quot_rel t⟩
 #align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit
+-/
 
 end Final
 
@@ -480,13 +498,16 @@ def lift (d : D) : C :=
 #align category_theory.functor.initial.lift CategoryTheory.Functor.Initial.lift
 -/
 
+#print CategoryTheory.Functor.Initial.homToLift /-
 /-- When `F : C ⥤ D` is initial, we denote by `hom_to_lift` an arbitrary choice of morphism
 `F.obj (lift F d) ⟶ d`.
 -/
 def homToLift (d : D) : F.obj (lift F d) ⟶ d :=
   (Classical.arbitrary (CostructuredArrow F d)).Hom
 #align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLift
+-/
 
+#print CategoryTheory.Functor.Initial.induction /-
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -511,6 +532,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : F.obj X ⟶ d), Sort _)
   · intro j₁ j₂ f a; fapply h₁ _ _ _ _ f.left _ a; convert f.w; dsimp; simp
   · intro j₁ j₂ f a; fapply h₂ _ _ _ _ f.left _ a; convert f.w; dsimp; simp
 #align category_theory.functor.initial.induction CategoryTheory.Functor.Initial.induction
+-/
 
 variable {F G}
 
@@ -544,6 +566,7 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
 #align category_theory.functor.initial.extend_cone CategoryTheory.Functor.Initial.extendCone
 -/
 
+#print CategoryTheory.Functor.Initial.limit_cone_comp_aux /-
 @[simp]
 theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
     s.π.app (lift F (F.obj j)) ≫ G.map (homToLift F (F.obj j)) = s.π.app j :=
@@ -555,9 +578,11 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
   · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h ; rw [← w]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_aux
+-/
 
 variable (F G)
 
+#print CategoryTheory.Functor.Initial.conesEquiv /-
 /-- If `F` is initial,
 the category of cones on `F ⋙ G` is equivalent to the category of cones on `G`,
 for any `G : D ⥤ E`.
@@ -570,6 +595,7 @@ def conesEquiv : Cone (F ⋙ G) ≌ Cone G
   unitIso := NatIso.ofComponents (fun c => Cones.ext (Iso.refl _) (by tidy)) (by tidy)
   counitIso := NatIso.ofComponents (fun c => Cones.ext (Iso.refl _) (by tidy)) (by tidy)
 #align category_theory.functor.initial.cones_equiv CategoryTheory.Functor.Initial.conesEquiv
+-/
 
 variable {G}
 
@@ -582,12 +608,14 @@ def isLimitWhiskerEquiv (t : Cone G) : IsLimit (t.whisker F) ≃ IsLimit t :=
 #align category_theory.functor.initial.is_limit_whisker_equiv CategoryTheory.Functor.Initial.isLimitWhiskerEquiv
 -/
 
+#print CategoryTheory.Functor.Initial.isLimitExtendConeEquiv /-
 /-- When `F` is initial, and `t : cone (F ⋙ G)`,
 `extend_cone.obj t` is a limit cone exactly when `t` is.
 -/
 def isLimitExtendConeEquiv (t : Cone (F ⋙ G)) : IsLimit (extendCone.obj t) ≃ IsLimit t :=
   IsLimit.ofConeEquiv (conesEquiv F G)
 #align category_theory.functor.initial.is_limit_extend_cone_equiv CategoryTheory.Functor.Initial.isLimitExtendConeEquiv
+-/
 
 #print CategoryTheory.Functor.Initial.limitConeComp /-
 /-- Given a limit cone over `G : D ⥤ E` we can construct a limit cone over `F ⋙ G`. -/
@@ -605,6 +633,7 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 -/
 
+#print CategoryTheory.Functor.Initial.limit_pre_is_iso_aux /-
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
   by
@@ -613,6 +642,7 @@ theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
   intro j
   simp
 #align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_aux
+-/
 
 #print CategoryTheory.Functor.Initial.limit_pre_isIso /-
 instance limit_pre_isIso [HasLimit G] : IsIso (limit.pre G F) :=
Diff
@@ -256,7 +256,7 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w, z]
             · intro Z₁ Z₂ k₁ k₂ g a z
-              rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w] at z
+              rw [← a, functor.map_comp, category.assoc, ← functor.comp_map, c.w] at z 
               rw [z]
             · rw [← functor.map_comp_assoc] } }
   map X Y f := { Hom := f.Hom }
@@ -270,8 +270,8 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => G.map k ≫ s.ι.app X = (s.ι.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← w]; rw [← s.w f] at h; simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h; rw [← s.w f]; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w]; rw [← s.w f] at h ; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h ; rw [← s.w f]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_aux
 
@@ -417,7 +417,7 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
   asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
-theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
+theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : Σ X, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
     Zigzag (StructuredArrow.mk f₁.2) (StructuredArrow.mk f₂.2) :=
   by
@@ -534,7 +534,7 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
                   c.π.app (lift F X) ≫ G.map (hom_to_lift F X) ≫ G.map f
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, ← functor.comp_map, ← category.assoc, ← category.assoc,
-                c.w] at z
+                c.w] at z 
               rw [z, category.assoc]
             · intro Z₁ Z₂ k₁ k₂ g a z
               rw [← a, functor.map_comp, ← functor.comp_map, ← category.assoc, ← category.assoc,
@@ -551,8 +551,8 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => s.π.app X ≫ G.map k = (s.π.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f]; rw [← w] at h; simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h; rw [← w]; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f]; rw [← w] at h ; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h ; rw [← w]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_aux
 
Diff
@@ -202,12 +202,6 @@ def lift (d : D) : C :=
 #align category_theory.functor.final.lift CategoryTheory.Functor.Final.lift
 -/
 
-/- warning: category_theory.functor.final.hom_to_lift -> CategoryTheory.Functor.Final.homToLift is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLiftₓ'. -/
 /-- When `F : C ⥤ D` is cofinal, we denote by `hom_to_lift` an arbitrary choice of morphism
 `d ⟶ F.obj (lift F d)`.
 -/
@@ -215,9 +209,6 @@ def homToLift (d : D) : d ⟶ F.obj (lift F d) :=
   (Classical.arbitrary (StructuredArrow d F)).Hom
 #align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLift
 
-/- warning: category_theory.functor.final.induction -> CategoryTheory.Functor.Final.induction is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.induction CategoryTheory.Functor.Final.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -272,9 +263,6 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
 #align category_theory.functor.final.extend_cocone CategoryTheory.Functor.Final.extendCocone
 -/
 
-/- warning: category_theory.functor.final.colimit_cocone_comp_aux -> CategoryTheory.Functor.Final.colimit_cocone_comp_aux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_auxₓ'. -/
 @[simp]
 theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
     G.map (homToLift F (F.obj j)) ≫ s.ι.app (lift F (F.obj j)) = s.ι.app j :=
@@ -289,12 +277,6 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
 
 variable (F G)
 
-/- warning: category_theory.functor.final.cocones_equiv -> CategoryTheory.Functor.Final.coconesEquiv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.cocones_equiv CategoryTheory.Functor.Final.coconesEquivₓ'. -/
 /-- If `F` is cofinal,
 the category of cocones on `F ⋙ G` is equivalent to the category of cocones on `G`,
 for any `G : D ⥤ E`.
@@ -319,12 +301,6 @@ def isColimitWhiskerEquiv (t : Cocone G) : IsColimit (t.whisker F) ≃ IsColimit
 #align category_theory.functor.final.is_colimit_whisker_equiv CategoryTheory.Functor.Final.isColimitWhiskerEquiv
 -/
 
-/- warning: category_theory.functor.final.is_colimit_extend_cocone_equiv -> CategoryTheory.Functor.Final.isColimitExtendCoconeEquiv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Final.extendCocone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G) t)) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (max (succ u6) (succ u5)) (succ u3), max (max (succ u6) (succ u4)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (Prefunctor.obj.{succ u3, succ u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)))) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G))) (CategoryTheory.Functor.toPrefunctor.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Final.extendCocone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G)) t)) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.is_colimit_extend_cocone_equiv CategoryTheory.Functor.Final.isColimitExtendCoconeEquivₓ'. -/
 /-- When `F` is cofinal, and `t : cocone (F ⋙ G)`,
 `extend_cocone.obj t` is a colimit coconne exactly when `t` is.
 -/
@@ -349,9 +325,6 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 -/
 
-/- warning: category_theory.functor.final.colimit_pre_is_iso_aux -> CategoryTheory.Functor.Final.colimit_pre_is_iso_aux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_auxₓ'. -/
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
   by
@@ -434,9 +407,6 @@ namespace Final
 
 variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D) [Final F]
 
-/- warning: category_theory.functor.final.colimit_comp_coyoneda_iso -> CategoryTheory.Functor.Final.colimitCompCoyonedaIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIsoₓ'. -/
 /-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
 is an isomorphism (as it always is when `F` is cofinal),
 then `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit`
@@ -447,9 +417,6 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
   asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
-/- warning: category_theory.functor.final.zigzag_of_eqv_gen_quot_rel -> CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_relₓ'. -/
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
     Zigzag (StructuredArrow.mk f₁.2) (StructuredArrow.mk f₂.2) :=
@@ -470,12 +437,6 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     exact ih₁; exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
 
-/- warning: category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit -> CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F], (forall (d : D), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.comp_hasColimit.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 F _inst_3 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.coyoneda.Obj.CategoryTheory.Limits.hasColimit.{u1} D _inst_2 (Opposite.op.{succ u1} D d)))) PUnit.{succ u1}) -> (CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F)
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2), (forall (d : D), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d))))) PUnit.{succ u1}) -> (CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnitₓ'. -/
 /-- If `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit` for all `d : D`, then `F` is cofinal.
 -/
 theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
@@ -519,12 +480,6 @@ def lift (d : D) : C :=
 #align category_theory.functor.initial.lift CategoryTheory.Functor.Initial.lift
 -/
 
-/- warning: category_theory.functor.initial.hom_to_lift -> CategoryTheory.Functor.Initial.homToLift is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)) d
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)) d
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLiftₓ'. -/
 /-- When `F : C ⥤ D` is initial, we denote by `hom_to_lift` an arbitrary choice of morphism
 `F.obj (lift F d) ⟶ d`.
 -/
@@ -532,9 +487,6 @@ def homToLift (d : D) : F.obj (lift F d) ⟶ d :=
   (Classical.arbitrary (CostructuredArrow F d)).Hom
 #align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLift
 
-/- warning: category_theory.functor.initial.induction -> CategoryTheory.Functor.Initial.induction is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.induction CategoryTheory.Functor.Initial.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -592,9 +544,6 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
 #align category_theory.functor.initial.extend_cone CategoryTheory.Functor.Initial.extendCone
 -/
 
-/- warning: category_theory.functor.initial.limit_cone_comp_aux -> CategoryTheory.Functor.Initial.limit_cone_comp_aux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_auxₓ'. -/
 @[simp]
 theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
     s.π.app (lift F (F.obj j)) ≫ G.map (homToLift F (F.obj j)) = s.π.app j :=
@@ -609,12 +558,6 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
 
 variable (F G)
 
-/- warning: category_theory.functor.initial.cones_equiv -> CategoryTheory.Functor.Initial.conesEquiv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.cones_equiv CategoryTheory.Functor.Initial.conesEquivₓ'. -/
 /-- If `F` is initial,
 the category of cones on `F ⋙ G` is equivalent to the category of cones on `G`,
 for any `G : D ⥤ E`.
@@ -639,12 +582,6 @@ def isLimitWhiskerEquiv (t : Cone G) : IsLimit (t.whisker F) ≃ IsLimit t :=
 #align category_theory.functor.initial.is_limit_whisker_equiv CategoryTheory.Functor.Initial.isLimitWhiskerEquiv
 -/
 
-/- warning: category_theory.functor.initial.is_limit_extend_cone_equiv -> CategoryTheory.Functor.Initial.isLimitExtendConeEquiv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Initial.extendCone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G) t)) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (max (succ u6) (succ u5)) (succ u3), max (max (succ u6) (succ u4)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (Prefunctor.obj.{succ u3, succ u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)))) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G))) (CategoryTheory.Functor.toPrefunctor.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Initial.extendCone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G)) t)) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.is_limit_extend_cone_equiv CategoryTheory.Functor.Initial.isLimitExtendConeEquivₓ'. -/
 /-- When `F` is initial, and `t : cone (F ⋙ G)`,
 `extend_cone.obj t` is a limit cone exactly when `t` is.
 -/
@@ -668,9 +605,6 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 -/
 
-/- warning: category_theory.functor.initial.limit_pre_is_iso_aux -> CategoryTheory.Functor.Initial.limit_pre_is_iso_aux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_auxₓ'. -/
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
   by
Diff
@@ -239,16 +239,8 @@ def induction {d : D} (Z : ∀ (X : C) (k : d ⟶ F.obj X), Sort _)
   apply
     @is_preconnected_induction _ _ _ (fun Y : structured_arrow d F => Z Y.right Y.Hom) _ _
       (structured_arrow.mk k₀) z
-  · intro j₁ j₂ f a
-    fapply h₁ _ _ _ _ f.right _ a
-    convert f.w.symm
-    dsimp
-    simp
-  · intro j₁ j₂ f a
-    fapply h₂ _ _ _ _ f.right _ a
-    convert f.w.symm
-    dsimp
-    simp
+  · intro j₁ j₂ f a; fapply h₁ _ _ _ _ f.right _ a; convert f.w.symm; dsimp; simp
+  · intro j₁ j₂ f a; fapply h₂ _ _ _ _ f.right _ a; convert f.w.symm; dsimp; simp
 #align category_theory.functor.final.induction CategoryTheory.Functor.Final.induction
 
 variable {F G}
@@ -290,14 +282,8 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => G.map k ≫ s.ι.app X = (s.ι.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h
-    rw [← w]
-    rw [← s.w f] at h
-    simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h
-    rw [← w] at h
-    rw [← s.w f]
-    simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w]; rw [← s.w f] at h; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← w] at h; rw [← s.w f]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_aux
 
@@ -506,9 +492,7 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
     dsimp at *
     let y₁ := colimit.ι (F ⋙ coyoneda.obj (op d)) X₁ f₁
     let y₂ := colimit.ι (F ⋙ coyoneda.obj (op d)) X₂ f₂
-    have e : y₁ = y₂ := by
-      apply (I d).toEquiv.Injective
-      ext
+    have e : y₁ = y₂ := by apply (I d).toEquiv.Injective; ext
     have t := Types.colimit_eq.{v, v} e
     clear e y₁ y₂
     exact zigzag_of_eqv_gen_quot_rel t⟩
@@ -572,16 +556,8 @@ def induction {d : D} (Z : ∀ (X : C) (k : F.obj X ⟶ d), Sort _)
   apply
     @is_preconnected_induction _ _ _ (fun Y : costructured_arrow F d => Z Y.left Y.Hom) _ _
       (costructured_arrow.mk k₀) z
-  · intro j₁ j₂ f a
-    fapply h₁ _ _ _ _ f.left _ a
-    convert f.w
-    dsimp
-    simp
-  · intro j₁ j₂ f a
-    fapply h₂ _ _ _ _ f.left _ a
-    convert f.w
-    dsimp
-    simp
+  · intro j₁ j₂ f a; fapply h₁ _ _ _ _ f.left _ a; convert f.w; dsimp; simp
+  · intro j₁ j₂ f a; fapply h₂ _ _ _ _ f.left _ a; convert f.w; dsimp; simp
 #align category_theory.functor.initial.induction CategoryTheory.Functor.Initial.induction
 
 variable {F G}
@@ -626,14 +602,8 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
   -- This point is that this would be true if we took `lift (F.obj j)` to just be `j`
   -- and `hom_to_lift (F.obj j)` to be `𝟙 (F.obj j)`.
   apply induction F fun X k => s.π.app X ≫ G.map k = (s.π.app j : _)
-  · intro j₁ j₂ k₁ k₂ f w h
-    rw [← s.w f]
-    rw [← w] at h
-    simpa using h
-  · intro j₁ j₂ k₁ k₂ f w h
-    rw [← s.w f] at h
-    rw [← w]
-    simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f]; rw [← w] at h; simpa using h
+  · intro j₁ j₂ k₁ k₂ f w h; rw [← s.w f] at h; rw [← w]; simpa using h
   · exact s.w (𝟙 _)
 #align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_aux
 
Diff
@@ -216,10 +216,7 @@ def homToLift (d : D) : d ⟶ F.obj (lift F d) :=
 #align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLift
 
 /- warning: category_theory.functor.final.induction -> CategoryTheory.Functor.Final.induction is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X)) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) k₁ (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f)) k₂) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) k₁ (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f)) k₂) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₀)}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X)) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) k₁ (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f)) k₂) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) k₁ (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f)) k₂) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₀)}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.induction CategoryTheory.Functor.Final.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
@@ -284,10 +281,7 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
 -/
 
 /- warning: category_theory.functor.final.colimit_cocone_comp_aux -> CategoryTheory.Functor.Final.colimit_cocone_comp_aux is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.map.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j) (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.map.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_auxₓ'. -/
 @[simp]
 theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
@@ -370,10 +364,7 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 -/
 
 /- warning: category_theory.functor.final.colimit_pre_is_iso_aux -> CategoryTheory.Functor.Final.colimit_pre_is_iso_aux is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_auxₓ'. -/
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
@@ -458,10 +449,7 @@ namespace Final
 variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D) [Final F]
 
 /- warning: category_theory.functor.final.colimit_comp_coyoneda_iso -> CategoryTheory.Functor.Final.colimitCompCoyonedaIso is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F] (d : D) [_inst_4 : CategoryTheory.IsIso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_1.{u1} C _inst_1 D _inst_2 F _inst_3 d)) (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_2.{u1} D _inst_2 d)) (CategoryTheory.Limits.colimit.pre.{u1, u1, u1, u1, u1, succ u1} D _inst_2 C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_3.{u1} D _inst_2 d) F (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_4.{u1} C _inst_1 D _inst_2 F _inst_3 d))], CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_1.{u1} C _inst_1 D _inst_2 F _inst_3 d)) PUnit.{succ u1}
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (_inst_3 : D) [d : CategoryTheory.IsIso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))))) (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} D _inst_2 (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.colimit.pre.{u1, u1, u1, u1, u1, succ u1} D _inst_2 C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} D _inst_2 (Opposite.op.{succ u1} D _inst_3)) F (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)))))], CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))))) PUnit.{succ u1}
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIsoₓ'. -/
 /-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
 is an isomorphism (as it always is when `F` is cofinal),
@@ -474,10 +462,7 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
 /- warning: category_theory.functor.final.zigzag_of_eqv_gen_quot_rel -> CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂)))
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => Prefunctor.obj.{succ u1, succ u1, u1, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) TypeMax.{u1, u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} TypeMax.{u1, u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} TypeMax.{u1, u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} C _inst_1 TypeMax.{u1, u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 TypeMax.{u1, u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 TypeMax.{u1, u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.instCategoryStructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_relₓ'. -/
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
@@ -564,10 +549,7 @@ def homToLift (d : D) : F.obj (lift F d) ⟶ d :=
 #align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLift
 
 /- warning: category_theory.functor.initial.induction -> CategoryTheory.Functor.Initial.induction is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X) d) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f) k₂) k₁) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f) k₂) k₁) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₀) d}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X) d) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f) k₂) k₁) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f) k₂) k₁) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₀) d}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.induction CategoryTheory.Functor.Initial.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
@@ -635,10 +617,7 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
 -/
 
 /- warning: category_theory.functor.initial.limit_cone_comp_aux -> CategoryTheory.Functor.Initial.limit_cone_comp_aux is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.map.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.map.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_auxₓ'. -/
 @[simp]
 theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
@@ -720,10 +699,7 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 -/
 
 /- warning: category_theory.functor.initial.limit_pre_is_iso_aux -> CategoryTheory.Functor.Initial.limit_pre_is_iso_aux is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_auxₓ'. -/
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
Diff
@@ -373,7 +373,7 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 lean 3 declaration is
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
 but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_auxₓ'. -/
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
@@ -723,7 +723,7 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 lean 3 declaration is
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
 but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_auxₓ'. -/
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
Diff
@@ -477,7 +477,7 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
 lean 3 declaration is
   forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂)))
 but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => Prefunctor.obj.{succ u1, succ u1, u1, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.instCategoryStructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂)))
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => Prefunctor.obj.{succ u1, succ u1, u1, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) TypeMax.{u1, u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} TypeMax.{u1, u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} TypeMax.{u1, u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} C _inst_1 TypeMax.{u1, u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 TypeMax.{u1, u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 TypeMax.{u1, u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.instCategoryStructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂)))
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_relₓ'. -/
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.final
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
+! leanprover-community/mathlib commit 10bf4f825ad729c5653adc039dafa3622e7f93c9
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -17,6 +17,9 @@ import Mathbin.CategoryTheory.Limits.Types
 /-!
 # Final and initial functors
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 A functor `F : C ⥤ D` is final if for every `d : D`,
 the comma category of morphisms `d ⟶ F.obj c` is connected.
 
Diff
@@ -79,6 +79,7 @@ variable {C : Type u₁} [Category.{v₁} C]
 
 variable {D : Type u₂} [Category.{v₂} D]
 
+#print CategoryTheory.Functor.Final /-
 /--
 A functor `F : C ⥤ D` is final if for every `d : D`, the comma category of morphisms `d ⟶ F.obj c`
 is connected.
@@ -88,40 +89,52 @@ See <https://stacks.math.columbia.edu/tag/04E6>
 class Final (F : C ⥤ D) : Prop where
   out (d : D) : IsConnected (StructuredArrow d F)
 #align category_theory.functor.final CategoryTheory.Functor.Final
+-/
 
 attribute [instance] final.out
 
+#print CategoryTheory.Functor.Initial /-
 /-- A functor `F : C ⥤ D` is initial if for every `d : D`, the comma category of morphisms
 `F.obj c ⟶ d` is connected.
 -/
 class Initial (F : C ⥤ D) : Prop where
   out (d : D) : IsConnected (CostructuredArrow F d)
 #align category_theory.functor.initial CategoryTheory.Functor.Initial
+-/
 
 attribute [instance] initial.out
 
+#print CategoryTheory.Functor.final_op_of_initial /-
 instance final_op_of_initial (F : C ⥤ D) [Initial F] : Final F.op
     where out d := isConnected_of_equivalent (costructuredArrowOpEquivalence F (unop d))
 #align category_theory.functor.final_op_of_initial CategoryTheory.Functor.final_op_of_initial
+-/
 
+#print CategoryTheory.Functor.initial_op_of_final /-
 instance initial_op_of_final (F : C ⥤ D) [Final F] : Initial F.op
     where out d := isConnected_of_equivalent (structuredArrowOpEquivalence F (unop d))
 #align category_theory.functor.initial_op_of_final CategoryTheory.Functor.initial_op_of_final
+-/
 
+#print CategoryTheory.Functor.final_of_initial_op /-
 theorem final_of_initial_op (F : C ⥤ D) [Initial F.op] : Final F :=
   {
     out := fun d =>
       @isConnected_of_isConnected_op _ _
         (isConnected_of_equivalent (structuredArrowOpEquivalence F d).symm) }
 #align category_theory.functor.final_of_initial_op CategoryTheory.Functor.final_of_initial_op
+-/
 
+#print CategoryTheory.Functor.initial_of_final_op /-
 theorem initial_of_final_op (F : C ⥤ D) [Final F.op] : Initial F :=
   {
     out := fun d =>
       @isConnected_of_isConnected_op _ _
         (isConnected_of_equivalent (costructuredArrowOpEquivalence F d).symm) }
 #align category_theory.functor.initial_of_final_op CategoryTheory.Functor.initial_of_final_op
+-/
 
+#print CategoryTheory.Functor.final_of_adjunction /-
 /-- If a functor `R : D ⥤ C` is a right adjoint, it is final. -/
 theorem final_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Final R :=
   {
@@ -136,7 +149,9 @@ theorem final_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Final
             (show Zag u g from
               Or.inl ⟨StructuredArrow.homMk ((adj.homEquiv c g.right).symm g.Hom) (by simp)⟩)) }
 #align category_theory.functor.final_of_adjunction CategoryTheory.Functor.final_of_adjunction
+-/
 
+#print CategoryTheory.Functor.initial_of_adjunction /-
 /-- If a functor `L : C ⥤ D` is a left adjoint, it is initial. -/
 theorem initial_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Initial L :=
   {
@@ -151,14 +166,19 @@ theorem initial_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Init
             (show Zag u g from
               Or.inr ⟨CostructuredArrow.homMk (adj.homEquiv g.left d g.Hom) (by simp)⟩)) }
 #align category_theory.functor.initial_of_adjunction CategoryTheory.Functor.initial_of_adjunction
+-/
 
+#print CategoryTheory.Functor.final_of_isRightAdjoint /-
 instance (priority := 100) final_of_isRightAdjoint (F : C ⥤ D) [h : IsRightAdjoint F] : Final F :=
   final_of_adjunction h.adj
 #align category_theory.functor.final_of_is_right_adjoint CategoryTheory.Functor.final_of_isRightAdjoint
+-/
 
+#print CategoryTheory.Functor.initial_of_isLeftAdjoint /-
 instance (priority := 100) initial_of_isLeftAdjoint (F : C ⥤ D) [h : IsLeftAdjoint F] : Initial F :=
   initial_of_adjunction h.adj
 #align category_theory.functor.initial_of_is_left_adjoint CategoryTheory.Functor.initial_of_isLeftAdjoint
+-/
 
 namespace Final
 
@@ -169,6 +189,7 @@ instance (d : D) : Nonempty (StructuredArrow d F) :=
 
 variable {E : Type u₃} [Category.{v₃} E] (G : D ⥤ E)
 
+#print CategoryTheory.Functor.Final.lift /-
 /--
 When `F : C ⥤ D` is cofinal, we denote by `lift F d` an arbitrary choice of object in `C` such that
 there exists a morphism `d ⟶ F.obj (lift F d)`.
@@ -176,7 +197,14 @@ there exists a morphism `d ⟶ F.obj (lift F d)`.
 def lift (d : D) : C :=
   (Classical.arbitrary (StructuredArrow d F)).right
 #align category_theory.functor.final.lift CategoryTheory.Functor.Final.lift
+-/
 
+/- warning: category_theory.functor.final.hom_to_lift -> CategoryTheory.Functor.Final.homToLift is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLiftₓ'. -/
 /-- When `F : C ⥤ D` is cofinal, we denote by `hom_to_lift` an arbitrary choice of morphism
 `d ⟶ F.obj (lift F d)`.
 -/
@@ -184,6 +212,12 @@ def homToLift (d : D) : d ⟶ F.obj (lift F d) :=
   (Classical.arbitrary (StructuredArrow d F)).Hom
 #align category_theory.functor.final.hom_to_lift CategoryTheory.Functor.Final.homToLift
 
+/- warning: category_theory.functor.final.induction -> CategoryTheory.Functor.Final.induction is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X)) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) k₁ (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f)) k₂) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) k₁ (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f)) k₂) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₀)}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X)) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) k₁ (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f)) k₂) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁)) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂)) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) k₁ (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f)) k₂) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₀)}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Final.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.induction CategoryTheory.Functor.Final.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -219,6 +253,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : d ⟶ F.obj X), Sort _)
 
 variable {F G}
 
+#print CategoryTheory.Functor.Final.extendCocone /-
 /-- Given a cocone over `F ⋙ G`, we can construct a `cocone G` with the same cocone point.
 -/
 @[simps]
@@ -243,7 +278,14 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
             · rw [← functor.map_comp_assoc] } }
   map X Y f := { Hom := f.Hom }
 #align category_theory.functor.final.extend_cocone CategoryTheory.Functor.Final.extendCocone
+-/
 
+/- warning: category_theory.functor.final.colimit_cocone_comp_aux -> CategoryTheory.Functor.Final.colimit_cocone_comp_aux is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.map.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j) (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.map.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.Functor.Final.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Final.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Limits.Cocone.ι.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_cocone_comp_aux CategoryTheory.Functor.Final.colimit_cocone_comp_auxₓ'. -/
 @[simp]
 theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
     G.map (homToLift F (F.obj j)) ≫ s.ι.app (lift F (F.obj j)) = s.ι.app j :=
@@ -264,6 +306,12 @@ theorem colimit_cocone_comp_aux (s : Cocone (F ⋙ G)) (j : C) :
 
 variable (F G)
 
+/- warning: category_theory.functor.final.cocones_equiv -> CategoryTheory.Functor.Final.coconesEquiv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.cocones_equiv CategoryTheory.Functor.Final.coconesEquivₓ'. -/
 /-- If `F` is cofinal,
 the category of cocones on `F ⋙ G` is equivalent to the category of cocones on `G`,
 for any `G : D ⥤ E`.
@@ -279,13 +327,21 @@ def coconesEquiv : Cocone (F ⋙ G) ≌ Cocone G
 
 variable {G}
 
+#print CategoryTheory.Functor.Final.isColimitWhiskerEquiv /-
 /-- When `F : C ⥤ D` is cofinal, and `t : cocone G` for some `G : D ⥤ E`,
 `t.whisker F` is a colimit cocone exactly when `t` is.
 -/
 def isColimitWhiskerEquiv (t : Cocone G) : IsColimit (t.whisker F) ≃ IsColimit t :=
   IsColimit.ofCoconeEquiv (coconesEquiv F G).symm
 #align category_theory.functor.final.is_colimit_whisker_equiv CategoryTheory.Functor.Final.isColimitWhiskerEquiv
+-/
 
+/- warning: category_theory.functor.final.is_colimit_extend_cocone_equiv -> CategoryTheory.Functor.Final.isColimitExtendCoconeEquiv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Final.extendCocone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G) t)) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (max (succ u6) (succ u5)) (succ u3), max (max (succ u6) (succ u4)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (Prefunctor.obj.{succ u3, succ u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)))) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G))) (CategoryTheory.Functor.toPrefunctor.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cocone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Final.extendCocone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G)) t)) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.is_colimit_extend_cocone_equiv CategoryTheory.Functor.Final.isColimitExtendCoconeEquivₓ'. -/
 /-- When `F` is cofinal, and `t : cocone (F ⋙ G)`,
 `extend_cocone.obj t` is a colimit coconne exactly when `t` is.
 -/
@@ -294,6 +350,7 @@ def isColimitExtendCoconeEquiv (t : Cocone (F ⋙ G)) :
   IsColimit.ofCoconeEquiv (coconesEquiv F G)
 #align category_theory.functor.final.is_colimit_extend_cocone_equiv CategoryTheory.Functor.Final.isColimitExtendCoconeEquiv
 
+#print CategoryTheory.Functor.Final.colimitCoconeComp /-
 /-- Given a colimit cocone over `G : D ⥤ E` we can construct a colimit cocone over `F ⋙ G`. -/
 @[simps]
 def colimitCoconeComp (t : ColimitCocone G) : ColimitCocone (F ⋙ G)
@@ -301,11 +358,20 @@ def colimitCoconeComp (t : ColimitCocone G) : ColimitCocone (F ⋙ G)
   Cocone := _
   IsColimit := (isColimitWhiskerEquiv F _).symm t.IsColimit
 #align category_theory.functor.final.colimit_cocone_comp CategoryTheory.Functor.Final.colimitCoconeComp
+-/
 
+#print CategoryTheory.Functor.Final.comp_hasColimit /-
 instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G) :=
   HasColimit.mk (colimitCoconeComp F (getColimitCocone G))
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
+-/
 
+/- warning: category_theory.functor.final.colimit_pre_is_iso_aux -> CategoryTheory.Functor.Final.colimit_pre_is_iso_aux is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cocone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cocone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.desc.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsColimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Final.isColimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cocone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cocone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_auxₓ'. -/
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
   by
@@ -315,6 +381,7 @@ theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
   dsimp; simp
 #align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_aux
 
+#print CategoryTheory.Functor.Final.colimit_pre_isIso /-
 instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) :=
   by
   rw [colimit.pre_eq (colimit_cocone_comp F (get_colimit_cocone G)) (get_colimit_cocone G)]
@@ -322,11 +389,13 @@ instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) :=
   dsimp
   infer_instance
 #align category_theory.functor.final.colimit_pre_is_iso CategoryTheory.Functor.Final.colimit_pre_isIso
+-/
 
 section
 
 variable (G)
 
+#print CategoryTheory.Functor.Final.colimitIso /-
 /-- When `F : C ⥤ D` is cofinal, and `G : D ⥤ E` has a colimit, then `F ⋙ G` has a colimit also and
 `colimit (F ⋙ G) ≅ colimit G`
 
@@ -335,9 +404,11 @@ https://stacks.math.columbia.edu/tag/04E7
 def colimitIso [HasColimit G] : colimit (F ⋙ G) ≅ colimit G :=
   asIso (colimit.pre G F)
 #align category_theory.functor.final.colimit_iso CategoryTheory.Functor.Final.colimitIso
+-/
 
 end
 
+#print CategoryTheory.Functor.Final.colimitCoconeOfComp /-
 /-- Given a colimit cocone over `F ⋙ G` we can construct a colimit cocone over `G`. -/
 @[simps]
 def colimitCoconeOfComp (t : ColimitCocone (F ⋙ G)) : ColimitCocone G
@@ -345,7 +416,9 @@ def colimitCoconeOfComp (t : ColimitCocone (F ⋙ G)) : ColimitCocone G
   Cocone := extendCocone.obj t.Cocone
   IsColimit := (isColimitExtendCoconeEquiv F _).symm t.IsColimit
 #align category_theory.functor.final.colimit_cocone_of_comp CategoryTheory.Functor.Final.colimitCoconeOfComp
+-/
 
+#print CategoryTheory.Functor.Final.hasColimit_of_comp /-
 /-- When `F` is cofinal, and `F ⋙ G` has a colimit, then `G` has a colimit also.
 
 We can't make this an instance, because `F` is not determined by the goal.
@@ -354,11 +427,13 @@ We can't make this an instance, because `F` is not determined by the goal.
 theorem hasColimit_of_comp [HasColimit (F ⋙ G)] : HasColimit G :=
   HasColimit.mk (colimitCoconeOfComp F (getColimitCocone (F ⋙ G)))
 #align category_theory.functor.final.has_colimit_of_comp CategoryTheory.Functor.Final.hasColimit_of_comp
+-/
 
 section
 
 attribute [local instance] has_colimit_of_comp
 
+#print CategoryTheory.Functor.Final.colimitIso' /-
 /-- When `F` is cofinal, and `F ⋙ G` has a colimit, then `G` has a colimit also and
 `colimit (F ⋙ G) ≅ colimit G`
 
@@ -367,6 +442,7 @@ https://stacks.math.columbia.edu/tag/04E7
 def colimitIso' [HasColimit (F ⋙ G)] : colimit (F ⋙ G) ≅ colimit G :=
   asIso (colimit.pre G F)
 #align category_theory.functor.final.colimit_iso' CategoryTheory.Functor.Final.colimitIso'
+-/
 
 end
 
@@ -378,6 +454,12 @@ namespace Final
 
 variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D) [Final F]
 
+/- warning: category_theory.functor.final.colimit_comp_coyoneda_iso -> CategoryTheory.Functor.Final.colimitCompCoyonedaIso is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F] (d : D) [_inst_4 : CategoryTheory.IsIso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_1.{u1} C _inst_1 D _inst_2 F _inst_3 d)) (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_2.{u1} D _inst_2 d)) (CategoryTheory.Limits.colimit.pre.{u1, u1, u1, u1, u1, succ u1} D _inst_2 C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_3.{u1} D _inst_2 d) F (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_4.{u1} C _inst_1 D _inst_2 F _inst_3 d))], CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.colimitCompCoyonedaIso._proof_1.{u1} C _inst_1 D _inst_2 F _inst_3 d)) PUnit.{succ u1}
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (_inst_3 : D) [d : CategoryTheory.IsIso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))))) (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} D _inst_2 (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.colimit.pre.{u1, u1, u1, u1, u1, succ u1} D _inst_2 C _inst_1 Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)) (CategoryTheory.Coyoneda.instHasColimitTypeTypesObjOppositeToQuiverToCategoryStructOppositeFunctorToQuiverToCategoryStructCategoryToPrefunctorCoyoneda.{u1} D _inst_2 (Opposite.op.{succ u1} D _inst_3)) F (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3)))))], CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D _inst_3))))) PUnit.{succ u1}
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIsoₓ'. -/
 /-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
 is an isomorphism (as it always is when `F` is cofinal),
 then `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit`
@@ -388,6 +470,12 @@ def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)]
   asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
+/- warning: category_theory.functor.final.zigzag_of_eqv_gen_quot_rel -> CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (CategoryTheory.Functor.obj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) f₂)))
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] {F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2} {d : D} {f₁ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))} {f₂ : Sigma.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X))}, (EqvGen.{u1} (Sigma.{u1, u1} C (fun (j : C) => Prefunctor.obj.{succ u1, succ u1, u1, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) j)) (CategoryTheory.Limits.Types.Quot.Rel.{u1, u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d)))) f₁ f₂) -> (CategoryTheory.Zigzag.{u1, u1} (CategoryTheory.StructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.instCategoryStructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 d F) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₁)) (CategoryTheory.StructuredArrow.mk.{u1, u1, u1, u1} C _inst_1 D _inst_2 d (Sigma.fst.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂) F (Sigma.snd.{u1, u1} C (fun (X : C) => Quiver.Hom.{succ u1, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) d (Prefunctor.obj.{succ u1, succ u1, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} C (CategoryTheory.Category.toCategoryStruct.{u1, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u1} C _inst_1 D _inst_2 F) X)) f₂)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_relₓ'. -/
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
     Zigzag (StructuredArrow.mk f₁.2) (StructuredArrow.mk f₂.2) :=
@@ -408,6 +496,12 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     exact ih₁; exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
 
+/- warning: category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit -> CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F], (forall (d : D), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d))) (CategoryTheory.Functor.Final.comp_hasColimit.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 F _inst_3 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2) (Opposite.op.{succ u1} D d)) (CategoryTheory.coyoneda.Obj.CategoryTheory.Limits.hasColimit.{u1} D _inst_2 (Opposite.op.{succ u1} D d)))) PUnit.{succ u1}) -> (CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F)
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u1, u1} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u1, u1} D] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2), (forall (d : D), CategoryTheory.Iso.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.colimit.{u1, u1, u1, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d))) (CategoryTheory.Limits.Types.hasColimit'.{u1} C _inst_1 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u1, succ u1} C _inst_1 D _inst_2 Type.{u1} CategoryTheory.types.{u1} F (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2))) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u1, u1} D _inst_2) (CategoryTheory.Functor.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u1, succ u1} D _inst_2 Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.coyoneda.{u1, u1} D _inst_2)) (Opposite.op.{succ u1} D d))))) PUnit.{succ u1}) -> (CategoryTheory.Functor.Final.{u1, u1, u1, u1} C _inst_1 D _inst_2 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnitₓ'. -/
 /-- If `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit` for all `d : D`, then `F` is cofinal.
 -/
 theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
@@ -443,6 +537,7 @@ instance (d : D) : Nonempty (CostructuredArrow F d) :=
 
 variable {E : Type u₃} [Category.{v₃} E] (G : D ⥤ E)
 
+#print CategoryTheory.Functor.Initial.lift /-
 /--
 When `F : C ⥤ D` is initial, we denote by `lift F d` an arbitrary choice of object in `C` such that
 there exists a morphism `F.obj (lift F d) ⟶ d`.
@@ -450,7 +545,14 @@ there exists a morphism `F.obj (lift F d) ⟶ d`.
 def lift (d : D) : C :=
   (Classical.arbitrary (CostructuredArrow F d)).left
 #align category_theory.functor.initial.lift CategoryTheory.Functor.Initial.lift
+-/
 
+/- warning: category_theory.functor.initial.hom_to_lift -> CategoryTheory.Functor.Initial.homToLift is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)) d
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] (d : D), Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)) d
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLiftₓ'. -/
 /-- When `F : C ⥤ D` is initial, we denote by `hom_to_lift` an arbitrary choice of morphism
 `F.obj (lift F d) ⟶ d`.
 -/
@@ -458,6 +560,12 @@ def homToLift (d : D) : F.obj (lift F d) ⟶ d :=
   (Classical.arbitrary (CostructuredArrow F d)).Hom
 #align category_theory.functor.initial.hom_to_lift CategoryTheory.Functor.Initial.homToLift
 
+/- warning: category_theory.functor.initial.induction -> CategoryTheory.Functor.Initial.induction is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X) d) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f) k₂) k₁) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₂) d (CategoryTheory.Functor.map.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₁ X₂ f) k₂) k₁) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} C _inst_1 D _inst_2 F X₀) d}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u3, u4} C _inst_1 D _inst_2 F] {d : D} (Z : forall (X : C), (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X) d) -> Sort.{u5}), (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f) k₂) k₁) -> (Z X₁ k₁) -> (Z X₂ k₂)) -> (forall (X₁ : C) (X₂ : C) (k₁ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (k₂ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d) (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X₁ X₂), (Eq.{succ u2} (Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) d) (CategoryTheory.CategoryStruct.comp.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₂) d (Prefunctor.map.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₁ X₂ f) k₂) k₁) -> (Z X₂ k₂) -> (Z X₁ k₁)) -> (forall {X₀ : C} {k₀ : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} C _inst_1 D _inst_2 F) X₀) d}, (Z X₀ k₀) -> (Z (CategoryTheory.Functor.Initial.lift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u3, u4} C _inst_1 D _inst_2 F _inst_3 d)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.induction CategoryTheory.Functor.Initial.inductionₓ'. -/
 /-- We provide an induction principle for reasoning about `lift` and `hom_to_lift`.
 We want to perform some construction (usually just a proof) about
 the particular choices `lift F d` and `hom_to_lift F d`,
@@ -493,6 +601,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : F.obj X ⟶ d), Sort _)
 
 variable {F G}
 
+#print CategoryTheory.Functor.Initial.extendCone /-
 /-- Given a cone over `F ⋙ G`, we can construct a `cone G` with the same cocone point.
 -/
 @[simps]
@@ -520,7 +629,14 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
             · rw [← functor.map_comp] } }
   map X Y f := { Hom := f.Hom }
 #align category_theory.functor.initial.extend_cone CategoryTheory.Functor.Initial.extendCone
+-/
 
+/- warning: category_theory.functor.initial.limit_cone_comp_aux -> CategoryTheory.Functor.Initial.limit_cone_comp_aux is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.map.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j))) (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (CategoryTheory.Functor.obj.{u1, u2, u4, u5} C _inst_1 D _inst_2 F j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.obj.{u3, max u4 u3, u6, max u1 u3 u4 u6} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] {F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2} [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (s : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (j : C), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (CategoryTheory.CategoryStruct.comp.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s))) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u1, succ u3, u4, u6} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.map.{succ u2, succ u3, u5, u6} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) (CategoryTheory.Functor.Initial.lift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j))) (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j) (CategoryTheory.Functor.Initial.homToLift.{u1, u2, u4, u5} C _inst_1 D _inst_2 F _inst_3 (Prefunctor.obj.{succ u1, succ u2, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} C (CategoryTheory.Category.toCategoryStruct.{u1, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} D (CategoryTheory.Category.toCategoryStruct.{u2, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u4, u5} C _inst_1 D _inst_2 F) j)))) (CategoryTheory.NatTrans.app.{u1, u3, u4, u6} C _inst_1 E _inst_4 (Prefunctor.obj.{succ u3, max (succ u4) (succ u3), u6, max (max (max u4 u1) u3) u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.CategoryStruct.toQuiver.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Category.toCategoryStruct.{max u4 u3, max (max (max u4 u1) u6) u3} (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4))) (CategoryTheory.Functor.toPrefunctor.{u3, max u4 u3, u6, max (max (max u4 u1) u6) u3} E _inst_4 (CategoryTheory.Functor.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.category.{u1, u3, u4, u6} C _inst_1 E _inst_4) (CategoryTheory.Functor.const.{u1, u3, u4, u6} C _inst_1 E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s)) (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.π.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) s) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_cone_comp_aux CategoryTheory.Functor.Initial.limit_cone_comp_auxₓ'. -/
 @[simp]
 theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
     s.π.app (lift F (F.obj j)) ≫ G.map (homToLift F (F.obj j)) = s.π.app j :=
@@ -541,6 +657,12 @@ theorem limit_cone_comp_aux (s : Cone (F ⋙ G)) (j : C) :
 
 variable (F G)
 
+/- warning: category_theory.functor.initial.cones_equiv -> CategoryTheory.Functor.Initial.conesEquiv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] (G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4), CategoryTheory.Equivalence.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.cones_equiv CategoryTheory.Functor.Initial.conesEquivₓ'. -/
 /-- If `F` is initial,
 the category of cones on `F ⋙ G` is equivalent to the category of cones on `G`,
 for any `G : D ⥤ E`.
@@ -556,13 +678,21 @@ def conesEquiv : Cone (F ⋙ G) ≌ Cone G
 
 variable {G}
 
+#print CategoryTheory.Functor.Initial.isLimitWhiskerEquiv /-
 /-- When `F : C ⥤ D` is initial, and `t : cone G` for some `G : D ⥤ E`,
 `t.whisker F` is a limit cone exactly when `t` is.
 -/
 def isLimitWhiskerEquiv (t : Cone G) : IsLimit (t.whisker F) ≃ IsLimit t :=
   IsLimit.ofConeEquiv (conesEquiv F G).symm
 #align category_theory.functor.initial.is_limit_whisker_equiv CategoryTheory.Functor.Initial.isLimitWhiskerEquiv
+-/
 
+/- warning: category_theory.functor.initial.is_limit_extend_cone_equiv -> CategoryTheory.Functor.Initial.isLimitExtendConeEquiv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (CategoryTheory.Functor.obj.{u3, u3, max u4 u6 u3, max u5 u6 u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Initial.extendCone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G) t)) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} (t : CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)), Equiv.{max (max (succ u6) (succ u5)) (succ u3), max (max (succ u6) (succ u4)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G (Prefunctor.obj.{succ u3, succ u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u4) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)))) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G))) (CategoryTheory.Functor.toPrefunctor.{u3, u3, max (max u6 u4) u3, max (max u6 u5) u3} (CategoryTheory.Limits.Cone.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.category.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G)) (CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Limits.Cone.category.{u2, u3, u5, u6} D _inst_2 E _inst_4 G) (CategoryTheory.Functor.Initial.extendCone.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G)) t)) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) t)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.is_limit_extend_cone_equiv CategoryTheory.Functor.Initial.isLimitExtendConeEquivₓ'. -/
 /-- When `F` is initial, and `t : cone (F ⋙ G)`,
 `extend_cone.obj t` is a limit cone exactly when `t` is.
 -/
@@ -570,6 +700,7 @@ def isLimitExtendConeEquiv (t : Cone (F ⋙ G)) : IsLimit (extendCone.obj t) ≃
   IsLimit.ofConeEquiv (conesEquiv F G)
 #align category_theory.functor.initial.is_limit_extend_cone_equiv CategoryTheory.Functor.Initial.isLimitExtendConeEquiv
 
+#print CategoryTheory.Functor.Initial.limitConeComp /-
 /-- Given a limit cone over `G : D ⥤ E` we can construct a limit cone over `F ⋙ G`. -/
 @[simps]
 def limitConeComp (t : LimitCone G) : LimitCone (F ⋙ G)
@@ -577,11 +708,20 @@ def limitConeComp (t : LimitCone G) : LimitCone (F ⋙ G)
   Cone := _
   IsLimit := (isLimitWhiskerEquiv F _).symm t.IsLimit
 #align category_theory.functor.initial.limit_cone_comp CategoryTheory.Functor.Initial.limitConeComp
+-/
 
+#print CategoryTheory.Functor.Initial.comp_hasLimit /-
 instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
   HasLimit.mk (limitConeComp F (getLimitCone G))
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
+-/
 
+/- warning: category_theory.functor.initial.limit_pre_is_iso_aux -> CategoryTheory.Functor.Initial.limit_pre_is_iso_aux is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (coeFn.{max 1 (max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)) (max (succ u4) (succ u6) (succ u3)) (succ u5) (succ u6) (succ u3), max (max (succ u5) (succ u6) (succ u3)) (succ u4) (succ u6) (succ u3)} (Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (fun (_x : Equiv.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) => (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.hasCoeToFun.{max (succ u5) (succ u6) (succ u3), max (succ u4) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (succ u4) (succ u6) (succ u3), max (succ u5) (succ u6) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} D] (F : CategoryTheory.Functor.{u1, u2, u4, u5} C _inst_1 D _inst_2) [_inst_3 : CategoryTheory.Functor.Initial.{u1, u2, u4, u5} C _inst_1 D _inst_2 F] {E : Type.{u6}} [_inst_4 : CategoryTheory.Category.{u3, u6} E] {G : CategoryTheory.Functor.{u2, u3, u5, u6} D _inst_2 E _inst_4} {t : CategoryTheory.Limits.Cone.{u2, u3, u5, u6} D _inst_2 E _inst_4 G} (P : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t), Eq.{succ u3} (Quiver.Hom.{succ u3, u6} E (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.Cone.pt.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.lift.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t) (FunLike.coe.{max (max (max (succ u4) (succ u5)) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (Equiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (fun (_x : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) => CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u5) (succ u6)) (succ u3), max (max (succ u4) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t))) (Equiv.symm.{max (max (succ u4) (succ u6)) (succ u3), max (max (succ u5) (succ u6)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u4, u6} C _inst_1 E _inst_4 (CategoryTheory.Functor.comp.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 E _inst_4 F G) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.Limits.IsLimit.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t) (CategoryTheory.Functor.Initial.isLimitWhiskerEquiv.{u1, u2, u3, u4, u5, u6} C _inst_1 D _inst_2 F _inst_3 E _inst_4 G t)) P) (CategoryTheory.Limits.Cone.whisker.{u2, u1, u3, u5, u4, u6} D _inst_2 C _inst_1 E _inst_4 G F t)) (CategoryTheory.CategoryStruct.id.{u3, u6} E (CategoryTheory.Category.toCategoryStruct.{u3, u6} E _inst_4) (CategoryTheory.Limits.Cone.pt.{u2, u3, u5, u6} D _inst_2 E _inst_4 G t))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_auxₓ'. -/
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
   by
@@ -591,6 +731,7 @@ theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
   simp
 #align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_aux
 
+#print CategoryTheory.Functor.Initial.limit_pre_isIso /-
 instance limit_pre_isIso [HasLimit G] : IsIso (limit.pre G F) :=
   by
   rw [limit.pre_eq (limit_cone_comp F (get_limit_cone G)) (get_limit_cone G)]
@@ -598,11 +739,13 @@ instance limit_pre_isIso [HasLimit G] : IsIso (limit.pre G F) :=
   dsimp
   infer_instance
 #align category_theory.functor.initial.limit_pre_is_iso CategoryTheory.Functor.Initial.limit_pre_isIso
+-/
 
 section
 
 variable (G)
 
+#print CategoryTheory.Functor.Initial.limitIso /-
 /-- When `F : C ⥤ D` is initial, and `G : D ⥤ E` has a limit, then `F ⋙ G` has a limit also and
 `limit (F ⋙ G) ≅ limit G`
 
@@ -611,9 +754,11 @@ https://stacks.math.columbia.edu/tag/04E7
 def limitIso [HasLimit G] : limit (F ⋙ G) ≅ limit G :=
   (asIso (limit.pre G F)).symm
 #align category_theory.functor.initial.limit_iso CategoryTheory.Functor.Initial.limitIso
+-/
 
 end
 
+#print CategoryTheory.Functor.Initial.limitConeOfComp /-
 /-- Given a limit cone over `F ⋙ G` we can construct a limit cone over `G`. -/
 @[simps]
 def limitConeOfComp (t : LimitCone (F ⋙ G)) : LimitCone G
@@ -621,7 +766,9 @@ def limitConeOfComp (t : LimitCone (F ⋙ G)) : LimitCone G
   Cone := extendCone.obj t.Cone
   IsLimit := (isLimitExtendConeEquiv F _).symm t.IsLimit
 #align category_theory.functor.initial.limit_cone_of_comp CategoryTheory.Functor.Initial.limitConeOfComp
+-/
 
+#print CategoryTheory.Functor.Initial.hasLimit_of_comp /-
 /-- When `F` is initial, and `F ⋙ G` has a limit, then `G` has a limit also.
 
 We can't make this an instance, because `F` is not determined by the goal.
@@ -630,11 +777,13 @@ We can't make this an instance, because `F` is not determined by the goal.
 theorem hasLimit_of_comp [HasLimit (F ⋙ G)] : HasLimit G :=
   HasLimit.mk (limitConeOfComp F (getLimitCone (F ⋙ G)))
 #align category_theory.functor.initial.has_limit_of_comp CategoryTheory.Functor.Initial.hasLimit_of_comp
+-/
 
 section
 
 attribute [local instance] has_limit_of_comp
 
+#print CategoryTheory.Functor.Initial.limitIso' /-
 /-- When `F` is initial, and `F ⋙ G` has a limit, then `G` has a limit also and
 `limit (F ⋙ G) ≅ limit G`
 
@@ -643,6 +792,7 @@ https://stacks.math.columbia.edu/tag/04E7
 def limitIso' [HasLimit (F ⋙ G)] : limit (F ⋙ G) ≅ limit G :=
   (asIso (limit.pre G F)).symm
 #align category_theory.functor.initial.limit_iso' CategoryTheory.Functor.Initial.limitIso'
+-/
 
 end
 
Diff
@@ -385,7 +385,7 @@ then `colimit (F ⋙ coyoneda.obj (op d)) ≅ punit`
 -/
 def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)] :
     colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit :=
-  asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ coyoneda.colimitCoyonedaIso (op d)
+  asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
Diff
@@ -225,7 +225,7 @@ variable {F G}
 def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
     where
   obj c :=
-    { x := c.x
+    { pt := c.pt
       ι :=
         { app := fun X => G.map (homToLift F X) ≫ c.ι.app (lift F X)
           naturality' := fun X Y f => by
@@ -307,7 +307,7 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
-    ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.x :=
+    ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt :=
   by
   dsimp [is_colimit_whisker_equiv]
   apply P.hom_ext
@@ -499,7 +499,7 @@ variable {F G}
 def extendCone : Cone (F ⋙ G) ⥤ Cone G
     where
   obj c :=
-    { x := c.x
+    { pt := c.pt
       π :=
         { app := fun d => c.π.app (lift F d) ≫ G.map (homToLift F d)
           naturality' := fun X Y f => by
@@ -583,7 +583,7 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
-    ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.x :=
+    ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt :=
   by
   dsimp [is_limit_whisker_equiv]
   apply P.hom_ext
Diff
@@ -302,9 +302,9 @@ def colimitCoconeComp (t : ColimitCocone G) : ColimitCocone (F ⋙ G)
   IsColimit := (isColimitWhiskerEquiv F _).symm t.IsColimit
 #align category_theory.functor.final.colimit_cocone_comp CategoryTheory.Functor.Final.colimitCoconeComp
 
-instance (priority := 100) compHasColimit [HasColimit G] : HasColimit (F ⋙ G) :=
+instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G) :=
   HasColimit.mk (colimitCoconeComp F (getColimitCocone G))
-#align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.compHasColimit
+#align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 
 theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
     ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.x :=
@@ -351,9 +351,9 @@ def colimitCoconeOfComp (t : ColimitCocone (F ⋙ G)) : ColimitCocone G
 We can't make this an instance, because `F` is not determined by the goal.
 (Even if this weren't a problem, it would cause a loop with `comp_has_colimit`.)
 -/
-theorem hasColimitOfComp [HasColimit (F ⋙ G)] : HasColimit G :=
+theorem hasColimit_of_comp [HasColimit (F ⋙ G)] : HasColimit G :=
   HasColimit.mk (colimitCoconeOfComp F (getColimitCocone (F ⋙ G)))
-#align category_theory.functor.final.has_colimit_of_comp CategoryTheory.Functor.Final.hasColimitOfComp
+#align category_theory.functor.final.has_colimit_of_comp CategoryTheory.Functor.Final.hasColimit_of_comp
 
 section
 
@@ -578,9 +578,9 @@ def limitConeComp (t : LimitCone G) : LimitCone (F ⋙ G)
   IsLimit := (isLimitWhiskerEquiv F _).symm t.IsLimit
 #align category_theory.functor.initial.limit_cone_comp CategoryTheory.Functor.Initial.limitConeComp
 
-instance (priority := 100) compHasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
+instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
   HasLimit.mk (limitConeComp F (getLimitCone G))
-#align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.compHasLimit
+#align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 
 theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
     ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.x :=
@@ -627,9 +627,9 @@ def limitConeOfComp (t : LimitCone (F ⋙ G)) : LimitCone G
 We can't make this an instance, because `F` is not determined by the goal.
 (Even if this weren't a problem, it would cause a loop with `comp_has_limit`.)
 -/
-theorem hasLimitOfComp [HasLimit (F ⋙ G)] : HasLimit G :=
+theorem hasLimit_of_comp [HasLimit (F ⋙ G)] : HasLimit G :=
   HasLimit.mk (limitConeOfComp F (getLimitCone (F ⋙ G)))
-#align category_theory.functor.initial.has_limit_of_comp CategoryTheory.Functor.Initial.hasLimitOfComp
+#align category_theory.functor.initial.has_limit_of_comp CategoryTheory.Functor.Initial.hasLimit_of_comp
 
 section
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.final
-! leanprover-community/mathlib commit 20e597fb24e5e454f85239871146f2c378010e92
+! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -204,8 +204,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : d ⟶ F.obj X), Sort _)
   apply Nonempty.some
   apply
     @is_preconnected_induction _ _ _ (fun Y : structured_arrow d F => Z Y.right Y.Hom) _ _
-      { right := X₀
-        Hom := k₀ } z
+      (structured_arrow.mk k₀) z
   · intro j₁ j₂ f a
     fapply h₁ _ _ _ _ f.right _ a
     convert f.w.symm
@@ -399,7 +398,7 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     fconstructor
     swap; fconstructor
     left; fconstructor
-    exact { right := f }
+    exact structured_arrow.hom_mk f (by tidy)
   case refl => fconstructor
   case symm x y h ih =>
     apply zigzag_symmetric
@@ -479,8 +478,7 @@ def induction {d : D} (Z : ∀ (X : C) (k : F.obj X ⟶ d), Sort _)
   apply Nonempty.some
   apply
     @is_preconnected_induction _ _ _ (fun Y : costructured_arrow F d => Z Y.left Y.Hom) _ _
-      { left := X₀
-        Hom := k₀ } z
+      (costructured_arrow.mk k₀) z
   · intro j₁ j₂ f a
     fapply h₁ _ _ _ _ f.left _ a
     convert f.w

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 1 (#12338)

A PR accompanying #12339.

Zulip discussion

Diff
@@ -394,7 +394,8 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
   | rel x y r =>
     obtain ⟨f, w⟩ := r
     fconstructor
-    swap; fconstructor
+    swap
+    · fconstructor
     left; fconstructor
     exact StructuredArrow.homMk f
   | refl => fconstructor
@@ -403,7 +404,8 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     exact ih
   | trans x y z _ _ ih₁ ih₂ =>
     apply Relation.ReflTransGen.trans
-    exact ih₁; exact ih₂
+    · exact ih₁
+    · exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
 
 end Final
chore(CategoryTheory): remove some unnecessary lemmas about final/initial functors (#12024)
Diff
@@ -316,17 +316,9 @@ instance (priority := 100) comp_hasColimit [HasColimit G] : HasColimit (F ⋙ G)
   HasColimit.mk (colimitCoconeComp F (getColimitCocone G))
 #align category_theory.functor.final.comp_has_colimit CategoryTheory.Functor.Final.comp_hasColimit
 
-theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
-    ((isColimitWhiskerEquiv F _).symm P).desc (t.whisker F) = 𝟙 t.pt := by
-  dsimp [isColimitWhiskerEquiv]
-  apply P.hom_ext
-  intro j
-  simp
-#align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_aux
-
 instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) := by
   rw [colimit.pre_eq (colimitCoconeComp F (getColimitCocone G)) (getColimitCocone G)]
-  erw [colimit_pre_is_iso_aux]
+  erw [IsColimit.desc_self]
   dsimp
   infer_instance
 #align category_theory.functor.final.colimit_pre_is_iso CategoryTheory.Functor.Final.colimit_pre_isIso
@@ -615,17 +607,9 @@ instance (priority := 100) comp_hasLimit [HasLimit G] : HasLimit (F ⋙ G) :=
   HasLimit.mk (limitConeComp F (getLimitCone G))
 #align category_theory.functor.initial.comp_has_limit CategoryTheory.Functor.Initial.comp_hasLimit
 
-theorem limit_pre_is_iso_aux {t : Cone G} (P : IsLimit t) :
-    ((isLimitWhiskerEquiv F _).symm P).lift (t.whisker F) = 𝟙 t.pt := by
-  change 𝟙 t.pt ≫ P.lift (extendCone.obj (Cone.whisker F t)) = 𝟙 t.pt
-  apply P.hom_ext
-  intro j
-  simp
-#align category_theory.functor.initial.limit_pre_is_iso_aux CategoryTheory.Functor.Initial.limit_pre_is_iso_aux
-
 instance limit_pre_isIso [HasLimit G] : IsIso (limit.pre G F) := by
   rw [limit.pre_eq (limitConeComp F (getLimitCone G)) (getLimitCone G)]
-  erw [limit_pre_is_iso_aux]
+  erw [IsLimit.lift_self]
   dsimp
   infer_instance
 #align category_theory.functor.initial.limit_pre_is_iso CategoryTheory.Functor.Initial.limit_pre_isIso
feat: existence of a limit in a concrete category implies smallness (#11625)

In this PR, it is shown that if a functor G : J ⥤ C to a concrete category has a limit and that forget C is corepresentable, then G ⋙ forget C).sections is small. As the corepresentability property holds in many concrete categories (e.g. groups, abelian groups) and that we already know since #11420 that limits exist under the smallness assumption in such categories, then this lemma may be used in future PR in order to show that usual forgetful functors preserve all limits (regardless of universe assumptions). This shall be convenient in the development of sheaves of modules.

In this PR, universes assumptions have also been generalized in the file Limits.Yoneda. In order to do this, a small refactor of the file Limits.Types was necessary. This introduces bijections like compCoyonedaSectionsEquiv (F : J ⥤ C) (X : C) : (F ⋙ coyoneda.obj (op X)).sections ≃ ((const J).obj X ⟶ F) with general universe parameters. In order to reduce imports in Limits.Yoneda, part of the file Limits.Types was moved to a new file Limits.TypesFiltered.

Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Diff
@@ -7,6 +7,7 @@ import Mathlib.CategoryTheory.Comma.StructuredArrow
 import Mathlib.CategoryTheory.IsConnected
 import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
 import Mathlib.CategoryTheory.Limits.Shapes.Types
+import Mathlib.CategoryTheory.Filtered.Basic
 import Mathlib.CategoryTheory.Limits.Yoneda
 import Mathlib.CategoryTheory.PUnit
 
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
@@ -78,7 +78,6 @@ open CategoryTheory.Limits
 section ArbitraryUniverse
 
 variable {C : Type u₁} [Category.{v₁} C]
-
 variable {D : Type u₂} [Category.{v₂} D]
 
 /--
@@ -831,7 +830,6 @@ section Filtered
 open Functor
 
 variable {C : Type u₁} [Category.{v₁} C]
-
 variable {D : Type u₂} [Category.{v₂} D]
 
 /-- Final functors preserve filteredness.
refactor: generalize universes for colimits in Type (#11148)

This is a smaller version of #7020. Before this PR, for limits, we gave instances for small indexing categories, but for colimits, we gave instances for TypeMax. This PR changes so that we give instances for small indexing categories in both cases. This is more general and also more uniform.

Co-authored-by: Joël Riou <rioujoel@gmail.com>

Diff
@@ -768,7 +768,8 @@ theorem final_comp [hF : Final F] [hG : Final G] : Final (F ⋙ G) := by
     final_iff_isIso_colimit_pre] at hF
   rw [final_iff_comp_equivalence G s₃.functor, final_iff_equivalence_comp s₂.inverse,
     final_iff_isIso_colimit_pre] at hG
-  simp only [← colimit.pre_pre]
+  intro H
+  rw [← colimit.pre_pre]
   infer_instance
 
 theorem initial_comp [Initial F] [Initial G] : Initial (F ⋙ G) := by
@@ -788,8 +789,10 @@ theorem final_of_final_comp [hF : Final F] [hFG : Final (F ⋙ G)] : Final G :=
     final_iff_isIso_colimit_pre] at hF
   rw [final_iff_comp_equivalence (F ⋙ G) s₃.functor, final_iff_equivalence_comp s₁.inverse,
     final_natIso_iff _i, final_iff_isIso_colimit_pre] at hFG
-  simp only [← colimit.pre_pre] at hFG
-  exact fun H => IsIso.of_isIso_comp_left (colimit.pre _ (s₁.inverse ⋙ F ⋙ s₂.functor)) _
+  intro H
+  replace hFG := hFG H
+  rw [← colimit.pre_pre] at hFG
+  exact IsIso.of_isIso_comp_left (colimit.pre _ (s₁.inverse ⋙ F ⋙ s₂.functor)) _
 
 theorem initial_of_initial_comp [Initial F] [Initial (F ⋙ G)] : Initial G := by
   suffices Final G.op from initial_of_final_op _
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -368,7 +368,7 @@ theorem hasColimitsOfShape_of_final [HasColimitsOfShape C E] : HasColimitsOfShap
 
 section
 
--- porting note: this instance does not seem to be found automatically
+-- Porting note: this instance does not seem to be found automatically
 --attribute [local instance] hasColimit_of_comp
 
 /-- When `F` is cofinal, and `F ⋙ G` has a colimit, then `G` has a colimit also and
@@ -667,7 +667,7 @@ theorem hasLimitsOfShape_of_initial [HasLimitsOfShape C E] : HasLimitsOfShape D
 
 section
 
--- porting note: this instance does not seem to be found automatically
+-- Porting note: this instance does not seem to be found automatically
 -- attribute [local instance] hasLimit_of_comp
 
 /-- When `F` is initial, and `F ⋙ G` has a limit, then `G` has a limit also and
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -126,32 +126,30 @@ theorem initial_of_final_op (F : C ⥤ D) [Final F.op] : Initial F :=
 
 /-- If a functor `R : D ⥤ C` is a right adjoint, it is final. -/
 theorem final_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Final R :=
-  {
-    out := fun c =>
+  { out := fun c =>
       let u : StructuredArrow c R := StructuredArrow.mk (adj.unit.app c)
       @zigzag_isConnected _ _ ⟨u⟩ fun f g =>
         Relation.ReflTransGen.trans
           (Relation.ReflTransGen.single
             (show Zag f u from
-              Or.inr ⟨StructuredArrow.homMk ((adj.homEquiv c f.right).symm f.hom) (by simp)⟩))
+              Or.inr ⟨StructuredArrow.homMk ((adj.homEquiv c f.right).symm f.hom) (by simp [u])⟩))
           (Relation.ReflTransGen.single
             (show Zag u g from
-              Or.inl ⟨StructuredArrow.homMk ((adj.homEquiv c g.right).symm g.hom) (by simp)⟩)) }
+              Or.inl ⟨StructuredArrow.homMk ((adj.homEquiv c g.right).symm g.hom) (by simp [u])⟩)) }
 #align category_theory.functor.final_of_adjunction CategoryTheory.Functor.final_of_adjunction
 
 /-- If a functor `L : C ⥤ D` is a left adjoint, it is initial. -/
 theorem initial_of_adjunction {L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) : Initial L :=
-  {
-    out := fun d =>
+  { out := fun d =>
       let u : CostructuredArrow L d := CostructuredArrow.mk (adj.counit.app d)
       @zigzag_isConnected _ _ ⟨u⟩ fun f g =>
         Relation.ReflTransGen.trans
           (Relation.ReflTransGen.single
             (show Zag f u from
-              Or.inl ⟨CostructuredArrow.homMk (adj.homEquiv f.left d f.hom) (by simp)⟩))
+              Or.inl ⟨CostructuredArrow.homMk (adj.homEquiv f.left d f.hom) (by simp [u])⟩))
           (Relation.ReflTransGen.single
             (show Zag u g from
-              Or.inr ⟨CostructuredArrow.homMk (adj.homEquiv g.left d g.hom) (by simp)⟩)) }
+              Or.inr ⟨CostructuredArrow.homMk (adj.homEquiv g.left d g.hom) (by simp [u])⟩)) }
 #align category_theory.functor.initial_of_adjunction CategoryTheory.Functor.initial_of_adjunction
 
 instance (priority := 100) final_of_isRightAdjoint (F : C ⥤ D) [h : IsRightAdjoint F] : Final F :=
feat: final functors with filtered domain (#10720)
Diff
@@ -48,6 +48,10 @@ There is some discrepancy in the literature about naming; some say 'cofinal' ins
 The explanation for this is that the 'co' prefix here is *not* the usual category-theoretic one
 indicating duality, but rather indicating the sense of "along with".
 
+## See also
+In `CategoryTheory.Filtered.Final` we give additional equivalent conditions in the case that
+`C` is filtered.
+
 ## Future work
 Dualise condition 3 above and the implications 2 ⇒ 3 and 3 ⇒ 1 to initial functors.
 
@@ -445,12 +449,6 @@ theorem cofinal_of_isTerminal_colimit_comp_yoneda
   let b := IsTerminal.isTerminalObj ((evaluation _ _).obj (Opposite.op d)) _ h
   exact b.ofIso <| preservesColimitIso ((evaluation _ _).obj (Opposite.op d)) (F ⋙ yoneda)
 
-end LocallySmall
-
-section SmallCategory
-
-variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D)
-
 /-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
 is an isomorphism (as it always is when `F` is cofinal),
 then `colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit`
@@ -461,6 +459,12 @@ def Final.colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d
   asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
 #align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
 
+end LocallySmall
+
+section SmallCategory
+
+variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D)
+
 theorem final_iff_isIso_colimit_pre : Final F ↔ ∀ G : D ⥤ Type v, IsIso (colimit.pre G F) :=
   ⟨fun _ => inferInstance,
    fun _ => cofinal_of_colimit_comp_coyoneda_iso_pUnit _ fun _ => Final.colimitCompCoyonedaIso _ _⟩
feat: final if colimit of composition with Yoneda is terminal (#10279)
Diff
@@ -5,8 +5,9 @@ Authors: Scott Morrison
 -/
 import Mathlib.CategoryTheory.Comma.StructuredArrow
 import Mathlib.CategoryTheory.IsConnected
+import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
+import Mathlib.CategoryTheory.Limits.Shapes.Types
 import Mathlib.CategoryTheory.Limits.Yoneda
-import Mathlib.CategoryTheory.Limits.Types
 import Mathlib.CategoryTheory.PUnit
 
 #align_import category_theory.limits.final from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
@@ -434,6 +435,16 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
     exact Final.zigzag_of_eqvGen_quot_rel t⟩
 #align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.cofinal_of_colimit_comp_coyoneda_iso_pUnit
 
+/-- A variant of `cofinal_of_colimit_comp_coyoneda_iso_pUnit` where we bind the various claims
+    about `colimit (F ⋙ coyoneda.obj (Opposite.op d))` for each `d : D` into a single claim about
+    the presheaf `colimit (F ⋙ yoneda)`. -/
+theorem cofinal_of_isTerminal_colimit_comp_yoneda
+    (h : IsTerminal (colimit (F ⋙ yoneda))) : Final F := by
+  refine cofinal_of_colimit_comp_coyoneda_iso_pUnit _ (fun d => ?_)
+  refine Types.isTerminalEquivIsoPUnit _ ?_
+  let b := IsTerminal.isTerminalObj ((evaluation _ _).obj (Opposite.op d)) _ h
+  exact b.ofIso <| preservesColimitIso ((evaluation _ _).obj (Opposite.op d)) (F ⋙ yoneda)
+
 end LocallySmall
 
 section SmallCategory
refactor: create folder CategoryTheory/Comma (#10108)
Diff
@@ -3,11 +3,11 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathlib.CategoryTheory.PUnit
-import Mathlib.CategoryTheory.StructuredArrow
+import Mathlib.CategoryTheory.Comma.StructuredArrow
 import Mathlib.CategoryTheory.IsConnected
 import Mathlib.CategoryTheory.Limits.Yoneda
 import Mathlib.CategoryTheory.Limits.Types
+import Mathlib.CategoryTheory.PUnit
 
 #align_import category_theory.limits.final from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
 
style: use cases x with | ... instead of cases x; case => ... (#9321)

This converts usages of the pattern

cases h
case inl h' => ...
case inr h' => ...

which derive from mathported code, to the "structured cases" syntax:

cases h with
| inl h' => ...
| inr h' => ...

The case where the subgoals are handled with · instead of case is more contentious (and much more numerous) so I left those alone. This pattern also appears with cases', induction, induction', and rcases. Furthermore, there is a similar transformation for by_cases:

by_cases h : cond
case pos => ...
case neg => ...

is replaced by:

if h : cond then
  ...
else
  ...

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -395,18 +395,18 @@ namespace Final
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
     Zigzag (StructuredArrow.mk f₁.2) (StructuredArrow.mk f₂.2) := by
-  induction t
-  case rel x y r =>
+  induction t with
+  | rel x y r =>
     obtain ⟨f, w⟩ := r
     fconstructor
     swap; fconstructor
     left; fconstructor
     exact StructuredArrow.homMk f
-  case refl => fconstructor
-  case symm x y _ ih =>
+  | refl => fconstructor
+  | symm x y _ ih =>
     apply zigzag_symmetric
     exact ih
-  case trans x y z _ _ ih₁ ih₂ =>
+  | trans x y z _ _ ih₁ ih₂ =>
     apply Relation.ReflTransGen.trans
     exact ih₁; exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
fix: decapitalize names of proof-valued fields (#8509)

Only Prop-values fields should be capitalized, not P-valued fields where P is Prop-valued.

Rather than fixing Nonempty := in constructors, I just deleted the line as the instance can almost always be found automatically.

Diff
@@ -852,7 +852,7 @@ adjoints preserve filteredness), as right adjoints are always final, see `final_
 -/
 theorem IsFiltered.of_final (F : C ⥤ D) [Final F] [IsFiltered C] : IsFiltered D :=
 { IsFilteredOrEmpty.of_final F with
-  Nonempty := Nonempty.map F.obj IsFiltered.Nonempty }
+  nonempty := Nonempty.map F.obj IsFiltered.nonempty }
 
 /-- Initial functors preserve cofilteredness.
 
chore: only four spaces for subsequent lines (#7286)

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

Diff
@@ -860,7 +860,7 @@ This can be seen as a generalization of `IsCofiltered.of_left_adjoint` (which st
 adjoints preserve cofilteredness), as right adjoints are always initial, see `intial_of_adjunction`.
 -/
 theorem IsCofilteredOrEmpty.of_initial (F : C ⥤ D) [Initial F] [IsCofilteredOrEmpty C] :
-  IsCofilteredOrEmpty D :=
+    IsCofilteredOrEmpty D :=
   have : IsFilteredOrEmpty Dᵒᵖ := IsFilteredOrEmpty.of_final F.op
   isCofilteredOrEmpty_of_isFilteredOrEmpty_op _
 
chore: replace ConeMorphism.Hom by ConeMorphism.hom (#7176)
Diff
@@ -249,7 +249,7 @@ def extendCocone : Cocone (F ⋙ G) ⥤ Cocone G
               rw [← a, Functor.map_comp, Category.assoc, ← Functor.comp_map, c.w] at z
               rw [z]
             · rw [← Functor.map_comp_assoc] } }
-  map f := { Hom := f.Hom }
+  map f := { hom := f.hom }
 #align category_theory.functor.final.extend_cocone CategoryTheory.Functor.Final.extendCocone
 
 @[simp]
@@ -539,7 +539,7 @@ def extendCone : Cone (F ⋙ G) ⥤ Cone G
               rw [← a, Functor.map_comp, ← Functor.comp_map, ← Category.assoc, ← Category.assoc,
                 c.w, z, Category.assoc]
             · rw [← Functor.map_comp] } }
-  map f := { Hom := f.Hom }
+  map f := { hom := f.hom }
 #align category_theory.functor.initial.extend_cone CategoryTheory.Functor.Initial.extendCone
 
 @[simp]
style: fix wrapping of where (#7149)
Diff
@@ -97,12 +97,12 @@ class Initial (F : C ⥤ D) : Prop where
 
 attribute [instance] Initial.out
 
-instance final_op_of_initial (F : C ⥤ D) [Initial F] : Final F.op
-    where out d := isConnected_of_equivalent (costructuredArrowOpEquivalence F (unop d))
+instance final_op_of_initial (F : C ⥤ D) [Initial F] : Final F.op where
+  out d := isConnected_of_equivalent (costructuredArrowOpEquivalence F (unop d))
 #align category_theory.functor.final_op_of_initial CategoryTheory.Functor.final_op_of_initial
 
-instance initial_op_of_final (F : C ⥤ D) [Final F] : Initial F.op
-    where out d := isConnected_of_equivalent (structuredArrowOpEquivalence F (unop d))
+instance initial_op_of_final (F : C ⥤ D) [Final F] : Initial F.op where
+  out d := isConnected_of_equivalent (structuredArrowOpEquivalence F (unop d))
 #align category_theory.functor.initial_op_of_final CategoryTheory.Functor.initial_op_of_final
 
 theorem final_of_initial_op (F : C ⥤ D) [Initial F.op] : Final F :=
chore: avoid lean3 style have/suffices (#6964)

Many proofs use the "stream of consciousness" style from Lean 3, rather than have ... := or suffices ... from/by.

This PR updates a fraction of these to the preferred Lean 4 style.

I think a good goal would be to delete the "deferred" versions of have, suffices, and let at the bottom of Mathlib.Tactic.Have

(Anyone who would like to contribute more cleanup is welcome to push directly to this branch.)

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

Diff
@@ -759,8 +759,7 @@ theorem final_comp [hF : Final F] [hG : Final G] : Final (F ⋙ G) := by
   infer_instance
 
 theorem initial_comp [Initial F] [Initial G] : Initial (F ⋙ G) := by
-  suffices : Final (F ⋙ G).op
-  · exact initial_of_final_op _
+  suffices Final (F ⋙ G).op from initial_of_final_op _
   exact final_comp F.op G.op
 
 theorem final_of_final_comp [hF : Final F] [hFG : Final (F ⋙ G)] : Final G := by
@@ -780,8 +779,7 @@ theorem final_of_final_comp [hF : Final F] [hFG : Final (F ⋙ G)] : Final G :=
   exact fun H => IsIso.of_isIso_comp_left (colimit.pre _ (s₁.inverse ⋙ F ⋙ s₂.functor)) _
 
 theorem initial_of_initial_comp [Initial F] [Initial (F ⋙ G)] : Initial G := by
-  suffices : Final G.op
-  · exact initial_of_final_op _
+  suffices Final G.op from initial_of_final_op _
   have : Final (F.op ⋙ G.op) := show Final (F ⋙ G).op from inferInstance
   exact final_of_final_comp F.op G.op
 
chore: remove unused simps (#6632)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -424,7 +424,6 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
       exact ⟨StructuredArrow.mk y⟩
     apply zigzag_isConnected
     rintro ⟨⟨⟨⟩⟩, X₁, f₁⟩ ⟨⟨⟨⟩⟩, X₂, f₂⟩
-    dsimp at *
     let y₁ := colimit.ι (F ⋙ coyoneda.obj (op d)) X₁ f₁
     let y₂ := colimit.ι (F ⋙ coyoneda.obj (op d)) X₂ f₂
     have e : y₁ = y₂ := by
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -201,7 +201,7 @@ it suffices to perform that construction for some other pair of choices
 and to show how to transport such a construction
 *both* directions along a morphism between such choices.
 -/
-def induction {d : D} (Z : ∀ (X : C) (_ : d ⟶ F.obj X), Sort _)
+def induction {d : D} (Z : ∀ (X : C) (_ : d ⟶ F.obj X), Sort*)
     (h₁ :
       ∀ (X₁ X₂) (k₁ : d ⟶ F.obj X₁) (k₂ : d ⟶ F.obj X₂) (f : X₁ ⟶ X₂),
         k₁ ≫ F.map f = k₂ → Z X₁ k₁ → Z X₂ k₂)
@@ -489,7 +489,7 @@ it suffices to perform that construction for some other pair of choices
 and to show how to transport such a construction
 *both* directions along a morphism between such choices.
 -/
-def induction {d : D} (Z : ∀ (X : C) (_ : F.obj X ⟶ d), Sort _)
+def induction {d : D} (Z : ∀ (X : C) (_ : F.obj X ⟶ d), Sort*)
     (h₁ :
       ∀ (X₁ X₂) (k₁ : F.obj X₁ ⟶ d) (k₂ : F.obj X₂ ⟶ d) (f : X₁ ⟶ X₂),
         F.map f ≫ k₂ = k₁ → Z X₁ k₁ → Z X₂ k₂)
feat: composition properties of final functors (#6250)
Diff
@@ -160,9 +160,15 @@ instance (priority := 100) initial_of_isLeftAdjoint (F : C ⥤ D) [h : IsLeftAdj
 theorem final_of_natIso {F F' : C ⥤ D} [Final F] (i : F ≅ F') : Final F' where
   out _ := isConnected_of_equivalent (StructuredArrow.mapNatIso i)
 
+theorem final_natIso_iff {F F' : C ⥤ D} (i : F ≅ F') : Final F ↔ Final F' :=
+  ⟨fun _ => final_of_natIso i, fun _ => final_of_natIso i.symm⟩
+
 theorem initial_of_natIso {F F' : C ⥤ D} [Initial F] (i : F ≅ F') : Initial F' where
   out _ := isConnected_of_equivalent (CostructuredArrow.mapNatIso i)
 
+theorem initial_natIso_iff {F F' : C ⥤ D} (i : F ≅ F') : Initial F ↔ Initial F' :=
+  ⟨fun _ => initial_of_natIso i, fun _ => initial_of_natIso i.symm⟩
+
 namespace Final
 
 variable (F : C ⥤ D) [Final F]
@@ -380,19 +386,11 @@ end Final
 
 end ArbitraryUniverse
 
-namespace Final
+section LocallySmall
 
-variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D) [Final F]
+variable {C : Type v} [Category.{v} C] {D : Type u₁} [Category.{v} D] (F : C ⥤ D)
 
-/-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
-is an isomorphism (as it always is when `F` is cofinal),
-then `colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit`
-(simply because `colimit (coyoneda.obj (op d)) ≅ PUnit`).
--/
-def colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)] :
-    colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit :=
-  asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
-#align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
+namespace Final
 
 theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶ F.obj X}
     (t : EqvGen (Types.Quot.Rel.{v, v} (F ⋙ coyoneda.obj (op d))) f₁ f₂) :
@@ -413,6 +411,8 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     exact ih₁; exact ih₂
 #align category_theory.functor.final.zigzag_of_eqv_gen_quot_rel CategoryTheory.Functor.Final.zigzag_of_eqvGen_quot_rel
 
+end Final
+
 /-- If `colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit` for all `d : D`, then `F` is cofinal.
 -/
 theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
@@ -432,10 +432,30 @@ theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
       ext
     have t := Types.colimit_eq.{v, v} e
     clear e y₁ y₂
-    exact zigzag_of_eqvGen_quot_rel t⟩
-#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.Final.cofinal_of_colimit_comp_coyoneda_iso_pUnit
+    exact Final.zigzag_of_eqvGen_quot_rel t⟩
+#align category_theory.functor.final.cofinal_of_colimit_comp_coyoneda_iso_punit CategoryTheory.Functor.cofinal_of_colimit_comp_coyoneda_iso_pUnit
 
-end Final
+end LocallySmall
+
+section SmallCategory
+
+variable {C : Type v} [Category.{v} C] {D : Type v} [Category.{v} D] (F : C ⥤ D)
+
+/-- If the universal morphism `colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d))`
+is an isomorphism (as it always is when `F` is cofinal),
+then `colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit`
+(simply because `colimit (coyoneda.obj (op d)) ≅ PUnit`).
+-/
+def Final.colimitCompCoyonedaIso (d : D) [IsIso (colimit.pre (coyoneda.obj (op d)) F)] :
+    colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit :=
+  asIso (colimit.pre (coyoneda.obj (op d)) F) ≪≫ Coyoneda.colimitCoyonedaIso (op d)
+#align category_theory.functor.final.colimit_comp_coyoneda_iso CategoryTheory.Functor.Final.colimitCompCoyonedaIso
+
+theorem final_iff_isIso_colimit_pre : Final F ↔ ∀ G : D ⥤ Type v, IsIso (colimit.pre G F) :=
+  ⟨fun _ => inferInstance,
+   fun _ => cofinal_of_colimit_comp_coyoneda_iso_pUnit _ fun _ => Final.colimitCompCoyonedaIso _ _⟩
+
+end SmallCategory
 
 namespace Initial
 
@@ -654,6 +674,144 @@ end
 
 end Initial
 
+section
+
+variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
+variable {E : Type u₃} [Category.{v₃} E] (F : C ⥤ D) (G : D ⥤ E)
+
+/-- The hypotheses also imply that `G` is final, see `final_of_comp_full_faithful'`. -/
+theorem final_of_comp_full_faithful [Full G] [Faithful G] [Final (F ⋙ G)] : Final F where
+  out d :=
+    have := StructuredArrow.isEquivalencePost d F G
+    isConnected_of_equivalent (StructuredArrow.post d F G).asEquivalence.symm
+
+/-- The hypotheses also imply that `G` is initial, see `initial_of_comp_full_faithful'`. -/
+theorem initial_of_comp_full_faithful [Full G] [Faithful G] [Initial (F ⋙ G)] : Initial F where
+  out d :=
+    have := CostructuredArrow.isEquivalencePost d F G
+    isConnected_of_equivalent (CostructuredArrow.post F G d).asEquivalence.symm
+
+/-- See also the strictly more general `final_comp` below. -/
+theorem final_comp_equivalence [Final F] [IsEquivalence G] : Final (F ⋙ G) :=
+  let i : F ≅ (F ⋙ G) ⋙ G.inv := isoWhiskerLeft F IsEquivalence.unitIso
+  have : Final ((F ⋙ G) ⋙ G.inv) := final_of_natIso i
+  final_of_comp_full_faithful (F ⋙ G) G.inv
+
+/-- See also the strictly more general `initial_comp` below. -/
+theorem initial_comp_equivalence [Initial F] [IsEquivalence G] : Initial (F ⋙ G) :=
+  let i : F ≅ (F ⋙ G) ⋙ G.inv := isoWhiskerLeft F IsEquivalence.unitIso
+  have : Initial ((F ⋙ G) ⋙ G.inv) := initial_of_natIso i
+  initial_of_comp_full_faithful (F ⋙ G) G.inv
+
+/-- See also the strictly more general `final_comp` below. -/
+theorem final_equivalence_comp [IsEquivalence F] [Final G] : Final (F ⋙ G) where
+  out d :=
+    have := StructuredArrow.isEquivalencePre d F G
+    isConnected_of_equivalent (StructuredArrow.pre d F G).asEquivalence.symm
+
+/-- See also the strictly more general `inital_comp` below. -/
+theorem initial_equivalence_comp [IsEquivalence F] [Initial G] : Initial (F ⋙ G) where
+  out d :=
+    have := CostructuredArrow.isEquivalencePre F G d
+    isConnected_of_equivalent (CostructuredArrow.pre F G d).asEquivalence.symm
+
+/-- See also the strictly more general `final_of_final_comp` below. -/
+theorem final_of_equivalence_comp [IsEquivalence F] [Final (F ⋙ G)] : Final G where
+  out d :=
+    have := StructuredArrow.isEquivalencePre d F G
+    isConnected_of_equivalent (StructuredArrow.pre d F G).asEquivalence
+
+/-- See also the strictly more general `initial_of_initial_comp` below. -/
+theorem initial_of_equivalence_comp [IsEquivalence F] [Initial (F ⋙ G)] : Initial G where
+  out d :=
+    have := CostructuredArrow.isEquivalencePre F G d
+    isConnected_of_equivalent (CostructuredArrow.pre F G d).asEquivalence
+
+/-- See also the strictly more general `final_iff_comp_final_full_faithful` below. -/
+theorem final_iff_comp_equivalence [IsEquivalence G] : Final F ↔ Final (F ⋙ G) :=
+  ⟨fun _ => final_comp_equivalence _ _, fun _ => final_of_comp_full_faithful _ G⟩
+
+/-- See also the strictly more general `final_iff_final_comp` below. -/
+theorem final_iff_equivalence_comp [IsEquivalence F] : Final G ↔ Final (F ⋙ G) :=
+  ⟨fun _ => final_equivalence_comp _ _, fun _ => final_of_equivalence_comp F _⟩
+
+/-- See also the strictly more general `initial_iff_comp_initial_full_faithful` below. -/
+theorem initial_iff_comp_equivalence [IsEquivalence G] : Initial F ↔ Initial (F ⋙ G) :=
+  ⟨fun _ => initial_comp_equivalence _ _, fun _ => initial_of_comp_full_faithful _ G⟩
+
+/-- See also the strictly more general `initial_iff_initial_comp` below. -/
+theorem initial_iff_equivalence_comp [IsEquivalence F] : Initial G ↔ Initial (F ⋙ G) :=
+  ⟨fun _ => initial_equivalence_comp _ _, fun _ => initial_of_equivalence_comp F _⟩
+
+theorem final_comp [hF : Final F] [hG : Final G] : Final (F ⋙ G) := by
+  let s₁ : C ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} C := AsSmall.equiv
+  let s₂ : D ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} D := AsSmall.equiv
+  let s₃ : E ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} E := AsSmall.equiv
+  let i : s₁.inverse ⋙ (F ⋙ G) ⋙ s₃.functor ≅
+      (s₁.inverse ⋙ F ⋙ s₂.functor) ⋙ (s₂.inverse ⋙ G ⋙ s₃.functor) :=
+    isoWhiskerLeft (s₁.inverse ⋙ F) (isoWhiskerRight s₂.unitIso (G ⋙ s₃.functor))
+  rw [final_iff_comp_equivalence (F ⋙ G) s₃.functor, final_iff_equivalence_comp s₁.inverse,
+    final_natIso_iff i, final_iff_isIso_colimit_pre]
+  rw [final_iff_comp_equivalence F s₂.functor, final_iff_equivalence_comp s₁.inverse,
+    final_iff_isIso_colimit_pre] at hF
+  rw [final_iff_comp_equivalence G s₃.functor, final_iff_equivalence_comp s₂.inverse,
+    final_iff_isIso_colimit_pre] at hG
+  simp only [← colimit.pre_pre]
+  infer_instance
+
+theorem initial_comp [Initial F] [Initial G] : Initial (F ⋙ G) := by
+  suffices : Final (F ⋙ G).op
+  · exact initial_of_final_op _
+  exact final_comp F.op G.op
+
+theorem final_of_final_comp [hF : Final F] [hFG : Final (F ⋙ G)] : Final G := by
+  let s₁ : C ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} C := AsSmall.equiv
+  let s₂ : D ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} D := AsSmall.equiv
+  let s₃ : E ≌ AsSmall.{max u₁ v₁ u₂ v₂ u₃ v₃} E := AsSmall.equiv
+  let _i : s₁.inverse ⋙ (F ⋙ G) ⋙ s₃.functor ≅
+      (s₁.inverse ⋙ F ⋙ s₂.functor) ⋙ (s₂.inverse ⋙ G ⋙ s₃.functor) :=
+    isoWhiskerLeft (s₁.inverse ⋙ F) (isoWhiskerRight s₂.unitIso (G ⋙ s₃.functor))
+  rw [final_iff_comp_equivalence G s₃.functor, final_iff_equivalence_comp s₂.inverse,
+    final_iff_isIso_colimit_pre]
+  rw [final_iff_comp_equivalence F s₂.functor, final_iff_equivalence_comp s₁.inverse,
+    final_iff_isIso_colimit_pre] at hF
+  rw [final_iff_comp_equivalence (F ⋙ G) s₃.functor, final_iff_equivalence_comp s₁.inverse,
+    final_natIso_iff _i, final_iff_isIso_colimit_pre] at hFG
+  simp only [← colimit.pre_pre] at hFG
+  exact fun H => IsIso.of_isIso_comp_left (colimit.pre _ (s₁.inverse ⋙ F ⋙ s₂.functor)) _
+
+theorem initial_of_initial_comp [Initial F] [Initial (F ⋙ G)] : Initial G := by
+  suffices : Final G.op
+  · exact initial_of_final_op _
+  have : Final (F.op ⋙ G.op) := show Final (F ⋙ G).op from inferInstance
+  exact final_of_final_comp F.op G.op
+
+/-- The hypotheses also imply that `F` is final, see `final_of_comp_full_faithful`. -/
+theorem final_of_comp_full_faithful' [Full G] [Faithful G] [Final (F ⋙ G)] : Final G :=
+  have := final_of_comp_full_faithful F G
+  final_of_final_comp F G
+
+/-- The hypotheses also imply that `F` is initial, see `initial_of_comp_full_faithful`. -/
+theorem initial_of_comp_full_faithful' [Full G] [Faithful G] [Initial (F ⋙ G)] : Initial G :=
+  have := initial_of_comp_full_faithful F G
+  initial_of_initial_comp F G
+
+theorem final_iff_comp_final_full_faithful [Final G] [Full G] [Faithful G] :
+    Final F ↔ Final (F ⋙ G) :=
+  ⟨fun _ => final_comp _ _, fun _ => final_of_comp_full_faithful F G⟩
+
+theorem initial_iff_comp_initial_full_faithful [Initial G] [Full G] [Faithful G] :
+    Initial F ↔ Initial (F ⋙ G) :=
+  ⟨fun _ => initial_comp _ _, fun _ => initial_of_comp_full_faithful F G⟩
+
+theorem final_iff_final_comp [Final F] : Final G ↔ Final (F ⋙ G) :=
+  ⟨fun _ => final_comp _ _, fun _ => final_of_final_comp F G⟩
+
+theorem initial_iff_initial_comp [Initial F] : Initial G ↔ Initial (F ⋙ G) :=
+  ⟨fun _ => initial_comp _ _, fun _ => initial_of_initial_comp F G⟩
+
+end
+
 end Functor
 
 section Filtered
feat: finally small categories (#6264)
Diff
@@ -354,6 +354,9 @@ theorem hasColimit_of_comp [HasColimit (F ⋙ G)] : HasColimit G :=
   HasColimit.mk (colimitCoconeOfComp F (getColimitCocone (F ⋙ G)))
 #align category_theory.functor.final.has_colimit_of_comp CategoryTheory.Functor.Final.hasColimit_of_comp
 
+theorem hasColimitsOfShape_of_final [HasColimitsOfShape C E] : HasColimitsOfShape D E where
+  has_colimit := fun _ => hasColimit_of_comp F
+
 section
 
 -- porting note: this instance does not seem to be found automatically
@@ -627,6 +630,9 @@ theorem hasLimit_of_comp [HasLimit (F ⋙ G)] : HasLimit G :=
   HasLimit.mk (limitConeOfComp F (getLimitCone (F ⋙ G)))
 #align category_theory.functor.initial.has_limit_of_comp CategoryTheory.Functor.Initial.hasLimit_of_comp
 
+theorem hasLimitsOfShape_of_initial [HasLimitsOfShape C E] : HasLimitsOfShape D E where
+  has_limit := fun _ => hasLimit_of_comp F
+
 section
 
 -- porting note: this instance does not seem to be found automatically
feat: transfer Functor.Final across natural isomorphisms (#6232)
Diff
@@ -157,6 +157,12 @@ instance (priority := 100) initial_of_isLeftAdjoint (F : C ⥤ D) [h : IsLeftAdj
   initial_of_adjunction h.adj
 #align category_theory.functor.initial_of_is_left_adjoint CategoryTheory.Functor.initial_of_isLeftAdjoint
 
+theorem final_of_natIso {F F' : C ⥤ D} [Final F] (i : F ≅ F') : Final F' where
+  out _ := isConnected_of_equivalent (StructuredArrow.mapNatIso i)
+
+theorem initial_of_natIso {F F' : C ⥤ D} [Initial F] (i : F ≅ F') : Initial F' where
+  out _ := isConnected_of_equivalent (CostructuredArrow.mapNatIso i)
+
 namespace Final
 
 variable (F : C ⥤ D) [Final F]
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,11 +2,6 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.limits.final
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.PUnit
 import Mathlib.CategoryTheory.StructuredArrow
@@ -14,6 +9,8 @@ import Mathlib.CategoryTheory.IsConnected
 import Mathlib.CategoryTheory.Limits.Yoneda
 import Mathlib.CategoryTheory.Limits.Types
 
+#align_import category_theory.limits.final from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
+
 /-!
 # Final and initial functors
 
feat: more consistent use of ext, and updating porting notes. (#5242)

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

Diff
@@ -309,7 +309,7 @@ theorem colimit_pre_is_iso_aux {t : Cocone G} (P : IsColimit t) :
   dsimp [isColimitWhiskerEquiv]
   apply P.hom_ext
   intro j
-  dsimp; simp
+  simp
 #align category_theory.functor.final.colimit_pre_is_iso_aux CategoryTheory.Functor.Final.colimit_pre_is_iso_aux
 
 instance colimit_pre_isIso [HasColimit G] : IsIso (colimit.pre G F) := by
feat: final functors preserve filteredness (#4973)

Also generalize some facts about IsFiltered to IsFilteredOrEmpty.

Diff
@@ -647,4 +647,68 @@ end Initial
 
 end Functor
 
+section Filtered
+open Functor
+
+variable {C : Type u₁} [Category.{v₁} C]
+
+variable {D : Type u₂} [Category.{v₂} D]
+
+/-- Final functors preserve filteredness.
+
+This can be seen as a generalization of `IsFiltered.of_right_adjoint` (which states that right
+adjoints preserve filteredness), as right adjoints are always final, see `final_of_adjunction`.
+-/
+theorem IsFilteredOrEmpty.of_final (F : C ⥤ D) [Final F] [IsFilteredOrEmpty C] :
+    IsFilteredOrEmpty D where
+  cocone_objs X Y := ⟨F.obj (IsFiltered.max (Final.lift F X) (Final.lift F Y)),
+    Final.homToLift F X ≫ F.map (IsFiltered.leftToMax _ _),
+    ⟨Final.homToLift F Y ≫ F.map (IsFiltered.rightToMax _ _), trivial⟩⟩
+  cocone_maps {X Y} f g := by
+    let P : StructuredArrow X F → Prop := fun h => ∃ (Z : C) (q₁ : h.right ⟶ Z)
+      (q₂ : Final.lift F Y ⟶ Z), h.hom ≫ F.map q₁ = f ≫ Final.homToLift F Y ≫ F.map q₂
+    rsuffices ⟨Z, q₁, q₂, h⟩ : Nonempty (P (StructuredArrow.mk (g ≫ Final.homToLift F Y)))
+    · refine' ⟨F.obj (IsFiltered.coeq q₁ q₂),
+        Final.homToLift F Y ≫ F.map (q₁ ≫ IsFiltered.coeqHom q₁ q₂), _⟩
+      conv_lhs => rw [IsFiltered.coeq_condition]
+      simp only [F.map_comp, ← reassoc_of% h, StructuredArrow.mk_hom_eq_self, Category.assoc]
+    have h₀ : P (StructuredArrow.mk (f ≫ Final.homToLift F Y)) := ⟨_, 𝟙 _, 𝟙 _, by simp⟩
+    refine' isPreconnected_induction P _ _ h₀ _
+    · rintro U V h ⟨Z, q₁, q₂, hq⟩
+      obtain ⟨W, q₃, q₄, hq'⟩ := IsFiltered.span q₁ h.right
+      refine' ⟨W, q₄, q₂ ≫ q₃, _⟩
+      rw [F.map_comp, ← reassoc_of% hq, ← F.map_comp, hq', F.map_comp, StructuredArrow.w_assoc]
+    · rintro U V h ⟨Z, q₁, q₂, hq⟩
+      exact ⟨Z, h.right ≫ q₁, q₂, by simp only [F.map_comp, StructuredArrow.w_assoc, hq]⟩
+
+/-- Final functors preserve filteredness.
+
+This can be seen as a generalization of `IsFiltered.of_right_adjoint` (which states that right
+adjoints preserve filteredness), as right adjoints are always final, see `final_of_adjunction`.
+-/
+theorem IsFiltered.of_final (F : C ⥤ D) [Final F] [IsFiltered C] : IsFiltered D :=
+{ IsFilteredOrEmpty.of_final F with
+  Nonempty := Nonempty.map F.obj IsFiltered.Nonempty }
+
+/-- Initial functors preserve cofilteredness.
+
+This can be seen as a generalization of `IsCofiltered.of_left_adjoint` (which states that left
+adjoints preserve cofilteredness), as right adjoints are always initial, see `intial_of_adjunction`.
+-/
+theorem IsCofilteredOrEmpty.of_initial (F : C ⥤ D) [Initial F] [IsCofilteredOrEmpty C] :
+  IsCofilteredOrEmpty D :=
+  have : IsFilteredOrEmpty Dᵒᵖ := IsFilteredOrEmpty.of_final F.op
+  isCofilteredOrEmpty_of_isFilteredOrEmpty_op _
+
+/-- Initial functors preserve cofilteredness.
+
+This can be seen as a generalization of `IsCofiltered.of_left_adjoint` (which states that left
+adjoints preserve cofilteredness), as right adjoints are always initial, see `intial_of_adjunction`.
+-/
+theorem IsCofiltered.of_initial (F : C ⥤ D) [Initial F] [IsCofiltered C] : IsCofiltered D :=
+  have : IsFiltered Dᵒᵖ := IsFiltered.of_final F.op
+  isCofiltered_of_isFiltered_op _
+
+end Filtered
+
 end CategoryTheory
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -285,7 +285,7 @@ def isColimitWhiskerEquiv (t : Cocone G) : IsColimit (t.whisker F) ≃ IsColimit
 #align category_theory.functor.final.is_colimit_whisker_equiv CategoryTheory.Functor.Final.isColimitWhiskerEquiv
 
 /-- When `F` is cofinal, and `t : Cocone (F ⋙ G)`,
-`extendCocone.obj t` is a colimit coconne exactly when `t` is.
+`extendCocone.obj t` is a colimit cocone exactly when `t` is.
 -/
 def isColimitExtendCoconeEquiv (t : Cocone (F ⋙ G)) :
     IsColimit (extendCocone.obj t) ≃ IsColimit t :=
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
@@ -271,8 +271,8 @@ def coconesEquiv : Cocone (F ⋙ G) ≌ Cocone G
     where
   functor := extendCocone
   inverse := Cocones.whiskering F
-  unitIso := NatIso.ofComponents (fun c => Cocones.ext (Iso.refl _) (by aesop_cat)) (by aesop_cat)
-  counitIso := NatIso.ofComponents (fun c => Cocones.ext (Iso.refl _) (by aesop_cat)) (by aesop_cat)
+  unitIso := NatIso.ofComponents fun c => Cocones.ext (Iso.refl _)
+  counitIso := NatIso.ofComponents fun c => Cocones.ext (Iso.refl _)
 #align category_theory.functor.final.cocones_equiv CategoryTheory.Functor.Final.coconesEquiv
 
 variable {G}
@@ -397,7 +397,7 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
     fconstructor
     swap; fconstructor
     left; fconstructor
-    exact StructuredArrow.homMk f (by aesop_cat)
+    exact StructuredArrow.homMk f
   case refl => fconstructor
   case symm x y _ ih =>
     apply zigzag_symmetric
@@ -545,8 +545,8 @@ def conesEquiv : Cone (F ⋙ G) ≌ Cone G
     where
   functor := extendCone
   inverse := Cones.whiskering F
-  unitIso := NatIso.ofComponents (fun c => Cones.ext (Iso.refl _) (by aesop_cat)) (by aesop_cat)
-  counitIso := NatIso.ofComponents (fun c => Cones.ext (Iso.refl _) (by aesop_cat)) (by aesop_cat)
+  unitIso := NatIso.ofComponents fun c => Cones.ext (Iso.refl _)
+  counitIso := NatIso.ofComponents fun c => Cones.ext (Iso.refl _)
 #align category_theory.functor.initial.cones_equiv CategoryTheory.Functor.Initial.conesEquiv
 
 variable {G}
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
@@ -411,10 +411,8 @@ theorem zigzag_of_eqvGen_quot_rel {F : C ⥤ D} {d : D} {f₁ f₂ : ΣX, d ⟶
 -/
 theorem cofinal_of_colimit_comp_coyoneda_iso_pUnit
     (I : ∀ d, colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit) : Final F :=
-  ⟨fun d =>
-    by
-    have : Nonempty (StructuredArrow d F) :=
-      by
+  ⟨fun d => by
+    have : Nonempty (StructuredArrow d F) := by
       have := (I d).inv PUnit.unit
       obtain ⟨j, y, rfl⟩ := Limits.Types.jointly_surjective'.{v, v} this
       exact ⟨StructuredArrow.mk y⟩
feat: port CategoryTheory.Limits.Final (#2820)

Dependencies 2 + 239

240 files ported (99.2%)
100833 lines ported (99.9%)
Show graph

The unported dependencies are