category_theory.functor.flat
⟷
Mathlib.CategoryTheory.Functor.Flat
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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 /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/28b2a92f2996d28e580450863c130955de0ed398
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/39478763114722f0ec7613cb2f3f7701f9b86c8d
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -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₂`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -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 }
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
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)
@@ -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
@@ -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
@@ -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]
@@ -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
@@ -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
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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
@@ -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
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>
@@ -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
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.
@@ -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] :
@@ -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
This incorporates changes from
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>
@@ -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
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>
@@ -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
After making this PR I noticed that this already existed in Functor/Flat.lean
, so I unified the two developments.
@@ -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₂)
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.use (discharger := tacticSeq...)
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
).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>
@@ -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)
@@ -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
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.
@@ -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`
@@ -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,
@@ -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`. -/
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>
The unported dependencies are