category_theory.products.basicMathlib.CategoryTheory.Products.Basic

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -204,8 +204,8 @@ def braiding : C × D ≌ D × C :=
 -/
 
 #print CategoryTheory.Prod.swapIsEquivalence /-
-instance swapIsEquivalence : IsEquivalence (swap C D) :=
-  (by infer_instance : IsEquivalence (braiding C D).Functor)
+instance swapIsEquivalence : CategoryTheory.Functor.IsEquivalence (swap C D) :=
+  (by infer_instance : CategoryTheory.Functor.IsEquivalence (braiding C D).Functor)
 #align category_theory.prod.swap_is_equivalence CategoryTheory.Prod.swapIsEquivalence
 -/
 
Diff
@@ -75,12 +75,12 @@ theorem isIso_prod_iff {P Q : C} {S T : D} {f : (P, S) ⟶ (Q, T)} :
     IsIso f ↔ IsIso f.1 ∧ IsIso f.2 := by
   constructor
   · rintro ⟨g, hfg, hgf⟩
-    simp at hfg hgf 
+    simp at hfg hgf
     rcases hfg with ⟨hfg₁, hfg₂⟩
     rcases hgf with ⟨hgf₁, hgf₂⟩
     exact ⟨⟨⟨g.1, hfg₁, hgf₁⟩⟩, ⟨⟨g.2, hfg₂, hgf₂⟩⟩⟩
   · rintro ⟨⟨g₁, hfg₁, hgf₁⟩, ⟨g₂, hfg₂, hgf₂⟩⟩
-    dsimp at hfg₁ hgf₁ hfg₂ hgf₂ 
+    dsimp at hfg₁ hgf₁ hfg₂ hgf₂
     refine' ⟨⟨(g₁, g₂), _, _⟩⟩ <;> · simp <;> constructor <;> assumption
 #align category_theory.is_iso_prod_iff CategoryTheory.isIso_prod_iff
 -/
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2017 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Stephen Morgan, Scott Morrison
 -/
-import Mathbin.CategoryTheory.EqToHom
-import Mathbin.CategoryTheory.Functor.Const
-import Mathbin.Data.Prod.Basic
+import CategoryTheory.EqToHom
+import CategoryTheory.Functor.Const
+import Data.Prod.Basic
 
 #align_import category_theory.products.basic from "leanprover-community/mathlib"@"1ead22342e1a078bd44744ace999f85756555d35"
 
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2017 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Stephen Morgan, Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.products.basic
-! leanprover-community/mathlib commit 1ead22342e1a078bd44744ace999f85756555d35
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.EqToHom
 import Mathbin.CategoryTheory.Functor.Const
 import Mathbin.Data.Prod.Basic
 
+#align_import category_theory.products.basic from "leanprover-community/mathlib"@"1ead22342e1a078bd44744ace999f85756555d35"
+
 /-!
 # Cartesian products of categories
 
Diff
@@ -196,6 +196,7 @@ def symmetry : swap C D ⋙ swap D C ≅ 𝟭 (C × D)
 #align category_theory.prod.symmetry CategoryTheory.Prod.symmetry
 -/
 
+#print CategoryTheory.Prod.braiding /-
 /-- The equivalence, given by swapping factors, between `C × D` and `D × C`.
 -/
 @[simps]
@@ -203,6 +204,7 @@ def braiding : C × D ≌ D × C :=
   Equivalence.mk (swap C D) (swap D C) (NatIso.ofComponents (fun X => eqToIso (by simp)) (by tidy))
     (NatIso.ofComponents (fun X => eqToIso (by simp)) (by tidy))
 #align category_theory.prod.braiding CategoryTheory.Prod.braiding
+-/
 
 #print CategoryTheory.Prod.swapIsEquivalence /-
 instance swapIsEquivalence : IsEquivalence (swap C D) :=
@@ -252,11 +254,13 @@ def evaluationUncurried : C × (C ⥤ D) ⥤ D
 
 variable {C}
 
+#print CategoryTheory.Functor.constCompEvaluationObj /-
 /-- The constant functor followed by the evalutation functor is just the identity. -/
 @[simps]
 def Functor.constCompEvaluationObj (X : C) : Functor.const C ⋙ (evaluation C D).obj X ≅ 𝟭 D :=
   NatIso.ofComponents (fun Y => Iso.refl _) fun Y Z f => by simp
 #align category_theory.functor.const_comp_evaluation_obj CategoryTheory.Functor.constCompEvaluationObj
+-/
 
 end
 
@@ -314,15 +318,19 @@ def diag : C ⥤ C × C :=
 #align category_theory.functor.diag CategoryTheory.Functor.diag
 -/
 
+#print CategoryTheory.Functor.diag_obj /-
 @[simp]
 theorem diag_obj (X : C) : (diag C).obj X = (X, X) :=
   rfl
 #align category_theory.functor.diag_obj CategoryTheory.Functor.diag_obj
+-/
 
+#print CategoryTheory.Functor.diag_map /-
 @[simp]
 theorem diag_map {X Y : C} (f : X ⟶ Y) : (diag C).map f = (f, f) :=
   rfl
 #align category_theory.functor.diag_map CategoryTheory.Functor.diag_map
+-/
 
 end
 
@@ -347,11 +355,13 @@ def prod {F G : A ⥤ B} {H I : C ⥤ D} (α : F ⟶ G) (β : H ⟶ I) : F.Prod
    use instead `α.prod β` or `nat_trans.prod α β`. -/
 end NatTrans
 
+#print CategoryTheory.flipCompEvaluation /-
 /-- `F.flip` composed with evaluation is the same as evaluating `F`. -/
 @[simps]
 def flipCompEvaluation (F : A ⥤ B ⥤ C) (a) : F.flip ⋙ (evaluation _ _).obj a ≅ F.obj a :=
   (NatIso.ofComponents fun b => eqToIso rfl) <| by tidy
 #align category_theory.flip_comp_evaluation CategoryTheory.flipCompEvaluation
+-/
 
 variable (A B C)
 
@@ -403,6 +413,7 @@ def functorProdFunctorEquivCounitIso :
 #align category_theory.functor_prod_functor_equiv_counit_iso CategoryTheory.functorProdFunctorEquivCounitIso
 -/
 
+#print CategoryTheory.functorProdFunctorEquiv /-
 /-- The equivalence of categories between `(A ⥤ B) × (A ⥤ C)` and `A ⥤ (B × C)` -/
 @[simps]
 def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C
@@ -412,6 +423,7 @@ def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C
   unitIso := functorProdFunctorEquivUnitIso A B C
   counitIso := functorProdFunctorEquivCounitIso A B C
 #align category_theory.functor_prod_functor_equiv CategoryTheory.functorProdFunctorEquiv
+-/
 
 end CategoryTheory
 
Diff
@@ -78,12 +78,12 @@ theorem isIso_prod_iff {P Q : C} {S T : D} {f : (P, S) ⟶ (Q, T)} :
     IsIso f ↔ IsIso f.1 ∧ IsIso f.2 := by
   constructor
   · rintro ⟨g, hfg, hgf⟩
-    simp at hfg hgf
+    simp at hfg hgf 
     rcases hfg with ⟨hfg₁, hfg₂⟩
     rcases hgf with ⟨hgf₁, hgf₂⟩
     exact ⟨⟨⟨g.1, hfg₁, hgf₁⟩⟩, ⟨⟨g.2, hfg₂, hgf₂⟩⟩⟩
   · rintro ⟨⟨g₁, hfg₁, hgf₁⟩, ⟨g₂, hfg₂, hgf₂⟩⟩
-    dsimp at hfg₁ hgf₁ hfg₂ hgf₂
+    dsimp at hfg₁ hgf₁ hfg₂ hgf₂ 
     refine' ⟨⟨(g₁, g₂), _, _⟩⟩ <;> · simp <;> constructor <;> assumption
 #align category_theory.is_iso_prod_iff CategoryTheory.isIso_prod_iff
 -/
Diff
@@ -196,12 +196,6 @@ def symmetry : swap C D ⋙ swap D C ≅ 𝟭 (C × D)
 #align category_theory.prod.symmetry CategoryTheory.Prod.symmetry
 -/
 
-/- warning: category_theory.prod.braiding -> CategoryTheory.Prod.braiding is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u1, u3} C] (D : Type.{u4}) [_inst_2 : CategoryTheory.Category.{u2, u4} D], CategoryTheory.Equivalence.{max u1 u2, max u2 u1, max u3 u4, max u4 u3} (Prod.{u3, u4} C D) (CategoryTheory.prod.{u1, u2, u3, u4} C _inst_1 D _inst_2) (Prod.{u4, u3} D C) (CategoryTheory.prod.{u2, u1, u4, u3} D _inst_2 C _inst_1)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u1, u3} C] (D : Type.{u4}) [_inst_2 : CategoryTheory.Category.{u2, u4} D], CategoryTheory.Equivalence.{max u1 u2, max u1 u2, max u4 u3, max u3 u4} (Prod.{u3, u4} C D) (Prod.{u4, u3} D C) (CategoryTheory.prod.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.prod.{u2, u1, u4, u3} D _inst_2 C _inst_1)
-Case conversion may be inaccurate. Consider using '#align category_theory.prod.braiding CategoryTheory.Prod.braidingₓ'. -/
 /-- The equivalence, given by swapping factors, between `C × D` and `D × C`.
 -/
 @[simps]
@@ -258,12 +252,6 @@ def evaluationUncurried : C × (C ⥤ D) ⥤ D
 
 variable {C}
 
-/- warning: category_theory.functor.const_comp_evaluation_obj -> CategoryTheory.Functor.constCompEvaluationObj is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] (D : Type.{u4}) [_inst_2 : CategoryTheory.Category.{u2, u4} D] (X : C), CategoryTheory.Iso.{max u4 u2, max u2 u4} (CategoryTheory.Functor.{u2, u2, u4, u4} D _inst_2 D _inst_2) (CategoryTheory.Functor.category.{u2, u2, u4, u4} D _inst_2 D _inst_2) (CategoryTheory.Functor.comp.{u2, max u3 u2, u2, u4, max u1 u2 u3 u4, u4} D _inst_2 (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2 (CategoryTheory.Functor.const.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.obj.{u1, max (max u1 u2 u3 u4) u2, u3, max (max u3 u2) u2 (max u1 u2 u3 u4) u4} C _inst_1 (CategoryTheory.Functor.{max u3 u2, u2, max u1 u2 u3 u4, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, u2, max u1 u2 u3 u4, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u1, u2, u3, u4} C _inst_1 D _inst_2) X)) (CategoryTheory.Functor.id.{u2, u4} D _inst_2)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] (D : Type.{u4}) [_inst_2 : CategoryTheory.Category.{u2, u4} D] (X : C), CategoryTheory.Iso.{max u4 u2, max u4 u2} (CategoryTheory.Functor.{u2, u2, u4, u4} D _inst_2 D _inst_2) (CategoryTheory.Functor.category.{u2, u2, u4, u4} D _inst_2 D _inst_2) (CategoryTheory.Functor.comp.{u2, max u3 u2, u2, u4, max (max (max u3 u1) u4) u2, u4} D _inst_2 (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2 (CategoryTheory.Functor.const.{u1, u2, u3, u4} C _inst_1 D _inst_2) (Prefunctor.obj.{succ u1, max (max (max (succ u3) (succ u4)) (succ u1)) (succ u2), u3, max (max (max u3 u4) u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) (CategoryTheory.Functor.{max u3 u2, u2, max (max (max u4 u3) u2) u1, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{max (max (max u3 u4) u1) u2, max (max (max u3 u4) u1) u2} (CategoryTheory.Functor.{max u3 u2, u2, max (max (max u4 u3) u2) u1, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.Category.toCategoryStruct.{max (max (max u3 u4) u1) u2, max (max (max u3 u4) u1) u2} (CategoryTheory.Functor.{max u3 u2, u2, max (max (max u4 u3) u2) u1, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, u2, max (max (max u3 u4) u1) u2, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2))) (CategoryTheory.Functor.toPrefunctor.{u1, max (max (max u3 u4) u1) u2, u3, max (max (max u3 u4) u1) u2} C _inst_1 (CategoryTheory.Functor.{max u3 u2, u2, max (max (max u4 u3) u2) u1, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.Functor.category.{max u3 u2, u2, max (max (max u3 u4) u1) u2, u4} (CategoryTheory.Functor.{u1, u2, u3, u4} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u2, u3, u4} C _inst_1 D _inst_2) D _inst_2) (CategoryTheory.evaluation.{u1, u2, u3, u4} C _inst_1 D _inst_2)) X)) (CategoryTheory.Functor.id.{u2, u4} D _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.const_comp_evaluation_obj CategoryTheory.Functor.constCompEvaluationObjₓ'. -/
 /-- The constant functor followed by the evalutation functor is just the identity. -/
 @[simps]
 def Functor.constCompEvaluationObj (X : C) : Functor.const C ⋙ (evaluation C D).obj X ≅ 𝟭 D :=
@@ -326,23 +314,11 @@ def diag : C ⥤ C × C :=
 #align category_theory.functor.diag CategoryTheory.Functor.diag
 -/
 
-/- warning: category_theory.functor.diag_obj -> CategoryTheory.Functor.diag_obj is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} C] (X : C), Eq.{succ u2} (Prod.{u2, u2} C C) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) X) (Prod.mk.{u2, u2} C C X X)
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} C] (X : C), Eq.{succ u2} (Prod.{u2, u2} C C) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3)) X) (Prod.mk.{u2, u2} C C X X)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.diag_obj CategoryTheory.Functor.diag_objₓ'. -/
 @[simp]
 theorem diag_obj (X : C) : (diag C).obj X = (X, X) :=
   rfl
 #align category_theory.functor.diag_obj CategoryTheory.Functor.diag_obj
 
-/- warning: category_theory.functor.diag_map -> CategoryTheory.Functor.diag_map is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) X Y), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) X) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) Y)) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) X Y f) (Prod.mk.{u1, u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.fst.{u2, u2} C C (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) X)) (Prod.fst.{u2, u2} C C (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) Y))) (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.snd.{u2, u2} C C (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) X)) (Prod.snd.{u2, u2} C C (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3) Y))) f f)
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_3 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) X Y), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3)) X) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3)) Y)) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) (Prod.{u2, u2} C C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_3 (Prod.{u2, u2} C C) (CategoryTheory.uniformProd.{u1, u2} C _inst_3 C _inst_3) (CategoryTheory.Functor.diag.{u1, u2} C _inst_3)) X Y f) (Prod.mk.{u1, u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) X Y) (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_3)) X Y) f f)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.diag_map CategoryTheory.Functor.diag_mapₓ'. -/
 @[simp]
 theorem diag_map {X Y : C} (f : X ⟶ Y) : (diag C).map f = (f, f) :=
   rfl
@@ -371,12 +347,6 @@ def prod {F G : A ⥤ B} {H I : C ⥤ D} (α : F ⟶ G) (β : H ⟶ I) : F.Prod
    use instead `α.prod β` or `nat_trans.prod α β`. -/
 end NatTrans
 
-/- warning: category_theory.flip_comp_evaluation -> CategoryTheory.flipCompEvaluation is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} A] {B : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} B] {C : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} C] (F : CategoryTheory.Functor.{u1, max u5 u3, u4, max u2 u3 u5 u6} A _inst_1 (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3)) (a : A), CategoryTheory.Iso.{max u5 u3, max u2 u3 u5 u6} (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.comp.{u2, max u4 u3, u3, u5, max u1 u3 u4 u6, u6} B _inst_2 (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3 (CategoryTheory.Functor.flip.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 C _inst_3 F) (CategoryTheory.Functor.obj.{u1, max (max u1 u3 u4 u6) u3, u4, max (max u4 u3) u3 (max u1 u3 u4 u6) u6} A _inst_1 (CategoryTheory.Functor.{max u4 u3, u3, max u1 u3 u4 u6, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.Functor.category.{max u4 u3, u3, max u1 u3 u4 u6, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.evaluation.{u1, u3, u4, u6} A _inst_1 C _inst_3) a)) (CategoryTheory.Functor.obj.{u1, max u5 u3, u4, max u2 u3 u5 u6} A _inst_1 (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3) F a)
-but is expected to have type
-  forall {A : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} A] {B : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} B] {C : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} C] (F : CategoryTheory.Functor.{u1, max u5 u3, u4, max (max (max u6 u5) u3) u2} A _inst_1 (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3)) (a : A), CategoryTheory.Iso.{max u5 u3, max (max (max u6 u5) u3) u2} (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.comp.{u2, max u4 u3, u3, u5, max (max (max u4 u6) u1) u3, u6} B _inst_2 (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3 (CategoryTheory.Functor.flip.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 C _inst_3 F) (Prefunctor.obj.{succ u1, max (max (max (succ u6) (succ u3)) (succ u1)) (succ u4), u4, max (max (max u6 u3) u1) u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) (CategoryTheory.Functor.{max u4 u3, u3, max (max (max u6 u4) u3) u1, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.CategoryStruct.toQuiver.{max (max (max u6 u3) u4) u1, max (max (max u6 u3) u4) u1} (CategoryTheory.Functor.{max u4 u3, u3, max (max (max u6 u4) u3) u1, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.Category.toCategoryStruct.{max (max (max u6 u3) u4) u1, max (max (max u6 u3) u4) u1} (CategoryTheory.Functor.{max u4 u3, u3, max (max (max u6 u4) u3) u1, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.Functor.category.{max u4 u3, u3, max (max (max u4 u6) u1) u3, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, max (max (max u6 u3) u4) u1, u4, max (max (max u6 u3) u4) u1} A _inst_1 (CategoryTheory.Functor.{max u4 u3, u3, max (max (max u6 u4) u3) u1, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.Functor.category.{max u4 u3, u3, max (max (max u4 u6) u1) u3, u6} (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3) C _inst_3) (CategoryTheory.evaluation.{u1, u3, u4, u6} A _inst_1 C _inst_3)) a)) (Prefunctor.obj.{succ u1, max (succ u5) (succ u3), u4, max (max (max u5 u6) u2) u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.CategoryStruct.toQuiver.{max u5 u3, max (max (max u5 u6) u2) u3} (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Category.toCategoryStruct.{max u5 u3, max (max (max u5 u6) u2) u3} (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3))) (CategoryTheory.Functor.toPrefunctor.{u1, max u5 u3, u4, max (max (max u5 u6) u2) u3} A _inst_1 (CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 C _inst_3) (CategoryTheory.Functor.category.{u2, u3, u5, u6} B _inst_2 C _inst_3) F) a)
-Case conversion may be inaccurate. Consider using '#align category_theory.flip_comp_evaluation CategoryTheory.flipCompEvaluationₓ'. -/
 /-- `F.flip` composed with evaluation is the same as evaluating `F`. -/
 @[simps]
 def flipCompEvaluation (F : A ⥤ B ⥤ C) (a) : F.flip ⋙ (evaluation _ _).obj a ≅ F.obj a :=
@@ -433,12 +403,6 @@ def functorProdFunctorEquivCounitIso :
 #align category_theory.functor_prod_functor_equiv_counit_iso CategoryTheory.functorProdFunctorEquivCounitIso
 -/
 
-/- warning: category_theory.functor_prod_functor_equiv -> CategoryTheory.functorProdFunctorEquiv is a dubious translation:
-lean 3 declaration is
-  forall (A : Type.{u4}) [_inst_1 : CategoryTheory.Category.{u1, u4} A] (B : Type.{u5}) [_inst_2 : CategoryTheory.Category.{u2, u5} B] (C : Type.{u6}) [_inst_3 : CategoryTheory.Category.{u3, u6} C], CategoryTheory.Equivalence.{max (max u4 u2) u4 u3, max u4 u2 u3, max (max u1 u2 u4 u5) u1 u3 u4 u6, max u1 (max u2 u3) u4 u5 u6} (Prod.{max u1 u2 u4 u5, max u1 u3 u4 u6} (CategoryTheory.Functor.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3)) (CategoryTheory.prod.{max u4 u2, max u4 u3, max u1 u2 u4 u5, max u1 u3 u4 u6} (CategoryTheory.Functor.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.category.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3)) (CategoryTheory.Functor.{u1, max u2 u3, u4, max u5 u6} A _inst_1 (Prod.{u5, u6} B C) (CategoryTheory.prod.{u2, u3, u5, u6} B _inst_2 C _inst_3)) (CategoryTheory.Functor.category.{u1, max u2 u3, u4, max u5 u6} A _inst_1 (Prod.{u5, u6} B C) (CategoryTheory.prod.{u2, u3, u5, u6} B _inst_2 C _inst_3))
-but is expected to have type
-  forall (A : Type.{u4}) [_inst_1 : CategoryTheory.Category.{u1, u4} A] (B : Type.{u5}) [_inst_2 : CategoryTheory.Category.{u2, u5} B] (C : Type.{u6}) [_inst_3 : CategoryTheory.Category.{u3, u6} C], CategoryTheory.Equivalence.{max (max u4 u2) u3, max (max u4 u2) u3, max (max (max (max u6 u4) u3) u1) (max (max u5 u4) u2) u1, max (max (max (max u6 u5) u4) u2 u3) u1} (Prod.{max (max (max u5 u4) u2) u1, max (max (max u6 u4) u3) u1} (CategoryTheory.Functor.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3)) (CategoryTheory.Functor.{u1, max u2 u3, u4, max u6 u5} A _inst_1 (Prod.{u5, u6} B C) (CategoryTheory.prod.{u2, u3, u5, u6} B _inst_2 C _inst_3)) (CategoryTheory.prod.{max u4 u2, max u4 u3, max (max (max u4 u5) u1) u2, max (max (max u4 u6) u1) u3} (CategoryTheory.Functor.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.category.{u1, u2, u4, u5} A _inst_1 B _inst_2) (CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u3, u4, u6} A _inst_1 C _inst_3)) (CategoryTheory.Functor.category.{u1, max u2 u3, u4, max u5 u6} A _inst_1 (Prod.{u5, u6} B C) (CategoryTheory.prod.{u2, u3, u5, u6} B _inst_2 C _inst_3))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor_prod_functor_equiv CategoryTheory.functorProdFunctorEquivₓ'. -/
 /-- The equivalence of categories between `(A ⥤ B) × (A ⥤ C)` and `A ⥤ (B × C)` -/
 @[simps]
 def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

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

Diff
@@ -175,8 +175,8 @@ def braiding : C × D ≌ D × C :=
     (NatIso.ofComponents fun X => eqToIso (by simp))
 #align category_theory.prod.braiding CategoryTheory.Prod.braiding
 
-instance swapIsEquivalence : IsEquivalence (swap C D) :=
-  (by infer_instance : IsEquivalence (braiding C D).functor)
+instance swapIsEquivalence : (swap C D).IsEquivalence :=
+  (by infer_instance : (braiding C D).functor.IsEquivalence)
 #align category_theory.prod.swap_is_equivalence CategoryTheory.Prod.swapIsEquivalence
 
 end Prod
chore: replace remaining lambda syntax (#11405)

Includes some doc comments and real code: this is exhaustive, with two exceptions:

  • some files are handled in #11409 instead
  • I left FunProp/{ToStd,RefinedDiscTree}.lean, Tactic/NormNum and Tactic/Simps alone, as these seem likely enough to end up in std.

Follow-up to #11301, much shorter this time.

Diff
@@ -384,11 +384,11 @@ open Opposite
 @[simps]
 def prodOpEquiv : (C × D)ᵒᵖ ≌ Cᵒᵖ × Dᵒᵖ where
   functor :=
-    { obj := λ X => ⟨op X.unop.1, op X.unop.2⟩,
-      map := λ f => ⟨f.unop.1.op, f.unop.2.op⟩ }
+    { obj := fun X ↦ ⟨op X.unop.1, op X.unop.2⟩,
+      map := fun f ↦ ⟨f.unop.1.op, f.unop.2.op⟩ }
   inverse :=
-    { obj := λ ⟨X,Y⟩ => op ⟨X.unop, Y.unop⟩,
-      map := λ ⟨f,g⟩ => op ⟨f.unop, g.unop⟩ }
+    { obj := fun ⟨X,Y⟩ ↦ op ⟨X.unop, Y.unop⟩,
+      map := fun ⟨f,g⟩ ↦ op ⟨f.unop, g.unop⟩ }
   unitIso := Iso.refl _
   counitIso := Iso.refl _
   functor_unitIso_comp := fun ⟨X, Y⟩ => by
chore: move Mathlib to v4.7.0-rc1 (#11162)

This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0 branch as we update to intermediate nightlies.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>

Diff
@@ -393,7 +393,7 @@ def prodOpEquiv : (C × D)ᵒᵖ ≌ Cᵒᵖ × Dᵒᵖ where
   counitIso := Iso.refl _
   functor_unitIso_comp := fun ⟨X, Y⟩ => by
     dsimp
-    ext <;> simpa using Category.id_comp _
+    ext <;> apply Category.id_comp
 
 end Opposite
 
chore: Remove nonterminal simp at (#7795)

Removes nonterminal uses of simp at. Replaces most of these with instances of simp? ... says.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -66,7 +66,7 @@ theorem isIso_prod_iff {P Q : C} {S T : D} {f : (P, S) ⟶ (Q, T)} :
     IsIso f ↔ IsIso f.1 ∧ IsIso f.2 := by
   constructor
   · rintro ⟨g, hfg, hgf⟩
-    simp at hfg hgf
+    simp? at hfg hgf says simp only [prod_Hom, prod_comp, prod_id, Prod.mk.injEq] at hfg hgf
     rcases hfg with ⟨hfg₁, hfg₂⟩
     rcases hgf with ⟨hgf₁, hgf₂⟩
     exact ⟨⟨⟨g.1, hfg₁, hgf₁⟩⟩, ⟨⟨g.2, hfg₂, hgf₂⟩⟩⟩
feat(CategoryTheory): the localized category of a product category (#8516)

This PR develops the API for cartesian products of categories (natural isomorphisms, equivalences, morphism properties) in order to show that under simple assumptions, the localized category of a product of two categories identifies to a product of the localized categories.

Diff
@@ -298,6 +298,29 @@ def prod {F G : A ⥤ B} {H I : C ⥤ D} (α : F ⟶ G) (β : H ⟶ I) : F.prod
    use instead `α.prod β` or `NatTrans.prod α β`. -/
 end NatTrans
 
+namespace NatIso
+
+/-- The cartesian product of two natural isomorphisms. -/
+@[simps]
+def prod {F F' : A ⥤ B} {G G' : C ⥤ D} (e₁ : F ≅ F') (e₂ : G ≅ G') :
+    F.prod G ≅ F'.prod G' where
+  hom := NatTrans.prod e₁.hom e₂.hom
+  inv := NatTrans.prod e₁.inv e₂.inv
+
+end NatIso
+
+namespace Equivalence
+
+/-- The cartesian product of two equivalences of categories. -/
+@[simps]
+def prod (E₁ : A ≌ B) (E₂ : C ≌ D) : A × C ≌ B × D where
+  functor := E₁.functor.prod E₂.functor
+  inverse := E₁.inverse.prod E₂.inverse
+  unitIso := NatIso.prod E₁.unitIso E₂.unitIso
+  counitIso := NatIso.prod E₁.counitIso E₂.counitIso
+
+end Equivalence
+
 /-- `F.flip` composed with evaluation is the same as evaluating `F`. -/
 @[simps!]
 def flipCompEvaluation (F : A ⥤ B ⥤ C) (a) : F.flip ⋙ (evaluation _ _).obj a ≅ F.obj a :=
feat(CategoryTheory/Products): opposite of product of categories (#8150)

Equivalence between the opposite of a product of categories and the product of the opposites.

Diff
@@ -5,6 +5,7 @@ Authors: Stephen Morgan, Scott Morrison
 -/
 import Mathlib.CategoryTheory.EqToHom
 import Mathlib.CategoryTheory.Functor.Const
+import Mathlib.CategoryTheory.Opposites
 import Mathlib.Data.Prod.Basic
 
 #align_import category_theory.products.basic from "leanprover-community/mathlib"@"dc6c365e751e34d100e80fe6e314c3c3e0fd2988"
@@ -352,4 +353,25 @@ def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C :=
     counitIso := functorProdFunctorEquivCounitIso A B C, }
 #align category_theory.functor_prod_functor_equiv CategoryTheory.functorProdFunctorEquiv
 
+section Opposite
+
+open Opposite
+
+/-- The equivalence between the opposite of a product and the product of the opposites. -/
+@[simps]
+def prodOpEquiv : (C × D)ᵒᵖ ≌ Cᵒᵖ × Dᵒᵖ where
+  functor :=
+    { obj := λ X => ⟨op X.unop.1, op X.unop.2⟩,
+      map := λ f => ⟨f.unop.1.op, f.unop.2.op⟩ }
+  inverse :=
+    { obj := λ ⟨X,Y⟩ => op ⟨X.unop, Y.unop⟩,
+      map := λ ⟨f,g⟩ => op ⟨f.unop, g.unop⟩ }
+  unitIso := Iso.refl _
+  counitIso := Iso.refl _
+  functor_unitIso_comp := fun ⟨X, Y⟩ => by
+    dsimp
+    ext <;> simpa using Category.id_comp _
+
+end Opposite
+
 end CategoryTheory
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2017 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Stephen Morgan, Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.products.basic
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.EqToHom
 import Mathlib.CategoryTheory.Functor.Const
 import Mathlib.Data.Prod.Basic
 
+#align_import category_theory.products.basic from "leanprover-community/mathlib"@"dc6c365e751e34d100e80fe6e314c3c3e0fd2988"
+
 /-!
 # Cartesian products of categories
 
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -158,7 +158,7 @@ def swap : C × D ⥤ D × C where
   map f := (f.2, f.1)
 #align category_theory.prod.swap CategoryTheory.Prod.swap
 
-/-- Swapping the factors of a cartesion product of categories twice is naturally isomorphic
+/-- Swapping the factors of a cartesian product of categories twice is naturally isomorphic
 to the identity functor.
 -/
 @[simps]
chore: review of automation in category theory (#4793)

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

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

Diff
@@ -173,8 +173,8 @@ def symmetry : swap C D ⋙ swap D C ≅ 𝟭 (C × D)
 @[simps!]
 def braiding : C × D ≌ D × C :=
   Equivalence.mk (swap C D) (swap D C)
-    (NatIso.ofComponents (fun X => eqToIso (by simp)) (by aesop_cat))
-    (NatIso.ofComponents (fun X => eqToIso (by simp)) (by aesop_cat))
+    (NatIso.ofComponents fun X => eqToIso (by simp))
+    (NatIso.ofComponents fun X => eqToIso (by simp))
 #align category_theory.prod.braiding CategoryTheory.Prod.braiding
 
 instance swapIsEquivalence : IsEquivalence (swap C D) :=
@@ -192,8 +192,7 @@ variable (C : Type u₁) [Category.{v₁} C] (D : Type u₂) [Category.{v₂} D]
 which is functorial in both `X` and `F`.
 -/
 @[simps]
-def evaluation : C ⥤ (C ⥤ D) ⥤ D
-    where
+def evaluation : C ⥤ (C ⥤ D) ⥤ D where
   obj X :=
     { obj := fun F => F.obj X
       map := fun α => α.app X }
@@ -206,8 +205,7 @@ def evaluation : C ⥤ (C ⥤ D) ⥤ D
 as a functor `C × (C ⥤ D) ⥤ D`.
 -/
 @[simps]
-def evaluationUncurried : C × (C ⥤ D) ⥤ D
-    where
+def evaluationUncurried : C × (C ⥤ D) ⥤ D where
   obj p := p.2.obj p.1
   map := fun {x} {y} f => x.2.map f.1 ≫ f.2.app y.1
   map_comp := fun {X} {Y} {Z} f g => by
@@ -222,7 +220,7 @@ variable {C}
 /-- The constant functor followed by the evaluation functor is just the identity. -/
 @[simps!]
 def Functor.constCompEvaluationObj (X : C) : Functor.const C ⋙ (evaluation C D).obj X ≅ 𝟭 D :=
-  NatIso.ofComponents (fun Y => Iso.refl _) fun {Y} {Z} f => by simp
+  NatIso.ofComponents fun Y => Iso.refl _
 #align category_theory.functor.const_comp_evaluation_obj CategoryTheory.Functor.constCompEvaluationObj
 
 end
@@ -234,8 +232,7 @@ namespace Functor
 
 /-- The cartesian product of two functors. -/
 @[simps]
-def prod (F : A ⥤ B) (G : C ⥤ D) : A × C ⥤ B × D
-    where
+def prod (F : A ⥤ B) (G : C ⥤ D) : A × C ⥤ B × D where
   obj X := (F.obj X.1, G.obj X.2)
   map f := (F.map f.1, G.map f.2)
 #align category_theory.functor.prod CategoryTheory.Functor.prod
@@ -244,8 +241,7 @@ def prod (F : A ⥤ B) (G : C ⥤ D) : A × C ⥤ B × D
    You can use `F.prod G` as a "poor man's infix", or just write `functor.prod F G`. -/
 /-- Similar to `prod`, but both functors start from the same category `A` -/
 @[simps]
-def prod' (F : A ⥤ B) (G : A ⥤ C) : A ⥤ B × C
-    where
+def prod' (F : A ⥤ B) (G : A ⥤ C) : A ⥤ B × C where
   obj a := (F.obj a, G.obj a)
   map f := (F.map f, G.map f)
 #align category_theory.functor.prod' CategoryTheory.Functor.prod'
@@ -253,13 +249,13 @@ def prod' (F : A ⥤ B) (G : A ⥤ C) : A ⥤ B × C
 /-- The product `F.prod' G` followed by projection on the first component is isomorphic to `F` -/
 @[simps!]
 def prod'CompFst (F : A ⥤ B) (G : A ⥤ C) : F.prod' G ⋙ CategoryTheory.Prod.fst B C ≅ F :=
-  NatIso.ofComponents (fun X => Iso.refl _) fun f => by simp
+  NatIso.ofComponents fun X => Iso.refl _
 #align category_theory.functor.prod'_comp_fst CategoryTheory.Functor.prod'CompFst
 
 /-- The product `F.prod' G` followed by projection on the second component is isomorphic to `G` -/
 @[simps!]
 def prod'CompSnd (F : A ⥤ B) (G : A ⥤ C) : F.prod' G ⋙ CategoryTheory.Prod.snd B C ≅ G :=
-  NatIso.ofComponents (fun X => Iso.refl _) fun f => by simp
+  NatIso.ofComponents fun X => Iso.refl _
 #align category_theory.functor.prod'_comp_snd CategoryTheory.Functor.prod'CompSnd
 
 section
@@ -307,7 +303,7 @@ end NatTrans
 /-- `F.flip` composed with evaluation is the same as evaluating `F`. -/
 @[simps!]
 def flipCompEvaluation (F : A ⥤ B ⥤ C) (a) : F.flip ⋙ (evaluation _ _).obj a ≅ F.obj a :=
-  (NatIso.ofComponents fun b => eqToIso rfl) <| by aesop_cat
+  NatIso.ofComponents fun b => eqToIso rfl
 #align category_theory.flip_comp_evaluation CategoryTheory.flipCompEvaluation
 
 variable (A B C)
@@ -338,36 +334,25 @@ def functorProdToProdFunctor : (A ⥤ B × C) ⥤ (A ⥤ B) × (A ⥤ C)
 @[simps!]
 def functorProdFunctorEquivUnitIso :
     𝟭 _ ≅ prodFunctorToFunctorProd A B C ⋙ functorProdToProdFunctor A B C :=
-  NatIso.ofComponents
-    (fun F =>
-      (((Functor.prod'CompFst F.fst F.snd).prod (Functor.prod'CompSnd F.fst F.snd)).trans
-        (prod.etaIso F)).symm)
-      (fun α => by aesop_cat)
+  NatIso.ofComponents fun F =>
+    (((Functor.prod'CompFst F.fst F.snd).prod (Functor.prod'CompSnd F.fst F.snd)).trans
+      (prod.etaIso F)).symm
 #align category_theory.functor_prod_functor_equiv_unit_iso CategoryTheory.functorProdFunctorEquivUnitIso
 
 /-- The counit isomorphism for `functorProdFunctorEquiv` -/
 @[simps!]
 def functorProdFunctorEquivCounitIso :
     functorProdToProdFunctor A B C ⋙ prodFunctorToFunctorProd A B C ≅ 𝟭 _ :=
-  NatIso.ofComponents (fun F => NatIso.ofComponents (fun X => prod.etaIso (F.obj X)) (by aesop_cat))
-    (by aesop_cat)
+  NatIso.ofComponents fun F => NatIso.ofComponents fun X => prod.etaIso (F.obj X)
 #align category_theory.functor_prod_functor_equiv_counit_iso CategoryTheory.functorProdFunctorEquivCounitIso
 
-/- Porting note: unlike with Lean 3, we needed to provide `functor_unitIso_comp` because
-Lean 4 could not see through `functorProdFunctorEquivUnitIso` (or the co-unit version)
-to run the auto tactic `by aesop_cat` -/
-
 /-- The equivalence of categories between `(A ⥤ B) × (A ⥤ C)` and `A ⥤ (B × C)` -/
 @[simps]
 def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C :=
   { functor := prodFunctorToFunctorProd A B C,
     inverse := functorProdToProdFunctor A B C,
     unitIso := functorProdFunctorEquivUnitIso A B C,
-    counitIso := functorProdFunctorEquivCounitIso A B C,
-    functor_unitIso_comp := by
-      simp only [functorProdFunctorEquivUnitIso]
-      aesop_cat
-  }
+    counitIso := functorProdFunctorEquivCounitIso A B C, }
 #align category_theory.functor_prod_functor_equiv CategoryTheory.functorProdFunctorEquiv
 
 end CategoryTheory
chore: fix typos (#4518)

I ran codespell Mathlib and got tired halfway through the suggestions.

Diff
@@ -219,7 +219,7 @@ def evaluationUncurried : C × (C ⥤ D) ⥤ D
 
 variable {C}
 
-/-- The constant functor followed by the evalutation functor is just the identity. -/
+/-- The constant functor followed by the evaluation functor is just the identity. -/
 @[simps!]
 def Functor.constCompEvaluationObj (X : C) : Functor.const C ⋙ (evaluation C D).obj X ≅ 𝟭 D :=
   NatIso.ofComponents (fun Y => Iso.refl _) fun {Y} {Z} f => by simp
chore: forward port of #18742, no simps lemmas for Category.Hom (#3340)

This is the forward port of https://github.com/leanprover-community/mathlib/pull/18742. That PR hasn't landed yet, so this PR still needs to be updated with the new commit SHA.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Diff
@@ -44,7 +44,7 @@ variable (C : Type u₁) [Category.{v₁} C] (D : Type u₂) [Category.{v₂} D]
 
 See <https://stacks.math.columbia.edu/tag/001K>.
 -/
-@[simps (config := { notRecursive := [] })]
+@[simps (config := { notRecursive := [] }) Hom id_fst id_snd comp_fst comp_snd]
 instance prod : Category.{max v₁ v₂} (C × D)
     where
   Hom X Y := (X.1 ⟶ Y.1) × (X.2 ⟶ Y.2)
chore: strip trailing spaces in lean files (#2828)

vscode is already configured by .vscode/settings.json to trim these on save. It's not clear how they've managed to stick around.

By doing this all in one PR now, it avoids getting random whitespace diffs in PRs later.

This was done with a regex search in vscode,

image

Diff
@@ -172,7 +172,7 @@ def symmetry : swap C D ⋙ swap D C ≅ 𝟭 (C × D)
 -/
 @[simps!]
 def braiding : C × D ≌ D × C :=
-  Equivalence.mk (swap C D) (swap D C) 
+  Equivalence.mk (swap C D) (swap D C)
     (NatIso.ofComponents (fun X => eqToIso (by simp)) (by aesop_cat))
     (NatIso.ofComponents (fun X => eqToIso (by simp)) (by aesop_cat))
 #align category_theory.prod.braiding CategoryTheory.Prod.braiding
@@ -294,9 +294,9 @@ def prod {F G : A ⥤ B} {H I : C ⥤ D} (α : F ⟶ G) (β : H ⟶ I) : F.prod
   app X := (α.app X.1, β.app X.2)
   naturality {X} {Y} f := by
     cases X; cases Y
-    simp only [Functor.prod_map, prod_comp] 
-    rw [Prod.mk.inj_iff] 
-    constructor 
+    simp only [Functor.prod_map, prod_comp]
+    rw [Prod.mk.inj_iff]
+    constructor
     repeat {rw [naturality]}
 #align category_theory.nat_trans.prod CategoryTheory.NatTrans.prod
 
@@ -338,11 +338,11 @@ def functorProdToProdFunctor : (A ⥤ B × C) ⥤ (A ⥤ B) × (A ⥤ C)
 @[simps!]
 def functorProdFunctorEquivUnitIso :
     𝟭 _ ≅ prodFunctorToFunctorProd A B C ⋙ functorProdToProdFunctor A B C :=
-  NatIso.ofComponents 
-    (fun F => 
-      (((Functor.prod'CompFst F.fst F.snd).prod (Functor.prod'CompSnd F.fst F.snd)).trans 
-        (prod.etaIso F)).symm) 
-      (fun α => by aesop_cat) 
+  NatIso.ofComponents
+    (fun F =>
+      (((Functor.prod'CompFst F.fst F.snd).prod (Functor.prod'CompSnd F.fst F.snd)).trans
+        (prod.etaIso F)).symm)
+      (fun α => by aesop_cat)
 #align category_theory.functor_prod_functor_equiv_unit_iso CategoryTheory.functorProdFunctorEquivUnitIso
 
 /-- The counit isomorphism for `functorProdFunctorEquiv` -/
@@ -354,12 +354,12 @@ def functorProdFunctorEquivCounitIso :
 #align category_theory.functor_prod_functor_equiv_counit_iso CategoryTheory.functorProdFunctorEquivCounitIso
 
 /- Porting note: unlike with Lean 3, we needed to provide `functor_unitIso_comp` because
-Lean 4 could not see through `functorProdFunctorEquivUnitIso` (or the co-unit version) 
+Lean 4 could not see through `functorProdFunctorEquivUnitIso` (or the co-unit version)
 to run the auto tactic `by aesop_cat` -/
 
 /-- The equivalence of categories between `(A ⥤ B) × (A ⥤ C)` and `A ⥤ (B × C)` -/
 @[simps]
-def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C := 
+def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C :=
   { functor := prodFunctorToFunctorProd A B C,
     inverse := functorProdToProdFunctor A B C,
     unitIso := functorProdFunctorEquivUnitIso A B C,
fix: rename functor_unit_iso_comp to functor_unitIso_comp (#2314)
Diff
@@ -353,7 +353,7 @@ def functorProdFunctorEquivCounitIso :
     (by aesop_cat)
 #align category_theory.functor_prod_functor_equiv_counit_iso CategoryTheory.functorProdFunctorEquivCounitIso
 
-/- Porting note: unlike with Lean 3, we needed to provide `functor_unit_iso_comp` because 
+/- Porting note: unlike with Lean 3, we needed to provide `functor_unitIso_comp` because
 Lean 4 could not see through `functorProdFunctorEquivUnitIso` (or the co-unit version) 
 to run the auto tactic `by aesop_cat` -/
 
@@ -364,7 +364,7 @@ def functorProdFunctorEquiv : (A ⥤ B) × (A ⥤ C) ≌ A ⥤ B × C :=
     inverse := functorProdToProdFunctor A B C,
     unitIso := functorProdFunctorEquivUnitIso A B C,
     counitIso := functorProdFunctorEquivCounitIso A B C,
-    functor_unit_iso_comp := by
+    functor_unitIso_comp := by
       simp only [functorProdFunctorEquivUnitIso]
       aesop_cat
   }
feat port/CategoryTheory.Products.Basic (#2211)

Dependencies 14

15 files ported (100.0%)
3975 lines ported (100.0%)

All dependencies are ported!