category_theory.quotientMathlib.CategoryTheory.Quotient

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -136,9 +136,10 @@ def functor : C ⥤ Quotient r where
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
 -/
 
-noncomputable instance : Full (functor r) where preimage X Y f := Quot.out f
+noncomputable instance : CategoryTheory.Functor.Full (functor r) where preimage X Y f := Quot.out f
 
-instance : EssSurj (functor r) where mem_essImage Y := ⟨Y.as, ⟨eqToIso (by ext; rfl)⟩⟩
+instance : CategoryTheory.Functor.EssSurj (functor r)
+    where mem_essImage Y := ⟨Y.as, ⟨eqToIso (by ext; rfl)⟩⟩
 
 #print CategoryTheory.Quotient.induction /-
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2020 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn
 -/
-import CategoryTheory.NaturalIsomorphism
+import CategoryTheory.NatIso
 import CategoryTheory.EqToHom
 
 #align_import category_theory.quotient from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn
 -/
-import Mathbin.CategoryTheory.NaturalIsomorphism
-import Mathbin.CategoryTheory.EqToHom
+import CategoryTheory.NaturalIsomorphism
+import CategoryTheory.EqToHom
 
 #align_import category_theory.quotient from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn
-
-! This file was ported from Lean 3 source module category_theory.quotient
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.NaturalIsomorphism
 import Mathbin.CategoryTheory.EqToHom
 
+#align_import category_theory.quotient from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+
 /-!
 # Quotient category
 
Diff
@@ -38,8 +38,6 @@ namespace CategoryTheory
 
 variable {C : Type _} [Category C] (r : HomRel C)
 
-include r
-
 #print CategoryTheory.Congruence /-
 /-- A `hom_rel` is a congruence when it's an equivalence on every hom-set, and it can be composed
 from left and right. -/
@@ -115,11 +113,13 @@ def comp ⦃a b c : Quotient r⦄ : Hom r a b → Hom r b c → Hom r a c := fun
 #align category_theory.quotient.comp CategoryTheory.Quotient.comp
 -/
 
+#print CategoryTheory.Quotient.comp_mk /-
 @[simp]
 theorem comp_mk {a b c : Quotient r} (f : a.as ⟶ b.as) (g : b.as ⟶ c.as) :
     comp r (Quot.mk _ f) (Quot.mk _ g) = Quot.mk _ (f ≫ g) :=
   rfl
 #align category_theory.quotient.comp_mk CategoryTheory.Quotient.comp_mk
+-/
 
 #print CategoryTheory.Quotient.category /-
 instance category : Category (Quotient r)
@@ -143,16 +143,21 @@ noncomputable instance : Full (functor r) where preimage X Y f := Quot.out f
 
 instance : EssSurj (functor r) where mem_essImage Y := ⟨Y.as, ⟨eqToIso (by ext; rfl)⟩⟩
 
+#print CategoryTheory.Quotient.induction /-
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
     (h : ∀ {x y : C} (f : x ⟶ y), P ((functor r).map f)) : ∀ {a b : Quotient r} (f : a ⟶ b), P f :=
   by rintro ⟨x⟩ ⟨y⟩ ⟨f⟩; exact h f
 #align category_theory.quotient.induction CategoryTheory.Quotient.induction
+-/
 
+#print CategoryTheory.Quotient.sound /-
 protected theorem sound {a b : C} {f₁ f₂ : a ⟶ b} (h : r f₁ f₂) :
     (functor r).map f₁ = (functor r).map f₂ := by
   simpa using Quot.sound (comp_closure.intro (𝟙 a) f₁ f₂ (𝟙 b) h)
 #align category_theory.quotient.sound CategoryTheory.Quotient.sound
+-/
 
+#print CategoryTheory.Quotient.functor_map_eq_iff /-
 theorem functor_map_eq_iff [Congruence r] {X Y : C} (f f' : X ⟶ Y) :
     (functor r).map f = (functor r).map f' ↔ r f f' :=
   by
@@ -166,12 +171,12 @@ theorem functor_map_eq_iff [Congruence r] {X Y : C} (f f' : X ⟶ Y) :
     · apply trans <;> assumption
   · apply Quotient.sound
 #align category_theory.quotient.functor_map_eq_iff CategoryTheory.Quotient.functor_map_eq_iff
+-/
 
 variable {D : Type _} [Category D] (F : C ⥤ D)
   (H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂)
 
-include H
-
+#print CategoryTheory.Quotient.lift /-
 /-- The induced functor on the quotient category. -/
 @[simps]
 def lift : Quotient r ⥤ D where
@@ -181,14 +186,18 @@ def lift : Quotient r ⥤ D where
   map_id' a := F.map_id a.as
   map_comp' := by rintro a b c ⟨f⟩ ⟨g⟩; exact F.map_comp f g
 #align category_theory.quotient.lift CategoryTheory.Quotient.lift
+-/
 
+#print CategoryTheory.Quotient.lift_spec /-
 theorem lift_spec : functor r ⋙ lift r F H = F :=
   by
   apply Functor.ext; rotate_left
   · rintro X; rfl
   · rintro X Y f; simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
+-/
 
+#print CategoryTheory.Quotient.lift_unique /-
 theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ = lift r F H :=
   by
   subst_vars
@@ -201,26 +210,35 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
     simp only [Quot.liftOn_mk, functor.comp_map]
     congr <;> ext <;> rfl
 #align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_unique
+-/
 
+#print CategoryTheory.Quotient.lift.isLift /-
 /-- The original functor factors through the induced functor. -/
 def lift.isLift : functor r ⋙ lift r F H ≅ F :=
   NatIso.ofComponents (fun X => Iso.refl _) (by tidy)
 #align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLift
+-/
 
+#print CategoryTheory.Quotient.lift.isLift_hom /-
 @[simp]
 theorem lift.isLift_hom (X : C) : (lift.isLift r F H).Hom.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_hom CategoryTheory.Quotient.lift.isLift_hom
+-/
 
+#print CategoryTheory.Quotient.lift.isLift_inv /-
 @[simp]
 theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_inv
+-/
 
+#print CategoryTheory.Quotient.lift_map_functor_map /-
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
     (lift r F H).map ((functor r).map f) = F.map f := by
   rw [← nat_iso.naturality_1 (lift.is_lift r F H)]; dsimp; simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
+-/
 
 end Quotient
 
Diff
@@ -29,7 +29,8 @@ relation, `functor_map_eq_iff` says that no unnecessary identifications have bee
 #print HomRel /-
 /-- A `hom_rel` on `C` consists of a relation on every hom-set. -/
 def HomRel (C) [Quiver C] :=
-  ∀ ⦃X Y : C⦄, (X ⟶ Y) → (X ⟶ Y) → Prop deriving Inhabited
+  ∀ ⦃X Y : C⦄, (X ⟶ Y) → (X ⟶ Y) → Prop
+deriving Inhabited
 #align hom_rel HomRel
 -/
 
@@ -192,7 +193,7 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
   by
   subst_vars
   apply functor.hext
-  · rintro X; dsimp [lift, Functor]; congr ; ext; rfl
+  · rintro X; dsimp [lift, Functor]; congr; ext; rfl
   · rintro X Y f
     dsimp [lift, Functor]
     apply Quot.inductionOn f
Diff
@@ -114,12 +114,6 @@ def comp ⦃a b c : Quotient r⦄ : Hom r a b → Hom r b c → Hom r a c := fun
 #align category_theory.quotient.comp CategoryTheory.Quotient.comp
 -/
 
-/- warning: category_theory.quotient.comp_mk -> CategoryTheory.Quotient.comp_mk is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {c : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)), Eq.{succ u2} (CategoryTheory.Quotient.Hom.{u1, u2} C _inst_1 r a c) (CategoryTheory.Quotient.comp.{u1, u2} C _inst_1 r a b c (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) f) (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) g)) (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c) f g))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {c : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)), Eq.{succ u1} (CategoryTheory.Quotient.Hom.{u2, u1} C _inst_1 r a c) (CategoryTheory.Quotient.comp.{u2, u1} C _inst_1 r a b c (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) f) (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) g)) (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c) f g))
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.comp_mk CategoryTheory.Quotient.comp_mkₓ'. -/
 @[simp]
 theorem comp_mk {a b c : Quotient r} (f : a.as ⟶ b.as) (g : b.as ⟶ c.as) :
     comp r (Quot.mk _ f) (Quot.mk _ g) = Quot.mk _ (f ≫ g) :=
@@ -148,34 +142,16 @@ noncomputable instance : Full (functor r) where preimage X Y f := Quot.out f
 
 instance : EssSurj (functor r) where mem_essImage Y := ⟨Y.as, ⟨eqToIso (by ext; rfl)⟩⟩
 
-/- warning: category_theory.quotient.induction -> CategoryTheory.Quotient.induction is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {P : forall {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r}, (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) a b) -> Prop}, (forall {x : C} {y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), P (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) x) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) y) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) x y f)) -> (forall {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} (f : Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) a b), P a b f)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) {P : forall {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r}, (Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) a b) -> Prop}, (forall {x : C} {y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) x y), P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) x) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) y) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) x y f)) -> (forall {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} (f : Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) a b), P a b f)
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.induction CategoryTheory.Quotient.inductionₓ'. -/
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
     (h : ∀ {x y : C} (f : x ⟶ y), P ((functor r).map f)) : ∀ {a b : Quotient r} (f : a ⟶ b), P f :=
   by rintro ⟨x⟩ ⟨y⟩ ⟨f⟩; exact h f
 #align category_theory.quotient.induction CategoryTheory.Quotient.induction
 
-/- warning: category_theory.quotient.sound -> CategoryTheory.Quotient.sound is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : C} {b : C} {f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b} {f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b}, (r a b f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) b)) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a b f₁) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a b f₂))
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : C} {b : C} {f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b} {f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b}, (r a b f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (Prefunctor.obj.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a) (Prefunctor.obj.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) b)) (Prefunctor.map.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a b f₁) (Prefunctor.map.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a b f₂))
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.sound CategoryTheory.Quotient.soundₓ'. -/
 protected theorem sound {a b : C} {f₁ f₂ : a ⟶ b} (h : r f₁ f₂) :
     (functor r).map f₁ = (functor r).map f₂ := by
   simpa using Quot.sound (comp_closure.intro (𝟙 a) f₁ f₂ (𝟙 b) h)
 #align category_theory.quotient.sound CategoryTheory.Quotient.sound
 
-/- warning: category_theory.quotient.functor_map_eq_iff -> CategoryTheory.Quotient.functor_map_eq_iff is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) [_inst_2 : CategoryTheory.Congruence.{u1, u2} C _inst_1 r] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (f' : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), Iff (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y)) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f')) (r X Y f f')
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) [_inst_2 : CategoryTheory.Congruence.{u2, u1} C _inst_1 r] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (f' : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y), Iff (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) Y)) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X Y f) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X Y f')) (r X Y f f')
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.functor_map_eq_iff CategoryTheory.Quotient.functor_map_eq_iffₓ'. -/
 theorem functor_map_eq_iff [Congruence r] {X Y : C} (f f' : X ⟶ Y) :
     (functor r).map f = (functor r).map f' ↔ r f f' :=
   by
@@ -195,12 +171,6 @@ variable {D : Type _} [Category D] (F : C ⥤ D)
 
 include H
 
-/- warning: category_theory.quotient.lift -> CategoryTheory.Quotient.lift is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2), (forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) -> (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2)
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2), (forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) -> (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift CategoryTheory.Quotient.liftₓ'. -/
 /-- The induced functor on the quotient category. -/
 @[simps]
 def lift : Quotient r ⥤ D where
@@ -211,12 +181,6 @@ def lift : Quotient r ⥤ D where
   map_comp' := by rintro a b c ⟨f⟩ ⟨g⟩; exact F.map_comp f g
 #align category_theory.quotient.lift CategoryTheory.Quotient.lift
 
-/- warning: category_theory.quotient.lift_spec -> CategoryTheory.Quotient.lift_spec is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))), Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] (r : HomRel.{u4, succ u3} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1))) {D : Type.{u2}} [_inst_2 : CategoryTheory.Category.{u1, u2} D] (F : CategoryTheory.Functor.{u3, u1, u4, u2} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (Prefunctor.obj.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x y f₂))), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (CategoryTheory.Functor.{u3, u1, u4, u2} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u3, u3, u1, u4, u4, u2} C _inst_1 (CategoryTheory.Quotient.{u4, u3} C _inst_1 r) (CategoryTheory.Quotient.category.{u4, u3} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u4, u3} C _inst_1 r) (CategoryTheory.Quotient.lift.{u4, u3, u2, u1} C _inst_1 r D _inst_2 F H)) F
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_specₓ'. -/
 theorem lift_spec : functor r ⋙ lift r F H = F :=
   by
   apply Functor.ext; rotate_left
@@ -224,12 +188,6 @@ theorem lift_spec : functor r ⋙ lift r F H = F :=
   · rintro X Y f; simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
 
-/- warning: category_theory.quotient.lift_unique -> CategoryTheory.Quotient.lift_unique is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (Φ : CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2), (Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Φ) F) -> (Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2) Φ (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u4, u2} C] (r : HomRel.{u2, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1))) {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u3, u1} D] (F : CategoryTheory.Functor.{u4, u3, u2, u1} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x y f₂))) (Φ : CategoryTheory.Functor.{u4, u3, u2, u1} (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2), (Eq.{max (max (max (succ u2) (succ u4)) (succ u1)) (succ u3)} (CategoryTheory.Functor.{u4, u3, u2, u1} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u4, u4, u3, u2, u2, u1} C _inst_1 (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u2, u4} C _inst_1 r) Φ) F) -> (Eq.{max (max (max (succ u2) (succ u4)) (succ u1)) (succ u3)} (CategoryTheory.Functor.{u4, u3, u2, u1} (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2) Φ (CategoryTheory.Quotient.lift.{u2, u4, u1, u3} C _inst_1 r D _inst_2 F H))
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_uniqueₓ'. -/
 theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ = lift r F H :=
   by
   subst_vars
@@ -243,42 +201,21 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
     congr <;> ext <;> rfl
 #align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_unique
 
-/- warning: category_theory.quotient.lift.is_lift -> CategoryTheory.Quotient.lift.isLift is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))), CategoryTheory.Iso.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))), CategoryTheory.Iso.{max u1 u4, max (max (max u3 u1) u4) u2} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLiftₓ'. -/
 /-- The original functor factors through the induced functor. -/
 def lift.isLift : functor r ⋙ lift r F H ≅ F :=
   NatIso.ofComponents (fun X => Iso.refl _) (by tidy)
 #align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLift
 
-/- warning: category_theory.quotient.lift.is_lift_hom -> CategoryTheory.Quotient.lift.isLift_hom is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Iso.hom.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X))
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))) X) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Iso.hom.{max u1 u4, max (max (max u1 u2) u3) u4} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X))
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift_hom CategoryTheory.Quotient.lift.isLift_homₓ'. -/
 @[simp]
 theorem lift.isLift_hom (X : C) : (lift.isLift r F H).Hom.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_hom CategoryTheory.Quotient.lift.isLift_hom
 
-/- warning: category_theory.quotient.lift.is_lift_inv -> CategoryTheory.Quotient.lift.isLift_inv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) (CategoryTheory.Iso.inv.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X))
-but is expected to have type
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) (CategoryTheory.Iso.inv.{max u1 u4, max (max (max u1 u2) u3) u4} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X))
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_invₓ'. -/
 @[simp]
 theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_inv
 
-/- warning: category_theory.quotient.lift_map_functor_map -> CategoryTheory.Quotient.lift_map_functor_map is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_mapₓ'. -/
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
     (lift r F H).map ((functor r).map f) = F.map f := by
   rw [← nat_iso.naturality_1 (lift.is_lift r F H)]; dsimp; simp
Diff
@@ -146,13 +146,7 @@ def functor : C ⥤ Quotient r where
 
 noncomputable instance : Full (functor r) where preimage X Y f := Quot.out f
 
-instance : EssSurj (functor r)
-    where mem_essImage Y :=
-    ⟨Y.as,
-      ⟨eqToIso
-          (by
-            ext
-            rfl)⟩⟩
+instance : EssSurj (functor r) where mem_essImage Y := ⟨Y.as, ⟨eqToIso (by ext; rfl)⟩⟩
 
 /- warning: category_theory.quotient.induction -> CategoryTheory.Quotient.induction is a dubious translation:
 lean 3 declaration is
@@ -162,9 +156,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align category_theory.quotient.induction CategoryTheory.Quotient.inductionₓ'. -/
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
     (h : ∀ {x y : C} (f : x ⟶ y), P ((functor r).map f)) : ∀ {a b : Quotient r} (f : a ⟶ b), P f :=
-  by
-  rintro ⟨x⟩ ⟨y⟩ ⟨f⟩
-  exact h f
+  by rintro ⟨x⟩ ⟨y⟩ ⟨f⟩; exact h f
 #align category_theory.quotient.induction CategoryTheory.Quotient.induction
 
 /- warning: category_theory.quotient.sound -> CategoryTheory.Quotient.sound is a dubious translation:
@@ -191,13 +183,9 @@ theorem functor_map_eq_iff [Congruence r] {X Y : C} (f f' : X ⟶ Y) :
   · erw [Quot.eq]
     intro h
     induction' h with m m' hm
-    · cases hm
-      apply congruence.comp_left
-      apply congruence.comp_right
-      assumption
+    · cases hm; apply congruence.comp_left; apply congruence.comp_right; assumption
     · apply refl
-    · apply symm
-      assumption
+    · apply symm; assumption
     · apply trans <;> assumption
   · apply Quotient.sound
 #align category_theory.quotient.functor_map_eq_iff CategoryTheory.Quotient.functor_map_eq_iff
@@ -218,14 +206,9 @@ Case conversion may be inaccurate. Consider using '#align category_theory.quotie
 def lift : Quotient r ⥤ D where
   obj a := F.obj a.as
   map a b hf :=
-    Quot.liftOn hf (fun f => F.map f)
-      (by
-        rintro _ _ ⟨_, _, _, _, h⟩
-        simp [H _ _ _ _ h])
+    Quot.liftOn hf (fun f => F.map f) (by rintro _ _ ⟨_, _, _, _, h⟩; simp [H _ _ _ _ h])
   map_id' a := F.map_id a.as
-  map_comp' := by
-    rintro a b c ⟨f⟩ ⟨g⟩
-    exact F.map_comp f g
+  map_comp' := by rintro a b c ⟨f⟩ ⟨g⟩; exact F.map_comp f g
 #align category_theory.quotient.lift CategoryTheory.Quotient.lift
 
 /- warning: category_theory.quotient.lift_spec -> CategoryTheory.Quotient.lift_spec is a dubious translation:
@@ -237,10 +220,8 @@ Case conversion may be inaccurate. Consider using '#align category_theory.quotie
 theorem lift_spec : functor r ⋙ lift r F H = F :=
   by
   apply Functor.ext; rotate_left
-  · rintro X
-    rfl
-  · rintro X Y f
-    simp
+  · rintro X; rfl
+  · rintro X Y f; simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
 
 /- warning: category_theory.quotient.lift_unique -> CategoryTheory.Quotient.lift_unique is a dubious translation:
@@ -253,11 +234,7 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
   by
   subst_vars
   apply functor.hext
-  · rintro X
-    dsimp [lift, Functor]
-    congr
-    ext
-    rfl
+  · rintro X; dsimp [lift, Functor]; congr ; ext; rfl
   · rintro X Y f
     dsimp [lift, Functor]
     apply Quot.inductionOn f
@@ -303,11 +280,8 @@ theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X)
 <too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_mapₓ'. -/
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
-    (lift r F H).map ((functor r).map f) = F.map f :=
-  by
-  rw [← nat_iso.naturality_1 (lift.is_lift r F H)]
-  dsimp
-  simp
+    (lift r F H).map ((functor r).map f) = F.map f := by
+  rw [← nat_iso.naturality_1 (lift.is_lift r F H)]; dsimp; simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
 
 end Quotient
Diff
@@ -300,10 +300,7 @@ theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X)
 #align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_inv
 
 /- warning: category_theory.quotient.lift_map_functor_map -> CategoryTheory.Quotient.lift_map_functor_map is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y))) (CategoryTheory.Functor.map.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y)) f)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u4, u3} C] (r : HomRel.{u3, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1))) {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] (F : CategoryTheory.Functor.{u4, u2, u3, u1} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x y f₂))) {X : C} {Y : C} (f : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) X Y), Eq.{succ u2} (Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) Y))) (Prefunctor.map.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) Y) (Prefunctor.map.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X Y f)) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) X Y f)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_mapₓ'. -/
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
     (lift r F H).map ((functor r).map f) = F.map f :=
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn
 
 ! This file was ported from Lean 3 source module category_theory.quotient
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.EqToHom
 /-!
 # Quotient category
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 Constructs the quotient of a category by an arbitrary family of relations on its hom-sets,
 by introducing a type synonym for the objects, and identifying homs as necessary.
 
Diff
@@ -23,10 +23,12 @@ relation, `functor_map_eq_iff` says that no unnecessary identifications have bee
 -/
 
 
+#print HomRel /-
 /-- A `hom_rel` on `C` consists of a relation on every hom-set. -/
 def HomRel (C) [Quiver C] :=
   ∀ ⦃X Y : C⦄, (X ⟶ Y) → (X ⟶ Y) → Prop deriving Inhabited
 #align hom_rel HomRel
+-/
 
 namespace CategoryTheory
 
@@ -34,6 +36,7 @@ variable {C : Type _} [Category C] (r : HomRel C)
 
 include r
 
+#print CategoryTheory.Congruence /-
 /-- A `hom_rel` is a congruence when it's an equivalence on every hom-set, and it can be composed
 from left and right. -/
 class Congruence : Prop where
@@ -41,49 +44,63 @@ class Congruence : Prop where
   compLeft : ∀ {X Y Z} (f : X ⟶ Y) {g g' : Y ⟶ Z}, r g g' → r (f ≫ g) (f ≫ g')
   compRight : ∀ {X Y Z} {f f' : X ⟶ Y} (g : Y ⟶ Z), r f f' → r (f ≫ g) (f' ≫ g)
 #align category_theory.congruence CategoryTheory.Congruence
+-/
 
 attribute [instance] congruence.is_equiv
 
+#print CategoryTheory.Quotient /-
 /-- A type synonym for `C`, thought of as the objects of the quotient category. -/
 @[ext]
 structure Quotient where
   as : C
 #align category_theory.quotient CategoryTheory.Quotient
+-/
 
 instance [Inhabited C] : Inhabited (Quotient r) :=
   ⟨{ as := default }⟩
 
 namespace Quotient
 
+#print CategoryTheory.Quotient.CompClosure /-
 /-- Generates the closure of a family of relations w.r.t. composition from left and right. -/
 inductive CompClosure ⦃s t : C⦄ : (s ⟶ t) → (s ⟶ t) → Prop
   |
   intro {a b} (f : s ⟶ a) (m₁ m₂ : a ⟶ b) (g : b ⟶ t) (h : r m₁ m₂) :
     comp_closure (f ≫ m₁ ≫ g) (f ≫ m₂ ≫ g)
 #align category_theory.quotient.comp_closure CategoryTheory.Quotient.CompClosure
+-/
 
+#print CategoryTheory.Quotient.CompClosure.of /-
 theorem CompClosure.of {a b} (m₁ m₂ : a ⟶ b) (h : r m₁ m₂) : CompClosure r m₁ m₂ := by
   simpa using comp_closure.intro (𝟙 _) m₁ m₂ (𝟙 _) h
 #align category_theory.quotient.comp_closure.of CategoryTheory.Quotient.CompClosure.of
+-/
 
+#print CategoryTheory.Quotient.comp_left /-
 theorem comp_left {a b c : C} (f : a ⟶ b) :
     ∀ (g₁ g₂ : b ⟶ c) (h : CompClosure r g₁ g₂), CompClosure r (f ≫ g₁) (f ≫ g₂)
   | _, _, ⟨x, m₁, m₂, y, h⟩ => by simpa using comp_closure.intro (f ≫ x) m₁ m₂ y h
 #align category_theory.quotient.comp_left CategoryTheory.Quotient.comp_left
+-/
 
+#print CategoryTheory.Quotient.comp_right /-
 theorem comp_right {a b c : C} (g : b ⟶ c) :
     ∀ (f₁ f₂ : a ⟶ b) (h : CompClosure r f₁ f₂), CompClosure r (f₁ ≫ g) (f₂ ≫ g)
   | _, _, ⟨x, m₁, m₂, y, h⟩ => by simpa using comp_closure.intro x m₁ m₂ (y ≫ g) h
 #align category_theory.quotient.comp_right CategoryTheory.Quotient.comp_right
+-/
 
+#print CategoryTheory.Quotient.Hom /-
 /-- Hom-sets of the quotient category. -/
 def Hom (s t : Quotient r) :=
   Quot <| @CompClosure C _ r s.as t.as
 #align category_theory.quotient.hom CategoryTheory.Quotient.Hom
+-/
 
 instance (a : Quotient r) : Inhabited (Hom r a a) :=
   ⟨Quot.mk _ (𝟙 a.as)⟩
 
+#print CategoryTheory.Quotient.comp /-
 /-- Composition in the quotient category. -/
 def comp ⦃a b c : Quotient r⦄ : Hom r a b → Hom r b c → Hom r a c := fun hf hg =>
   Quot.liftOn hf
@@ -92,26 +109,37 @@ def comp ⦃a b c : Quotient r⦄ : Hom r a b → Hom r b c → Hom r a c := fun
         Quot.sound <| comp_left r f g₁ g₂ h)
     fun f₁ f₂ h => Quot.inductionOn hg fun g => Quot.sound <| comp_right r g f₁ f₂ h
 #align category_theory.quotient.comp CategoryTheory.Quotient.comp
+-/
 
+/- warning: category_theory.quotient.comp_mk -> CategoryTheory.Quotient.comp_mk is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {c : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)), Eq.{succ u2} (CategoryTheory.Quotient.Hom.{u1, u2} C _inst_1 r a c) (CategoryTheory.Quotient.comp.{u1, u2} C _inst_1 r a b c (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b)) f) (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) g)) (Quot.mk.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u1, u2} C _inst_1 r (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c)) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r a) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r b) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r c) f g))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {c : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)), Eq.{succ u1} (CategoryTheory.Quotient.Hom.{u2, u1} C _inst_1 r a c) (CategoryTheory.Quotient.comp.{u2, u1} C _inst_1 r a b c (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b)) f) (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) g)) (Quot.mk.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.Quotient.CompClosure.{u2, u1} C _inst_1 r (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r a) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r b) (CategoryTheory.Quotient.as.{u2, u1} C _inst_1 r c) f g))
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.comp_mk CategoryTheory.Quotient.comp_mkₓ'. -/
 @[simp]
 theorem comp_mk {a b c : Quotient r} (f : a.as ⟶ b.as) (g : b.as ⟶ c.as) :
     comp r (Quot.mk _ f) (Quot.mk _ g) = Quot.mk _ (f ≫ g) :=
   rfl
 #align category_theory.quotient.comp_mk CategoryTheory.Quotient.comp_mk
 
+#print CategoryTheory.Quotient.category /-
 instance category : Category (Quotient r)
     where
   Hom := Hom r
   id a := Quot.mk _ (𝟙 a.as)
   comp := comp r
 #align category_theory.quotient.category CategoryTheory.Quotient.category
+-/
 
+#print CategoryTheory.Quotient.functor /-
 /-- The functor from a category to its quotient. -/
 @[simps]
 def functor : C ⥤ Quotient r where
   obj a := { as := a }
   map _ _ f := Quot.mk _ f
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
+-/
 
 noncomputable instance : Full (functor r) where preimage X Y f := Quot.out f
 
@@ -123,6 +151,12 @@ instance : EssSurj (functor r)
             ext
             rfl)⟩⟩
 
+/- warning: category_theory.quotient.induction -> CategoryTheory.Quotient.induction is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {P : forall {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r}, (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) a b) -> Prop}, (forall {x : C} {y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), P (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) x) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) y) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) x y f)) -> (forall {a : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} {b : CategoryTheory.Quotient.{u1, u2} C _inst_1 r} (f : Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) a b), P a b f)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) {P : forall {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r}, (Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) a b) -> Prop}, (forall {x : C} {y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) x y), P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) x) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) y) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) x y f)) -> (forall {a : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} {b : CategoryTheory.Quotient.{u2, u1} C _inst_1 r} (f : Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) a b), P a b f)
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.induction CategoryTheory.Quotient.inductionₓ'. -/
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
     (h : ∀ {x y : C} (f : x ⟶ y), P ((functor r).map f)) : ∀ {a b : Quotient r} (f : a ⟶ b), P f :=
   by
@@ -130,11 +164,23 @@ protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
   exact h f
 #align category_theory.quotient.induction CategoryTheory.Quotient.induction
 
+/- warning: category_theory.quotient.sound -> CategoryTheory.Quotient.sound is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : C} {b : C} {f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b} {f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b}, (r a b f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) b)) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a b f₁) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) a b f₂))
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {a : C} {b : C} {f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b} {f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) a b}, (r a b f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (Prefunctor.obj.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a) (Prefunctor.obj.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) b)) (Prefunctor.map.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a b f₁) (Prefunctor.map.{succ u2, succ u2, u1, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r)) a b f₂))
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.sound CategoryTheory.Quotient.soundₓ'. -/
 protected theorem sound {a b : C} {f₁ f₂ : a ⟶ b} (h : r f₁ f₂) :
     (functor r).map f₁ = (functor r).map f₂ := by
   simpa using Quot.sound (comp_closure.intro (𝟙 a) f₁ f₂ (𝟙 b) h)
 #align category_theory.quotient.sound CategoryTheory.Quotient.sound
 
+/- warning: category_theory.quotient.functor_map_eq_iff -> CategoryTheory.Quotient.functor_map_eq_iff is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) [_inst_2 : CategoryTheory.Congruence.{u1, u2} C _inst_1 r] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (f' : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), Iff (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u2, u1} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r))) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y)) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f')) (r X Y f f')
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (r : HomRel.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) [_inst_2 : CategoryTheory.Congruence.{u2, u1} C _inst_1 r] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (f' : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y), Iff (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) Y)) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X Y f) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 (CategoryTheory.Quotient.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u1} C _inst_1 r) (CategoryTheory.Quotient.functor.{u2, u1} C _inst_1 r)) X Y f')) (r X Y f f')
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.functor_map_eq_iff CategoryTheory.Quotient.functor_map_eq_iffₓ'. -/
 theorem functor_map_eq_iff [Congruence r] {X Y : C} (f f' : X ⟶ Y) :
     (functor r).map f = (functor r).map f' ↔ r f f' :=
   by
@@ -158,6 +204,12 @@ variable {D : Type _} [Category D] (F : C ⥤ D)
 
 include H
 
+/- warning: category_theory.quotient.lift -> CategoryTheory.Quotient.lift is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2), (forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) -> (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2)
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2), (forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) -> (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift CategoryTheory.Quotient.liftₓ'. -/
 /-- The induced functor on the quotient category. -/
 @[simps]
 def lift : Quotient r ⥤ D where
@@ -173,6 +225,12 @@ def lift : Quotient r ⥤ D where
     exact F.map_comp f g
 #align category_theory.quotient.lift CategoryTheory.Quotient.lift
 
+/- warning: category_theory.quotient.lift_spec -> CategoryTheory.Quotient.lift_spec is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))), Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] (r : HomRel.{u4, succ u3} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1))) {D : Type.{u2}} [_inst_2 : CategoryTheory.Category.{u1, u2} D] (F : CategoryTheory.Functor.{u3, u1, u4, u2} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u3, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (Prefunctor.obj.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u3, succ u1, u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u1, u4, u2} C _inst_1 D _inst_2 F) x y f₂))), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (CategoryTheory.Functor.{u3, u1, u4, u2} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u3, u3, u1, u4, u4, u2} C _inst_1 (CategoryTheory.Quotient.{u4, u3} C _inst_1 r) (CategoryTheory.Quotient.category.{u4, u3} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u4, u3} C _inst_1 r) (CategoryTheory.Quotient.lift.{u4, u3, u2, u1} C _inst_1 r D _inst_2 F H)) F
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_specₓ'. -/
 theorem lift_spec : functor r ⋙ lift r F H = F :=
   by
   apply Functor.ext; rotate_left
@@ -182,6 +240,12 @@ theorem lift_spec : functor r ⋙ lift r F H = F :=
     simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
 
+/- warning: category_theory.quotient.lift_unique -> CategoryTheory.Quotient.lift_unique is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (Φ : CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2), (Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Φ) F) -> (Eq.{succ (max u2 u4 u1 u3)} (CategoryTheory.Functor.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2) Φ (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u4, u2} C] (r : HomRel.{u2, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1))) {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u3, u1} D] (F : CategoryTheory.Functor.{u4, u3, u2, u1} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u4, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u4, succ u3, u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u2} C (CategoryTheory.Category.toCategoryStruct.{u4, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} D (CategoryTheory.Category.toCategoryStruct.{u3, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u3, u2, u1} C _inst_1 D _inst_2 F) x y f₂))) (Φ : CategoryTheory.Functor.{u4, u3, u2, u1} (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2), (Eq.{max (max (max (succ u2) (succ u4)) (succ u1)) (succ u3)} (CategoryTheory.Functor.{u4, u3, u2, u1} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u4, u4, u3, u2, u2, u1} C _inst_1 (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u2, u4} C _inst_1 r) Φ) F) -> (Eq.{max (max (max (succ u2) (succ u4)) (succ u1)) (succ u3)} (CategoryTheory.Functor.{u4, u3, u2, u1} (CategoryTheory.Quotient.{u2, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u2, u4} C _inst_1 r) D _inst_2) Φ (CategoryTheory.Quotient.lift.{u2, u4, u1, u3} C _inst_1 r D _inst_2 F H))
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_uniqueₓ'. -/
 theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ = lift r F H :=
   by
   subst_vars
@@ -199,21 +263,45 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
     congr <;> ext <;> rfl
 #align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_unique
 
+/- warning: category_theory.quotient.lift.is_lift -> CategoryTheory.Quotient.lift.isLift is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))), CategoryTheory.Iso.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))), CategoryTheory.Iso.{max u1 u4, max (max (max u3 u1) u4) u2} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLiftₓ'. -/
 /-- The original functor factors through the induced functor. -/
 def lift.isLift : functor r ⋙ lift r F H ≅ F :=
   NatIso.ofComponents (fun X => Iso.refl _) (by tidy)
 #align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLift
 
+/- warning: category_theory.quotient.lift.is_lift_hom -> CategoryTheory.Quotient.lift.isLift_hom is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Iso.hom.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X))
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))) X) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Iso.hom.{max u1 u4, max (max (max u1 u2) u3) u4} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X))
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift_hom CategoryTheory.Quotient.lift.isLift_homₓ'. -/
 @[simp]
 theorem lift.isLift_hom (X : C) : (lift.isLift r F H).Hom.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_hom CategoryTheory.Quotient.lift.isLift_hom
 
+/- warning: category_theory.quotient.lift.is_lift_inv -> CategoryTheory.Quotient.lift.isLift_inv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) (CategoryTheory.Iso.inv.{max u1 u4, max u2 u4 u1 u3} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F X))
+but is expected to have type
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) x y f₂))) (X : C), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H))) X)) (CategoryTheory.NatTrans.app.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) (CategoryTheory.Iso.inv.{max u1 u4, max (max (max u1 u2) u3) u4} (CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u2, u4, u1, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.comp.{u2, u2, u4, u1, u1, u3} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) F (CategoryTheory.Quotient.lift.isLift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H)) X) (CategoryTheory.CategoryStruct.id.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2) (Prefunctor.obj.{succ u2, succ u4, u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u4, u1, u3} C _inst_1 D _inst_2 F) X))
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_invₓ'. -/
 @[simp]
 theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X) :=
   rfl
 #align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_inv
 
+/- warning: category_theory.quotient.lift_map_functor_map -> CategoryTheory.Quotient.lift_map_functor_map is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] (r : HomRel.{u1, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1))) {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (F : CategoryTheory.Functor.{u2, u4, u1, u3} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} C _inst_1 D _inst_2 F y)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₁) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F x y f₂))) {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), Eq.{succ u4} (Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X)) (CategoryTheory.Functor.obj.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y))) (CategoryTheory.Functor.map.{u2, u4, u1, u3} (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u1, u2, u3, u4} C _inst_1 r D _inst_2 F H) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X) (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y) (CategoryTheory.Functor.map.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X Y f)) (CategoryTheory.Functor.map.{u2, u4, u1, u3} C _inst_1 D _inst_2 F (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) X)) (CategoryTheory.Quotient.as.{u1, u2} C _inst_1 r (CategoryTheory.Functor.obj.{u2, u2, u1, u1} C _inst_1 (CategoryTheory.Quotient.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.category.{u1, u2} C _inst_1 r) (CategoryTheory.Quotient.functor.{u1, u2} C _inst_1 r) Y)) f)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u4, u3} C] (r : HomRel.{u3, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1))) {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] (F : CategoryTheory.Functor.{u4, u2, u3, u1} C _inst_1 D _inst_2) (H : forall (x : C) (y : C) (f₁ : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) x y) (f₂ : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) x y), (r x y f₁ f₂) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x) (Prefunctor.obj.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) y)) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x y f₁) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) x y f₂))) {X : C} {Y : C} (f : Quiver.Hom.{succ u4, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) X Y), Eq.{succ u2} (Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X)) (Prefunctor.obj.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) Y))) (Prefunctor.map.{succ u4, succ u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) D _inst_2 (CategoryTheory.Quotient.lift.{u3, u4, u1, u2} C _inst_1 r D _inst_2 F H)) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X) (Prefunctor.obj.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) Y) (Prefunctor.map.{succ u4, succ u4, u3, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Category.toCategoryStruct.{u4, u3} (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r))) (CategoryTheory.Functor.toPrefunctor.{u4, u4, u3, u3} C _inst_1 (CategoryTheory.Quotient.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.category.{u3, u4} C _inst_1 r) (CategoryTheory.Quotient.functor.{u3, u4} C _inst_1 r)) X Y f)) (Prefunctor.map.{succ u4, succ u2, u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} C (CategoryTheory.Category.toCategoryStruct.{u4, u3} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u4, u2, u3, u1} C _inst_1 D _inst_2 F) X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_mapₓ'. -/
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
     (lift r F H).map ((functor r).map f) = F.map f :=
   by

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): make 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>

Diff
@@ -115,11 +115,8 @@ def functor : C ⥤ Quotient r where
   map := @fun _ _ f ↦ Quot.mk _ f
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
 
-noncomputable instance fullFunctor : (functor r).Full where
-  preimage := @fun X Y f ↦ Quot.out f
-  witness f := by
-    dsimp [functor]
-    simp
+instance full_functor : (functor r).Full where
+  map_surjective f:= ⟨Quot.out f, by simp [functor]⟩
 
 instance essSurj_functor : (functor r).EssSurj where
   mem_essImage Y :=
@@ -276,7 +273,7 @@ variable (D)
 
 instance full_whiskeringLeft_functor :
     ((whiskeringLeft C _ D).obj (functor r)).Full where
-  preimage := natTransLift r
+  map_surjective f := ⟨natTransLift r f, by aesop_cat⟩
 
 instance faithful_whiskeringLeft_functor :
     ((whiskeringLeft C _ D).obj (functor r)).Faithful := ⟨by apply natTrans_ext⟩
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
@@ -115,13 +115,13 @@ def functor : C ⥤ Quotient r where
   map := @fun _ _ f ↦ Quot.mk _ f
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
 
-noncomputable instance fullFunctor : Full (functor r) where
+noncomputable instance fullFunctor : (functor r).Full where
   preimage := @fun X Y f ↦ Quot.out f
   witness f := by
     dsimp [functor]
     simp
 
-instance essSurj_functor : EssSurj (functor r) where
+instance essSurj_functor : (functor r).EssSurj where
   mem_essImage Y :=
     ⟨Y.as, ⟨eqToIso (by
             ext
@@ -275,11 +275,11 @@ def natIsoLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ≅ Quoti
 variable (D)
 
 instance full_whiskeringLeft_functor :
-    Full ((whiskeringLeft C _ D).obj (functor r)) where
+    ((whiskeringLeft C _ D).obj (functor r)).Full where
   preimage := natTransLift r
 
 instance faithful_whiskeringLeft_functor :
-    Faithful ((whiskeringLeft C _ D).obj (functor r)) := ⟨by apply natTrans_ext⟩
+    ((whiskeringLeft C _ D).obj (functor r)).Faithful := ⟨by apply natTrans_ext⟩
 
 end Quotient
 
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -99,7 +99,7 @@ theorem comp_mk {a b c : Quotient r} (f : a.as ⟶ b.as) (g : b.as ⟶ c.as) :
   rfl
 #align category_theory.quotient.comp_mk CategoryTheory.Quotient.comp_mk
 
--- porting note: Had to manually add the proofs of `comp_id` `id_comp` and `assoc`
+-- Porting note: Had to manually add the proofs of `comp_id` `id_comp` and `assoc`
 instance category : Category (Quotient r) where
   Hom := Hom r
   id a := Quot.mk _ (𝟙 a.as)
@@ -194,7 +194,7 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
     congr
   · rintro _ _ f
     dsimp [lift, Functor]
-    refine Quot.inductionOn f (fun _ ↦ ?_) -- porting note: this line was originally an `apply`
+    refine Quot.inductionOn f (fun _ ↦ ?_) -- Porting note: this line was originally an `apply`
     simp only [Quot.liftOn_mk, Functor.comp_map]
     congr
 #align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_unique
feat(Algebra/Homology): the class of quasi-isomorphisms in the homotopy category (#9686)

This PR introduces the class of quasi-isomorphisms in the homotopy category of homological complexes.

Diff
@@ -199,6 +199,15 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
     congr
 #align category_theory.quotient.lift_unique CategoryTheory.Quotient.lift_unique
 
+lemma lift_unique' (F₁ F₂ : Quotient r ⥤ D) (h : functor r ⋙ F₁ = functor r ⋙ F₂) :
+    F₁ = F₂ := by
+  rw [lift_unique r (functor r ⋙ F₂) _ F₂ rfl]; swap
+  · rintro X Y f g h
+    dsimp
+    rw [Quotient.sound r h]
+  apply lift_unique
+  rw [h]
+
 /-- The original functor factors through the induced functor. -/
 def lift.isLift : functor r ⋙ lift r F H ≅ F :=
   NatIso.ofComponents fun X ↦ Iso.refl _
chore(*): replace $ with <| (#9319)

See Zulip thread for the discussion.

Diff
@@ -104,9 +104,9 @@ instance category : Category (Quotient r) where
   Hom := Hom r
   id a := Quot.mk _ (𝟙 a.as)
   comp := @comp _ _ r
-  comp_id f := Quot.inductionOn f $ by simp
-  id_comp f := Quot.inductionOn f $ by simp
-  assoc f g h := Quot.inductionOn f $ Quot.inductionOn g $ Quot.inductionOn h $ by simp
+  comp_id f := Quot.inductionOn f <| by simp
+  id_comp f := Quot.inductionOn f <| by simp
+  assoc f g h := Quot.inductionOn f <| Quot.inductionOn g <| Quot.inductionOn h <| by simp
 #align category_theory.quotient.category CategoryTheory.Quotient.category
 
 /-- The functor from a category to its quotient. -/
feat: the homology functor on the homotopy category for the new API (#8595)

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -121,7 +121,7 @@ noncomputable instance fullFunctor : Full (functor r) where
     dsimp [functor]
     simp
 
-instance : EssSurj (functor r) where
+instance essSurj_functor : EssSurj (functor r) where
   mem_essImage Y :=
     ⟨Y.as, ⟨eqToIso (by
             ext
feat: the quotient category is preadditive (#7049)

It is shown in this PR that when an equivalence relation on morphisms in a preadditive category is compatible with the addition, then the quotient category is preadditive.

Diff
@@ -37,15 +37,13 @@ variable {C : Type _} [Category C] (r : HomRel C)
 from left and right. -/
 class Congruence : Prop where
   /-- `r` is an equivalence on every hom-set. -/
-  isEquiv : ∀ {X Y}, IsEquiv _ (@r X Y)
+  equivalence : ∀ {X Y}, _root_.Equivalence (@r X Y)
   /-- Precomposition with an arrow respects `r`. -/
   compLeft : ∀ {X Y Z} (f : X ⟶ Y) {g g' : Y ⟶ Z}, r g g' → r (f ≫ g) (f ≫ g')
   /-- Postcomposition with an arrow respects `r`. -/
   compRight : ∀ {X Y Z} {f f' : X ⟶ Y} (g : Y ⟶ Z), r f f' → r (f ≫ g) (f' ≫ g)
 #align category_theory.congruence CategoryTheory.Congruence
 
-attribute [instance] Congruence.isEquiv
-
 /-- A type synonym for `C`, thought of as the objects of the quotient category. -/
 @[ext]
 structure Quotient (r : HomRel C) where
@@ -112,13 +110,16 @@ instance category : Category (Quotient r) where
 #align category_theory.quotient.category CategoryTheory.Quotient.category
 
 /-- The functor from a category to its quotient. -/
-@[simps]
 def functor : C ⥤ Quotient r where
   obj a := { as := a }
   map := @fun _ _ f ↦ Quot.mk _ f
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
 
-noncomputable instance fullFunctor : Full (functor r) where preimage := @fun X Y f ↦ Quot.out f
+noncomputable instance fullFunctor : Full (functor r) where
+  preimage := @fun X Y f ↦ Quot.out f
+  witness f := by
+    dsimp [functor]
+    simp
 
 instance : EssSurj (functor r) where
   mem_essImage Y :=
@@ -138,30 +139,31 @@ protected theorem sound {a b : C} {f₁ f₂ : a ⟶ b} (h : r f₁ f₂) :
   simpa using Quot.sound (CompClosure.intro (𝟙 a) f₁ f₂ (𝟙 b) h)
 #align category_theory.quotient.sound CategoryTheory.Quotient.sound
 
+lemma compClosure_iff_self [h : Congruence r] {X Y : C} (f g : X ⟶ Y) :
+    CompClosure r f g ↔ r f g := by
+  constructor
+  · intro hfg
+    induction' hfg with m m' hm
+    exact Congruence.compLeft _ (Congruence.compRight _ (by assumption))
+  · exact CompClosure.of _ _ _
+
+@[simp]
+theorem compClosure_eq_self [h : Congruence r] :
+    CompClosure r = r := by
+  ext
+  simp only [compClosure_iff_self]
+
 theorem functor_map_eq_iff [h : Congruence r] {X Y : C} (f f' : X ⟶ Y) :
     (functor r).map f = (functor r).map f' ↔ r f f' := by
-  constructor
-  · erw [Quot.eq]
-    intro h
-    induction' h with m m' hm
-    · cases hm
-      apply Congruence.compLeft
-      apply Congruence.compRight
-      assumption
-    · haveI := (h.isEquiv : IsEquiv _ (@r X Y))
-      -- porting note: had to add this line for `refl` (and name the `Congruence` argument)
-      apply refl
-    · apply symm
-      assumption
-    · apply _root_.trans <;> assumption
-  · apply Quotient.sound
+  dsimp [functor]
+  rw [Equivalence.quot_mk_eq_iff, compClosure_eq_self r]
+  simpa only [compClosure_eq_self r] using h.equivalence
 #align category_theory.quotient.functor_map_eq_iff CategoryTheory.Quotient.functor_map_eq_iff
 
 variable {D : Type _} [Category D] (F : C ⥤ D)
   (H : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F.map f₁ = F.map f₂)
 
 /-- The induced functor on the quotient category. -/
-@[simps]
 def lift : Quotient r ⥤ D where
   obj a := F.obj a.as
   map := @fun a b hf ↦
@@ -180,6 +182,7 @@ theorem lift_spec : functor r ⋙ lift r F H = F := by
   · rintro X
     rfl
   · rintro X Y f
+    dsimp [lift, functor]
     simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
 
@@ -214,7 +217,7 @@ theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X)
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
     (lift r F H).map ((functor r).map f) = F.map f := by
   rw [← NatIso.naturality_1 (lift.isLift r F H)]
-  dsimp
+  dsimp [lift, functor]
   simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
 
style: fix wrapping of where (#7149)
Diff
@@ -120,8 +120,8 @@ def functor : C ⥤ Quotient r where
 
 noncomputable instance fullFunctor : Full (functor r) where preimage := @fun X Y f ↦ Quot.out f
 
-instance : EssSurj (functor r)
-    where mem_essImage Y :=
+instance : EssSurj (functor r) where
+  mem_essImage Y :=
     ⟨Y.as, ⟨eqToIso (by
             ext
             rfl)⟩⟩
feat: the shift on a quotient category (#6653)

This PR constructs the shift on a quotient category.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -218,6 +218,57 @@ theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
   simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
 
+variable {r}
+
+lemma natTrans_ext {F G : Quotient r ⥤ D} (τ₁ τ₂ : F ⟶ G)
+    (h : whiskerLeft (Quotient.functor r) τ₁ = whiskerLeft (Quotient.functor r) τ₂) : τ₁ = τ₂ :=
+  NatTrans.ext _ _ (by ext1 ⟨X⟩; exact NatTrans.congr_app h X)
+
+variable (r)
+
+/-- In order to define a natural transformation `F ⟶ G` with `F G : Quotient r ⥤ D`, it suffices
+to do so after precomposing with `Quotient.functor r`. -/
+def natTransLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) :
+    F ⟶ G where
+  app := fun ⟨X⟩ => τ.app X
+  naturality := fun ⟨X⟩ ⟨Y⟩ => by
+    rintro ⟨f⟩
+    exact τ.naturality f
+
+@[simp]
+lemma natTransLift_app (F G : Quotient r ⥤ D)
+    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) (X : C) :
+  (natTransLift r τ).app ((Quotient.functor r).obj X) = τ.app X := rfl
+
+@[reassoc]
+lemma comp_natTransLift {F G H : Quotient r ⥤ D}
+    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G)
+    (τ' : Quotient.functor r ⋙ G ⟶ Quotient.functor r ⋙ H) :
+    natTransLift r τ ≫ natTransLift r τ' =  natTransLift r (τ ≫ τ') := by aesop_cat
+
+@[simp]
+lemma natTransLift_id (F : Quotient r ⥤ D) :
+    natTransLift r (𝟙 (Quotient.functor r ⋙ F)) = 𝟙 _ := by aesop_cat
+
+/-- In order to define a natural isomorphism `F ≅ G` with `F G : Quotient r ⥤ D`, it suffices
+to do so after precomposing with `Quotient.functor r`. -/
+@[simps]
+def natIsoLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ≅ Quotient.functor r ⋙ G) :
+    F ≅ G where
+  hom := natTransLift _ τ.hom
+  inv := natTransLift _ τ.inv
+  hom_inv_id := by rw [comp_natTransLift, τ.hom_inv_id, natTransLift_id]
+  inv_hom_id := by rw [comp_natTransLift, τ.inv_hom_id, natTransLift_id]
+
+variable (D)
+
+instance full_whiskeringLeft_functor :
+    Full ((whiskeringLeft C _ D).obj (functor r)) where
+  preimage := natTransLift r
+
+instance faithful_whiskeringLeft_functor :
+    Faithful ((whiskeringLeft C _ D).obj (functor r)) := ⟨by apply natTrans_ext⟩
+
 end Quotient
 
 end CategoryTheory
reverting an unwanted addition to CategoryTheory.Quotient
Diff
@@ -218,57 +218,6 @@ theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
   simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
 
-variable {r}
-
-lemma natTrans_ext {F G : Quotient r ⥤ D} (τ₁ τ₂ : F ⟶ G)
-    (h : whiskerLeft (Quotient.functor r) τ₁ = whiskerLeft (Quotient.functor r) τ₂) : τ₁ = τ₂ :=
-  NatTrans.ext _ _ (by ext1 ⟨X⟩ ; exact NatTrans.congr_app h X)
-
-variable (r)
-
-/-- In order to define a natural transformation `F ⟶ G` with `F G : Quotient r ⥤ D`, it suffices
-to do so after precomposing with `Quotient.functor r`. -/
-def natTransLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) :
-    F ⟶ G where
-  app := fun ⟨X⟩ => τ.app X
-  naturality := fun ⟨X⟩ ⟨Y⟩ => by
-    rintro ⟨f⟩
-    exact τ.naturality f
-
-@[simp]
-lemma natTransLift_app (F G : Quotient r ⥤ D)
-    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) (X : C) :
-  (natTransLift r τ).app ((Quotient.functor r).obj X) = τ.app X := rfl
-
-@[reassoc]
-lemma comp_natTransLift {F G H : Quotient r ⥤ D}
-    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G)
-    (τ' : Quotient.functor r ⋙ G ⟶ Quotient.functor r ⋙ H) :
-    natTransLift r τ ≫ natTransLift r τ' =  natTransLift r (τ ≫ τ') := by aesop_cat
-
-@[simp]
-lemma natTransLift_id (F : Quotient r ⥤ D) :
-    natTransLift r (𝟙 (Quotient.functor r ⋙ F)) = 𝟙 _ := by aesop_cat
-
-/-- In order to define a natural isomorphism `F ≅ G` with `F G : Quotient r ⥤ D`, it suffices
-to do so after precomposing with `Quotient.functor r`. -/
-@[simps]
-def natIsoLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ≅ Quotient.functor r ⋙ G) :
-    F ≅ G where
-  hom := natTransLift _ τ.hom
-  inv := natTransLift _ τ.inv
-  hom_inv_id := by rw [comp_natTransLift, τ.hom_inv_id, natTransLift_id]
-  inv_hom_id := by rw [comp_natTransLift, τ.inv_hom_id, natTransLift_id]
-
-variable (D)
-
-instance full_whiskeringLeft_functor :
-    Full ((whiskeringLeft C _ D).obj (functor r)) where
-  preimage := natTransLift r
-
-instance faithful_whiskeringLeft_functor :
-    Faithful ((whiskeringLeft C _ D).obj (functor r)) := ⟨by apply natTrans_ext⟩
-
 end Quotient
 
 end CategoryTheory
feat: the shift on a quotient category
Diff
@@ -218,6 +218,57 @@ theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
   simp
 #align category_theory.quotient.lift_map_functor_map CategoryTheory.Quotient.lift_map_functor_map
 
+variable {r}
+
+lemma natTrans_ext {F G : Quotient r ⥤ D} (τ₁ τ₂ : F ⟶ G)
+    (h : whiskerLeft (Quotient.functor r) τ₁ = whiskerLeft (Quotient.functor r) τ₂) : τ₁ = τ₂ :=
+  NatTrans.ext _ _ (by ext1 ⟨X⟩ ; exact NatTrans.congr_app h X)
+
+variable (r)
+
+/-- In order to define a natural transformation `F ⟶ G` with `F G : Quotient r ⥤ D`, it suffices
+to do so after precomposing with `Quotient.functor r`. -/
+def natTransLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) :
+    F ⟶ G where
+  app := fun ⟨X⟩ => τ.app X
+  naturality := fun ⟨X⟩ ⟨Y⟩ => by
+    rintro ⟨f⟩
+    exact τ.naturality f
+
+@[simp]
+lemma natTransLift_app (F G : Quotient r ⥤ D)
+    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G) (X : C) :
+  (natTransLift r τ).app ((Quotient.functor r).obj X) = τ.app X := rfl
+
+@[reassoc]
+lemma comp_natTransLift {F G H : Quotient r ⥤ D}
+    (τ : Quotient.functor r ⋙ F ⟶ Quotient.functor r ⋙ G)
+    (τ' : Quotient.functor r ⋙ G ⟶ Quotient.functor r ⋙ H) :
+    natTransLift r τ ≫ natTransLift r τ' =  natTransLift r (τ ≫ τ') := by aesop_cat
+
+@[simp]
+lemma natTransLift_id (F : Quotient r ⥤ D) :
+    natTransLift r (𝟙 (Quotient.functor r ⋙ F)) = 𝟙 _ := by aesop_cat
+
+/-- In order to define a natural isomorphism `F ≅ G` with `F G : Quotient r ⥤ D`, it suffices
+to do so after precomposing with `Quotient.functor r`. -/
+@[simps]
+def natIsoLift {F G : Quotient r ⥤ D} (τ : Quotient.functor r ⋙ F ≅ Quotient.functor r ⋙ G) :
+    F ≅ G where
+  hom := natTransLift _ τ.hom
+  inv := natTransLift _ τ.inv
+  hom_inv_id := by rw [comp_natTransLift, τ.hom_inv_id, natTransLift_id]
+  inv_hom_id := by rw [comp_natTransLift, τ.inv_hom_id, natTransLift_id]
+
+variable (D)
+
+instance full_whiskeringLeft_functor :
+    Full ((whiskeringLeft C _ D).obj (functor r)) where
+  preimage := natTransLift r
+
+instance faithful_whiskeringLeft_functor :
+    Faithful ((whiskeringLeft C _ D).obj (functor r)) := ⟨by apply natTrans_ext⟩
+
 end Quotient
 
 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,15 +2,12 @@
 Copyright (c) 2020 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn
-
-! This file was ported from Lean 3 source module category_theory.quotient
-! leanprover-community/mathlib commit 740acc0e6f9adf4423f92a485d0456fc271482da
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.NatIso
 import Mathlib.CategoryTheory.EqToHom
 
+#align_import category_theory.quotient from "leanprover-community/mathlib"@"740acc0e6f9adf4423f92a485d0456fc271482da"
+
 /-!
 # Quotient category
 
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
@@ -201,7 +201,7 @@ theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ =
 
 /-- The original functor factors through the induced functor. -/
 def lift.isLift : functor r ⋙ lift r F H ≅ F :=
-  NatIso.ofComponents (fun X ↦ Iso.refl _) (by aesop_cat)
+  NatIso.ofComponents fun X ↦ Iso.refl _
 #align category_theory.quotient.lift.is_lift CategoryTheory.Quotient.lift.isLift
 
 @[simp]
chore: bye-bye, solo bys! (#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 bys".

Diff
@@ -131,8 +131,7 @@ instance : EssSurj (functor r)
 
 protected theorem induction {P : ∀ {a b : Quotient r}, (a ⟶ b) → Prop}
     (h : ∀ {x y : C} (f : x ⟶ y), P ((functor r).map f)) :
-    ∀ {a b : Quotient r} (f : a ⟶ b), P f :=
-  by
+    ∀ {a b : Quotient r} (f : a ⟶ b), P f := by
   rintro ⟨x⟩ ⟨y⟩ ⟨f⟩
   exact h f
 #align category_theory.quotient.induction CategoryTheory.Quotient.induction
@@ -143,8 +142,7 @@ protected theorem sound {a b : C} {f₁ f₂ : a ⟶ b} (h : r f₁ f₂) :
 #align category_theory.quotient.sound CategoryTheory.Quotient.sound
 
 theorem functor_map_eq_iff [h : Congruence r] {X Y : C} (f f' : X ⟶ Y) :
-    (functor r).map f = (functor r).map f' ↔ r f f' :=
-  by
+    (functor r).map f = (functor r).map f' ↔ r f f' := by
   constructor
   · erw [Quot.eq]
     intro h
@@ -180,8 +178,7 @@ def lift : Quotient r ⥤ D where
     exact F.map_comp f g
 #align category_theory.quotient.lift CategoryTheory.Quotient.lift
 
-theorem lift_spec : functor r ⋙ lift r F H = F :=
-  by
+theorem lift_spec : functor r ⋙ lift r F H = F := by
   apply Functor.ext; rotate_left
   · rintro X
     rfl
@@ -189,8 +186,7 @@ theorem lift_spec : functor r ⋙ lift r F H = F :=
     simp
 #align category_theory.quotient.lift_spec CategoryTheory.Quotient.lift_spec
 
-theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ = lift r F H :=
-  by
+theorem lift_unique (Φ : Quotient r ⥤ D) (hΦ : functor r ⋙ Φ = F) : Φ = lift r F H := by
   subst_vars
   fapply Functor.hext
   · rintro X
@@ -219,8 +215,7 @@ theorem lift.isLift_inv (X : C) : (lift.isLift r F H).inv.app X = 𝟙 (F.obj X)
 #align category_theory.quotient.lift.is_lift_inv CategoryTheory.Quotient.lift.isLift_inv
 
 theorem lift_map_functor_map {X Y : C} (f : X ⟶ Y) :
-    (lift r F H).map ((functor r).map f) = F.map f :=
-  by
+    (lift r F H).map ((functor r).map f) = F.map f := by
   rw [← NatIso.naturality_1 (lift.isLift r F H)]
   dsimp
   simp
feat: port CategoryTheory.Localization.Construction (#2917)

Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Diff
@@ -121,7 +121,7 @@ def functor : C ⥤ Quotient r where
   map := @fun _ _ f ↦ Quot.mk _ f
 #align category_theory.quotient.functor CategoryTheory.Quotient.functor
 
-noncomputable instance : Full (functor r) where preimage := @fun X Y f ↦ Quot.out f
+noncomputable instance fullFunctor : Full (functor r) where preimage := @fun X Y f ↦ Quot.out f
 
 instance : EssSurj (functor r)
     where mem_essImage Y :=
feat: port CategoryTheory.Quotient (#2339)

Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: Rémi Bottinelli <remi.bottinelli@bluewin.ch>

Dependencies 12

13 files ported (100.0%)
3441 lines ported (100.0%)

All dependencies are ported!