category_theory.functor.flatMathlib.CategoryTheory.Functor.Flat

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -198,12 +198,12 @@ variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₁} D]
 
 attribute [local instance] has_finite_limits_of_has_finite_limits_of_size
 
-#print CategoryTheory.cofiltered_of_hasFiniteLimits /-
-theorem cofiltered_of_hasFiniteLimits [HasFiniteLimits C] : IsCofiltered C :=
+#print CategoryTheory.IsCofiltered.of_hasFiniteLimits /-
+theorem CategoryTheory.IsCofiltered.of_hasFiniteLimits [HasFiniteLimits C] : IsCofiltered C :=
   { cone_objs := fun A B => ⟨Limits.prod A B, Limits.prod.fst, Limits.prod.snd, trivial⟩
     cone_maps := fun A B f g => ⟨equalizer f g, equalizer.ι f g, equalizer.condition f g⟩
     Nonempty := ⟨⊤_ C⟩ }
-#align category_theory.cofiltered_of_has_finite_limits CategoryTheory.cofiltered_of_hasFiniteLimits
+#align category_theory.cofiltered_of_has_finite_limits CategoryTheory.IsCofiltered.of_hasFiniteLimits
 -/
 
 #print CategoryTheory.flat_of_preservesFiniteLimits /-
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
-import Mathbin.CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
-import Mathbin.CategoryTheory.Limits.Preserves.FunctorCategory
-import Mathbin.CategoryTheory.Limits.Bicones
-import Mathbin.CategoryTheory.Limits.Comma
-import Mathbin.CategoryTheory.Limits.Preserves.Finite
-import Mathbin.CategoryTheory.Limits.Shapes.FiniteLimits
+import CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
+import CategoryTheory.Limits.Preserves.FunctorCategory
+import CategoryTheory.Limits.Bicones
+import CategoryTheory.Limits.Comma
+import CategoryTheory.Limits.Preserves.Finite
+import CategoryTheory.Limits.Shapes.FiniteLimits
 
 #align_import category_theory.functor.flat from "leanprover-community/mathlib"@"a2706b55e8d7f7e9b1f93143f0b88f2e34a11eea"
 
Diff
@@ -65,7 +65,6 @@ variable {J : Type w} [SmallCategory J]
 
 variable {K : J ⥤ C} (F : C ⥤ D) (c : Cone K)
 
-#print CategoryTheory.StructuredArrowCone.toDiagram /-
 /-- Given a cone `c : cone K` and a map `f : X ⟶ c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point. This is the underlying diagram.
 -/
@@ -75,29 +74,30 @@ def toDiagram : J ⥤ StructuredArrow c.pt K
   obj j := StructuredArrow.mk (c.π.app j)
   map j k g := StructuredArrow.homMk g (by simpa)
 #align category_theory.structured_arrow_cone.to_diagram CategoryTheory.StructuredArrowCone.toDiagram
--/
 
-#print CategoryTheory.StructuredArrowCone.diagramToCone /-
+#print CategoryTheory.Limits.Cone.fromStructuredArrow /-
 /-- Given a diagram of `structured_arrow X F`s, we may obtain a cone with cone point `X`. -/
 @[simps]
-def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F ⋙ F) :=
+def CategoryTheory.Limits.Cone.fromStructuredArrow {X : D} (G : J ⥤ StructuredArrow X F) :
+    Cone (G ⋙ proj X F ⋙ F) :=
   { pt
     π := { app := fun j => (G.obj j).Hom } }
-#align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
+#align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.Limits.Cone.fromStructuredArrow
 -/
 
-#print CategoryTheory.StructuredArrowCone.toCone /-
+#print CategoryTheory.Limits.Cone.toStructuredArrowCone /-
 /-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point.
 -/
 @[simps]
-def toCone {X : D} (f : X ⟶ F.obj c.pt) : Cone (toDiagram (F.mapCone c) ⋙ map f ⋙ pre _ K F)
+def CategoryTheory.Limits.Cone.toStructuredArrowCone {X : D} (f : X ⟶ F.obj c.pt) :
+    Cone (toDiagram (F.mapCone c) ⋙ map f ⋙ pre _ K F)
     where
   pt := mk f
   π :=
     { app := fun j => homMk (c.π.app j) rfl
       naturality' := fun j k g => by ext; dsimp; simp }
-#align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toCone
+#align category_theory.structured_arrow_cone.to_cone CategoryTheory.Limits.Cone.toStructuredArrowCone
 -/
 
 end StructuredArrowCone
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.functor.flat
-! leanprover-community/mathlib commit a2706b55e8d7f7e9b1f93143f0b88f2e34a11eea
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
 import Mathbin.CategoryTheory.Limits.Preserves.FunctorCategory
@@ -15,6 +10,8 @@ import Mathbin.CategoryTheory.Limits.Comma
 import Mathbin.CategoryTheory.Limits.Preserves.Finite
 import Mathbin.CategoryTheory.Limits.Shapes.FiniteLimits
 
+#align_import category_theory.functor.flat from "leanprover-community/mathlib"@"a2706b55e8d7f7e9b1f93143f0b88f2e34a11eea"
+
 /-!
 # Representably flat functors
 
Diff
@@ -89,6 +89,7 @@ def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F
 #align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
 -/
 
+#print CategoryTheory.StructuredArrowCone.toCone /-
 /-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point.
 -/
@@ -100,6 +101,7 @@ def toCone {X : D} (f : X ⟶ F.obj c.pt) : Cone (toDiagram (F.mapCone c) ⋙ ma
     { app := fun j => homMk (c.π.app j) rfl
       naturality' := fun j k g => by ext; dsimp; simp }
 #align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toCone
+-/
 
 end StructuredArrowCone
 
@@ -229,8 +231,7 @@ variable {J : Type v₁} [SmallCategory J] [FinCategory J] {K : J ⥤ C}
 
 variable (F : C ⥤ D) [RepresentablyFlat F] {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
 
-include hc
-
+#print CategoryTheory.PreservesFiniteLimitsOfFlat.lift /-
 /-- (Implementation).
 Given a limit cone `c : cone K` and a cone `s : cone (K ⋙ F)` with `F` representably flat,
 `s` can factor through `F.map_cone c`.
@@ -245,13 +246,17 @@ noncomputable def lift : s.pt ⟶ F.obj c.pt :=
                   naturality' := by simp } : (toDiagram s ⋙ pre s.pt K F) ⋙ proj s.pt F ⟶ K)).obj <|
           (StructuredArrow.proj s.pt F).mapCone s')
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
+-/
 
+#print CategoryTheory.PreservesFiniteLimitsOfFlat.fac /-
 theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
   simpa [lift, ← functor.map_comp]
 #align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.fac
+-/
 
 attribute [local simp] eq_to_hom_map
 
+#print CategoryTheory.PreservesFiniteLimitsOfFlat.uniq /-
 theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ :=
@@ -294,6 +299,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     _ = 𝟙 _ ≫ f₂ := g₂.w.symm
     _ = f₂ := by simp
 #align category_theory.preserves_finite_limits_of_flat.uniq CategoryTheory.PreservesFiniteLimitsOfFlat.uniq
+-/
 
 end PreservesFiniteLimitsOfFlat
 
@@ -338,6 +344,7 @@ section SmallCategory
 
 variable {C D : Type u₁} [SmallCategory C] [SmallCategory D] (E : Type u₂) [Category.{u₁} E]
 
+#print CategoryTheory.lanEvaluationIsoColim /-
 /-- (Implementation)
 The evaluation of `Lan F` at `X` is the colimit over the costructured arrows over `X`.
 -/
@@ -357,6 +364,7 @@ noncomputable def lanEvaluationIsoColim (F : C ⥤ D) (X : D)
       congr
       rw [costructured_arrow.map_mk, category.id_comp, costructured_arrow.mk])
 #align category_theory.Lan_evaluation_iso_colim CategoryTheory.lanEvaluationIsoColim
+-/
 
 variable [ConcreteCategory.{u₁} E] [HasLimits E] [HasColimits E]
 
Diff
@@ -286,7 +286,6 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     g₁.right = hc.lift (c.extend g₁.right) := by apply hc.uniq (c.extend _); tidy
     _ = hc.lift (c.extend g₂.right) := by congr; exact this
     _ = g₂.right := by symm; apply hc.uniq (c.extend _); tidy
-    
   -- Finally, since `fᵢ` factors through `F(gᵢ)`, the result follows.
   calc
     f₁ = 𝟙 _ ≫ f₁ := by simp
@@ -294,7 +293,6 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     _ = c₀.X.hom ≫ F.map g₂.right := by rw [this]
     _ = 𝟙 _ ≫ f₂ := g₂.w.symm
     _ = f₂ := by simp
-    
 #align category_theory.preserves_finite_limits_of_flat.uniq CategoryTheory.PreservesFiniteLimitsOfFlat.uniq
 
 end PreservesFiniteLimitsOfFlat
Diff
@@ -284,7 +284,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
   have : g₁.right = g₂.right
   calc
     g₁.right = hc.lift (c.extend g₁.right) := by apply hc.uniq (c.extend _); tidy
-    _ = hc.lift (c.extend g₂.right) := by congr ; exact this
+    _ = hc.lift (c.extend g₂.right) := by congr; exact this
     _ = g₂.right := by symm; apply hc.uniq (c.extend _); tidy
     
   -- Finally, since `fᵢ` factors through `F(gᵢ)`, the result follows.
@@ -410,7 +410,7 @@ theorem flat_iff_lan_flat (F : C ⥤ D) :
     haveI : preserves_finite_limits F :=
       by
       apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-      intros ; skip; apply preserves_limit_of_Lan_preserves_limit
+      intros; skip; apply preserves_limit_of_Lan_preserves_limit
     apply flat_of_preserves_finite_limits⟩
 #align category_theory.flat_iff_Lan_flat CategoryTheory.flat_iff_lan_flat
 -/
@@ -425,7 +425,7 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
   toFun _ := inferInstance
   invFun _ := by
     apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-    intros ; skip; apply preserves_limit_of_Lan_preserves_limit
+    intros; skip; apply preserves_limit_of_Lan_preserves_limit
   left_inv x := by
     cases x; unfold preserves_finite_limits_of_flat
     dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]; congr
@@ -433,8 +433,8 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
     cases x
     unfold preserves_finite_limits_of_flat
     congr
-    unfold
-      CategoryTheory.lanPreservesFiniteLimitsOfPreservesFiniteLimits CategoryTheory.lanPreservesFiniteLimitsOfFlat
+    unfold CategoryTheory.lanPreservesFiniteLimitsOfPreservesFiniteLimits
+      CategoryTheory.lanPreservesFiniteLimitsOfFlat
     dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]; congr
 #align category_theory.preserves_finite_limits_iff_Lan_preserves_finite_limits CategoryTheory.preservesFiniteLimitsIffLanPreservesFiniteLimits
 -/
Diff
@@ -89,9 +89,6 @@ def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F
 #align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
 -/
 
-/- warning: category_theory.structured_arrow_cone.to_cone -> CategoryTheory.StructuredArrowCone.toCone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toConeₓ'. -/
 /-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point.
 -/
@@ -234,12 +231,6 @@ variable (F : C ⥤ D) [RepresentablyFlat F] {c : Cone K} (hc : IsLimit c) (s :
 
 include hc
 
-/- warning: category_theory.preserves_finite_limits_of_flat.lift -> CategoryTheory.PreservesFiniteLimitsOfFlat.lift is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)), Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)), Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)))
-Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.liftₓ'. -/
 /-- (Implementation).
 Given a limit cone `c : cone K` and a cone `s : cone (K ⋙ F)` with `F` representably flat,
 `s` can factor through `F.map_cone c`.
@@ -255,18 +246,12 @@ noncomputable def lift : s.pt ⟶ F.obj c.pt :=
           (StructuredArrow.proj s.pt F).mapCone s')
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
 
-/- warning: category_theory.preserves_finite_limits_of_flat.fac -> CategoryTheory.PreservesFiniteLimitsOfFlat.fac is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.facₓ'. -/
 theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
   simpa [lift, ← functor.map_comp]
 #align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.fac
 
 attribute [local simp] eq_to_hom_map
 
-/- warning: category_theory.preserves_finite_limits_of_flat.uniq -> CategoryTheory.PreservesFiniteLimitsOfFlat.uniq is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.uniq CategoryTheory.PreservesFiniteLimitsOfFlat.uniqₓ'. -/
 theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ :=
@@ -355,9 +340,6 @@ section SmallCategory
 
 variable {C D : Type u₁} [SmallCategory C] [SmallCategory D] (E : Type u₂) [Category.{u₁} E]
 
-/- warning: category_theory.Lan_evaluation_iso_colim -> CategoryTheory.lanEvaluationIsoColim is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.Lan_evaluation_iso_colim CategoryTheory.lanEvaluationIsoColimₓ'. -/
 /-- (Implementation)
 The evaluation of `Lan F` at `X` is the colimit over the costructured arrows over `X`.
 -/
Diff
@@ -101,10 +101,7 @@ def toCone {X : D} (f : X ⟶ F.obj c.pt) : Cone (toDiagram (F.mapCone c) ⋙ ma
   pt := mk f
   π :=
     { app := fun j => homMk (c.π.app j) rfl
-      naturality' := fun j k g => by
-        ext
-        dsimp
-        simp }
+      naturality' := fun j k g => by ext; dsimp; simp }
 #align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toCone
 
 end StructuredArrowCone
@@ -277,14 +274,10 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
   -- We can make two cones over the diagram of `s` via `f₁` and `f₂`.
   let α₁ : to_diagram (F.map_cone c) ⋙ map f₁ ⟶ to_diagram s :=
     { app := fun X => eq_to_hom (by simp [← h₁])
-      naturality' := fun _ _ _ => by
-        ext
-        simp }
+      naturality' := fun _ _ _ => by ext; simp }
   let α₂ : to_diagram (F.map_cone c) ⋙ map f₂ ⟶ to_diagram s :=
     { app := fun X => eq_to_hom (by simp [← h₂])
-      naturality' := fun _ _ _ => by
-        ext
-        simp }
+      naturality' := fun _ _ _ => by ext; simp }
   let c₁ : cone (to_diagram s ⋙ pre s.X K F) :=
     (cones.postcompose (whisker_right α₁ (pre s.X K F) : _)).obj (to_cone F c f₁)
   let c₂ : cone (to_diagram s ⋙ pre s.X K F) :=
@@ -301,26 +294,13 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     injection c₀.π.naturality (bicone_hom.left j) with _ e₁
     injection c₀.π.naturality (bicone_hom.right j) with _ e₂
     simpa using e₁.symm.trans e₂
-  have : c.extend g₁.right = c.extend g₂.right :=
-    by
-    unfold cone.extend
-    congr 1
-    ext x
-    apply this
+  have : c.extend g₁.right = c.extend g₂.right := by unfold cone.extend; congr 1; ext x; apply this
   -- And thus they are equal as `c` is the limit.
   have : g₁.right = g₂.right
   calc
-    g₁.right = hc.lift (c.extend g₁.right) :=
-      by
-      apply hc.uniq (c.extend _)
-      tidy
-    _ = hc.lift (c.extend g₂.right) := by
-      congr
-      exact this
-    _ = g₂.right := by
-      symm
-      apply hc.uniq (c.extend _)
-      tidy
+    g₁.right = hc.lift (c.extend g₁.right) := by apply hc.uniq (c.extend _); tidy
+    _ = hc.lift (c.extend g₂.right) := by congr ; exact this
+    _ = g₂.right := by symm; apply hc.uniq (c.extend _); tidy
     
   -- Finally, since `fᵢ` factors through `F(gᵢ)`, the result follows.
   calc
@@ -364,10 +344,8 @@ noncomputable def preservesFiniteLimitsIffFlat [HasFiniteLimits C] (F : C ⥤ D)
   invFun _ := flat_of_preserves_finite_limits F
   left_inv _ := proof_irrel _ _
   right_inv x := by
-    cases x
-    unfold preserves_finite_limits_of_flat
-    dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]
-    congr
+    cases x; unfold preserves_finite_limits_of_flat
+    dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]; congr
 #align category_theory.preserves_finite_limits_iff_flat CategoryTheory.preservesFiniteLimitsIffFlat
 -/
 
Diff
@@ -90,10 +90,7 @@ def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F
 -/
 
 /- warning: category_theory.structured_arrow_cone.to_cone -> CategoryTheory.StructuredArrowCone.toCone is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] {K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u2, u2, u3, u4} C _inst_1 D _inst_2) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_3 C _inst_1 K) {X : D} (f : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) X (CategoryTheory.Functor.obj.{u2, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u3} J _inst_3 C _inst_1 K c))), CategoryTheory.Limits.Cone.{u1, u2, u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.Functor.comp.{u1, max u2 u1, u2, u1, max u1 u2, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrowCone.toDiagram.{u1, u2, u4} D _inst_2 J _inst_3 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, u2, max u1 u2, max u1 u2, max u3 u2} (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.map.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) f) (CategoryTheory.StructuredArrow.pre.{u2, u2, u1, u3, u4, u1} C _inst_1 D _inst_2 J _inst_3 X K F)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] {K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u2, u2, u3, u4} C _inst_1 D _inst_2) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_3 C _inst_1 K) {X : D} (f : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) X (Prefunctor.obj.{succ u2, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u3} J _inst_3 C _inst_1 K c))), CategoryTheory.Limits.Cone.{u1, u2, u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.Functor.comp.{u1, max u2 u1, u2, u1, max u2 u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrowCone.toDiagram.{u1, u2, u4} D _inst_2 J _inst_3 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, u2, max u2 u1, max u2 u1, max u3 u2} (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.map.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) f) (CategoryTheory.StructuredArrow.pre.{u2, u2, u1, u3, u4, u1} C _inst_1 D _inst_2 J _inst_3 X K F)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toConeₓ'. -/
 /-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point.
@@ -262,10 +259,7 @@ noncomputable def lift : s.pt ⟶ F.obj c.pt :=
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
 
 /- warning: category_theory.preserves_finite_limits_of_flat.fac -> CategoryTheory.PreservesFiniteLimitsOfFlat.fac is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K} (hc : CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (x : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) x)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) x) (CategoryTheory.PreservesFiniteLimitsOfFlat.lift.{u1, u2, u3} C _inst_1 D _inst_2 J _inst_3 _inst_4 K F _inst_5 c hc s) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) x)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) x)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K} (hc : CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (x : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) x)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) x) (CategoryTheory.PreservesFiniteLimitsOfFlat.lift.{u1, u2, u3} C _inst_1 D _inst_2 J _inst_3 _inst_4 K F _inst_5 c hc s) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) x)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) x)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.facₓ'. -/
 theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
   simpa [lift, ← functor.map_comp]
@@ -274,10 +268,7 @@ theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
 attribute [local simp] eq_to_hom_map
 
 /- warning: category_theory.preserves_finite_limits_of_flat.uniq -> CategoryTheory.PreservesFiniteLimitsOfFlat.uniq is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (f₁ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) (f₂ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))), (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j) f₁ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j) f₂ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) f₁ f₂))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (f₁ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) (f₂ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))), (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j) f₁ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j) f₂ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) f₁ f₂))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.uniq CategoryTheory.PreservesFiniteLimitsOfFlat.uniqₓ'. -/
 theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
@@ -387,10 +378,7 @@ section SmallCategory
 variable {C D : Type u₁} [SmallCategory C] [SmallCategory D] (E : Type u₂) [Category.{u₁} E]
 
 /- warning: category_theory.Lan_evaluation_iso_colim -> CategoryTheory.lanEvaluationIsoColim is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} {D : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] [_inst_2 : CategoryTheory.SmallCategory.{u1} D] (E : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} E] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (X : D) [_inst_4 : forall (X : D), CategoryTheory.Limits.HasColimitsOfShape.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3], CategoryTheory.Iso.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3 (CategoryTheory.lan.{u1, u1, u1, u1, u1, u2} C D E _inst_1 _inst_2 _inst_3 F (CategoryTheory.lanEvaluationIsoColim._proof_1.{u1, u2} C D _inst_1 _inst_2 E _inst_3 F _inst_4)) (CategoryTheory.Functor.obj.{u1, max u1 u2, u1, max u1 u2} D _inst_2 (CategoryTheory.Functor.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.evaluation.{u1, u1, u1, u2} D _inst_2 E _inst_3) X)) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) E _inst_3 (CategoryTheory.Functor.obj.{u1, max u1 u2, u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.whiskeringLeft.{u1, u1, u1, u1, u2, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1 E _inst_3) (CategoryTheory.CostructuredArrow.proj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) (CategoryTheory.Limits.colim.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3 (_inst_4 X)))
-but is expected to have type
-  forall {C : Type.{u1}} {D : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] [_inst_2 : CategoryTheory.SmallCategory.{u1} D] (E : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} E] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (X : D) [_inst_4 : forall (X : D), CategoryTheory.Limits.HasColimitsOfShape.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3], CategoryTheory.Iso.{max u1 u2, max u2 u1} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.comp.{u1, u1, u1, max u2 u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3 (CategoryTheory.lan.{u1, u1, u1, u1, u1, u2} C D E _inst_1 _inst_2 _inst_3 F (fun (X : D) => _inst_4 X)) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u1, max u1 u2} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, max u1 u2, u1, max u1 u2} D _inst_2 (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.evaluation.{u1, u1, u1, u2} D _inst_2 E _inst_3)) X)) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) E _inst_3 (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1))) (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)))) (CategoryTheory.Functor.toPrefunctor.{u1, max u1 u2, u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.whiskeringLeft.{u1, u1, u1, u1, u2, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1 E _inst_3)) (CategoryTheory.CostructuredArrow.proj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) (CategoryTheory.Limits.colim.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3 (_inst_4 X)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.Lan_evaluation_iso_colim CategoryTheory.lanEvaluationIsoColimₓ'. -/
 /-- (Implementation)
 The evaluation of `Lan F` at `X` is the colimit over the costructured arrows over `X`.
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 
 ! This file was ported from Lean 3 source module category_theory.functor.flat
-! leanprover-community/mathlib commit 39478763114722f0ec7613cb2f3f7701f9b86c8d
+! leanprover-community/mathlib commit a2706b55e8d7f7e9b1f93143f0b88f2e34a11eea
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -18,6 +18,9 @@ import Mathbin.CategoryTheory.Limits.Shapes.FiniteLimits
 /-!
 # Representably flat functors
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 We define representably flat functors as functors such that the category of structured arrows
 over `X` is cofiltered for each `X`. This concept is also known as flat functors as in [Elephant]
 Remark C2.3.7, and this name is suggested by Mike Shulman in
Diff
@@ -65,6 +65,7 @@ variable {J : Type w} [SmallCategory J]
 
 variable {K : J ⥤ C} (F : C ⥤ D) (c : Cone K)
 
+#print CategoryTheory.StructuredArrowCone.toDiagram /-
 /-- Given a cone `c : cone K` and a map `f : X ⟶ c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point. This is the underlying diagram.
 -/
@@ -74,14 +75,23 @@ def toDiagram : J ⥤ StructuredArrow c.pt K
   obj j := StructuredArrow.mk (c.π.app j)
   map j k g := StructuredArrow.homMk g (by simpa)
 #align category_theory.structured_arrow_cone.to_diagram CategoryTheory.StructuredArrowCone.toDiagram
+-/
 
+#print CategoryTheory.StructuredArrowCone.diagramToCone /-
 /-- Given a diagram of `structured_arrow X F`s, we may obtain a cone with cone point `X`. -/
 @[simps]
 def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F ⋙ F) :=
   { pt
     π := { app := fun j => (G.obj j).Hom } }
 #align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
+-/
 
+/- warning: category_theory.structured_arrow_cone.to_cone -> CategoryTheory.StructuredArrowCone.toCone is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] {K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u2, u2, u3, u4} C _inst_1 D _inst_2) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_3 C _inst_1 K) {X : D} (f : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) X (CategoryTheory.Functor.obj.{u2, u2, u3, u4} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u3} J _inst_3 C _inst_1 K c))), CategoryTheory.Limits.Cone.{u1, u2, u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.Functor.comp.{u1, max u2 u1, u2, u1, max u1 u2, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrowCone.toDiagram.{u1, u2, u4} D _inst_2 J _inst_3 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, u2, max u1 u2, max u1 u2, max u3 u2} (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.category.{u2, u4, u1, u1} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.category.{u2, u4, u3, u2} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.map.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) f) (CategoryTheory.StructuredArrow.pre.{u2, u2, u1, u3, u4, u1} C _inst_1 D _inst_2 J _inst_3 X K F)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] {K : CategoryTheory.Functor.{u1, u2, u1, u3} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u2, u2, u3, u4} C _inst_1 D _inst_2) (c : CategoryTheory.Limits.Cone.{u1, u2, u1, u3} J _inst_3 C _inst_1 K) {X : D} (f : Quiver.Hom.{succ u2, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) X (Prefunctor.obj.{succ u2, succ u2, u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u3, u4} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u3} J _inst_3 C _inst_1 K c))), CategoryTheory.Limits.Cone.{u1, u2, u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.Functor.comp.{u1, max u2 u1, u2, u1, max u2 u1, max u3 u2} J _inst_3 (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrowCone.toDiagram.{u1, u2, u4} D _inst_2 J _inst_3 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, u2, max u2 u1, max u2 u1, max u3 u2} (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.instCategoryStructuredArrow.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F)) (CategoryTheory.StructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.instCategoryStructuredArrow.{u2, u2, u3, u4} C _inst_1 D _inst_2 X F) (CategoryTheory.StructuredArrow.map.{u1, u2, u1, u4} J _inst_3 D _inst_2 X (CategoryTheory.Limits.Cone.pt.{u1, u2, u1, u4} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 F K c)) (CategoryTheory.Functor.comp.{u1, u2, u2, u1, u3, u4} J _inst_3 C _inst_1 D _inst_2 K F) f) (CategoryTheory.StructuredArrow.pre.{u2, u2, u1, u3, u4, u1} C _inst_1 D _inst_2 J _inst_3 X K F)))
+Case conversion may be inaccurate. Consider using '#align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toConeₓ'. -/
 /-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
 arrows over `X` with `f` as the cone point.
 -/
@@ -105,17 +115,20 @@ variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
 
 variable {E : Type u₃} [Category.{v₃} E]
 
+#print CategoryTheory.RepresentablyFlat /-
 /-- A functor `F : C ⥤ D` is representably-flat functor if the comma category `(X/F)`
 is cofiltered for each `X : C`.
 -/
 class RepresentablyFlat (F : C ⥤ D) : Prop where
   cofiltered : ∀ X : D, IsCofiltered (StructuredArrow X F)
 #align category_theory.representably_flat CategoryTheory.RepresentablyFlat
+-/
 
 attribute [instance] representably_flat.cofiltered
 
 attribute [local instance] is_cofiltered.nonempty
 
+#print CategoryTheory.RepresentablyFlat.id /-
 instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) :=
   by
   constructor
@@ -134,7 +147,9 @@ instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) :=
     ext
     trans Z.hom <;> simp
 #align category_theory.representably_flat.id CategoryTheory.RepresentablyFlat.id
+-/
 
+#print CategoryTheory.RepresentablyFlat.comp /-
 instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F]
     [RepresentablyFlat G] : RepresentablyFlat (F ⋙ G) :=
   by
@@ -180,6 +195,7 @@ instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F
     ext
     exact (congr_arg comma_morphism.right h'_cond : _)
 #align category_theory.representably_flat.comp CategoryTheory.RepresentablyFlat.comp
+-/
 
 end RepresentablyFlat
 
@@ -189,12 +205,15 @@ variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₁} D]
 
 attribute [local instance] has_finite_limits_of_has_finite_limits_of_size
 
+#print CategoryTheory.cofiltered_of_hasFiniteLimits /-
 theorem cofiltered_of_hasFiniteLimits [HasFiniteLimits C] : IsCofiltered C :=
   { cone_objs := fun A B => ⟨Limits.prod A B, Limits.prod.fst, Limits.prod.snd, trivial⟩
     cone_maps := fun A B f g => ⟨equalizer f g, equalizer.ι f g, equalizer.condition f g⟩
     Nonempty := ⟨⊤_ C⟩ }
 #align category_theory.cofiltered_of_has_finite_limits CategoryTheory.cofiltered_of_hasFiniteLimits
+-/
 
+#print CategoryTheory.flat_of_preservesFiniteLimits /-
 theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [PreservesFiniteLimits F] :
     RepresentablyFlat F :=
   ⟨fun X =>
@@ -204,6 +223,7 @@ theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [Preserv
       intro J sJ fJ; skip; constructor
     cofiltered_of_has_finite_limits⟩
 #align category_theory.flat_of_preserves_finite_limits CategoryTheory.flat_of_preservesFiniteLimits
+-/
 
 namespace PreservesFiniteLimitsOfFlat
 
@@ -217,6 +237,12 @@ variable (F : C ⥤ D) [RepresentablyFlat F] {c : Cone K} (hc : IsLimit c) (s :
 
 include hc
 
+/- warning: category_theory.preserves_finite_limits_of_flat.lift -> CategoryTheory.PreservesFiniteLimitsOfFlat.lift is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)), Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)), Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)))
+Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.liftₓ'. -/
 /-- (Implementation).
 Given a limit cone `c : cone K` and a cone `s : cone (K ⋙ F)` with `F` representably flat,
 `s` can factor through `F.map_cone c`.
@@ -232,12 +258,24 @@ noncomputable def lift : s.pt ⟶ F.obj c.pt :=
           (StructuredArrow.proj s.pt F).mapCone s')
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
 
+/- warning: category_theory.preserves_finite_limits_of_flat.fac -> CategoryTheory.PreservesFiniteLimitsOfFlat.fac is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K} (hc : CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (x : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) x)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) x) (CategoryTheory.PreservesFiniteLimitsOfFlat.lift.{u1, u2, u3} C _inst_1 D _inst_2 J _inst_3 _inst_4 K F _inst_5 c hc s) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) x)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) x)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K} (hc : CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (x : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) x)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) x) (CategoryTheory.PreservesFiniteLimitsOfFlat.lift.{u1, u2, u3} C _inst_1 D _inst_2 J _inst_3 _inst_4 K F _inst_5 c hc s) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) x)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) x)
+Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.facₓ'. -/
 theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
   simpa [lift, ← functor.map_comp]
 #align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.fac
 
 attribute [local simp] eq_to_hom_map
 
+/- warning: category_theory.preserves_finite_limits_of_flat.uniq -> CategoryTheory.PreservesFiniteLimitsOfFlat.uniq is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (f₁ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) (f₂ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))), (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j) f₁ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (CategoryTheory.Functor.obj.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) j) f₂ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.obj.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (CategoryTheory.Functor.obj.{u1, u1, u2, u3} C _inst_1 D _inst_2 F (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) f₁ f₂))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u1, u3} D] {J : Type.{u1}} [_inst_3 : CategoryTheory.SmallCategory.{u1} J] [_inst_4 : CategoryTheory.FinCategory.{u1} J _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u3} C _inst_1 D _inst_2) [_inst_5 : CategoryTheory.RepresentablyFlat.{u1, u1, u2, u3} C _inst_1 D _inst_2 F] {K : CategoryTheory.Functor.{u1, u1, u1, u2} J _inst_3 C _inst_1} {c : CategoryTheory.Limits.Cone.{u1, u1, u1, u2} J _inst_3 C _inst_1 K}, (CategoryTheory.Limits.IsLimit.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c) -> (forall (s : CategoryTheory.Limits.Cone.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) (f₁ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) (f₂ : Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))), (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j) f₁ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (forall (j : J), Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j)) (CategoryTheory.CategoryStruct.comp.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c)) (Prefunctor.obj.{succ u1, succ u1, u1, u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_3)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F)) j) f₂ (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c))) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Functor.mapCone.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 F K c)) j)) (CategoryTheory.NatTrans.app.{u1, u1, u1, u3} J _inst_3 D _inst_2 (Prefunctor.obj.{succ u1, succ u1, u3, max u1 u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u1 u3} (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u3, max u1 u3} D _inst_2 (CategoryTheory.Functor.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.category.{u1, u1, u1, u3} J _inst_3 D _inst_2) (CategoryTheory.Functor.const.{u1, u1, u1, u3} J _inst_3 D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s)) (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) (CategoryTheory.Limits.Cone.π.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) j)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u3} J _inst_3 D _inst_2 (CategoryTheory.Functor.comp.{u1, u1, u1, u1, u2, u3} J _inst_3 C _inst_1 D _inst_2 K F) s) (Prefunctor.obj.{succ u1, succ u1, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} D (CategoryTheory.Category.toCategoryStruct.{u1, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u3} C _inst_1 D _inst_2 F) (CategoryTheory.Limits.Cone.pt.{u1, u1, u1, u2} J _inst_3 C _inst_1 K c))) f₁ f₂))
+Case conversion may be inaccurate. Consider using '#align category_theory.preserves_finite_limits_of_flat.uniq CategoryTheory.PreservesFiniteLimitsOfFlat.uniqₓ'. -/
 theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ :=
@@ -302,6 +340,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
 
 end PreservesFiniteLimitsOfFlat
 
+#print CategoryTheory.preservesFiniteLimitsOfFlat /-
 /-- Representably flat functors preserve finite limits. -/
 noncomputable def preservesFiniteLimitsOfFlat (F : C ⥤ D) [RepresentablyFlat F] :
     PreservesFiniteLimits F :=
@@ -318,7 +357,9 @@ noncomputable def preservesFiniteLimitsOfFlat (F : C ⥤ D) [RepresentablyFlat F
         exact h
         exact preserves_finite_limits_of_flat.fac F hc s }
 #align category_theory.preserves_finite_limits_of_flat CategoryTheory.preservesFiniteLimitsOfFlat
+-/
 
+#print CategoryTheory.preservesFiniteLimitsIffFlat /-
 /-- If `C` is finitely cocomplete, then `F : C ⥤ D` is representably flat iff it preserves
 finite limits.
 -/
@@ -334,6 +375,7 @@ noncomputable def preservesFiniteLimitsIffFlat [HasFiniteLimits C] (F : C ⥤ D)
     dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]
     congr
 #align category_theory.preserves_finite_limits_iff_flat CategoryTheory.preservesFiniteLimitsIffFlat
+-/
 
 end HasLimit
 
@@ -341,6 +383,12 @@ section SmallCategory
 
 variable {C D : Type u₁} [SmallCategory C] [SmallCategory D] (E : Type u₂) [Category.{u₁} E]
 
+/- warning: category_theory.Lan_evaluation_iso_colim -> CategoryTheory.lanEvaluationIsoColim is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} {D : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] [_inst_2 : CategoryTheory.SmallCategory.{u1} D] (E : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} E] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (X : D) [_inst_4 : forall (X : D), CategoryTheory.Limits.HasColimitsOfShape.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3], CategoryTheory.Iso.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3 (CategoryTheory.lan.{u1, u1, u1, u1, u1, u2} C D E _inst_1 _inst_2 _inst_3 F (CategoryTheory.lanEvaluationIsoColim._proof_1.{u1, u2} C D _inst_1 _inst_2 E _inst_3 F _inst_4)) (CategoryTheory.Functor.obj.{u1, max u1 u2, u1, max u1 u2} D _inst_2 (CategoryTheory.Functor.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.evaluation.{u1, u1, u1, u2} D _inst_2 E _inst_3) X)) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) E _inst_3 (CategoryTheory.Functor.obj.{u1, max u1 u2, u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.whiskeringLeft.{u1, u1, u1, u1, u2, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1 E _inst_3) (CategoryTheory.CostructuredArrow.proj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) (CategoryTheory.Limits.colim.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.CostructuredArrow.category.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3 (_inst_4 X)))
+but is expected to have type
+  forall {C : Type.{u1}} {D : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} C] [_inst_2 : CategoryTheory.SmallCategory.{u1} D] (E : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} E] (F : CategoryTheory.Functor.{u1, u1, u1, u1} C _inst_1 D _inst_2) (X : D) [_inst_4 : forall (X : D), CategoryTheory.Limits.HasColimitsOfShape.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3], CategoryTheory.Iso.{max u1 u2, max u2 u1} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) E _inst_3) (CategoryTheory.Functor.comp.{u1, u1, u1, max u2 u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3 (CategoryTheory.lan.{u1, u1, u1, u1, u1, u2} C D E _inst_1 _inst_2 _inst_3 F (fun (X : D) => _inst_4 X)) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u1, max u1 u2} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} D (CategoryTheory.Category.toCategoryStruct.{u1, u1} D _inst_2)) (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, max u1 u2, u1, max u1 u2} D _inst_2 (CategoryTheory.Functor.{u1, u1, max u2 u1, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} D _inst_2 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} D _inst_2 E _inst_3) E _inst_3) (CategoryTheory.evaluation.{u1, u1, u1, u2} D _inst_2 E _inst_3)) X)) (CategoryTheory.Functor.comp.{u1, u1, u1, max u1 u2, max u1 u2, u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) E _inst_3 (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1))) (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)))) (CategoryTheory.Functor.toPrefunctor.{u1, max u1 u2, u1, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.category.{u1, u1, u1, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1) (CategoryTheory.Functor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.Functor.category.{u1, u1, max u1 u2, max u1 u2} (CategoryTheory.Functor.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} C _inst_1 E _inst_3) (CategoryTheory.Functor.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3) (CategoryTheory.Functor.category.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3)) (CategoryTheory.whiskeringLeft.{u1, u1, u1, u1, u2, u1} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) C _inst_1 E _inst_3)) (CategoryTheory.CostructuredArrow.proj.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X)) (CategoryTheory.Limits.colim.{u1, u1, u1, u2} (CategoryTheory.CostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) (CategoryTheory.instCategoryCostructuredArrow.{u1, u1, u1, u1} C _inst_1 D _inst_2 F X) E _inst_3 (_inst_4 X)))
+Case conversion may be inaccurate. Consider using '#align category_theory.Lan_evaluation_iso_colim CategoryTheory.lanEvaluationIsoColimₓ'. -/
 /-- (Implementation)
 The evaluation of `Lan F` at `X` is the colimit over the costructured arrows over `X`.
 -/
@@ -367,6 +415,7 @@ variable [ReflectsLimits (forget E)] [PreservesFilteredColimits (forget E)]
 
 variable [PreservesLimits (forget E)]
 
+#print CategoryTheory.lanPreservesFiniteLimitsOfFlat /-
 /-- If `F : C ⥤ D` is a representably flat functor between small categories, then the functor
 `Lan F.op` that takes presheaves over `C` to presheaves over `D` preserves finite limits.
 -/
@@ -381,21 +430,27 @@ noncomputable instance lanPreservesFiniteLimitsOfFlat (F : C ⥤ D) [Representab
     is_filtered.of_equivalence (structured_arrow_op_equivalence F (unop K))
   exact preserves_limits_of_shape_of_nat_iso (Lan_evaluation_iso_colim _ _ _).symm
 #align category_theory.Lan_preserves_finite_limits_of_flat CategoryTheory.lanPreservesFiniteLimitsOfFlat
+-/
 
+#print CategoryTheory.lan_flat_of_flat /-
 instance lan_flat_of_flat (F : C ⥤ D) [RepresentablyFlat F] :
     RepresentablyFlat (lan F.op : _ ⥤ Dᵒᵖ ⥤ E) :=
   flat_of_preservesFiniteLimits _
 #align category_theory.Lan_flat_of_flat CategoryTheory.lan_flat_of_flat
+-/
 
 variable [HasFiniteLimits C]
 
+#print CategoryTheory.lanPreservesFiniteLimitsOfPreservesFiniteLimits /-
 noncomputable instance lanPreservesFiniteLimitsOfPreservesFiniteLimits (F : C ⥤ D)
     [PreservesFiniteLimits F] : PreservesFiniteLimits (lan F.op : _ ⥤ Dᵒᵖ ⥤ E) :=
   by
   haveI := flat_of_preserves_finite_limits F
   infer_instance
 #align category_theory.Lan_preserves_finite_limits_of_preserves_finite_limits CategoryTheory.lanPreservesFiniteLimitsOfPreservesFiniteLimits
+-/
 
+#print CategoryTheory.flat_iff_lan_flat /-
 theorem flat_iff_lan_flat (F : C ⥤ D) :
     RepresentablyFlat F ↔ RepresentablyFlat (lan F.op : _ ⥤ Dᵒᵖ ⥤ Type u₁) :=
   ⟨fun H => inferInstance, fun H => by
@@ -407,7 +462,9 @@ theorem flat_iff_lan_flat (F : C ⥤ D) :
       intros ; skip; apply preserves_limit_of_Lan_preserves_limit
     apply flat_of_preserves_finite_limits⟩
 #align category_theory.flat_iff_Lan_flat CategoryTheory.flat_iff_lan_flat
+-/
 
+#print CategoryTheory.preservesFiniteLimitsIffLanPreservesFiniteLimits /-
 /-- If `C` is finitely complete, then `F : C ⥤ D` preserves finite limits iff
 `Lan F.op : (Cᵒᵖ ⥤ Type*) ⥤ (Dᵒᵖ ⥤ Type*)` preserves finite limits.
 -/
@@ -429,6 +486,7 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
       CategoryTheory.lanPreservesFiniteLimitsOfPreservesFiniteLimits CategoryTheory.lanPreservesFiniteLimitsOfFlat
     dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]; congr
 #align category_theory.preserves_finite_limits_iff_Lan_preserves_finite_limits CategoryTheory.preservesFiniteLimitsIffLanPreservesFiniteLimits
+-/
 
 end SmallCategory
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 
 ! This file was ported from Lean 3 source module category_theory.functor.flat
-! leanprover-community/mathlib commit 14e80e85cbca5872a329fbfd3d1f3fd64e306934
+! leanprover-community/mathlib commit 39478763114722f0ec7613cb2f3f7701f9b86c8d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -404,7 +404,7 @@ theorem flat_iff_lan_flat (F : C ⥤ D) :
     haveI : preserves_finite_limits F :=
       by
       apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-      intros ; skip; apply preserves_limit_of_Lan_presesrves_limit
+      intros ; skip; apply preserves_limit_of_Lan_preserves_limit
     apply flat_of_preserves_finite_limits⟩
 #align category_theory.flat_iff_Lan_flat CategoryTheory.flat_iff_lan_flat
 
@@ -417,7 +417,7 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
   toFun _ := inferInstance
   invFun _ := by
     apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-    intros ; skip; apply preserves_limit_of_Lan_presesrves_limit
+    intros ; skip; apply preserves_limit_of_Lan_preserves_limit
   left_inv x := by
     cases x; unfold preserves_finite_limits_of_flat
     dsimp only [preserves_finite_limits_of_preserves_finite_limits_of_size]; congr
Diff
@@ -69,7 +69,7 @@ variable {K : J ⥤ C} (F : C ⥤ D) (c : Cone K)
 arrows over `X` with `f` as the cone point. This is the underlying diagram.
 -/
 @[simps]
-def toDiagram : J ⥤ StructuredArrow c.x K
+def toDiagram : J ⥤ StructuredArrow c.pt K
     where
   obj j := StructuredArrow.mk (c.π.app j)
   map j k g := StructuredArrow.homMk g (by simpa)
@@ -78,7 +78,7 @@ def toDiagram : J ⥤ StructuredArrow c.x K
 /-- Given a diagram of `structured_arrow X F`s, we may obtain a cone with cone point `X`. -/
 @[simps]
 def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F ⋙ F) :=
-  { x
+  { pt
     π := { app := fun j => (G.obj j).Hom } }
 #align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
 
@@ -86,9 +86,9 @@ def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F
 arrows over `X` with `f` as the cone point.
 -/
 @[simps]
-def toCone {X : D} (f : X ⟶ F.obj c.x) : Cone (toDiagram (F.mapCone c) ⋙ map f ⋙ pre _ K F)
+def toCone {X : D} (f : X ⟶ F.obj c.pt) : Cone (toDiagram (F.mapCone c) ⋙ map f ⋙ pre _ K F)
     where
-  x := mk f
+  pt := mk f
   π :=
     { app := fun j => homMk (c.π.app j) rfl
       naturality' := fun j k g => by
@@ -221,15 +221,15 @@ include hc
 Given a limit cone `c : cone K` and a cone `s : cone (K ⋙ F)` with `F` representably flat,
 `s` can factor through `F.map_cone c`.
 -/
-noncomputable def lift : s.x ⟶ F.obj c.x :=
+noncomputable def lift : s.pt ⟶ F.obj c.pt :=
   let s' := IsCofiltered.cone (toDiagram s ⋙ StructuredArrow.pre _ K F)
-  s'.x.Hom ≫
+  s'.pt.Hom ≫
     (F.map <|
       hc.lift <|
         (Cones.postcompose
               ({  app := fun X => 𝟙 _
-                  naturality' := by simp } : (toDiagram s ⋙ pre s.x K F) ⋙ proj s.x F ⟶ K)).obj <|
-          (StructuredArrow.proj s.x F).mapCone s')
+                  naturality' := by simp } : (toDiagram s ⋙ pre s.pt K F) ⋙ proj s.pt F ⟶ K)).obj <|
+          (StructuredArrow.proj s.pt F).mapCone s')
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
 
 theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
@@ -238,8 +238,8 @@ theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
 
 attribute [local simp] eq_to_hom_map
 
-theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F)) (f₁ f₂ : s.x ⟶ F.obj c.x)
-    (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
+theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
+    (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ :=
   by
   -- We can make two cones over the diagram of `s` via `f₁` and `f₂`.
Diff
@@ -200,7 +200,7 @@ theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [Preserv
   ⟨fun X =>
     haveI : has_finite_limits (structured_arrow X F) :=
       by
-      apply hasFiniteLimitsOfHasFiniteLimitsOfSize.{v₁} (structured_arrow X F)
+      apply hasFiniteLimits_of_hasFiniteLimits_of_size.{v₁} (structured_arrow X F)
       intro J sJ fJ; skip; constructor
     cofiltered_of_has_finite_limits⟩
 #align category_theory.flat_of_preserves_finite_limits CategoryTheory.flat_of_preservesFiniteLimits
@@ -312,8 +312,8 @@ noncomputable def preservesFiniteLimitsOfFlat (F : C ⥤ D) [RepresentablyFlat F
   intro c hc
   exact
     { lift := preserves_finite_limits_of_flat.lift F hc
-      fac' := preserves_finite_limits_of_flat.fac F hc
-      uniq' := fun s m h => by
+      fac := preserves_finite_limits_of_flat.fac F hc
+      uniq := fun s m h => by
         apply preserves_finite_limits_of_flat.uniq F hc
         exact h
         exact preserves_finite_limits_of_flat.fac F hc s }

Changes in mathlib4

mathlib3
mathlib4
refactor: generalize universes for commuting filtered colimits and finite limits (#11325)
Diff
@@ -5,6 +5,7 @@ Authors: Andrew Yang
 -/
 import Mathlib.CategoryTheory.Limits.ConeCategory
 import Mathlib.CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
+import Mathlib.CategoryTheory.Limits.Preserves.Filtered
 import Mathlib.CategoryTheory.Limits.Preserves.FunctorCategory
 import Mathlib.CategoryTheory.Limits.Bicones
 import Mathlib.CategoryTheory.Limits.Comma
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -55,7 +55,6 @@ namespace CategoryTheory
 section RepresentablyFlat
 
 variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
-
 variable {E : Type u₃} [Category.{v₃} E]
 
 /-- A functor `F : C ⥤ D` is representably-flat functor if the comma category `(X/F)`
@@ -111,7 +110,6 @@ namespace PreservesFiniteLimitsOfFlat
 open StructuredArrow
 
 variable {J : Type v₁} [SmallCategory J] [FinCategory J] {K : J ⥤ C}
-
 variable (F : C ⥤ D) [RepresentablyFlat F] {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
 
 /-- (Implementation).
@@ -262,9 +260,7 @@ set_option linter.uppercaseLean3 false in
 #align category_theory.Lan_evaluation_iso_colim CategoryTheory.lanEvaluationIsoColim
 
 variable [ConcreteCategory.{u₁} E] [HasLimits E] [HasColimits E]
-
 variable [ReflectsLimits (forget E)] [PreservesFilteredColimits (forget E)]
-
 variable [PreservesLimits (forget E)]
 
 /-- If `F : C ⥤ D` is a representably flat functor between small categories, then the functor
chore: golf proof of RepresentablyFlat.comp (#11416)
Diff
@@ -67,8 +67,6 @@ class RepresentablyFlat (F : C ⥤ D) : Prop where
 
 attribute [instance] RepresentablyFlat.cofiltered
 
-attribute [local instance] IsCofiltered.nonempty
-
 instance RepresentablyFlat.of_isRightAdjoint (F : C ⥤ D) [IsRightAdjoint F] :
     RepresentablyFlat F where
   cofiltered _ := IsCofiltered.of_isInitial _ (mkInitialOfLeftAdjoint _ (.ofRightAdjoint F) _)
@@ -78,45 +76,16 @@ theorem RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := inferInstance
 
 instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F]
     [RepresentablyFlat G] : RepresentablyFlat (F ⋙ G) := by
-  constructor
-  intro X
-  have : Nonempty (StructuredArrow X (F ⋙ G)) := by
-    have f₁ : StructuredArrow X G := Nonempty.some inferInstance
-    have f₂ : StructuredArrow f₁.right F := Nonempty.some inferInstance
-    exact ⟨StructuredArrow.mk (f₁.hom ≫ G.map f₂.hom)⟩
-  suffices IsCofilteredOrEmpty (StructuredArrow X (F ⋙ G)) by constructor
-  constructor
-  · intro Y Z
-    let W :=
-      @IsCofiltered.min (StructuredArrow X G) _ _ (StructuredArrow.mk Y.hom)
-        (StructuredArrow.mk Z.hom)
-    let Y' : W ⟶ _ := IsCofiltered.minToLeft _ _
-    let Z' : W ⟶ _ := IsCofiltered.minToRight _ _
-    let W' :=
-      @IsCofiltered.min (StructuredArrow W.right F) _ _ (StructuredArrow.mk Y'.right)
-        (StructuredArrow.mk Z'.right)
-    let Y'' : W' ⟶ _ := IsCofiltered.minToLeft _ _
-    let Z'' : W' ⟶ _ := IsCofiltered.minToRight _ _
-    use StructuredArrow.mk (W.hom ≫ G.map W'.hom)
-    use StructuredArrow.homMk Y''.right (by simp [← G.map_comp])
-    use StructuredArrow.homMk Z''.right (by simp [← G.map_comp])
-  · intro Y Z f g
-    let W :=
-      @IsCofiltered.eq (StructuredArrow X G) _ _ (StructuredArrow.mk Y.hom)
-        (StructuredArrow.mk Z.hom) (StructuredArrow.homMk (F.map f.right) (StructuredArrow.w f))
-        (StructuredArrow.homMk (F.map g.right) (StructuredArrow.w g))
-    let h : W ⟶ _ := IsCofiltered.eqHom _ _
-    let h_cond : h ≫ _ = h ≫ _ := IsCofiltered.eq_condition _ _
-    let W' :=
-      @IsCofiltered.eq (StructuredArrow W.right F) _ _ (StructuredArrow.mk h.right)
-        (StructuredArrow.mk (h.right ≫ F.map f.right)) (StructuredArrow.homMk f.right rfl)
-        (StructuredArrow.homMk g.right (congr_arg CommaMorphism.right h_cond).symm)
-    let h' : W' ⟶ _ := IsCofiltered.eqHom _ _
-    let h'_cond : h' ≫ _ = h' ≫ _ := IsCofiltered.eq_condition _ _
-    use StructuredArrow.mk (W.hom ≫ G.map W'.hom)
-    use StructuredArrow.homMk h'.right (by simp [← G.map_comp])
-    ext
-    exact (congr_arg CommaMorphism.right h'_cond : _)
+  refine ⟨fun X => IsCofiltered.of_cone_nonempty.{0} _ (fun {J} _ _ H => ?_)⟩
+  obtain ⟨c₁⟩ := IsCofiltered.cone_nonempty (H ⋙ StructuredArrow.pre X F G)
+  let H₂ : J ⥤ StructuredArrow c₁.pt.right F :=
+    { obj := fun j => StructuredArrow.mk (c₁.π.app j).right
+      map := fun {j j'} f =>
+        StructuredArrow.homMk (H.map f).right (congrArg CommaMorphism.right (c₁.w f)) }
+  obtain ⟨c₂⟩ := IsCofiltered.cone_nonempty H₂
+  exact ⟨⟨StructuredArrow.mk (c₁.pt.hom ≫ G.map c₂.pt.hom),
+    ⟨fun j => StructuredArrow.homMk (c₂.π.app j).right (by simp [← G.map_comp, (c₂.π.app j).w]),
+     fun j j' f => by simpa using (c₂.w f).symm⟩⟩⟩
 #align category_theory.representably_flat.comp CategoryTheory.RepresentablyFlat.comp
 
 end RepresentablyFlat
feat(CategoryTheory): right adjoints are representably flat (#11412)
Diff
@@ -69,21 +69,11 @@ attribute [instance] RepresentablyFlat.cofiltered
 
 attribute [local instance] IsCofiltered.nonempty
 
-instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := by
-  constructor
-  intro X
-  haveI : Nonempty (StructuredArrow X (𝟭 C)) := ⟨StructuredArrow.mk (𝟙 _)⟩
-  suffices IsCofilteredOrEmpty (StructuredArrow X (𝟭 C)) by constructor
-  constructor
-  · intro Y Z
-    use StructuredArrow.mk (𝟙 _)
-    use StructuredArrow.homMk Y.hom (by erw [Functor.id_map, Category.id_comp])
-    use StructuredArrow.homMk Z.hom (by erw [Functor.id_map, Category.id_comp])
-  · intro Y Z f g
-    use StructuredArrow.mk (𝟙 _)
-    use StructuredArrow.homMk Y.hom (by erw [Functor.id_map, Category.id_comp])
-    ext
-    trans Z.hom <;> simp
+instance RepresentablyFlat.of_isRightAdjoint (F : C ⥤ D) [IsRightAdjoint F] :
+    RepresentablyFlat F where
+  cofiltered _ := IsCofiltered.of_isInitial _ (mkInitialOfLeftAdjoint _ (.ofRightAdjoint F) _)
+
+theorem RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := inferInstance
 #align category_theory.representably_flat.id CategoryTheory.RepresentablyFlat.id
 
 instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F]
chore: remove useless tactics (#11333)

The removal of some pointless tactics flagged by #11308.

Diff
@@ -314,7 +314,7 @@ variable [PreservesLimits (forget E)]
 noncomputable instance lanPreservesFiniteLimitsOfFlat (F : C ⥤ D) [RepresentablyFlat F] :
     PreservesFiniteLimits (lan F.op : _ ⥤ Dᵒᵖ ⥤ E) := by
   apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-  intro J _ _; skip
+  intro J _ _
   apply preservesLimitsOfShapeOfEvaluation (lan F.op : (Cᵒᵖ ⥤ E) ⥤ Dᵒᵖ ⥤ E) J
   intro K
   haveI : IsFiltered (CostructuredArrow F.op K) :=
@@ -341,11 +341,10 @@ set_option linter.uppercaseLean3 false in
 theorem flat_iff_lan_flat (F : C ⥤ D) :
     RepresentablyFlat F ↔ RepresentablyFlat (lan F.op : _ ⥤ Dᵒᵖ ⥤ Type u₁) :=
   ⟨fun H => inferInstance, fun H => by
-    skip
     haveI := preservesFiniteLimitsOfFlat (lan F.op : _ ⥤ Dᵒᵖ ⥤ Type u₁)
     haveI : PreservesFiniteLimits F := by
       apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-      intros; skip; apply preservesLimitOfLanPreservesLimit
+      intros; apply preservesLimitOfLanPreservesLimit
     apply flat_of_preservesFiniteLimits⟩
 set_option linter.uppercaseLean3 false in
 #align category_theory.flat_iff_Lan_flat CategoryTheory.flat_iff_lan_flat
chore: move cofiltered_of_hasFiniteLimits to the correct file (#11291)
Diff
@@ -133,15 +133,7 @@ end RepresentablyFlat
 
 section HasLimit
 
-variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₁} D]
-
-attribute [local instance] hasFiniteLimits_of_hasFiniteLimits_of_size
-
-theorem cofiltered_of_hasFiniteLimits [HasFiniteLimits C] : IsCofiltered C :=
-  { cone_objs := fun A B => ⟨Limits.prod A B, Limits.prod.fst, Limits.prod.snd, trivial⟩
-    cone_maps := fun _ _ f g => ⟨equalizer f g, equalizer.ι f g, equalizer.condition f g⟩
-    nonempty := ⟨⊤_ C⟩ }
-#align category_theory.cofiltered_of_has_finite_limits CategoryTheory.cofiltered_of_hasFiniteLimits
+variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
 
 theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [PreservesFiniteLimits F] :
     RepresentablyFlat F :=
@@ -152,7 +144,7 @@ theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [Preserv
       constructor
       -- Porting note: instance was inferred automatically in Lean 3
       infer_instance
-    cofiltered_of_hasFiniteLimits⟩
+    IsCofiltered.of_hasFiniteLimits _⟩
 #align category_theory.flat_of_preserves_finite_limits CategoryTheory.flat_of_preservesFiniteLimits
 
 namespace PreservesFiniteLimitsOfFlat
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -150,7 +150,7 @@ theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [Preserv
       apply hasFiniteLimits_of_hasFiniteLimits_of_size.{v₁} (StructuredArrow X F)
       intro J sJ fJ
       constructor
-      -- porting note: instance was inferred automatically in Lean 3
+      -- Porting note: instance was inferred automatically in Lean 3
       infer_instance
     cofiltered_of_hasFiniteLimits⟩
 #align category_theory.flat_of_preserves_finite_limits CategoryTheory.flat_of_preservesFiniteLimits
@@ -267,7 +267,7 @@ noncomputable def preservesFiniteLimitsIffFlat [HasFiniteLimits C] (F : C ⥤ D)
     unfold preservesFiniteLimitsOfFlat
     dsimp only [preservesFiniteLimitsOfPreservesFiniteLimitsOfSize]
     congr
-    -- porting note: this next line wasn't needed in lean 3
+    -- Porting note: this next line wasn't needed in lean 3
     apply Subsingleton.elim
 
 #align category_theory.preserves_finite_limits_iff_flat CategoryTheory.preservesFiniteLimitsIffFlat
@@ -289,7 +289,7 @@ noncomputable def lanEvaluationIsoColim (F : C ⥤ D) (X : D)
   NatIso.ofComponents (fun G => colim.mapIso (Iso.refl _))
     (by
       intro G H i
-      -- porting note: was `ext` in lean 3
+      -- Porting note: was `ext` in lean 3
       -- Now `ext` can't see that `lan` is a colimit.
       -- Uncertain whether it makes sense to add another `@[ext]` lemma.
       -- See https://github.com/leanprover-community/mathlib4/issues/5229
@@ -297,7 +297,7 @@ noncomputable def lanEvaluationIsoColim (F : C ⥤ D) (X : D)
       intro j
       simp only [Functor.comp_map, Functor.mapIso_refl, evaluation_obj_map, whiskeringLeft_obj_map,
         lan_map_app, colimit.ι_desc_assoc, Category.comp_id, Category.assoc]
-      -- porting note: this deals with the fact that the type of `lan_map_app` has changed
+      -- Porting note: this deals with the fact that the type of `lan_map_app` has changed
       -- See https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/change.20in.20behaviour.20with.20.60simps.60/near/354350606
       erw [show ((Lan.equiv F H (Lan.loc F H)) (𝟙 (Lan.loc F H))).app j.left =
         colimit.ι (Lan.diagram F H (F.obj j.left))
@@ -368,20 +368,20 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
     apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
     intros; apply preservesLimitOfLanPreservesLimit
   left_inv x := by
-    -- porting note: `cases x` and an `unfold` not necessary in lean 4.
+    -- Porting note: `cases x` and an `unfold` not necessary in lean 4.
     -- Remark : in mathlib3 we had `unfold preservesFiniteLimitsOfFlat`
     -- but there was no `preservesFiniteLimitsOfFlat` in the goal! Experimentation
     -- indicates that it was doing the same as `dsimp only`
     dsimp only [preservesFiniteLimitsOfPreservesFiniteLimitsOfSize]; congr
-    -- porting note: next line wasn't necessary in lean 3
+    -- Porting note: next line wasn't necessary in lean 3
     apply Subsingleton.elim
   right_inv x := by
-    -- cases x; -- porting note: not necessary in lean 4
+    -- cases x; -- Porting note: not necessary in lean 4
     dsimp only [lanPreservesFiniteLimitsOfPreservesFiniteLimits,
       lanPreservesFiniteLimitsOfFlat,
       preservesFiniteLimitsOfPreservesFiniteLimitsOfSize]
     congr
-    -- porting note: next line wasn't necessary in lean 3
+    -- Porting note: next line wasn't necessary in lean 3
     apply Subsingleton.elim
 set_option linter.uppercaseLean3 false in
 #align category_theory.preserves_finite_limits_iff_Lan_preserves_finite_limits CategoryTheory.preservesFiniteLimitsIffLanPreservesFiniteLimits
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -204,7 +204,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     intro j
     injection c₀.π.naturality (BiconeHom.left j) with _ e₁
     injection c₀.π.naturality (BiconeHom.right j) with _ e₂
-    convert e₁.symm.trans e₂ <;> simp
+    convert e₁.symm.trans e₂ <;> simp [c₁, c₂]
   have : c.extend g₁.right = c.extend g₂.right := by
     unfold Cone.extend
     congr 1
chore: remove stream-of-consciousness uses of have, replace and suffices (#10640)

No changes to tactic file, it's just boring fixes throughout the library.

This follows on from #6964.

Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -73,8 +73,7 @@ instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := by
   constructor
   intro X
   haveI : Nonempty (StructuredArrow X (𝟭 C)) := ⟨StructuredArrow.mk (𝟙 _)⟩
-  suffices : IsCofilteredOrEmpty (StructuredArrow X (𝟭 C))
-  · constructor
+  suffices IsCofilteredOrEmpty (StructuredArrow X (𝟭 C)) by constructor
   constructor
   · intro Y Z
     use StructuredArrow.mk (𝟙 _)
@@ -95,8 +94,7 @@ instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F
     have f₁ : StructuredArrow X G := Nonempty.some inferInstance
     have f₂ : StructuredArrow f₁.right F := Nonempty.some inferInstance
     exact ⟨StructuredArrow.mk (f₁.hom ≫ G.map f₂.hom)⟩
-  suffices : IsCofilteredOrEmpty (StructuredArrow X (F ⋙ G))
-  · constructor
+  suffices IsCofilteredOrEmpty (StructuredArrow X (F ⋙ G)) by constructor
   constructor
   · intro Y Z
     let W :=
@@ -213,8 +211,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     ext x
     apply this
   -- And thus they are equal as `c` is the limit.
-  have : g₁.right = g₂.right
-  calc
+  have : g₁.right = g₂.right := calc
     g₁.right = hc.lift (c.extend g₁.right) := by
       apply hc.uniq (c.extend _)
       -- Porting note: was `by tidy`, but `aesop` only works if max heartbeats
fix: decapitalize names of proof-valued fields (#8509)

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

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

Diff
@@ -67,7 +67,7 @@ class RepresentablyFlat (F : C ⥤ D) : Prop where
 
 attribute [instance] RepresentablyFlat.cofiltered
 
-attribute [local instance] IsCofiltered.Nonempty
+attribute [local instance] IsCofiltered.nonempty
 
 instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := by
   constructor
@@ -142,7 +142,7 @@ attribute [local instance] hasFiniteLimits_of_hasFiniteLimits_of_size
 theorem cofiltered_of_hasFiniteLimits [HasFiniteLimits C] : IsCofiltered C :=
   { cone_objs := fun A B => ⟨Limits.prod A B, Limits.prod.fst, Limits.prod.snd, trivial⟩
     cone_maps := fun _ _ f g => ⟨equalizer f g, equalizer.ι f g, equalizer.condition f g⟩
-    Nonempty := ⟨⊤_ C⟩ }
+    nonempty := ⟨⊤_ C⟩ }
 #align category_theory.cofiltered_of_has_finite_limits CategoryTheory.cofiltered_of_hasFiniteLimits
 
 theorem flat_of_preservesFiniteLimits [HasFiniteLimits C] (F : C ⥤ D) [PreservesFiniteLimits F] :
perf (Functor.Flat): restructure proof to reduce simp time (#8065)

This file recently jumped almost 200% in #8051. Changing a simpa using X call into a convert X <;> simp cuts the clock time for the file in half.

Diff
@@ -184,8 +184,6 @@ theorem fac (x : J) : lift F hc s ≫ (F.mapCone c).π.app x = s.π.app x := by
   simp [lift, ← Functor.map_comp]
 #align category_theory.preserves_finite_limits_of_flat.fac CategoryTheory.PreservesFiniteLimitsOfFlat.fac
 
-attribute [local simp] eqToHom_map
-
 theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ := by
@@ -208,7 +206,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     intro j
     injection c₀.π.naturality (BiconeHom.left j) with _ e₁
     injection c₀.π.naturality (BiconeHom.right j) with _ e₂
-    simpa using e₁.symm.trans e₂
+    convert e₁.symm.trans e₂ <;> simp
   have : c.extend g₁.right = c.extend g₂.right := by
     unfold Cone.extend
     congr 1
chore: bump toolchain to v4.3.0-rc1 (#8051)

This incorporates changes from

  • #7845
  • #7847
  • #7853
  • #7872 (was never actually made to work, but the diffs in nightly-testing are unexciting: we need to fully qualify a few names)

They can all be closed when this is merged.

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

Diff
@@ -208,7 +208,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     intro j
     injection c₀.π.naturality (BiconeHom.left j) with _ e₁
     injection c₀.π.naturality (BiconeHom.right j) with _ e₂
-    simpa (config := {zeta := false}) using e₁.symm.trans e₂
+    simpa using e₁.symm.trans e₂
   have : c.extend g₁.right = c.extend g₂.right := by
     unfold Cone.extend
     congr 1
chore: fix porting note about Comma.eqToHom_right by adding simp lemmas (#7884)

There are two things going on here: the change in behaviour in simp (currently, but not for much longer, requiring zeta := false), and some defeq abuse that I'm resolving here by adding additional simp lemmas.

This will slightly clarify one of the changes required in #7847

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

Diff
@@ -191,29 +191,9 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ := by
   -- We can make two cones over the diagram of `s` via `f₁` and `f₂`.
   let α₁ : (F.mapCone c).toStructuredArrow ⋙ map f₁ ⟶ s.toStructuredArrow :=
-    { app := fun X => eqToHom (by simp [← h₁])
-      naturality := fun j₁ j₂ φ => by
-        ext
-        -- porting note: Lean 3 proof was `simp` but `Comma.eqToHom_right`
-        -- isn't firing for some reason
-        -- Asked here https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/simp.20not.20using.20a.20simp.20lemma/near/353943416
-        -- I'm now doing `simp, rw [Comma.eqToHom_right, Comma.eqToHom_right], simp` but
-        -- I squeezed the first `simp`.
-        simp only [Functor.mapCone_pt, Functor.comp_obj, Cone.toStructuredArrow_obj,
-          Functor.mapCone_π_app, map_mk, mk_right, Functor.comp_map, Cone.toStructuredArrow_map,
-          comp_right, map_map_right, homMk_right]
-        rw [Comma.eqToHom_right, Comma.eqToHom_right] -- this is a `simp` lemma
-        simp }
+    { app := fun X => eqToHom (by simp [← h₁]) }
   let α₂ : (F.mapCone c).toStructuredArrow ⋙ map f₂ ⟶ s.toStructuredArrow :=
-    { app := fun X => eqToHom (by simp [← h₂])
-      naturality := fun _ _ _ => by
-        ext
-        -- porting note: see comments above. `simp` should close this goal (and did in Lean 3)
-        simp only [Functor.mapCone_pt, Functor.comp_obj, Cone.toStructuredArrow_obj,
-          Functor.mapCone_π_app, map_mk, mk_right, Functor.comp_map, Cone.toStructuredArrow_map,
-          comp_right, map_map_right, homMk_right]
-        rw [Comma.eqToHom_right, Comma.eqToHom_right] -- this is a `simp` lemma
-        simp }
+    { app := fun X => eqToHom (by simp [← h₂]) }
   let c₁ : Cone (s.toStructuredArrow ⋙ pre s.pt K F) :=
     (Cones.postcompose (whiskerRight α₁ (pre s.pt K F) : _)).obj (c.toStructuredArrowCone F f₁)
   let c₂ : Cone (s.toStructuredArrow ⋙ pre s.pt K F) :=
@@ -228,15 +208,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     intro j
     injection c₀.π.naturality (BiconeHom.left j) with _ e₁
     injection c₀.π.naturality (BiconeHom.right j) with _ e₂
-    -- porting note: Lean 3 proof now finished with `simpa using e₁.symm.trans e₂`
-    -- This doesn't work for two reasons in Lean 4: firstly it seems that Lean 4 `simp`
-    -- expands `let` definitions by default, so we have to switch this off with `zeta = false`;
-    -- secondly, `simp` is not rewriting `Comma.eqToHom_right` for some reason (just like)
-    -- 30 lines above here
-    have e₃ := e₁.symm.trans e₂
-    simp (config := {zeta := false}) at e₃ -- should turn `e₃` into the goal
-    rw [Comma.eqToHom_right, Comma.eqToHom_right] at e₃ -- this is a `simp` lemma
-    simpa (config := {zeta := false}) using e₃
+    simpa (config := {zeta := false}) using e₁.symm.trans e₂
   have : c.extend g₁.right = c.extend g₂.right := by
     unfold Cone.extend
     congr 1
feat: turn a cocone into a functor to costructured arrows (#6369)

After making this PR I noticed that this already existed in Functor/Flat.lean, so I unified the two developments.

Diff
@@ -3,6 +3,7 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
+import Mathlib.CategoryTheory.Limits.ConeCategory
 import Mathlib.CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
 import Mathlib.CategoryTheory.Limits.Preserves.FunctorCategory
 import Mathlib.CategoryTheory.Limits.Bicones
@@ -51,43 +52,6 @@ open Opposite
 
 namespace CategoryTheory
 
-namespace StructuredArrowCone
-
-open StructuredArrow
-
-variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₁} D]
-
-variable {J : Type w} [SmallCategory J]
-
-variable {K : J ⥤ C} (F : C ⥤ D) (c : Cone K)
-
-/-- Given a cone `c : cone K` and a map `f : X ⟶ c.X`, we can construct a cone of structured
-arrows over `X` with `f` as the cone point. This is the underlying diagram.
--/
-@[simps]
-def toDiagram : J ⥤ StructuredArrow c.pt K where
-  obj j := StructuredArrow.mk (c.π.app j)
-  map g := StructuredArrow.homMk g
-#align category_theory.structured_arrow_cone.to_diagram CategoryTheory.StructuredArrowCone.toDiagram
-
-/-- Given a diagram of `structured_arrow X F`s, we may obtain a cone with cone point `X`. -/
-@[simps!]
-def diagramToCone {X : D} (G : J ⥤ StructuredArrow X F) : Cone (G ⋙ proj X F ⋙ F) where
-  π := { app := fun j => (G.obj j).hom }
-#align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.StructuredArrowCone.diagramToCone
-
-/-- Given a cone `c : cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
-arrows over `X` with `f` as the cone point.
--/
-@[simps]
-def toCone {X : D} (f : X ⟶ F.obj c.pt) :
-    Cone (toDiagram (F.mapCone c) ⋙ map f ⋙ pre _ K F) where
-  pt := mk f
-  π := { app := fun j => homMk (c.π.app j) rfl }
-#align category_theory.structured_arrow_cone.to_cone CategoryTheory.StructuredArrowCone.toCone
-
-end StructuredArrowCone
-
 section RepresentablyFlat
 
 variable {C : Type u₁} [Category.{v₁} C] {D : Type u₂} [Category.{v₂} D]
@@ -197,8 +161,6 @@ namespace PreservesFiniteLimitsOfFlat
 
 open StructuredArrow
 
-open StructuredArrowCone
-
 variable {J : Type v₁} [SmallCategory J] [FinCategory J] {K : J ⥤ C}
 
 variable (F : C ⥤ D) [RepresentablyFlat F] {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
@@ -208,12 +170,13 @@ Given a limit cone `c : cone K` and a cone `s : cone (K ⋙ F)` with `F` represe
 `s` can factor through `F.map_cone c`.
 -/
 noncomputable def lift : s.pt ⟶ F.obj c.pt :=
-  let s' := IsCofiltered.cone (toDiagram s ⋙ StructuredArrow.pre _ K F)
+  let s' := IsCofiltered.cone (s.toStructuredArrow ⋙ StructuredArrow.pre _ K F)
   s'.pt.hom ≫
     (F.map <|
       hc.lift <|
         (Cones.postcompose
-              ({ app := fun X => 𝟙 _ } : (toDiagram s ⋙ pre s.pt K F) ⋙ proj s.pt F ⟶ K)).obj <|
+              ({ app := fun X => 𝟙 _ } :
+                (s.toStructuredArrow ⋙ pre s.pt K F) ⋙ proj s.pt F ⟶ K)).obj <|
           (StructuredArrow.proj s.pt F).mapCone s')
 #align category_theory.preserves_finite_limits_of_flat.lift CategoryTheory.PreservesFiniteLimitsOfFlat.lift
 
@@ -227,7 +190,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
     (f₁ f₂ : s.pt ⟶ F.obj c.pt) (h₁ : ∀ j : J, f₁ ≫ (F.mapCone c).π.app j = s.π.app j)
     (h₂ : ∀ j : J, f₂ ≫ (F.mapCone c).π.app j = s.π.app j) : f₁ = f₂ := by
   -- We can make two cones over the diagram of `s` via `f₁` and `f₂`.
-  let α₁ : toDiagram (F.mapCone c) ⋙ map f₁ ⟶ toDiagram s :=
+  let α₁ : (F.mapCone c).toStructuredArrow ⋙ map f₁ ⟶ s.toStructuredArrow :=
     { app := fun X => eqToHom (by simp [← h₁])
       naturality := fun j₁ j₂ φ => by
         ext
@@ -236,24 +199,25 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
         -- Asked here https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/simp.20not.20using.20a.20simp.20lemma/near/353943416
         -- I'm now doing `simp, rw [Comma.eqToHom_right, Comma.eqToHom_right], simp` but
         -- I squeezed the first `simp`.
-        simp only [Functor.mapCone_pt, Functor.comp_obj, toDiagram_obj,
-          Functor.mapCone_π_app, map_mk, mk_right, Functor.comp_map, toDiagram_map, comp_right,
-          map_map_right, homMk_right]
+        simp only [Functor.mapCone_pt, Functor.comp_obj, Cone.toStructuredArrow_obj,
+          Functor.mapCone_π_app, map_mk, mk_right, Functor.comp_map, Cone.toStructuredArrow_map,
+          comp_right, map_map_right, homMk_right]
         rw [Comma.eqToHom_right, Comma.eqToHom_right] -- this is a `simp` lemma
         simp }
-  let α₂ : toDiagram (F.mapCone c) ⋙ map f₂ ⟶ toDiagram s :=
+  let α₂ : (F.mapCone c).toStructuredArrow ⋙ map f₂ ⟶ s.toStructuredArrow :=
     { app := fun X => eqToHom (by simp [← h₂])
       naturality := fun _ _ _ => by
         ext
         -- porting note: see comments above. `simp` should close this goal (and did in Lean 3)
-        simp only [Functor.mapCone_pt, Functor.comp_obj, toDiagram_obj, Functor.mapCone_π_app,
-          map_mk, mk_right, Functor.comp_map, toDiagram_map, comp_right, map_map_right, homMk_right]
+        simp only [Functor.mapCone_pt, Functor.comp_obj, Cone.toStructuredArrow_obj,
+          Functor.mapCone_π_app, map_mk, mk_right, Functor.comp_map, Cone.toStructuredArrow_map,
+          comp_right, map_map_right, homMk_right]
         rw [Comma.eqToHom_right, Comma.eqToHom_right] -- this is a `simp` lemma
         simp }
-  let c₁ : Cone (toDiagram s ⋙ pre s.pt K F) :=
-    (Cones.postcompose (whiskerRight α₁ (pre s.pt K F) : _)).obj (toCone F c f₁)
-  let c₂ : Cone (toDiagram s ⋙ pre s.pt K F) :=
-    (Cones.postcompose (whiskerRight α₂ (pre s.pt K F) : _)).obj (toCone F c f₂)
+  let c₁ : Cone (s.toStructuredArrow ⋙ pre s.pt K F) :=
+    (Cones.postcompose (whiskerRight α₁ (pre s.pt K F) : _)).obj (c.toStructuredArrowCone F f₁)
+  let c₂ : Cone (s.toStructuredArrow ⋙ pre s.pt K F) :=
+    (Cones.postcompose (whiskerRight α₂ (pre s.pt K F) : _)).obj (c.toStructuredArrowCone F f₂)
   -- The two cones can then be combined and we may obtain a cone over the two cones since
   -- `StructuredArrow s.pt F` is cofiltered.
   let c₀ := IsCofiltered.cone (biconeMk _ c₁ c₂)
fix: let use provide last constructor argument, introduce mathlib3-like flattening use! (#5350)

Changes:

  • use now by default discharges with try with_reducible use_discharger with a custom discharger tactic rather than try with_reducible rfl, which makes it be closer to exists and the use in mathlib3. It doesn't go so far as to do try with_reducible trivial since that involves the contradiction tactic.
  • this discharger is configurable with use (discharger := tacticSeq...)
  • the use evaluation loop will try refining after constructor failure, so it can be used to fill in all arguments rather than all but the last, like in mathlib3 (closes #5072) but with the caveat that it only works so long as the last argument is not an inductive type (like Eq).
  • adds use!, which is nearly the same as the mathlib3 use and fills in constructor arguments along the nodes and leaves of the nested constructor expressions. This version tries refining before applying constructors, so it can be used like exact for the last argument.

The difference between mathlib3 use and this use! is that (1) use! uses a different tactic to discharge goals (mathlib3 used trivial', which did reducible refl, but also contradiction, which we don't emulate) (2) it does not rewrite using exists_prop. Regarding 2, this feature seems to be less useful now that bounded existentials encode the bound using a conjunction rather than with nested existentials. We do have exists_prop as part of use_discharger however.

Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>

Diff
@@ -116,7 +116,6 @@ instance RepresentablyFlat.id : RepresentablyFlat (𝟭 C) := by
     use StructuredArrow.mk (𝟙 _)
     use StructuredArrow.homMk Y.hom (by erw [Functor.id_map, Category.id_comp])
     use StructuredArrow.homMk Z.hom (by erw [Functor.id_map, Category.id_comp])
-    trivial
   · intro Y Z f g
     use StructuredArrow.mk (𝟙 _)
     use StructuredArrow.homMk Y.hom (by erw [Functor.id_map, Category.id_comp])
@@ -149,7 +148,6 @@ instance RepresentablyFlat.comp (F : C ⥤ D) (G : D ⥤ E) [RepresentablyFlat F
     use StructuredArrow.mk (W.hom ≫ G.map W'.hom)
     use StructuredArrow.homMk Y''.right (by simp [← G.map_comp])
     use StructuredArrow.homMk Z''.right (by simp [← G.map_comp])
-    trivial
   · intro Y Z f g
     let W :=
       @IsCofiltered.eq (StructuredArrow X G) _ _ (StructuredArrow.mk Y.hom)
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.functor.flat
-! leanprover-community/mathlib commit 39478763114722f0ec7613cb2f3f7701f9b86c8d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Limits.FilteredColimitCommutesFiniteLimit
 import Mathlib.CategoryTheory.Limits.Preserves.FunctorCategory
@@ -14,6 +9,8 @@ import Mathlib.CategoryTheory.Limits.Bicones
 import Mathlib.CategoryTheory.Limits.Comma
 import Mathlib.CategoryTheory.Limits.Preserves.Finite
 import Mathlib.CategoryTheory.Limits.Shapes.FiniteLimits
+
+#align_import category_theory.functor.flat from "leanprover-community/mathlib"@"39478763114722f0ec7613cb2f3f7701f9b86c8d"
 /-!
 # Representably flat functors
 
chore: remove occurrences of semicolon after space (#5713)

This is the second half of the changes originally in #5699, removing all occurrences of ; after a space and implementing a linter rule to enforce it.

In most cases this 2-character substring has a space after it, so the following command was run first:

find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;

The remaining cases were few enough in number that they were done manually.

Diff
@@ -290,7 +290,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
       apply hc.uniq (c.extend _)
       -- Porting note: was `by tidy`, but `aesop` only works if max heartbeats
       -- is increased, so we replace it by the output of `tidy?`
-      intro j ; rfl
+      intro j; rfl
     _ = hc.lift (c.extend g₂.right) := by
       congr
     _ = g₂.right := by
@@ -298,7 +298,7 @@ theorem uniq {K : J ⥤ C} {c : Cone K} (hc : IsLimit c) (s : Cone (K ⋙ F))
       apply hc.uniq (c.extend _)
       -- Porting note: was `by tidy`, but `aesop` only works if max heartbeats
       -- is increased, so we replace it by the output of `tidy?`
-      intro _ ; rfl
+      intro _; rfl
 
   -- Finally, since `fᵢ` factors through `F(gᵢ)`, the result follows.
   calc
@@ -427,7 +427,7 @@ theorem flat_iff_lan_flat (F : C ⥤ D) :
     haveI := preservesFiniteLimitsOfFlat (lan F.op : _ ⥤ Dᵒᵖ ⥤ Type u₁)
     haveI : PreservesFiniteLimits F := by
       apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-      intros ; skip; apply preservesLimitOfLanPreservesLimit
+      intros; skip; apply preservesLimitOfLanPreservesLimit
     apply flat_of_preservesFiniteLimits⟩
 set_option linter.uppercaseLean3 false in
 #align category_theory.flat_iff_Lan_flat CategoryTheory.flat_iff_lan_flat
@@ -440,7 +440,7 @@ noncomputable def preservesFiniteLimitsIffLanPreservesFiniteLimits (F : C ⥤ D)
   toFun _ := inferInstance
   invFun _ := by
     apply preservesFiniteLimitsOfPreservesFiniteLimitsOfSize.{u₁}
-    intros ; apply preservesLimitOfLanPreservesLimit
+    intros; apply preservesLimitOfLanPreservesLimit
   left_inv x := by
     -- porting note: `cases x` and an `unfold` not necessary in lean 4.
     -- Remark : in mathlib3 we had `unfold preservesFiniteLimitsOfFlat`
feat: more consistent use of ext, and updating porting notes. (#5242)

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

Diff
@@ -364,6 +364,9 @@ noncomputable def lanEvaluationIsoColim (F : C ⥤ D) (X : D)
     (by
       intro G H i
       -- porting note: was `ext` in lean 3
+      -- Now `ext` can't see that `lan` is a colimit.
+      -- Uncertain whether it makes sense to add another `@[ext]` lemma.
+      -- See https://github.com/leanprover-community/mathlib4/issues/5229
       apply colimit.hom_ext
       intro j
       simp only [Functor.comp_map, Functor.mapIso_refl, evaluation_obj_map, whiskeringLeft_obj_map,
chore: review of automation in category theory (#4793)

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

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

Diff
@@ -70,7 +70,7 @@ arrows over `X` with `f` as the cone point. This is the underlying diagram.
 @[simps]
 def toDiagram : J ⥤ StructuredArrow c.pt K where
   obj j := StructuredArrow.mk (c.π.app j)
-  map g := StructuredArrow.homMk g (by simp)
+  map g := StructuredArrow.homMk g
 #align category_theory.structured_arrow_cone.to_diagram CategoryTheory.StructuredArrowCone.toDiagram
 
 /-- Given a diagram of `structured_arrow X F`s, we may obtain a cone with cone point `X`. -/
feat: port CategoryTheory.Functor.Flat (#3703)

Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Dependencies 2 + 259

260 files ported (99.2%)
105012 lines ported (99.9%)
Show graph

The unported dependencies are