category_theory.comma
⟷
Mathlib.CategoryTheory.Comma.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
For some comma
categories like structured_arrow
, over
, under
, the definition of some data fields could be obtained automatically by the obviously tactic. This PR removes this behaviour. Instead, specialized constructors like structured_arrow.mk
or structured_arrow.hom_mk
are used more systematically.
@@ -58,8 +58,8 @@ variables {T : Type u₃} [category.{v₃} T]
/-- The objects of the comma category are triples of an object `left : A`, an object
`right : B` and a morphism `hom : L.obj left ⟶ R.obj right`. -/
structure comma (L : A ⥤ T) (R : B ⥤ T) : Type (max u₁ u₂ v₃) :=
-(left : A . obviously)
-(right : B . obviously)
+(left : A)
+(right : B)
(hom : L.obj left ⟶ R.obj right)
-- Satisfying the inhabited linter
@@ -75,8 +75,8 @@ variables {L : A ⥤ T} {R : B ⥤ T}
morphisms coming from the two objects using morphisms in the image of the functors `L` and `R`.
-/
@[ext] structure comma_morphism (X Y : comma L R) :=
-(left : X.left ⟶ Y.left . obviously)
-(right : X.right ⟶ Y.right . obviously)
+(left : X.left ⟶ Y.left)
+(right : X.right ⟶ Y.right)
(w' : L.map left ≫ Y.hom = X.hom ≫ R.map right . obviously)
-- Satisfying the inhabited linter
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
-/
-import CategoryTheory.Isomorphism
+import CategoryTheory.Iso
import CategoryTheory.Functor.Category
import CategoryTheory.EqToHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
-/
-import Mathbin.CategoryTheory.Isomorphism
-import Mathbin.CategoryTheory.Functor.Category
-import Mathbin.CategoryTheory.EqToHom
+import CategoryTheory.Isomorphism
+import CategoryTheory.Functor.Category
+import CategoryTheory.EqToHom
#align_import category_theory.comma from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -102,8 +102,6 @@ instance CommaMorphism.inhabited [Inhabited (Comma L R)] :
#align category_theory.comma_morphism.inhabited CategoryTheory.CommaMorphism.inhabited
-/
-restate_axiom comma_morphism.w'
-
attribute [simp, reassoc] comma_morphism.w
#print CategoryTheory.commaCategory /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.comma
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Isomorphism
import Mathbin.CategoryTheory.Functor.Category
import Mathbin.CategoryTheory.EqToHom
+#align_import category_theory.comma from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
+
/-!
# Comma categories
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -206,6 +206,7 @@ section
variable {L₁ L₂ L₃ : A ⥤ T} {R₁ R₂ R₃ : B ⥤ T}
+#print CategoryTheory.Comma.isoMk /-
/-- Construct an isomorphism in the comma category given isomorphisms of the objects whose forward
directions give a commutative square.
-/
@@ -224,6 +225,7 @@ def isoMk {X Y : Comma L₁ R₁} (l : X.left ≅ Y.left) (r : X.right ≅ Y.rig
rw [← L₁.map_iso_inv l, iso.inv_comp_eq, L₁.map_iso_hom, reassoc_of h, ← R₁.map_comp]
simp }
#align category_theory.comma.iso_mk CategoryTheory.Comma.isoMk
+-/
#print CategoryTheory.Comma.mapLeft /-
/-- A natural transformation `L₁ ⟶ L₂` induces a functor `comma L₂ R ⥤ comma L₁ R`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -206,9 +206,6 @@ section
variable {L₁ L₂ L₃ : A ⥤ T} {R₁ R₂ R₃ : B ⥤ T}
-/- warning: category_theory.comma.iso_mk -> CategoryTheory.Comma.isoMk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.comma.iso_mk CategoryTheory.Comma.isoMkₓ'. -/
/-- Construct an isomorphism in the comma category given isomorphisms of the objects whose forward
directions give a commutative square.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -191,28 +191,14 @@ def natTrans : fst L R ⋙ L ⟶ snd L R ⋙ R where app X := X.Hom
#print CategoryTheory.Comma.eqToHom_left /-
@[simp]
theorem eqToHom_left (X Y : Comma L R) (H : X = Y) :
- CommaMorphism.left (eqToHom H) =
- eqToHom
- (by
- cases H
- rfl) :=
- by
- cases H
- rfl
+ CommaMorphism.left (eqToHom H) = eqToHom (by cases H; rfl) := by cases H; rfl
#align category_theory.comma.eq_to_hom_left CategoryTheory.Comma.eqToHom_left
-/
#print CategoryTheory.Comma.eqToHom_right /-
@[simp]
theorem eqToHom_right (X Y : Comma L R) (H : X = Y) :
- CommaMorphism.right (eqToHom H) =
- eqToHom
- (by
- cases H
- rfl) :=
- by
- cases H
- rfl
+ CommaMorphism.right (eqToHom H) = eqToHom (by cases H; rfl) := by cases H; rfl
#align category_theory.comma.eq_to_hom_right CategoryTheory.Comma.eqToHom_right
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -221,10 +221,7 @@ section
variable {L₁ L₂ L₃ : A ⥤ T} {R₁ R₂ R₃ : B ⥤ T}
/- warning: category_theory.comma.iso_mk -> CategoryTheory.Comma.isoMk 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] {T : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} T] {L₁ : CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 T _inst_3} {R₁ : CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 T _inst_3} {X : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} {Y : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} (l : CategoryTheory.Iso.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (r : CategoryTheory.Iso.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)), (Eq.{succ u3} (Quiver.Hom.{succ u3, u6} T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y))) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.map.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) l)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Functor.map.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) r)))) -> (CategoryTheory.Iso.{max u1 u2, max u4 u5 u3} (CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) (CategoryTheory.commaCategory.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) X Y)
-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] {T : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} T] {L₁ : CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 T _inst_3} {R₁ : CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 T _inst_3} {X : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} {Y : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} (l : CategoryTheory.Iso.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (r : CategoryTheory.Iso.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)), (Eq.{succ u3} (Quiver.Hom.{succ u3, u6} T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y))) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (Prefunctor.map.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) l)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (Prefunctor.map.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) r)))) -> (CategoryTheory.Iso.{max u1 u2, max (max u4 u5) u3} (CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) (CategoryTheory.commaCategory.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) X Y)
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.comma.iso_mk CategoryTheory.Comma.isoMkₓ'. -/
/-- Construct an isomorphism in the comma category given isomorphisms of the objects whose forward
directions give a commutative square.
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -107,7 +107,7 @@ instance CommaMorphism.inhabited [Inhabited (Comma L R)] :
restate_axiom comma_morphism.w'
-attribute [simp, reassoc.1] comma_morphism.w
+attribute [simp, reassoc] comma_morphism.w
#print CategoryTheory.commaCategory /-
instance commaCategory : Category (Comma L R)
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
! This file was ported from Lean 3 source module category_theory.comma
-! leanprover-community/mathlib commit 1ead22342e1a078bd44744ace999f85756555d35
+! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -67,8 +67,8 @@ variable {T : Type u₃} [Category.{v₃} T]
/-- The objects of the comma category are triples of an object `left : A`, an object
`right : B` and a morphism `hom : L.obj left ⟶ R.obj right`. -/
structure Comma (L : A ⥤ T) (R : B ⥤ T) : Type max u₁ u₂ v₃ where
- left : A := by obviously
- right : B := by obviously
+ left : A
+ right : B
Hom : L.obj left ⟶ R.obj right
#align category_theory.comma CategoryTheory.Comma
-/
@@ -91,8 +91,8 @@ variable {L : A ⥤ T} {R : B ⥤ T}
-/
@[ext]
structure CommaMorphism (X Y : Comma L R) where
- left : X.left ⟶ Y.left := by obviously
- right : X.right ⟶ Y.right := by obviously
+ left : X.left ⟶ Y.left
+ right : X.right ⟶ Y.right
w' : L.map left ≫ Y.Hom = X.Hom ≫ R.map right := by obviously
#align category_theory.comma_morphism CategoryTheory.CommaMorphism
-/
@@ -222,7 +222,7 @@ variable {L₁ L₂ L₃ : A ⥤ T} {R₁ R₂ R₃ : B ⥤ T}
/- warning: category_theory.comma.iso_mk -> CategoryTheory.Comma.isoMk 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] {T : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} T] {L₁ : CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 T _inst_3} {R₁ : CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 T _inst_3} {X : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} {Y : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} (l : CategoryTheory.Iso.{u1, u4} (autoParamₓ.{succ u4} A (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (r : CategoryTheory.Iso.{u2, u5} (autoParamₓ.{succ u5} B (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)), (Eq.{succ u3} (Quiver.Hom.{succ u3, u6} T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y))) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.map.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u1, u4} (autoParamₓ.{succ u4} A (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) l)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Functor.map.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u2, u5} (autoParamₓ.{succ u5} B (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) r)))) -> (CategoryTheory.Iso.{max u1 u2, max u4 u5 u3} (CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) (CategoryTheory.commaCategory.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) X Y)
+ forall {A : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u1, u4} A] {B : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u2, u5} B] {T : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} T] {L₁ : CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 T _inst_3} {R₁ : CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 T _inst_3} {X : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} {Y : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} (l : CategoryTheory.Iso.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (r : CategoryTheory.Iso.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)), (Eq.{succ u3} (Quiver.Hom.{succ u3, u6} T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y))) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Functor.map.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) l)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (CategoryTheory.Functor.obj.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁ (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (CategoryTheory.Functor.obj.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Functor.map.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁ (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) r)))) -> (CategoryTheory.Iso.{max u1 u2, max u4 u5 u3} (CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) (CategoryTheory.commaCategory.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) X Y)
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] {T : Type.{u6}} [_inst_3 : CategoryTheory.Category.{u3, u6} T] {L₁ : CategoryTheory.Functor.{u1, u3, u4, u6} A _inst_1 T _inst_3} {R₁ : CategoryTheory.Functor.{u2, u3, u5, u6} B _inst_2 T _inst_3} {X : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} {Y : CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁} (l : CategoryTheory.Iso.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (r : CategoryTheory.Iso.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)), (Eq.{succ u3} (Quiver.Hom.{succ u3, u6} T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y))) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (Prefunctor.map.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u1, u4} A _inst_1 (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) l)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.CategoryStruct.comp.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3) (Prefunctor.obj.{succ u1, succ u3, u4, u6} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} A (CategoryTheory.Category.toCategoryStruct.{u1, u4} A _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u4, u6} A _inst_1 T _inst_3 L₁) (CategoryTheory.Comma.left.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X)) (Prefunctor.obj.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y)) (CategoryTheory.Comma.hom.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (Prefunctor.map.{succ u2, succ u3, u5, u6} B (CategoryTheory.CategoryStruct.toQuiver.{u2, u5} B (CategoryTheory.Category.toCategoryStruct.{u2, u5} B _inst_2)) T (CategoryTheory.CategoryStruct.toQuiver.{u3, u6} T (CategoryTheory.Category.toCategoryStruct.{u3, u6} T _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u5, u6} B _inst_2 T _inst_3 R₁) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) (CategoryTheory.Iso.hom.{u2, u5} B _inst_2 (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ X) (CategoryTheory.Comma.right.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁ Y) r)))) -> (CategoryTheory.Iso.{max u1 u2, max (max u4 u5) u3} (CategoryTheory.Comma.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) (CategoryTheory.commaCategory.{u1, u2, u3, u4, u5, u6} A _inst_1 B _inst_2 T _inst_3 L₁ R₁) X Y)
Case conversion may be inaccurate. Consider using '#align category_theory.comma.iso_mk CategoryTheory.Comma.isoMkₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Functor.Full
a Prop (#12449)
Before this PR, Functor.Full
contained the data of the preimage of maps by a full functor F
. This PR makes Functor.Full
a proposition. This is to prevent any diamond to appear.
The lemma Functor.image_preimage
is also renamed Functor.map_preimage
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -332,7 +332,8 @@ instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.Faithful] : (preLeft F L R
(by apply congrArg CommaMorphism.right h)
instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.Full] : (preLeft F L R).Full where
- preimage {X Y} f := CommaMorphism.mk (F.preimage f.left) f.right (by simpa using f.w)
+ map_surjective {X Y} f :=
+ ⟨CommaMorphism.mk (F.preimage f.left) f.right (by simpa using f.w), by aesop_cat⟩
instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.EssSurj] : (preLeft F L R).EssSurj where
mem_essImage Y :=
@@ -362,7 +363,8 @@ instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.Faithful] : (preRight L F
(F.map_injective (congrArg CommaMorphism.right h))
instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.Full] : (preRight L F R).Full where
- preimage {X Y} f := CommaMorphism.mk f.left (F.preimage f.right) (by simpa using f.w)
+ map_surjective {X Y} f :=
+ ⟨CommaMorphism.mk f.left (F.preimage f.right) (by simpa using f.w), by aesop_cat⟩
instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.EssSurj] : (preRight L F R).EssSurj where
mem_essImage Y :=
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -327,23 +327,23 @@ def preLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) : Comma (F ⋙ L) R ⥤ Co
w := by simpa using f.w }
#align category_theory.comma.pre_left CategoryTheory.Comma.preLeft
-instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [Faithful F] : Faithful (preLeft F L R) where
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.Faithful] : (preLeft F L R).Faithful where
map_injective {X Y} f g h := hom_ext _ _ (F.map_injective (congrArg CommaMorphism.left h))
(by apply congrArg CommaMorphism.right h)
-instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [Full F] : Full (preLeft F L R) where
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.Full] : (preLeft F L R).Full where
preimage {X Y} f := CommaMorphism.mk (F.preimage f.left) f.right (by simpa using f.w)
-instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [EssSurj F] : EssSurj (preLeft F L R) where
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.EssSurj] : (preLeft F L R).EssSurj where
mem_essImage Y :=
⟨Comma.mk (F.objPreimage Y.left) Y.right ((L.mapIso (F.objObjPreimageIso _)).hom ≫ Y.hom),
⟨isoMk (F.objObjPreimageIso _) (Iso.refl _) (by simp)⟩⟩
/-- If `F` is an equivalence, then so is `preLeft F L R`. -/
-noncomputable def isEquivalencePreLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [IsEquivalence F] :
- IsEquivalence (preLeft F L R) :=
+noncomputable def isEquivalencePreLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [F.IsEquivalence] :
+ (preLeft F L R).IsEquivalence :=
have := Equivalence.essSurj_of_equivalence F
- Equivalence.ofFullyFaithfullyEssSurj _
+ Functor.IsEquivalence.ofFullyFaithfullyEssSurj _
/-- The functor `(F ⋙ L, R) ⥤ (L, R)` -/
@[simps]
@@ -357,23 +357,23 @@ def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ C
right := F.map f.right }
#align category_theory.comma.pre_right CategoryTheory.Comma.preRight
-instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [Faithful F] : Faithful (preRight L F R) where
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.Faithful] : (preRight L F R).Faithful where
map_injective {X Y } f g h := hom_ext _ _ (by apply congrArg CommaMorphism.left h)
(F.map_injective (congrArg CommaMorphism.right h))
-instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [Full F] : Full (preRight L F R) where
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.Full] : (preRight L F R).Full where
preimage {X Y} f := CommaMorphism.mk f.left (F.preimage f.right) (by simpa using f.w)
-instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [EssSurj F] : EssSurj (preRight L F R) where
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.EssSurj] : (preRight L F R).EssSurj where
mem_essImage Y :=
⟨Comma.mk Y.left (F.objPreimage Y.right) (Y.hom ≫ (R.mapIso (F.objObjPreimageIso _)).inv),
⟨isoMk (Iso.refl _) (F.objObjPreimageIso _) (by simp [← R.map_comp])⟩⟩
/-- If `F` is an equivalence, then so is `preRight L F R`. -/
-noncomputable def isEquivalencePreRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [IsEquivalence F] :
- IsEquivalence (preRight L F R) :=
+noncomputable def isEquivalencePreRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [F.IsEquivalence] :
+ (preRight L F R).IsEquivalence :=
have := Equivalence.essSurj_of_equivalence F
- Equivalence.ofFullyFaithfullyEssSurj _
+ Functor.IsEquivalence.ofFullyFaithfullyEssSurj _
/-- The functor `(L, R) ⥤ (L ⋙ F, R ⋙ F)` -/
@[simps]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -107,7 +107,7 @@ section
variable {X Y Z : Comma L R} {f : X ⟶ Y} {g : Y ⟶ Z}
--- porting note: this lemma was added because `CommaMorphism.ext`
+-- Porting note: this lemma was added because `CommaMorphism.ext`
-- was not triggered automatically
@[ext]
lemma hom_ext (f g : X ⟶ Y) (h₁ : f.left = g.left) (h₂ : f.right = g.right) : f = g :=
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>
@@ -167,9 +167,8 @@ theorem eqToHom_left (X Y : Comma L R) (H : X = Y) :
#align category_theory.comma.eq_to_hom_left CategoryTheory.Comma.eqToHom_left
@[simp]
-theorem eqToHom_right (X Y : Comma L R) (H : X = Y) : CommaMorphism.right (eqToHom H) = eqToHom (by
- cases H
- rfl) := by
+theorem eqToHom_right (X Y : Comma L R) (H : X = Y) :
+ CommaMorphism.right (eqToHom H) = eqToHom (by cases H; rfl) := by
cases H
rfl
#align category_theory.comma.eq_to_hom_right CategoryTheory.Comma.eqToHom_right
@@ -239,6 +239,20 @@ def mapLeftComp (l : L₁ ⟶ L₂) (l' : L₂ ⟶ L₃) :
right := 𝟙 _ } }
#align category_theory.comma.map_left_comp CategoryTheory.Comma.mapLeftComp
+/-- Two equal natural transformations `L₁ ⟶ L₂` yield naturally isomorphic functors
+ `Comma L₁ R ⥤ Comma L₂ R`. -/
+@[simps!]
+def mapLeftEq (l l' : L₁ ⟶ L₂) (h : l = l') : mapLeft R l ≅ mapLeft R l' :=
+ NatIso.ofComponents (fun X => isoMk (Iso.refl _) (Iso.refl _) (by aesop_cat)) (by aesop_cat)
+
+/-- A natural isomorphism `L₁ ≅ L₂` induces an equivalence of categories
+ `Comma L₁ R ≌ Comma L₂ R`. -/
+@[simps!]
+def mapLeftIso (i : L₁ ≅ L₂) : Comma L₁ R ≌ Comma L₂ R :=
+ Equivalence.mk (mapLeft _ i.inv) (mapLeft _ i.hom)
+ ((mapLeftId _ _).symm ≪≫ mapLeftEq _ _ _ i.hom_inv_id.symm ≪≫ mapLeftComp _ _ _)
+ ((mapLeftComp _ _ _).symm ≪≫ mapLeftEq _ _ _ i.inv_hom_id ≪≫ mapLeftId _ _)
+
/-- A natural transformation `R₁ ⟶ R₂` induces a functor `Comma L R₁ ⥤ Comma L R₂`. -/
@[simps]
def mapRight (r : R₁ ⟶ R₂) : Comma L R₁ ⥤ Comma L R₂ where
@@ -281,6 +295,20 @@ def mapRightComp (r : R₁ ⟶ R₂) (r' : R₂ ⟶ R₃) :
right := 𝟙 _ } }
#align category_theory.comma.map_right_comp CategoryTheory.Comma.mapRightComp
+/-- Two equal natural transformations `R₁ ⟶ R₂` yield naturally isomorphic functors
+ `Comma L R₁ ⥤ Comma L R₂`. -/
+@[simps!]
+def mapRightEq (r r' : R₁ ⟶ R₂) (h : r = r') : mapRight L r ≅ mapRight L r' :=
+ NatIso.ofComponents (fun X => isoMk (Iso.refl _) (Iso.refl _) (by aesop_cat)) (by aesop_cat)
+
+/-- A natural isomorphism `R₁ ≅ R₂` induces an equivalence of categories
+ `Comma L R₁ ≌ Comma L R₂`. -/
+@[simps!]
+def mapRightIso (i : R₁ ≅ R₂) : Comma L R₁ ≌ Comma L R₂ :=
+ Equivalence.mk (mapRight _ i.hom) (mapRight _ i.inv)
+ ((mapRightId _ _).symm ≪≫ mapRightEq _ _ _ i.hom_inv_id.symm ≪≫ mapRightComp _ _ _)
+ ((mapRightComp _ _ _).symm ≪≫ mapRightEq _ _ _ i.inv_hom_id ≪≫ mapRightId _ _)
+
end
section
@@ -300,6 +300,24 @@ def preLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) : Comma (F ⋙ L) R ⥤ Co
w := by simpa using f.w }
#align category_theory.comma.pre_left CategoryTheory.Comma.preLeft
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [Faithful F] : Faithful (preLeft F L R) where
+ map_injective {X Y} f g h := hom_ext _ _ (F.map_injective (congrArg CommaMorphism.left h))
+ (by apply congrArg CommaMorphism.right h)
+
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [Full F] : Full (preLeft F L R) where
+ preimage {X Y} f := CommaMorphism.mk (F.preimage f.left) f.right (by simpa using f.w)
+
+instance (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [EssSurj F] : EssSurj (preLeft F L R) where
+ mem_essImage Y :=
+ ⟨Comma.mk (F.objPreimage Y.left) Y.right ((L.mapIso (F.objObjPreimageIso _)).hom ≫ Y.hom),
+ ⟨isoMk (F.objObjPreimageIso _) (Iso.refl _) (by simp)⟩⟩
+
+/-- If `F` is an equivalence, then so is `preLeft F L R`. -/
+noncomputable def isEquivalencePreLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) [IsEquivalence F] :
+ IsEquivalence (preLeft F L R) :=
+ have := Equivalence.essSurj_of_equivalence F
+ Equivalence.ofFullyFaithfullyEssSurj _
+
/-- The functor `(F ⋙ L, R) ⥤ (L, R)` -/
@[simps]
def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ Comma L R where
@@ -312,6 +330,24 @@ def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ C
right := F.map f.right }
#align category_theory.comma.pre_right CategoryTheory.Comma.preRight
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [Faithful F] : Faithful (preRight L F R) where
+ map_injective {X Y } f g h := hom_ext _ _ (by apply congrArg CommaMorphism.left h)
+ (F.map_injective (congrArg CommaMorphism.right h))
+
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [Full F] : Full (preRight L F R) where
+ preimage {X Y} f := CommaMorphism.mk f.left (F.preimage f.right) (by simpa using f.w)
+
+instance (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [EssSurj F] : EssSurj (preRight L F R) where
+ mem_essImage Y :=
+ ⟨Comma.mk Y.left (F.objPreimage Y.right) (Y.hom ≫ (R.mapIso (F.objObjPreimageIso _)).inv),
+ ⟨isoMk (Iso.refl _) (F.objObjPreimageIso _) (by simp [← R.map_comp])⟩⟩
+
+/-- If `F` is an equivalence, then so is `preRight L F R`. -/
+noncomputable def isEquivalencePreRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) [IsEquivalence F] :
+ IsEquivalence (preRight L F R) :=
+ have := Equivalence.essSurj_of_equivalence F
+ Equivalence.ofFullyFaithfullyEssSurj _
+
/-- The functor `(L, R) ⥤ (L ⋙ F, R ⋙ F)` -/
@[simps]
def post (L : A ⥤ T) (R : B ⥤ T) (F : T ⥤ C) : Comma L R ⥤ Comma (L ⋙ F) (R ⋙ F) where
@@ -2,16 +2,13 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.comma
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Iso
import Mathlib.CategoryTheory.Functor.Category
import Mathlib.CategoryTheory.EqToHom
+#align_import category_theory.comma from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
+
/-!
# Comma categories
@@ -22,11 +22,11 @@ with a common codomain. Specifically, for functors `L : A ⥤ T` and `R : B ⥤
`hom' : L.obj left' ⟶ R.obj right'` is a commutative square
```
-L.obj left ⟶ L.obj left'
+L.obj left ⟶ L.obj left'
| |
hom | | hom'
↓ ↓
-R.obj right ⟶ R.obj right',
+R.obj right ⟶ R.obj right',
```
where the top and bottom morphism come from morphisms `left ⟶ left'` and `right ⟶ right'`,
@@ -55,9 +55,7 @@ namespace CategoryTheory
universe v₁ v₂ v₃ v₄ v₅ u₁ u₂ u₃ u₄ u₅
variable {A : Type u₁} [Category.{v₁} A]
-
variable {B : Type u₂} [Category.{v₂} B]
-
variable {T : Type u₃} [Category.{v₃} T]
/-- The objects of the comma category are triples of an object `left : A`, an object
@@ -69,8 +67,8 @@ structure Comma (L : A ⥤ T) (R : B ⥤ T) : Type max u₁ u₂ v₃ where
#align category_theory.comma CategoryTheory.Comma
-- Satisfying the inhabited linter
-instance Comma.inhabited [Inhabited T] : Inhabited (Comma (𝟭 T) (𝟭 T))
- where default :=
+instance Comma.inhabited [Inhabited T] : Inhabited (Comma (𝟭 T) (𝟭 T)) where
+ default :=
{ left := default
right := default
hom := 𝟙 default }
@@ -96,8 +94,7 @@ instance CommaMorphism.inhabited [Inhabited (Comma L R)] :
attribute [reassoc (attr := simp)] CommaMorphism.w
-instance commaCategory : Category (Comma L R)
- where
+instance commaCategory : Category (Comma L R) where
Hom X Y := CommaMorphism X Y
id X :=
{ left := 𝟙 X.left
@@ -189,7 +186,7 @@ directions give a commutative square.
-/
@[simps]
def isoMk {X Y : Comma L₁ R₁} (l : X.left ≅ Y.left) (r : X.right ≅ Y.right)
- (h : L₁.map l.hom ≫ Y.hom = X.hom ≫ R₁.map r.hom) : X ≅ Y where
+ (h : L₁.map l.hom ≫ Y.hom = X.hom ≫ R₁.map r.hom := by aesop_cat) : X ≅ Y where
hom :=
{ left := l.hom
right := r.hom
@@ -205,8 +202,7 @@ def isoMk {X Y : Comma L₁ R₁} (l : X.left ≅ Y.left) (r : X.right ≅ Y.rig
/-- A natural transformation `L₁ ⟶ L₂` induces a functor `Comma L₂ R ⥤ Comma L₁ R`. -/
@[simps]
-def mapLeft (l : L₁ ⟶ L₂) : Comma L₂ R ⥤ Comma L₁ R
- where
+def mapLeft (l : L₁ ⟶ L₂) : Comma L₂ R ⥤ Comma L₁ R where
obj X :=
{ left := X.left
right := X.right
@@ -219,8 +215,7 @@ def mapLeft (l : L₁ ⟶ L₂) : Comma L₂ R ⥤ Comma L₁ R
/-- The functor `Comma L R ⥤ Comma L R` induced by the identity natural transformation on `L` is
naturally isomorphic to the identity functor. -/
@[simps]
-def mapLeftId : mapLeft R (𝟙 L) ≅ 𝟭 _
- where
+def mapLeftId : mapLeft R (𝟙 L) ≅ 𝟭 _ where
hom :=
{ app := fun X =>
{ left := 𝟙 _
@@ -235,8 +230,8 @@ def mapLeftId : mapLeft R (𝟙 L) ≅ 𝟭 _
`l : L₁ ⟶ L₂` and `l' : L₂ ⟶ L₃` is naturally isomorphic to the composition of the two functors
induced by these natural transformations. -/
@[simps]
-def mapLeftComp (l : L₁ ⟶ L₂) (l' : L₂ ⟶ L₃) : mapLeft R (l ≫ l') ≅ mapLeft R l' ⋙ mapLeft R l
- where
+def mapLeftComp (l : L₁ ⟶ L₂) (l' : L₂ ⟶ L₃) :
+ mapLeft R (l ≫ l') ≅ mapLeft R l' ⋙ mapLeft R l where
hom :=
{ app := fun X =>
{ left := 𝟙 _
@@ -249,8 +244,7 @@ def mapLeftComp (l : L₁ ⟶ L₂) (l' : L₂ ⟶ L₃) : mapLeft R (l ≫ l')
/-- A natural transformation `R₁ ⟶ R₂` induces a functor `Comma L R₁ ⥤ Comma L R₂`. -/
@[simps]
-def mapRight (r : R₁ ⟶ R₂) : Comma L R₁ ⥤ Comma L R₂
- where
+def mapRight (r : R₁ ⟶ R₂) : Comma L R₁ ⥤ Comma L R₂ where
obj X :=
{ left := X.left
right := X.right
@@ -263,8 +257,7 @@ def mapRight (r : R₁ ⟶ R₂) : Comma L R₁ ⥤ Comma L R₂
/-- The functor `Comma L R ⥤ Comma L R` induced by the identity natural transformation on `R` is
naturally isomorphic to the identity functor. -/
@[simps]
-def mapRightId : mapRight L (𝟙 R) ≅ 𝟭 _
- where
+def mapRightId : mapRight L (𝟙 R) ≅ 𝟭 _ where
hom :=
{ app := fun X =>
{ left := 𝟙 _
@@ -279,8 +272,8 @@ def mapRightId : mapRight L (𝟙 R) ≅ 𝟭 _
`r : R₁ ⟶ R₂` and `r' : R₂ ⟶ R₃` is naturally isomorphic to the composition of the functors
induced by these natural transformations. -/
@[simps]
-def mapRightComp (r : R₁ ⟶ R₂) (r' : R₂ ⟶ R₃) : mapRight L (r ≫ r') ≅ mapRight L r ⋙ mapRight L r'
- where
+def mapRightComp (r : R₁ ⟶ R₂) (r' : R₂ ⟶ R₃) :
+ mapRight L (r ≫ r') ≅ mapRight L r ⋙ mapRight L r' where
hom :=
{ app := fun X =>
{ left := 𝟙 _
@@ -299,8 +292,7 @@ variable {C : Type u₄} [Category.{v₄} C] {D : Type u₅} [Category.{v₅} D]
/-- The functor `(F ⋙ L, R) ⥤ (L, R)` -/
@[simps]
-def preLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) : Comma (F ⋙ L) R ⥤ Comma L R
- where
+def preLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) : Comma (F ⋙ L) R ⥤ Comma L R where
obj X :=
{ left := F.obj X.left
right := X.right
@@ -313,8 +305,7 @@ def preLeft (F : C ⥤ A) (L : A ⥤ T) (R : B ⥤ T) : Comma (F ⋙ L) R ⥤ Co
/-- The functor `(F ⋙ L, R) ⥤ (L, R)` -/
@[simps]
-def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ Comma L R
- where
+def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ Comma L R where
obj X :=
{ left := X.left
right := F.obj X.right
@@ -326,8 +317,7 @@ def preRight (L : A ⥤ T) (F : C ⥤ B) (R : B ⥤ T) : Comma L (F ⋙ R) ⥤ C
/-- The functor `(L, R) ⥤ (L ⋙ F, R ⋙ F)` -/
@[simps]
-def post (L : A ⥤ T) (R : B ⥤ T) (F : T ⥤ C) : Comma L R ⥤ Comma (L ⋙ F) (R ⋙ F)
- where
+def post (L : A ⥤ T) (R : B ⥤ T) (F : T ⥤ C) : Comma L R ⥤ Comma (L ⋙ F) (R ⋙ F) where
obj X :=
{ left := X.left
right := X.right
fix-comments.py
on all files.@@ -51,7 +51,7 @@ comma, slice, coslice, over, under, arrow
namespace CategoryTheory
--- declare the `v`'s first; see `category_theory.category` for an explanation
+-- declare the `v`'s first; see `CategoryTheory.Category` for an explanation
universe v₁ v₂ v₃ v₄ v₅ u₁ u₂ u₃ u₄ u₅
variable {A : Type u₁} [Category.{v₁} A]
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -167,24 +167,15 @@ def natTrans : fst L R ⋙ L ⟶ snd L R ⋙ R where app X := X.hom
@[simp]
theorem eqToHom_left (X Y : Comma L R) (H : X = Y) :
- CommaMorphism.left (eqToHom H) =
- eqToHom
- (by
- cases H
- rfl) :=
- by
+ CommaMorphism.left (eqToHom H) = eqToHom (by cases H; rfl) := by
cases H
rfl
#align category_theory.comma.eq_to_hom_left CategoryTheory.Comma.eqToHom_left
@[simp]
-theorem eqToHom_right (X Y : Comma L R) (H : X = Y) :
- CommaMorphism.right (eqToHom H) =
- eqToHom
- (by
- cases H
- rfl) :=
- by
+theorem eqToHom_right (X Y : Comma L R) (H : X = Y) : CommaMorphism.right (eqToHom H) = eqToHom (by
+ cases H
+ rfl) := by
cases H
rfl
#align category_theory.comma.eq_to_hom_right CategoryTheory.Comma.eqToHom_right
@@ -198,8 +189,7 @@ directions give a commutative square.
-/
@[simps]
def isoMk {X Y : Comma L₁ R₁} (l : X.left ≅ Y.left) (r : X.right ≅ Y.right)
- (h : L₁.map l.hom ≫ Y.hom = X.hom ≫ R₁.map r.hom) : X ≅ Y
- where
+ (h : L₁.map l.hom ≫ Y.hom = X.hom ≫ R₁.map r.hom) : X ≅ Y where
hom :=
{ left := l.hom
right := r.hom
@@ -207,8 +197,7 @@ def isoMk {X Y : Comma L₁ R₁} (l : X.left ≅ Y.left) (r : X.right ≅ Y.rig
inv :=
{ left := l.inv
right := r.inv
- w :=
- by
+ w := by
rw [← L₁.mapIso_inv l, Iso.inv_comp_eq, L₁.mapIso_hom, ← Category.assoc, h,
Category.assoc, ← R₁.map_comp]
simp }
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johan Commelin, Bhavik Mehta
! This file was ported from Lean 3 source module category_theory.comma
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
+! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -63,8 +63,8 @@ variable {T : Type u₃} [Category.{v₃} T]
/-- The objects of the comma category are triples of an object `left : A`, an object
`right : B` and a morphism `hom : L.obj left ⟶ R.obj right`. -/
structure Comma (L : A ⥤ T) (R : B ⥤ T) : Type max u₁ u₂ v₃ where
- left : A := by aesop_cat
- right : B := by aesop_cat
+ left : A
+ right : B
hom : L.obj left ⟶ R.obj right
#align category_theory.comma CategoryTheory.Comma
@@ -83,8 +83,8 @@ variable {L : A ⥤ T} {R : B ⥤ T}
-/
@[ext]
structure CommaMorphism (X Y : Comma L R) where
- left : X.left ⟶ Y.left := by aesop_cat
- right : X.right ⟶ Y.right := by aesop_cat
+ left : X.left ⟶ Y.left
+ right : X.right ⟶ Y.right
w : L.map left ≫ Y.hom = X.hom ≫ R.map right := by aesop_cat
#align category_theory.comma_morphism CategoryTheory.CommaMorphism
All dependencies are ported!