category_theory.limits.final
⟷
Mathlib.CategoryTheory.Limits.Final
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -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₂) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
@@ -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
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>
@@ -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
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)
@@ -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.
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>
@@ -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 _
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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
@@ -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 :=
@@ -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 _ _⟩
@@ -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
@@ -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"
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>
@@ -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
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.
@@ -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.
@@ -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 _
@@ -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]
@@ -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 :=
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>
@@ -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
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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₂)
@@ -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
@@ -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
@@ -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]
@@ -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
@@ -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
Also generalize some facts about IsFiltered
to IsFilteredOrEmpty
.
@@ -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
@@ -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 :=
@@ -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}
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -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⟩
The unported dependencies are