category_theory.quotient
⟷
Mathlib.CategoryTheory.Quotient
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Functor.Full
a Prop (#12449)
Before this PR, Functor.Full
contained the data of the preimage of maps by a full functor F
. This PR makes Functor.Full
a proposition. This is to prevent any diamond to appear.
The lemma Functor.image_preimage
is also renamed Functor.map_preimage
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -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⟩
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -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
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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
This PR introduces the class of quasi-isomorphisms in the homotopy category of homological complexes.
@@ -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 _
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -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. -/
@@ -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
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.
@@ -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
@@ -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)⟩⟩
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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]
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -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
Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
@@ -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 :=
All dependencies are ported!