/-
Copyright (c) 2019 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Bhavik Mehta

! This file was ported from Lean 3 source module category_theory.over
! 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.StructuredArrow
import Mathbin.CategoryTheory.Punit
import Mathbin.CategoryTheory.Functor.ReflectsIsomorphisms
import Mathbin.CategoryTheory.Functor.EpiMono

/-!
# Over and under categories

> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
> Any changes to this file require a corresponding PR to mathlib4.

Over (and under) categories are special cases of comma categories.
* If `L` is the identity functor and `R` is a constant functor, then `comma L R` is the "slice" or
  "over" category over the object `R` maps to.
* Conversely, if `L` is a constant functor and `R` is the identity functor, then `comma L R` is the
  "coslice" or "under" category under the object `L` maps to.

## Tags

comma, slice, coslice, over, under
-/

namespace CategoryTheory

universe v₁ v₂ u₁ u₂

-- morphism levels before object levels. See note [category_theory universes].
variable {T : Type u₁} [Category.{v₁} T]

#print CategoryTheory.Over /-
/-- The over category has as objects arrows in `T` with codomain `X` and as morphisms commutative
triangles.

See <https://stacks.math.columbia.edu/tag/001G>.
-/
def Over (X : T) :=
  CostructuredArrow (𝟭 T) X deriving Category
#align category_theory.over CategoryTheory.Over
-/

#print CategoryTheory.Over.inhabited /-
-- Satisfying the inhabited linter
instance Over.inhabited [Inhabited T] : Inhabited (Over (default : T))
    where default :=
    { left := default
      right := default
      Hom := 𝟙 _ }
#align category_theory.over.inhabited CategoryTheory.Over.inhabited
-/

namespace Over

variable {X : T}

#print CategoryTheory.Over.OverMorphism.ext /-
@[ext]
theorem OverMorphism.ext {X : T} {U V : Over X} {f g : U ⟶ V} (h : f.left = g.left) : f = g := by
  tidy
#align category_theory.over.over_morphism.ext CategoryTheory.Over.OverMorphism.ext
-/

#print CategoryTheory.Over.over_right /-
@[simp]
theorem over_right (U : Over X) : U.right = ⟨⟨⟩⟩ := by tidy
#align category_theory.over.over_right CategoryTheory.Over.over_right
-/

#print CategoryTheory.Over.id_left /-
@[simp]
theorem id_left (U : Over X) : CommaMorphism.left (𝟙 U) = 𝟙 U.left :=
  rfl
#align category_theory.over.id_left CategoryTheory.Over.id_left
-/

#print CategoryTheory.Over.comp_left /-
@[simp]
theorem comp_left (a b c : Over X) (f : a ⟶ b) (g : b ⟶ c) : (f ≫ g).left = f.left ≫ g.left :=
  rfl
#align category_theory.over.comp_left CategoryTheory.Over.comp_left
-/

/- warning: category_theory.over.w -> CategoryTheory.Over.w is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {A : CategoryTheory.Over.{u1, u2} T _inst_1 X} {B : CategoryTheory.Over.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.category.{u2, u1} T _inst_1 X))) A B), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A B f) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {A : CategoryTheory.Over.{u1, u2} T _inst_1 X} {B : CategoryTheory.Over.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) A B), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A B f) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) B)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) A)
Case conversion may be inaccurate. Consider using '#align category_theory.over.w CategoryTheory.Over.wₓ'. -/
@[simp, reassoc.1]
theorem w {A B : Over X} (f : A ⟶ B) : f.left ≫ B.Hom = A.Hom := by have := f.w <;> tidy
#align category_theory.over.w CategoryTheory.Over.w

#print CategoryTheory.Over.mk /-
/-- To give an object in the over category, it suffices to give a morphism with codomain `X`. -/
@[simps left Hom]
def mk {X Y : T} (f : Y ⟶ X) : Over X :=
  CostructuredArrow.mk f
#align category_theory.over.mk CategoryTheory.Over.mk
-/

#print CategoryTheory.Over.coeFromHom /-
/-- We can set up a coercion from arrows with codomain `X` to `over X`. This most likely should not
    be a global instance, but it is sometimes useful. -/
def coeFromHom {X Y : T} : Coe (Y ⟶ X) (Over X) where coe := mk
#align category_theory.over.coe_from_hom CategoryTheory.Over.coeFromHom
-/

section

attribute [local instance] coe_from_hom

/- warning: category_theory.over.coe_hom -> CategoryTheory.Over.coe_hom is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) ((fun (a : Type.{u1}) (b : Type.{max u2 u1}) [self : HasLiftT.{succ u1, succ (max u2 u1)} a b] => self.0) (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (HasLiftT.mk.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CoeTCₓ.coe.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (coeBase.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.coeFromHom.{u1, u2} T _inst_1 X Y)))) f))) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) ((fun (a : Type.{u1}) (b : Type.{max u2 u1}) [self : HasLiftT.{succ u1, succ (max u2 u1)} a b] => self.0) (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (HasLiftT.mk.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CoeTCₓ.coe.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (coeBase.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.coeFromHom.{u1, u2} T _inst_1 X Y)))) f)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) ((fun (a : Type.{u1}) (b : Type.{max u2 u1}) [self : HasLiftT.{succ u1, succ (max u2 u1)} a b] => self.0) (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (HasLiftT.mk.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CoeTCₓ.coe.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (coeBase.{succ u1, succ (max u2 u1)} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X) (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.coeFromHom.{u1, u2} T _inst_1 X Y)))) f)) f
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) Y X), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Over.mk.{u1, u2} T _inst_1 X Y f))) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Over.mk.{u1, u2} T _inst_1 X Y f)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Over.mk.{u1, u2} T _inst_1 X Y f)) f
Case conversion may be inaccurate. Consider using '#align category_theory.over.coe_hom CategoryTheory.Over.coe_homₓ'. -/
@[simp]
theorem coe_hom {X Y : T} (f : Y ⟶ X) : (f : Over X).Hom = f :=
  rfl
#align category_theory.over.coe_hom CategoryTheory.Over.coe_hom

end

/- warning: category_theory.over.hom_mk -> CategoryTheory.Over.homMk is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)), (autoParamₓ.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)) f (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)) (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.CostructuredArrow.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.CostructuredArrow.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) X) (CategoryTheory.CostructuredArrow.category.{u1, u2, u2, u1} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) X))) U V)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)), (autoParam.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)) f (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) V)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)) _auto._@.Mathlib.CategoryTheory.Over._hyg.455) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) U V)
Case conversion may be inaccurate. Consider using '#align category_theory.over.hom_mk CategoryTheory.Over.homMkₓ'. -/
/-- To give a morphism in the over category, it suffices to give an arrow fitting in a commutative
    triangle. -/
@[simps]
def homMk {U V : Over X} (f : U.left ⟶ V.left) (w : f ≫ V.Hom = U.Hom := by obviously) : U ⟶ V :=
  CostructuredArrow.homMk f w
#align category_theory.over.hom_mk CategoryTheory.Over.homMk

/- warning: category_theory.over.iso_mk -> CategoryTheory.Over.isoMk is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Over.{u1, u2} T _inst_1 X} {g : CategoryTheory.Over.{u1, u2} T _inst_1 X} (hl : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)), (autoParamₓ.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g) hl) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f)) (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) f g)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Over.{u1, u2} T _inst_1 X} {g : CategoryTheory.Over.{u1, u2} T _inst_1 X} (hl : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)), (autoParam.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g))) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g) hl) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f)) _auto._@.Mathlib.CategoryTheory.Over._hyg.525) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) f g)
Case conversion may be inaccurate. Consider using '#align category_theory.over.iso_mk CategoryTheory.Over.isoMkₓ'. -/
/-- Construct an isomorphism in the over category given isomorphisms of the objects whose forward
direction gives a commutative triangle.
-/
@[simps]
def isoMk {f g : Over X} (hl : f.left ≅ g.left) (hw : hl.Hom ≫ g.Hom = f.Hom := by obviously) :
    f ≅ g :=
  CostructuredArrow.isoMk hl hw
#align category_theory.over.iso_mk CategoryTheory.Over.isoMk

section

variable (X)

#print CategoryTheory.Over.forget /-
/-- The forgetful functor mapping an arrow to its domain.

See <https://stacks.math.columbia.edu/tag/001G>.
-/
def forget : Over X ⥤ T :=
  Comma.fst _ _
#align category_theory.over.forget CategoryTheory.Over.forget
-/

end

/- warning: category_theory.over.forget_obj -> CategoryTheory.Over.forget_obj is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X)) U) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)
Case conversion may be inaccurate. Consider using '#align category_theory.over.forget_obj CategoryTheory.Over.forget_objₓ'. -/
@[simp]
theorem forget_obj {U : Over X} : (forget X).obj U = U.left :=
  rfl
#align category_theory.over.forget_obj CategoryTheory.Over.forget_obj

/- warning: category_theory.over.forget_map -> CategoryTheory.Over.forget_map is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} {f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.category.{u2, u1} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X) U) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X) V)) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X) U V f) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U V f)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} {f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X)) U) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X)) V)) (Prefunctor.map.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Over.forget.{u1, u2} T _inst_1 X)) U V f) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U V f)
Case conversion may be inaccurate. Consider using '#align category_theory.over.forget_map CategoryTheory.Over.forget_mapₓ'. -/
@[simp]
theorem forget_map {U V : Over X} {f : U ⟶ V} : (forget X).map f = f.left :=
  rfl
#align category_theory.over.forget_map CategoryTheory.Over.forget_map

#print CategoryTheory.Over.forgetCocone /-
/-- The natural cocone over the forgetful functor `over X ⥤ T` with cocone point `X`. -/
@[simps]
def forgetCocone (X : T) : Limits.Cocone (forget X) :=
  { pt
    ι := { app := Comma.hom } }
#align category_theory.over.forget_cocone CategoryTheory.Over.forgetCocone
-/

#print CategoryTheory.Over.map /-
/-- A morphism `f : X ⟶ Y` induces a functor `over X ⥤ over Y` in the obvious way.

See <https://stacks.math.columbia.edu/tag/001G>.
-/
def map {Y : T} (f : X ⟶ Y) : Over X ⥤ Over Y :=
  Comma.mapRight _ <| Discrete.natTrans fun _ => f
#align category_theory.over.map CategoryTheory.Over.map
-/

section

variable {Y : T} {f : X ⟶ Y} {U V : Over X} {g : U ⟶ V}

/- warning: category_theory.over.map_obj_left -> CategoryTheory.Over.map_obj_left is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)
Case conversion may be inaccurate. Consider using '#align category_theory.over.map_obj_left CategoryTheory.Over.map_obj_leftₓ'. -/
@[simp]
theorem map_obj_left : ((map f).obj U).left = U.left :=
  rfl
#align category_theory.over.map_obj_left CategoryTheory.Over.map_obj_left

/- warning: category_theory.over.map_obj_hom -> CategoryTheory.Over.map_obj_hom is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U))) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U))) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) f)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U))) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U)) Y (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U) f)
Case conversion may be inaccurate. Consider using '#align category_theory.over.map_obj_hom CategoryTheory.Over.map_obj_homₓ'. -/
@[simp]
theorem map_obj_hom : ((map f).obj U).Hom = U.Hom ≫ f :=
  rfl
#align category_theory.over.map_obj_hom CategoryTheory.Over.map_obj_hom

/- warning: category_theory.over.map_map_left -> CategoryTheory.Over.map_map_left is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} {g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.category.{u2, u1} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) V))) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) V) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y)) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f) U V g)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U V g)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Over.{u1, u2} T _inst_1 X} {V : CategoryTheory.Over.{u1, u2} T _inst_1 X} {g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) V))) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) V) (Prefunctor.map.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X))) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) (CategoryTheory.Over.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 Y) (CategoryTheory.Over.map.{u1, u2} T _inst_1 X Y f)) U V g)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) U V g)
Case conversion may be inaccurate. Consider using '#align category_theory.over.map_map_left CategoryTheory.Over.map_map_leftₓ'. -/
@[simp]
theorem map_map_left : ((map f).map g).left = g.left :=
  rfl
#align category_theory.over.map_map_left CategoryTheory.Over.map_map_left

#print CategoryTheory.Over.mapId /-
/-- Mapping by the identity morphism is just the identity functor. -/
def mapId : map (𝟙 Y) ≅ 𝟭 _ :=
  NatIso.ofComponents (fun X => isoMk (Iso.refl _) (by tidy)) (by tidy)
#align category_theory.over.map_id CategoryTheory.Over.mapId
-/

#print CategoryTheory.Over.mapComp /-
/-- Mapping by the composite morphism `f ≫ g` is the same as mapping by `f` then by `g`. -/
def mapComp {Y Z : T} (f : X ⟶ Y) (g : Y ⟶ Z) : map (f ≫ g) ≅ map f ⋙ map g :=
  NatIso.ofComponents (fun X => isoMk (Iso.refl _) (by tidy)) (by tidy)
#align category_theory.over.map_comp CategoryTheory.Over.mapComp
-/

end

#print CategoryTheory.Over.forget_reflects_iso /-
instance forget_reflects_iso : ReflectsIsomorphisms (forget X)
    where reflects Y Z f t :=
    ⟨⟨over.hom_mk (inv ((forget X).map f))
          ((as_iso ((forget X).map f)).inv_comp_eq.2 (over.w f).symm),
        by tidy⟩⟩
#align category_theory.over.forget_reflects_iso CategoryTheory.Over.forget_reflects_iso
-/

#print CategoryTheory.Over.forget_faithful /-
instance forget_faithful : Faithful (forget X) where
#align category_theory.over.forget_faithful CategoryTheory.Over.forget_faithful
-/

#print CategoryTheory.Over.epi_of_epi_left /-
-- TODO: Show the converse holds if `T` has binary products.
/--
If `k.left` is an epimorphism, then `k` is an epimorphism. In other words, `over.forget X` reflects
epimorphisms.
The converse does not hold without additional assumptions on the underlying category, see
`category_theory.over.epi_left_of_epi`.
-/
theorem epi_of_epi_left {f g : Over X} (k : f ⟶ g) [hk : Epi k.left] : Epi k :=
  (forget X).epi_of_epi_map hk
#align category_theory.over.epi_of_epi_left CategoryTheory.Over.epi_of_epi_left
-/

#print CategoryTheory.Over.mono_of_mono_left /-
/--
If `k.left` is a monomorphism, then `k` is a monomorphism. In other words, `over.forget X` reflects
monomorphisms.
The converse of `category_theory.over.mono_left_of_mono`.

This lemma is not an instance, to avoid loops in type class inference.
-/
theorem mono_of_mono_left {f g : Over X} (k : f ⟶ g) [hk : Mono k.left] : Mono k :=
  (forget X).mono_of_mono_map hk
#align category_theory.over.mono_of_mono_left CategoryTheory.Over.mono_of_mono_left
-/

#print CategoryTheory.Over.mono_left_of_mono /-
/--
If `k` is a monomorphism, then `k.left` is a monomorphism. In other words, `over.forget X` preserves
monomorphisms.
The converse of `category_theory.over.mono_of_mono_left`.
-/
instance mono_left_of_mono {f g : Over X} (k : f ⟶ g) [Mono k] : Mono k.left :=
  by
  refine' ⟨fun (Y : T) l m a => _⟩
  let l' : mk (m ≫ f.hom) ⟶ f :=
    hom_mk l
      (by
        dsimp
        rw [← over.w k, reassoc_of a])
  suffices l' = hom_mk m by apply congr_arg comma_morphism.left this
  rw [← cancel_mono k]
  ext
  apply a
#align category_theory.over.mono_left_of_mono CategoryTheory.Over.mono_left_of_mono
-/

section IteratedSlice

variable (f : Over X)

#print CategoryTheory.Over.iteratedSliceForward /-
/-- Given f : Y ⟶ X, this is the obvious functor from (T/X)/f to T/Y -/
@[simps]
def iteratedSliceForward : Over f ⥤ Over f.left
    where
  obj α := Over.mk α.Hom.left
  map α β κ :=
    Over.homMk κ.left.left
      (by
        rw [autoParam_eq]
        rw [← over.w κ]
        rfl)
#align category_theory.over.iterated_slice_forward CategoryTheory.Over.iteratedSliceForward
-/

#print CategoryTheory.Over.iteratedSliceBackward /-
/-- Given f : Y ⟶ X, this is the obvious functor from T/Y to (T/X)/f -/
@[simps]
def iteratedSliceBackward : Over f.left ⥤ Over f
    where
  obj g := mk (homMk g.Hom : mk (g.Hom ≫ f.Hom) ⟶ f)
  map g h α := homMk (homMk α.left (w_assoc α f.Hom)) (OverMorphism.ext (w α))
#align category_theory.over.iterated_slice_backward CategoryTheory.Over.iteratedSliceBackward
-/

/- warning: category_theory.over.iterated_slice_equiv -> CategoryTheory.Over.iteratedSliceEquiv is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} (f : CategoryTheory.Over.{u1, u2} T _inst_1 X), CategoryTheory.Equivalence.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.category.{u2, u1} T _inst_1 X) f) (CategoryTheory.Over.category.{max u2 u1, u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.Over.category.{u2, u1} T _inst_1 X) f) (CategoryTheory.Over.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f)) (CategoryTheory.Over.category.{u2, u1} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f))
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} (f : CategoryTheory.Over.{u1, u2} T _inst_1 X), CategoryTheory.Equivalence.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) f) (CategoryTheory.Over.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f)) (CategoryTheory.instCategoryOver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 X) f) (CategoryTheory.instCategoryOver.{u1, u2} T _inst_1 (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} T _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) f))
Case conversion may be inaccurate. Consider using '#align category_theory.over.iterated_slice_equiv CategoryTheory.Over.iteratedSliceEquivₓ'. -/
/-- Given f : Y ⟶ X, we have an equivalence between (T/X)/f and T/Y -/
@[simps]
def iteratedSliceEquiv : Over f ≌ Over f.left
    where
  Functor := iteratedSliceForward f
  inverse := iteratedSliceBackward f
  unitIso :=
    NatIso.ofComponents (fun g => Over.isoMk (Over.isoMk (Iso.refl _) (by tidy)) (by tidy))
      fun X Y g => by
      ext
      dsimp
      simp
  counitIso :=
    NatIso.ofComponents (fun g => Over.isoMk (Iso.refl _) (by tidy)) fun X Y g =>
      by
      ext
      dsimp
      simp
#align category_theory.over.iterated_slice_equiv CategoryTheory.Over.iteratedSliceEquiv

#print CategoryTheory.Over.iteratedSliceForward_forget /-
theorem iteratedSliceForward_forget :
    iteratedSliceForward f ⋙ forget f.left = forget f ⋙ forget X :=
  rfl
#align category_theory.over.iterated_slice_forward_forget CategoryTheory.Over.iteratedSliceForward_forget
-/

#print CategoryTheory.Over.iteratedSliceBackward_forget_forget /-
theorem iteratedSliceBackward_forget_forget :
    iteratedSliceBackward f ⋙ forget f ⋙ forget X = forget f.left :=
  rfl
#align category_theory.over.iterated_slice_backward_forget_forget CategoryTheory.Over.iteratedSliceBackward_forget_forget
-/

end IteratedSlice

section

variable {D : Type u₂} [Category.{v₂} D]

/- warning: category_theory.over.post -> CategoryTheory.Over.post is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} T] {X : T} {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} T _inst_1 D _inst_2), CategoryTheory.Functor.{u1, u2, max u3 u1, max u4 u2} (CategoryTheory.Over.{u1, u3} T _inst_1 X) (CategoryTheory.Over.category.{u3, u1} T _inst_1 X) (CategoryTheory.Over.{u2, u4} D _inst_2 (CategoryTheory.Functor.obj.{u1, u2, u3, u4} T _inst_1 D _inst_2 F X)) (CategoryTheory.Over.category.{u4, u2} D _inst_2 (CategoryTheory.Functor.obj.{u1, u2, u3, u4} T _inst_1 D _inst_2 F X))
but is expected to have type
  forall {T : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} T] {X : T} {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] (F : CategoryTheory.Functor.{u1, u2, u3, u4} T _inst_1 D _inst_2), CategoryTheory.Functor.{u1, u2, max u3 u1, max u4 u2} (CategoryTheory.Over.{u1, u3} T _inst_1 X) (CategoryTheory.instCategoryOver.{u1, u3} T _inst_1 X) (CategoryTheory.Over.{u2, u4} D _inst_2 (Prefunctor.obj.{succ u1, succ u2, u3, u4} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} T (CategoryTheory.Category.toCategoryStruct.{u1, u3} T _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} T _inst_1 D _inst_2 F) X)) (CategoryTheory.instCategoryOver.{u2, u4} D _inst_2 (Prefunctor.obj.{succ u1, succ u2, u3, u4} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} T (CategoryTheory.Category.toCategoryStruct.{u1, u3} T _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} T _inst_1 D _inst_2 F) X))
Case conversion may be inaccurate. Consider using '#align category_theory.over.post CategoryTheory.Over.postₓ'. -/
/-- A functor `F : T ⥤ D` induces a functor `over X ⥤ over (F.obj X)` in the obvious way. -/
@[simps]
def post (F : T ⥤ D) : Over X ⥤ Over (F.obj X)
    where
  obj Y := mk <| F.map Y.Hom
  map Y₁ Y₂ f := Over.homMk (F.map f.left) (by tidy <;> erw [← F.map_comp, w])
#align category_theory.over.post CategoryTheory.Over.post

end

end Over

#print CategoryTheory.Under /-
/-- The under category has as objects arrows with domain `X` and as morphisms commutative
    triangles. -/
def Under (X : T) :=
  StructuredArrow X (𝟭 T)deriving Category
#align category_theory.under CategoryTheory.Under
-/

#print CategoryTheory.Under.inhabited /-
-- Satisfying the inhabited linter
instance Under.inhabited [Inhabited T] : Inhabited (Under (default : T))
    where default :=
    { left := default
      right := default
      Hom := 𝟙 _ }
#align category_theory.under.inhabited CategoryTheory.Under.inhabited
-/

namespace Under

variable {X : T}

#print CategoryTheory.Under.UnderMorphism.ext /-
@[ext]
theorem UnderMorphism.ext {X : T} {U V : Under X} {f g : U ⟶ V} (h : f.right = g.right) : f = g :=
  by tidy
#align category_theory.under.under_morphism.ext CategoryTheory.Under.UnderMorphism.ext
-/

#print CategoryTheory.Under.under_left /-
@[simp]
theorem under_left (U : Under X) : U.left = ⟨⟨⟩⟩ := by tidy
#align category_theory.under.under_left CategoryTheory.Under.under_left
-/

#print CategoryTheory.Under.id_right /-
@[simp]
theorem id_right (U : Under X) : CommaMorphism.right (𝟙 U) = 𝟙 U.right :=
  rfl
#align category_theory.under.id_right CategoryTheory.Under.id_right
-/

#print CategoryTheory.Under.comp_right /-
@[simp]
theorem comp_right (a b c : Under X) (f : a ⟶ b) (g : b ⟶ c) : (f ≫ g).right = f.right ≫ g.right :=
  rfl
#align category_theory.under.comp_right CategoryTheory.Under.comp_right
-/

/- warning: category_theory.under.w -> CategoryTheory.Under.w is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {A : CategoryTheory.Under.{u1, u2} T _inst_1 X} {B : CategoryTheory.Under.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Under.category.{u2, u1} T _inst_1 X))) A B), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A B f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {A : CategoryTheory.Under.{u1, u2} T _inst_1 X} {B : CategoryTheory.Under.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) A B), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) A B f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) B)
Case conversion may be inaccurate. Consider using '#align category_theory.under.w CategoryTheory.Under.wₓ'. -/
@[simp, reassoc.1]
theorem w {A B : Under X} (f : A ⟶ B) : A.Hom ≫ f.right = B.Hom := by have := f.w <;> tidy
#align category_theory.under.w CategoryTheory.Under.w

#print CategoryTheory.Under.mk /-
/-- To give an object in the under category, it suffices to give an arrow with domain `X`. -/
@[simps right Hom]
def mk {X Y : T} (f : X ⟶ Y) : Under X :=
  StructuredArrow.mk f
#align category_theory.under.mk CategoryTheory.Under.mk
-/

/- warning: category_theory.under.hom_mk -> CategoryTheory.Under.homMk is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X} {V : CategoryTheory.Under.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)), (autoParamₓ.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U) f) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)) (Name.mk_string (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str (String.str String.empty (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 98 (OfNat.mk.{0} Nat 98 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 118 (OfNat.mk.{0} Nat 118 (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 105 (OfNat.mk.{0} Nat 105 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 111 (OfNat.mk.{0} Nat 111 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 117 (OfNat.mk.{0} Nat 117 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 115 (OfNat.mk.{0} Nat 115 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 108 (OfNat.mk.{0} Nat 108 (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) (Char.ofNat (OfNat.ofNat.{0} Nat 121 (OfNat.mk.{0} Nat 121 (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit0.{0} Nat Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (bit1.{0} Nat Nat.hasOne Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))))))) Name.anonymous)) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.StructuredArrow.{u1, u1, u2, u2} T _inst_1 T _inst_1 X (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.StructuredArrow.{u1, u1, u2, u2} T _inst_1 T _inst_1 X (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.StructuredArrow.category.{u1, u2, u2, u1} T _inst_1 T _inst_1 X (CategoryTheory.Functor.id.{u1, u2} T _inst_1)))) U V)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X} {V : CategoryTheory.Under.{u1, u2} T _inst_1 X} (f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)), (autoParam.{0} (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U) f) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) V)) _auto._@.Mathlib.CategoryTheory.Over._hyg.2636) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) U V)
Case conversion may be inaccurate. Consider using '#align category_theory.under.hom_mk CategoryTheory.Under.homMkₓ'. -/
/-- To give a morphism in the under category, it suffices to give a morphism fitting in a
    commutative triangle. -/
@[simps]
def homMk {U V : Under X} (f : U.right ⟶ V.right) (w : U.Hom ≫ f = V.Hom := by obviously) : U ⟶ V :=
  StructuredArrow.homMk f w
#align category_theory.under.hom_mk CategoryTheory.Under.homMk

/- warning: category_theory.under.iso_mk -> CategoryTheory.Under.isoMk is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) f g)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) f g)
Case conversion may be inaccurate. Consider using '#align category_theory.under.iso_mk CategoryTheory.Under.isoMkₓ'. -/
/-- Construct an isomorphism in the over category given isomorphisms of the objects whose forward
direction gives a commutative triangle.
-/
def isoMk {f g : Under X} (hr : f.right ≅ g.right) (hw : f.Hom ≫ hr.Hom = g.Hom) : f ≅ g :=
  StructuredArrow.isoMk hr hw
#align category_theory.under.iso_mk CategoryTheory.Under.isoMk

/- warning: category_theory.under.iso_mk_hom_right -> CategoryTheory.Under.isoMk_hom_right is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (hw : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f g (CategoryTheory.Iso.hom.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) f g (CategoryTheory.Under.isoMk.{u1, u2} T _inst_1 X f g hr hw))) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (hw : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f g (CategoryTheory.Iso.hom.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) f g (CategoryTheory.Under.isoMk.{u1, u2} T _inst_1 X f g hr hw))) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)
Case conversion may be inaccurate. Consider using '#align category_theory.under.iso_mk_hom_right CategoryTheory.Under.isoMk_hom_rightₓ'. -/
@[simp]
theorem isoMk_hom_right {f g : Under X} (hr : f.right ≅ g.right) (hw : f.Hom ≫ hr.Hom = g.Hom) :
    (isoMk hr hw).Hom.right = hr.Hom :=
  rfl
#align category_theory.under.iso_mk_hom_right CategoryTheory.Under.isoMk_hom_right

/- warning: category_theory.under.iso_mk_inv_right -> CategoryTheory.Under.isoMk_inv_right is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (hw : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g f (CategoryTheory.Iso.inv.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) f g (CategoryTheory.Under.isoMk.{u1, u2} T _inst_1 X f g hr hw))) (CategoryTheory.Iso.inv.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {f : CategoryTheory.Under.{u1, u2} T _inst_1 X} {g : CategoryTheory.Under.{u1, u2} T _inst_1 X} (hr : CategoryTheory.Iso.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (hw : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Iso.hom.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g)), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g f (CategoryTheory.Iso.inv.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) f g (CategoryTheory.Under.isoMk.{u1, u2} T _inst_1 X f g hr hw))) (CategoryTheory.Iso.inv.{u1, u2} T _inst_1 (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) f) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) g) hr)
Case conversion may be inaccurate. Consider using '#align category_theory.under.iso_mk_inv_right CategoryTheory.Under.isoMk_inv_rightₓ'. -/
@[simp]
theorem isoMk_inv_right {f g : Under X} (hr : f.right ≅ g.right) (hw : f.Hom ≫ hr.Hom = g.Hom) :
    (isoMk hr hw).inv.right = hr.inv :=
  rfl
#align category_theory.under.iso_mk_inv_right CategoryTheory.Under.isoMk_inv_right

section

variable (X)

#print CategoryTheory.Under.forget /-
/-- The forgetful functor mapping an arrow to its domain. -/
def forget : Under X ⥤ T :=
  Comma.snd _ _
#align category_theory.under.forget CategoryTheory.Under.forget
-/

end

/- warning: category_theory.under.forget_obj -> CategoryTheory.Under.forget_obj is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X) U) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X}, Eq.{succ u2} T (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X)) U) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)
Case conversion may be inaccurate. Consider using '#align category_theory.under.forget_obj CategoryTheory.Under.forget_objₓ'. -/
@[simp]
theorem forget_obj {U : Under X} : (forget X).obj U = U.right :=
  rfl
#align category_theory.under.forget_obj CategoryTheory.Under.forget_obj

/- warning: category_theory.under.forget_map -> CategoryTheory.Under.forget_map is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X} {V : CategoryTheory.Under.{u1, u2} T _inst_1 X} {f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Under.category.{u2, u1} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X) U) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X) V)) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X) U V f) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U V f)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {U : CategoryTheory.Under.{u1, u2} T _inst_1 X} {V : CategoryTheory.Under.{u1, u2} T _inst_1 X} {f : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X)) U) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X)) V)) (Prefunctor.map.{succ u1, succ u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, u2} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) T _inst_1 (CategoryTheory.Under.forget.{u1, u2} T _inst_1 X)) U V f) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U V f)
Case conversion may be inaccurate. Consider using '#align category_theory.under.forget_map CategoryTheory.Under.forget_mapₓ'. -/
@[simp]
theorem forget_map {U V : Under X} {f : U ⟶ V} : (forget X).map f = f.right :=
  rfl
#align category_theory.under.forget_map CategoryTheory.Under.forget_map

#print CategoryTheory.Under.forgetCone /-
/-- The natural cone over the forgetful functor `under X ⥤ T` with cone point `X`. -/
@[simps]
def forgetCone (X : T) : Limits.Cone (forget X) :=
  { pt
    π := { app := Comma.hom } }
#align category_theory.under.forget_cone CategoryTheory.Under.forgetCone
-/

#print CategoryTheory.Under.map /-
/-- A morphism `X ⟶ Y` induces a functor `under Y ⥤ under X` in the obvious way. -/
def map {Y : T} (f : X ⟶ Y) : Under Y ⥤ Under X :=
  Comma.mapLeft _ <| Discrete.natTrans fun _ => f
#align category_theory.under.map CategoryTheory.Under.map
-/

section

variable {Y : T} {f : X ⟶ Y} {U V : Under Y} {g : U ⟶ V}

/- warning: category_theory.under.map_obj_right -> CategoryTheory.Under.map_obj_right is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y}, Eq.{succ u2} T (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y}, Eq.{succ u2} T (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)
Case conversion may be inaccurate. Consider using '#align category_theory.under.map_obj_right CategoryTheory.Under.map_obj_rightₓ'. -/
@[simp]
theorem map_obj_right : ((map f).obj U).right = U.right :=
  rfl
#align category_theory.under.map_obj_right CategoryTheory.Under.map_obj_right

/- warning: category_theory.under.map_obj_hom -> CategoryTheory.Under.map_obj_hom is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U))) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U))) Y (CategoryTheory.Functor.obj.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U))) f (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U))
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X)) (CategoryTheory.Comma.left.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U))) (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U)))) (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.CategoryStruct.comp.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1) X Y (Prefunctor.obj.{succ u1, succ u1, u2, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} T _inst_1 T _inst_1 (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U)) f (CategoryTheory.Comma.hom.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U))
Case conversion may be inaccurate. Consider using '#align category_theory.under.map_obj_hom CategoryTheory.Under.map_obj_homₓ'. -/
@[simp]
theorem map_obj_hom : ((map f).obj U).Hom = f ≫ U.Hom :=
  rfl
#align category_theory.under.map_obj_hom CategoryTheory.Under.map_obj_hom

/- warning: category_theory.under.map_map_right -> CategoryTheory.Under.map_map_right is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y} {V : CategoryTheory.Under.{u1, u2} T _inst_1 Y} {g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.category.{u2, u1} T _inst_1 Y))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) V))) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) V) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.commaCategory.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1)) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f) U V g)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U V g)
but is expected to have type
  forall {T : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} T] {X : T} {Y : T} {f : Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) X Y} {U : CategoryTheory.Under.{u1, u2} T _inst_1 Y} {V : CategoryTheory.Under.{u1, u2} T _inst_1 Y} {g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) U V}, Eq.{succ u1} (Quiver.Hom.{succ u1, u2} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} T (CategoryTheory.Category.toCategoryStruct.{u1, u2} T _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U)) (CategoryTheory.Comma.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) V))) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 X) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) V) (Prefunctor.map.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y))) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Under.{u1, u2} T _inst_1 Y) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 Y) (CategoryTheory.Under.{u1, u2} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u2} T _inst_1 X) (CategoryTheory.Under.map.{u1, u2} T _inst_1 X Y f)) U V g)) (CategoryTheory.CommaMorphism.right.{u1, u1, u1, u1, u2, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) T _inst_1 T _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} T _inst_1 Y) (CategoryTheory.Functor.id.{u1, u2} T _inst_1) U V g)
Case conversion may be inaccurate. Consider using '#align category_theory.under.map_map_right CategoryTheory.Under.map_map_rightₓ'. -/
@[simp]
theorem map_map_right : ((map f).map g).right = g.right :=
  rfl
#align category_theory.under.map_map_right CategoryTheory.Under.map_map_right

#print CategoryTheory.Under.mapId /-
/-- Mapping by the identity morphism is just the identity functor. -/
def mapId : map (𝟙 Y) ≅ 𝟭 _ :=
  NatIso.ofComponents (fun X => isoMk (Iso.refl _) (by tidy)) (by tidy)
#align category_theory.under.map_id CategoryTheory.Under.mapId
-/

#print CategoryTheory.Under.mapComp /-
/-- Mapping by the composite morphism `f ≫ g` is the same as mapping by `f` then by `g`. -/
def mapComp {Y Z : T} (f : X ⟶ Y) (g : Y ⟶ Z) : map (f ≫ g) ≅ map g ⋙ map f :=
  NatIso.ofComponents (fun X => isoMk (Iso.refl _) (by tidy)) (by tidy)
#align category_theory.under.map_comp CategoryTheory.Under.mapComp
-/

end

#print CategoryTheory.Under.forget_reflects_iso /-
instance forget_reflects_iso : ReflectsIsomorphisms (forget X)
    where reflects Y Z f t :=
    ⟨⟨under.hom_mk (inv ((under.forget X).map f)) ((is_iso.comp_inv_eq _).2 (under.w f).symm), by
        tidy⟩⟩
#align category_theory.under.forget_reflects_iso CategoryTheory.Under.forget_reflects_iso
-/

#print CategoryTheory.Under.forget_faithful /-
instance forget_faithful : Faithful (forget X) where
#align category_theory.under.forget_faithful CategoryTheory.Under.forget_faithful
-/

#print CategoryTheory.Under.mono_of_mono_right /-
-- TODO: Show the converse holds if `T` has binary coproducts.
/-- If `k.right` is a monomorphism, then `k` is a monomorphism. In other words, `under.forget X`
reflects epimorphisms.
The converse does not hold without additional assumptions on the underlying category, see
`category_theory.under.mono_right_of_mono`.
-/
theorem mono_of_mono_right {f g : Under X} (k : f ⟶ g) [hk : Mono k.right] : Mono k :=
  (forget X).mono_of_mono_map hk
#align category_theory.under.mono_of_mono_right CategoryTheory.Under.mono_of_mono_right
-/

#print CategoryTheory.Under.epi_of_epi_right /-
/--
If `k.right` is a epimorphism, then `k` is a epimorphism. In other words, `under.forget X` reflects
epimorphisms.
The converse of `category_theory.under.epi_right_of_epi`.

This lemma is not an instance, to avoid loops in type class inference.
-/
theorem epi_of_epi_right {f g : Under X} (k : f ⟶ g) [hk : Epi k.right] : Epi k :=
  (forget X).epi_of_epi_map hk
#align category_theory.under.epi_of_epi_right CategoryTheory.Under.epi_of_epi_right
-/

#print CategoryTheory.Under.epi_right_of_epi /-
/--
If `k` is a epimorphism, then `k.right` is a epimorphism. In other words, `under.forget X` preserves
epimorphisms.
The converse of `category_theory.under.epi_of_epi_right`.
-/
instance epi_right_of_epi {f g : Under X} (k : f ⟶ g) [Epi k] : Epi k.right :=
  by
  refine' ⟨fun (Y : T) l m a => _⟩
  let l' : g ⟶ mk (g.hom ≫ m) :=
    hom_mk l
      (by
        dsimp
        rw [← under.w k, category.assoc, a, category.assoc])
  suffices l' = hom_mk m by apply congr_arg comma_morphism.right this
  rw [← cancel_epi k]
  ext
  apply a
#align category_theory.under.epi_right_of_epi CategoryTheory.Under.epi_right_of_epi
-/

section

variable {D : Type u₂} [Category.{v₂} D]

/- warning: category_theory.under.post -> CategoryTheory.Under.post is a dubious translation:
lean 3 declaration is
  forall {T : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} T] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {X : T} (F : CategoryTheory.Functor.{u1, u2, u3, u4} T _inst_1 D _inst_2), CategoryTheory.Functor.{u1, u2, max u3 u1, max u4 u2} (CategoryTheory.Under.{u1, u3} T _inst_1 X) (CategoryTheory.Under.category.{u3, u1} T _inst_1 X) (CategoryTheory.Under.{u2, u4} D _inst_2 (CategoryTheory.Functor.obj.{u1, u2, u3, u4} T _inst_1 D _inst_2 F X)) (CategoryTheory.Under.category.{u4, u2} D _inst_2 (CategoryTheory.Functor.obj.{u1, u2, u3, u4} T _inst_1 D _inst_2 F X))
but is expected to have type
  forall {T : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} T] {D : Type.{u4}} [_inst_2 : CategoryTheory.Category.{u2, u4} D] {X : T} (F : CategoryTheory.Functor.{u1, u2, u3, u4} T _inst_1 D _inst_2), CategoryTheory.Functor.{u1, u2, max u3 u1, max u4 u2} (CategoryTheory.Under.{u1, u3} T _inst_1 X) (CategoryTheory.instCategoryUnder.{u1, u3} T _inst_1 X) (CategoryTheory.Under.{u2, u4} D _inst_2 (Prefunctor.obj.{succ u1, succ u2, u3, u4} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} T (CategoryTheory.Category.toCategoryStruct.{u1, u3} T _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} T _inst_1 D _inst_2 F) X)) (CategoryTheory.instCategoryUnder.{u2, u4} D _inst_2 (Prefunctor.obj.{succ u1, succ u2, u3, u4} T (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} T (CategoryTheory.Category.toCategoryStruct.{u1, u3} T _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} D (CategoryTheory.Category.toCategoryStruct.{u2, u4} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} T _inst_1 D _inst_2 F) X))
Case conversion may be inaccurate. Consider using '#align category_theory.under.post CategoryTheory.Under.postₓ'. -/
/-- A functor `F : T ⥤ D` induces a functor `under X ⥤ under (F.obj X)` in the obvious way. -/
@[simps]
def post {X : T} (F : T ⥤ D) : Under X ⥤ Under (F.obj X)
    where
  obj Y := mk <| F.map Y.Hom
  map Y₁ Y₂ f := Under.homMk (F.map f.right) (by tidy <;> erw [← F.map_comp, w])
#align category_theory.under.post CategoryTheory.Under.post

end

end Under

end CategoryTheory