Documentation

Mathlib.CategoryTheory.Comma.StructuredArrow.Basic

The category of "structured arrows" #

For T : C ⥤ D, a T-structured arrow with source S : D is just a morphism S ⟶ T.obj Y, for some Y : C.

These form a category with morphisms g : Y ⟶ Y' making the obvious diagram commute.

We prove that 𝟙 (T.obj Y) is the initial object in T-structured objects with source T.obj Y.

def CategoryTheory.StructuredArrow {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : D) (T : Functor C D) :
Type (max u₁ v₂)

The category of T-structured arrows with domain S : D (here T : C ⥤ D), has as its objects D-morphisms of the form S ⟶ T Y, for some Y : C, and morphisms C-morphisms Y ⟶ Y' making the obvious triangle commute.

Equations

The obvious projection functor from structured arrows.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.proj_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : D) (T : Functor C D) (X : Comma (Functor.fromPUnit S) T) :
(proj S T).obj X = X.right
@[simp]
theorem CategoryTheory.StructuredArrow.proj_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : D) (T : Functor C D) {X✝ Y✝ : Comma (Functor.fromPUnit S) T} (f : X✝ Y✝) :
(proj S T).map f = f.right
theorem CategoryTheory.StructuredArrow.hom_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {X Y : StructuredArrow S T} (f g : X Y) (h : f.right = g.right) :
f = g
theorem CategoryTheory.StructuredArrow.hom_ext_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {X Y : StructuredArrow S T} {f g : X Y} :
f = g f.right = g.right
@[simp]
theorem CategoryTheory.StructuredArrow.hom_eq_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {X Y : StructuredArrow S T} (f g : X Y) :
f = g f.right = g.right
def CategoryTheory.StructuredArrow.mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :

Construct a structured arrow from a morphism.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.mk_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :
(mk f).left = { as := PUnit.unit }
@[simp]
theorem CategoryTheory.StructuredArrow.mk_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :
(mk f).right = Y
@[simp]
theorem CategoryTheory.StructuredArrow.mk_hom_eq_self {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :
(mk f).hom = f
@[simp]
theorem CategoryTheory.StructuredArrow.w {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A B) :
@[simp]
theorem CategoryTheory.StructuredArrow.w_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A B) {Z : D} (h : T.obj B.right Z) :
@[simp]
@[simp]
theorem CategoryTheory.StructuredArrow.eqToHom_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {X Y : StructuredArrow S T} (h : X = Y) :
@[simp]
def CategoryTheory.StructuredArrow.homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g) = f'.hom := by aesop_cat) :
f f'

To construct a morphism of structured arrows, we need a morphism of the objects underlying the target, and to check that the triangle commutes.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.homMk_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g) = f'.hom := by aesop_cat) :
(homMk g w).right = g
theorem CategoryTheory.StructuredArrow.homMk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (φ : f f') :
(ψ : f.right f'.right), ( : CategoryStruct.comp f.hom (T.map ψ) = f'.hom), φ = homMk ψ
def CategoryTheory.StructuredArrow.homMk' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') :

Given a structured arrow X ⟶ T(Y), and an arrow Y ⟶ Y', we can construct a morphism of structured arrows given by (X ⟶ T(Y)) ⟶ (X ⟶ T(Y) ⟶ T(Y')).

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.homMk'_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') :
@[simp]
theorem CategoryTheory.StructuredArrow.homMk'_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') :
(f.homMk' g).right = g
theorem CategoryTheory.StructuredArrow.homMk'_mk_id {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :
theorem CategoryTheory.StructuredArrow.homMk'_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' Y'' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') (g' : Y' Y'') :
theorem CategoryTheory.StructuredArrow.homMk'_mk_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' Y'' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') (g' : Y' Y'') :
def CategoryTheory.StructuredArrow.mkPostcomp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') :

Variant of homMk' where both objects are applications of mk.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.mkPostcomp_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') :
@[simp]
theorem CategoryTheory.StructuredArrow.mkPostcomp_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') :
theorem CategoryTheory.StructuredArrow.mkPostcomp_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' Y'' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') (g' : Y' Y'') :
def CategoryTheory.StructuredArrow.isoMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g.hom) = f'.hom := by aesop_cat) :
f f'

To construct an isomorphism of structured arrows, we need an isomorphism of the objects underlying the target, and to check that the triangle commutes.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.isoMk_hom_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g.hom) = f'.hom := by aesop_cat) :
(isoMk g w).hom.right = g.hom
@[simp]
theorem CategoryTheory.StructuredArrow.isoMk_inv_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g.hom) = f'.hom := by aesop_cat) :
(isoMk g w).inv.right = g.inv
theorem CategoryTheory.StructuredArrow.obj_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} (x y : StructuredArrow S T) (hr : x.right = y.right) (hh : CategoryStruct.comp x.hom (T.map (eqToHom hr)) = y.hom) :
x = y
theorem CategoryTheory.StructuredArrow.ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f g : A B) :
f.right = g.rightf = g
theorem CategoryTheory.StructuredArrow.ext_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f g : A B) :
f = g f.right = g.right
theorem CategoryTheory.StructuredArrow.mono_of_mono_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A B) [h : Mono f.right] :

The converse of this is true with additional assumptions, see mono_iff_mono_right.

theorem CategoryTheory.StructuredArrow.epi_of_epi_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A B) [h : Epi f.right] :
Epi f
instance CategoryTheory.StructuredArrow.mono_homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A.right B.right) (w : CategoryStruct.comp A.hom (T.map f) = B.hom) [h : Mono f] :
Mono (homMk f w)
instance CategoryTheory.StructuredArrow.epi_homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A.right B.right) (w : CategoryStruct.comp A.hom (T.map f) = B.hom) [h : Epi f] :
Epi (homMk f w)
theorem CategoryTheory.StructuredArrow.eq_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} (f : StructuredArrow S T) :
f = mk f.hom

Eta rule for structured arrows. Prefer StructuredArrow.eta for rewriting, since equality of objects tends to cause problems.

def CategoryTheory.StructuredArrow.eta {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} (f : StructuredArrow S T) :
f mk f.hom

Eta rule for structured arrows.

Equations
theorem CategoryTheory.StructuredArrow.mk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} (f : StructuredArrow S T) :
(Y : C), (g : S T.obj Y), f = mk g
def CategoryTheory.StructuredArrow.map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') :

A morphism between source objects S ⟶ S' contravariantly induces a functor between structured arrows, StructuredArrow S' T ⥤ StructuredArrow S T.

Ideally this would be described as a 2-functor from D (promoted to a 2-category with equations as 2-morphisms) to Cat.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.map_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S') T} (f✝ : X✝ Y✝) :
((map f).map f✝).right = f✝.right
@[simp]
theorem CategoryTheory.StructuredArrow.map_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S') T} (f✝ : X✝ Y✝) :
@[simp]
theorem CategoryTheory.StructuredArrow.map_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') (X : Comma (Functor.fromPUnit S') T) :
((map f).obj X).left = X.left
@[simp]
theorem CategoryTheory.StructuredArrow.map_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') (X : Comma (Functor.fromPUnit S') T) :
((map f).obj X).right = X.right
@[simp]
theorem CategoryTheory.StructuredArrow.map_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (f : S S') (X : Comma (Functor.fromPUnit S') T) :
@[simp]
theorem CategoryTheory.StructuredArrow.map_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {Y : C} {T : Functor C D} {f : S' T.obj Y} (g : S S') :
@[simp]
@[simp]
theorem CategoryTheory.StructuredArrow.map_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' S'' : D} {T : Functor C D} {f : S S'} {f' : S' S''} {h : StructuredArrow S'' T} :
(map (CategoryStruct.comp f f')).obj h = (map f).obj ((map f').obj h)
@[simp]
theorem CategoryTheory.StructuredArrow.mapIso_inverse_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (i : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S') T} (f : X✝ Y✝) :
@[simp]
@[simp]
theorem CategoryTheory.StructuredArrow.mapIso_functor_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (i : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S) T} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.StructuredArrow.mapIso_functor_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (i : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S) T} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.StructuredArrow.mapIso_inverse_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (i : S S') (X : Comma (Functor.fromPUnit S') T) :
@[simp]
theorem CategoryTheory.StructuredArrow.mapIso_inverse_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {T : Functor C D} (i : S S') {X✝ Y✝ : Comma (Functor.fromPUnit S') T} (f : X✝ Y✝) :
@[simp]
@[simp]
@[simp]
theorem CategoryTheory.StructuredArrow.mapNatIso_functor_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T T' : Functor C D} (i : T T') {X✝ Y✝ : Comma (Functor.fromPUnit S) T} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.StructuredArrow.mapNatIso_inverse_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T T' : Functor C D} (i : T T') {X✝ Y✝ : Comma (Functor.fromPUnit S) T'} (f : X✝ Y✝) :
@[simp]
@[simp]
theorem CategoryTheory.StructuredArrow.mapNatIso_inverse_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T T' : Functor C D} (i : T T') {X✝ Y✝ : Comma (Functor.fromPUnit S) T'} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.StructuredArrow.mapNatIso_functor_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T T' : Functor C D} (i : T T') {X✝ Y✝ : Comma (Functor.fromPUnit S) T} (f : X✝ Y✝) :

The identity structured arrow is initial.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.pre_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) {X✝ Y✝ : Comma (Functor.fromPUnit S) (F.comp G)} (f : X✝ Y✝) :
((pre S F G).map f).left = CategoryStruct.id X✝.left
@[simp]
theorem CategoryTheory.StructuredArrow.pre_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) (X : Comma (Functor.fromPUnit S) (F.comp G)) :
((pre S F G).obj X).left = X.left
@[simp]
theorem CategoryTheory.StructuredArrow.pre_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) (X : Comma (Functor.fromPUnit S) (F.comp G)) :
((pre S F G).obj X).right = F.obj X.right
@[simp]
theorem CategoryTheory.StructuredArrow.pre_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) {X✝ Y✝ : Comma (Functor.fromPUnit S) (F.comp G)} (f : X✝ Y✝) :
((pre S F G).map f).right = F.map f.right
@[simp]
theorem CategoryTheory.StructuredArrow.pre_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) (X : Comma (Functor.fromPUnit S) (F.comp G)) :
((pre S F G).obj X).hom = X.hom
instance CategoryTheory.StructuredArrow.instFullCompPre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) [F.Full] :
(pre S F G).Full

If F is an equivalence, then so is the functor (S, F ⋙ G) ⥤ (S, G).

The functor (S, F) ⥤ (G(S), F ⋙ G).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.post_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : C) (F : Functor B C) (G : Functor C D) {X✝ Y✝ : StructuredArrow S F} (f : X✝ Y✝) :
(post S F G).map f = homMk f.right
@[simp]
theorem CategoryTheory.StructuredArrow.post_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : C) (F : Functor B C) (G : Functor C D) (X : StructuredArrow S F) :
(post S F G).obj X = mk (G.map X.hom)

If G is fully faithful, then post S F G : (S, F) ⥤ (G(S), F ⋙ G) is an equivalence.

def CategoryTheory.StructuredArrow.map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') :

The functor StructuredArrow L R ⥤ StructuredArrow L' R' that is deduced from a natural transformation R ⋙ G ⟶ F ⋙ R' and a morphism L' ⟶ G.obj L.

Equations
@[simp]
theorem CategoryTheory.StructuredArrow.map₂_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') (X : Comma (Functor.fromPUnit L) R) :
((map₂ α β).obj X).left = X.left
@[simp]
theorem CategoryTheory.StructuredArrow.map₂_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') (X : Comma (Functor.fromPUnit L) R) :
@[simp]
theorem CategoryTheory.StructuredArrow.map₂_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') (X : Comma (Functor.fromPUnit L) R) :
((map₂ α β).obj X).right = F.obj X.right
@[simp]
theorem CategoryTheory.StructuredArrow.map₂_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') {X Y : Comma (Functor.fromPUnit L) R} (φ : X Y) :
((map₂ α β).map φ).right = F.map φ.right
@[simp]
theorem CategoryTheory.StructuredArrow.map₂_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') {X Y : Comma (Functor.fromPUnit L) R} (φ : X Y) :
instance CategoryTheory.StructuredArrow.faithful_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') [F.Faithful] :
instance CategoryTheory.StructuredArrow.full_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') [G.Faithful] [F.Full] [IsIso α] [IsIso β] :
(map₂ α β).Full
instance CategoryTheory.StructuredArrow.essSurj_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') [F.EssSurj] [G.Full] [IsIso α] [IsIso β] :
(map₂ α β).EssSurj
instance CategoryTheory.StructuredArrow.isEquivalenceMap₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') [F.IsEquivalence] [G.Faithful] [G.Full] [IsIso α] [IsIso β] :
def CategoryTheory.StructuredArrow.map₂CompMap₂Iso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') {C' : Type u₆} [Category.{v₆, u₆} C'] {D' : Type u₅} [Category.{v₅, u₅} D'] {L'' : D'} {R'' : Functor C' D'} {F' : Functor C' C} {G' : Functor D' D} (α' : L G'.obj L'') (β' : R''.comp G' F'.comp R) :

The composition of two applications of map₂ is naturally isomorphic to a single such one.

Equations
  • One or more equations did not get rendered due to their size.

StructuredArrow.post is a special case of StructuredArrow.map₂ up to natural isomorphism.

Equations
  • One or more equations did not get rendered due to their size.

StructuredArrow.map is a special case of StructuredArrow.map₂ up to natural isomorphism.

Equations
  • One or more equations did not get rendered due to their size.

StructuredArrow.pre is a special case of StructuredArrow.map₂ up to natural isomorphism.

Equations
  • One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev CategoryTheory.StructuredArrow.IsUniversal {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} (f : StructuredArrow S T) :
Type (max (max u₁ v₂) v₁)

A structured arrow is called universal if it is initial.

Equations

The family of morphisms out of a universal arrow.

Equations
@[simp]

Any structured arrow factors through a universal arrow.

@[simp]
theorem CategoryTheory.StructuredArrow.IsUniversal.hom_desc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f : StructuredArrow S T} (h : f.IsUniversal) {c : C} (η : f.right c) :
η = h.desc (mk (CategoryStruct.comp f.hom (T.map η)))
theorem CategoryTheory.StructuredArrow.IsUniversal.hom_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f : StructuredArrow S T} (h : f.IsUniversal) {c : C} {η η' : f.right c} (w : CategoryStruct.comp f.hom (T.map η) = CategoryStruct.comp f.hom (T.map η')) :
η = η'

Two morphisms out of a universal T-structured arrow are equal if their image under T are equal after precomposing the universal arrow.

def CategoryTheory.CostructuredArrow {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : Functor C D) (T : D) :
Type (max u₁ v₂)

The category of S-costructured arrows with target T : D (here S : C ⥤ D), has as its objects D-morphisms of the form S Y ⟶ T, for some Y : C, and morphisms C-morphisms Y ⟶ Y' making the obvious triangle commute.

Equations

The obvious projection functor from costructured arrows.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.proj_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : Functor C D) (T : D) (X : Comma S (Functor.fromPUnit T)) :
(proj S T).obj X = X.left
@[simp]
theorem CategoryTheory.CostructuredArrow.proj_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : Functor C D) (T : D) {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
(proj S T).map f = f.left
theorem CategoryTheory.CostructuredArrow.hom_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} (f g : X Y) (h : f.left = g.left) :
f = g
theorem CategoryTheory.CostructuredArrow.hom_ext_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} {f g : X Y} :
f = g f.left = g.left
@[simp]
theorem CategoryTheory.CostructuredArrow.hom_eq_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} (f g : X Y) :
f = g f.left = g.left
def CategoryTheory.CostructuredArrow.mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :

Construct a costructured arrow from a morphism.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.mk_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :
(mk f).left = Y
@[simp]
theorem CategoryTheory.CostructuredArrow.mk_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :
(mk f).right = { as := PUnit.unit }
@[simp]
theorem CategoryTheory.CostructuredArrow.mk_hom_eq_self {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :
(mk f).hom = f
theorem CategoryTheory.CostructuredArrow.w {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) :
@[simp]
@[simp]
theorem CategoryTheory.CostructuredArrow.eqToHom_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} (h : X = Y) :
def CategoryTheory.CostructuredArrow.homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g) f'.hom = f.hom := by aesop_cat) :
f f'

To construct a morphism of costructured arrows, we need a morphism of the objects underlying the source, and to check that the triangle commutes.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.homMk_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g) f'.hom = f.hom := by aesop_cat) :
(homMk g w).left = g
theorem CategoryTheory.CostructuredArrow.homMk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (φ : f f') :
(ψ : f.left f'.left), ( : CategoryStruct.comp (S.map ψ) f'.hom = f.hom), φ = homMk ψ
def CategoryTheory.CostructuredArrow.homMk' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y' : C} {S : Functor C D} (f : CostructuredArrow S T) (g : Y' f.left) :

Given a costructured arrow S(Y) ⟶ X, and an arrow Y' ⟶ Y', we can construct a morphism of costructured arrows given by (S(Y) ⟶ X) ⟶ (S(Y') ⟶ S(Y) ⟶ X).

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.homMk'_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y' : C} {S : Functor C D} (f : CostructuredArrow S T) (g : Y' f.left) :
(f.homMk' g).left = g
@[simp]
theorem CategoryTheory.CostructuredArrow.homMk'_mk_id {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :
theorem CategoryTheory.CostructuredArrow.homMk'_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y' Y'' : C} {S : Functor C D} (f : CostructuredArrow S T) (g : Y' f.left) (g' : Y'' Y') :
theorem CategoryTheory.CostructuredArrow.homMk'_mk_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' Y'' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) (g' : Y'' Y') :
def CategoryTheory.CostructuredArrow.mkPrecomp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) :

Variant of homMk' where both objects are applications of mk.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.mkPrecomp_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) :
(mkPrecomp f g).left = g
@[simp]
theorem CategoryTheory.CostructuredArrow.mkPrecomp_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) :
theorem CategoryTheory.CostructuredArrow.mkPrecomp_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' Y'' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) (g' : Y'' Y') :
def CategoryTheory.CostructuredArrow.isoMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g.hom) f'.hom = f.hom := by aesop_cat) :
f f'

To construct an isomorphism of costructured arrows, we need an isomorphism of the objects underlying the source, and to check that the triangle commutes.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.isoMk_hom_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g.hom) f'.hom = f.hom := by aesop_cat) :
(isoMk g w).hom.left = g.hom
@[simp]
theorem CategoryTheory.CostructuredArrow.isoMk_inv_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g.hom) f'.hom = f.hom := by aesop_cat) :
(isoMk g w).inv.left = g.inv
theorem CategoryTheory.CostructuredArrow.obj_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} (x y : CostructuredArrow S T) (hl : x.left = y.left) (hh : CategoryStruct.comp (S.map (eqToHom hl)) y.hom = x.hom) :
x = y
theorem CategoryTheory.CostructuredArrow.ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f g : A B) (h : f.left = g.left) :
f = g
theorem CategoryTheory.CostructuredArrow.ext_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f g : A B) :
f = g f.left = g.left
theorem CategoryTheory.CostructuredArrow.mono_of_mono_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) [h : Mono f.left] :
theorem CategoryTheory.CostructuredArrow.epi_of_epi_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) [h : Epi f.left] :
Epi f

The converse of this is true with additional assumptions, see epi_iff_epi_left.

instance CategoryTheory.CostructuredArrow.mono_homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A.left B.left) (w : CategoryStruct.comp (S.map f) B.hom = A.hom) [h : Mono f] :
Mono (homMk f w)
instance CategoryTheory.CostructuredArrow.epi_homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A.left B.left) (w : CategoryStruct.comp (S.map f) B.hom = A.hom) [h : Epi f] :
Epi (homMk f w)
theorem CategoryTheory.CostructuredArrow.eq_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} (f : CostructuredArrow S T) :
f = mk f.hom

Eta rule for costructured arrows. Prefer CostructuredArrow.eta for rewriting, as equality of objects tends to cause problems.

Eta rule for costructured arrows.

Equations

A morphism between target objects T ⟶ T' covariantly induces a functor between costructured arrows, CostructuredArrow S T ⥤ CostructuredArrow S T'.

Ideally this would be described as a 2-functor from D (promoted to a 2-category with equations as 2-morphisms) to Cat.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.map_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
((map f).obj X).left = X.left
@[simp]
theorem CategoryTheory.CostructuredArrow.map_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f✝ : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.map_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f✝ : X✝ Y✝) :
((map f).map f✝).left = f✝.left
@[simp]
theorem CategoryTheory.CostructuredArrow.map_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
((map f).obj X).right = X.right
@[simp]
theorem CategoryTheory.CostructuredArrow.map_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
@[simp]
theorem CategoryTheory.CostructuredArrow.map_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {Y : C} {S : Functor C D} {f : S.obj Y T} (g : T T') :
@[simp]
theorem CategoryTheory.CostructuredArrow.map_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' T'' : D} {S : Functor C D} {f : T T'} {f' : T' T''} {h : CostructuredArrow S T} :
(map (CategoryStruct.comp f f')).obj h = (map f').obj ((map f).obj h)
@[simp]
@[simp]
@[simp]
theorem CategoryTheory.CostructuredArrow.mapIso_functor_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (i : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
@[simp]
@[simp]
theorem CategoryTheory.CostructuredArrow.mapIso_functor_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (i : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.mapIso_inverse_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (i : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T')} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.mapIso_inverse_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (i : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T')} (f : X✝ Y✝) :
@[simp]

A natural isomorphism S ≅ S' induces an equivalence CostrucutredArrow S T ≌ CostructuredArrow S' T.

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.mapNatIso_functor_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S S' : Functor C D} (i : S S') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.mapNatIso_functor_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S S' : Functor C D} (i : S S') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.mapNatIso_inverse_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S S' : Functor C D} (i : S S') {X✝ Y✝ : Comma S' (Functor.fromPUnit T)} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.mapNatIso_inverse_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S S' : Functor C D} (i : S S') {X✝ Y✝ : Comma S' (Functor.fromPUnit T)} (f : X✝ Y✝) :

The identity costructured arrow is terminal.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.pre_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) (X : Comma (F.comp G) (Functor.fromPUnit S)) :
((pre F G S).obj X).left = F.obj X.left
@[simp]
theorem CategoryTheory.CostructuredArrow.pre_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) {X✝ Y✝ : Comma (F.comp G) (Functor.fromPUnit S)} (f : X✝ Y✝) :
@[simp]
theorem CategoryTheory.CostructuredArrow.pre_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) (X : Comma (F.comp G) (Functor.fromPUnit S)) :
((pre F G S).obj X).hom = X.hom
@[simp]
theorem CategoryTheory.CostructuredArrow.pre_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) (X : Comma (F.comp G) (Functor.fromPUnit S)) :
((pre F G S).obj X).right = X.right
@[simp]
theorem CategoryTheory.CostructuredArrow.pre_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) {X✝ Y✝ : Comma (F.comp G) (Functor.fromPUnit S)} (f : X✝ Y✝) :
((pre F G S).map f).left = F.map f.left
instance CategoryTheory.CostructuredArrow.instFullCompPre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : D) [F.Full] :
(pre F G S).Full

If F is an equivalence, then so is the functor (F ⋙ G, S) ⥤ (G, S).

The functor (F, S) ⥤ (F ⋙ G, G(S)).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.post_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : C) (X : CostructuredArrow F S) :
(post F G S).obj X = mk (G.map X.hom)
@[simp]
theorem CategoryTheory.CostructuredArrow.post_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (F : Functor B C) (G : Functor C D) (S : C) {X✝ Y✝ : CostructuredArrow F S} (f : X✝ Y✝) :
(post F G S).map f = homMk f.left

If G is fully faithful, then post F G S : (F, S) ⥤ (F ⋙ G, G(S)) is an equivalence.

def CategoryTheory.CostructuredArrow.map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) :

The functor CostructuredArrow S T ⥤ CostructuredArrow U V that is deduced from a natural transformation F ⋙ U ⟶ S ⋙ G and a morphism G.obj T ⟶ V

Equations
@[simp]
theorem CategoryTheory.CostructuredArrow.map₂_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) {X Y : Comma S (Functor.fromPUnit T)} (φ : X Y) :
@[simp]
theorem CategoryTheory.CostructuredArrow.map₂_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) {X Y : Comma S (Functor.fromPUnit T)} (φ : X Y) :
((map₂ α β).map φ).left = F.map φ.left
@[simp]
theorem CategoryTheory.CostructuredArrow.map₂_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) (X : Comma S (Functor.fromPUnit T)) :
@[simp]
theorem CategoryTheory.CostructuredArrow.map₂_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) (X : Comma S (Functor.fromPUnit T)) :
((map₂ α β).obj X).right = X.right
@[simp]
theorem CategoryTheory.CostructuredArrow.map₂_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) (X : Comma S (Functor.fromPUnit T)) :
((map₂ α β).obj X).left = F.obj X.left
instance CategoryTheory.CostructuredArrow.faithful_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.Faithful] :
instance CategoryTheory.CostructuredArrow.full_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [G.Faithful] [F.Full] [IsIso α] [IsIso β] :
(map₂ α β).Full
instance CategoryTheory.CostructuredArrow.essSurj_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.EssSurj] [G.Full] [IsIso α] [IsIso β] :
(map₂ α β).EssSurj
instance CategoryTheory.CostructuredArrow.isEquivalenceMap₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.IsEquivalence] [G.Faithful] [G.Full] [IsIso α] [IsIso β] :

CostructuredArrow.post is a special case of CostructuredArrow.map₂ up to natural isomorphism.

Equations
  • One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev CategoryTheory.CostructuredArrow.IsUniversal {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} (f : CostructuredArrow S T) :
Type (max (max u₁ v₂) v₁)

A costructured arrow is called universal if it is terminal.

Equations

The family of morphisms into a universal arrow.

Equations
@[simp]

Any costructured arrow factors through a universal arrow.

theorem CategoryTheory.CostructuredArrow.IsUniversal.hom_desc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f : CostructuredArrow S T} (h : f.IsUniversal) {c : C} (η : c f.left) :
η = h.lift (mk (CategoryStruct.comp (S.map η) f.hom))
theorem CategoryTheory.CostructuredArrow.IsUniversal.hom_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f : CostructuredArrow S T} (h : f.IsUniversal) {c : C} {η η' : c f.left} (w : CategoryStruct.comp (S.map η) f.hom = CategoryStruct.comp (S.map η') f.hom) :
η = η'

Two morphisms into a universal S-costructured arrow are equal if their image under S are equal after postcomposing the universal arrow.

def CategoryTheory.Functor.toStructuredArrow {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (X : D) (F : Functor C D) (f : (Y : E) → X F.obj (G.obj Y)) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (f Y) (F.map (G.map g)) = f Z) :

Given X : D and F : C ⥤ D, to upgrade a functor G : E ⥤ C to a functor E ⥤ StructuredArrow X F, it suffices to provide maps X ⟶ F.obj (G.obj Y) for all Y making the obvious triangles involving all F.map (G.map g) commute.

This is of course the same as providing a cone over F ⋙ G with cone point X, see Functor.toStructuredArrowIsoToStructuredArrow.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.toStructuredArrow_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (X : D) (F : Functor C D) (f : (Y : E) → X F.obj (G.obj Y)) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (f Y) (F.map (G.map g)) = f Z) (Y : E) :
@[simp]
theorem CategoryTheory.Functor.toStructuredArrow_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (X : D) (F : Functor C D) (f : (Y : E) → X F.obj (G.obj Y)) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (f Y) (F.map (G.map g)) = f Z) {X✝ Y✝ : E} (g : X✝ Y✝) :
def CategoryTheory.Functor.toStructuredArrowCompProj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (X : D) (F : Functor C D) (f : (Y : E) → X F.obj (G.obj Y)) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (f Y) (F.map (G.map g)) = f Z) :

Upgrading a functor E ⥤ C to a functor E ⥤ StructuredArrow X F and composing with the forgetful functor StructuredArrow X F ⥤ C recovers the original functor.

Equations
@[simp]
theorem CategoryTheory.Functor.toStructuredArrow_comp_proj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (X : D) (F : Functor C D) (f : (Y : E) → X F.obj (G.obj Y)) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (f Y) (F.map (G.map g)) = f Z) :
def CategoryTheory.Functor.toCostructuredArrow {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (F : Functor C D) (X : D) (f : (Y : E) → F.obj (G.obj Y) X) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (F.map (G.map g)) (f Z) = f Y) :

Given F : C ⥤ D and X : D, to upgrade a functor G : E ⥤ C to a functor E ⥤ CostructuredArrow F X, it suffices to provide maps F.obj (G.obj Y) ⟶ X for all Y making the obvious triangles involving all F.map (G.map g) commute.

This is of course the same as providing a cocone over F ⋙ G with cocone point X, see Functor.toCostructuredArrowIsoToCostructuredArrow.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.toCostructuredArrow_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (F : Functor C D) (X : D) (f : (Y : E) → F.obj (G.obj Y) X) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (F.map (G.map g)) (f Z) = f Y) {X✝ Y✝ : E} (g : X✝ Y✝) :
@[simp]
theorem CategoryTheory.Functor.toCostructuredArrow_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (F : Functor C D) (X : D) (f : (Y : E) → F.obj (G.obj Y) X) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (F.map (G.map g)) (f Z) = f Y) (Y : E) :
def CategoryTheory.Functor.toCostructuredArrowCompProj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (F : Functor C D) (X : D) (f : (Y : E) → F.obj (G.obj Y) X) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (F.map (G.map g)) (f Z) = f Y) :

Upgrading a functor E ⥤ C to a functor E ⥤ CostructuredArrow F X and composing with the forgetful functor CostructuredArrow F X ⥤ C recovers the original functor.

Equations
@[simp]
theorem CategoryTheory.Functor.toCostructuredArrow_comp_proj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (G : Functor E C) (F : Functor C D) (X : D) (f : (Y : E) → F.obj (G.obj Y) X) (h : ∀ {Y Z : E} (g : Y Z), CategoryStruct.comp (F.map (G.map g)) (f Z) = f Y) :

For a functor F : C ⥤ D and an object d : D, we obtain a contravariant functor from the category of structured arrows d ⟶ F.obj c to the category of costructured arrows F.op.obj c ⟶ (op d).

Equations
  • One or more equations did not get rendered due to their size.

For a functor F : C ⥤ D and an object d : D, we obtain a contravariant functor from the category of structured arrows op d ⟶ F.op.obj c to the category of costructured arrows F.obj c ⟶ d.

Equations
  • One or more equations did not get rendered due to their size.

For a functor F : C ⥤ D and an object d : D, we obtain a contravariant functor from the category of costructured arrows F.obj c ⟶ d to the category of structured arrows op d ⟶ F.op.obj c.

Equations
  • One or more equations did not get rendered due to their size.

For a functor F : C ⥤ D and an object d : D, we obtain a contravariant functor from the category of costructured arrows F.op.obj c ⟶ op d to the category of structured arrows d ⟶ F.obj c.

Equations
  • One or more equations did not get rendered due to their size.

For a functor F : C ⥤ D and an object d : D, the category of structured arrows d ⟶ F.obj c is contravariantly equivalent to the category of costructured arrows F.op.obj c ⟶ op d.

Equations
  • One or more equations did not get rendered due to their size.

For a functor F : C ⥤ D and an object d : D, the category of costructured arrows F.obj c ⟶ d is contravariantly equivalent to the category of structured arrows op d ⟶ F.op.obj c.

Equations
  • One or more equations did not get rendered due to their size.

The functor establishing the equivalence StructuredArrow.preEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.preEquivalenceFunctor_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) {G : Functor D E} {e : E} (f : StructuredArrow e G) {X✝ Y✝ : StructuredArrow f (pre e F G)} (φ : X✝ Y✝) :

The inverse functor establishing the equivalence StructuredArrow.preEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.preEquivalenceInverse_map_right_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) {G : Functor D E} {e : E} (f : StructuredArrow e G) {X✝ Y✝ : StructuredArrow f.right F} (φ : X✝ Y✝) :

A structured arrow category on a StructuredArrow.pre e F G functor is equivalent to the structured arrow category on F

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
def CategoryTheory.StructuredArrow.map₂IsoPreEquivalenceInverseCompProj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] {T : Functor C D} {S : Functor D E} {T' : Functor C E} (d : D) (e : E) (u : e S.obj d) (α : T.comp S T') :
map₂ u α (preEquivalence T (mk u)).inverse.comp ((proj (mk u) (pre e T S)).comp (map₂ (CategoryStruct.id e) α))

The functor StructuredArrow d T ⥤ StructuredArrow e (T ⋙ S) that u : e ⟶ S.obj d induces via StructuredArrow.map₂ can be expressed up to isomorphism by StructuredArrow.preEquivalence and StructuredArrow.proj.

Equations
  • One or more equations did not get rendered due to their size.

The functor establishing the equivalence CostructuredArrow.preEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
@[simp]
theorem CategoryTheory.CostructuredArrow.preEquivalence.functor_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) {G : Functor D E} {e : E} (f : CostructuredArrow G e) {X✝ Y✝ : CostructuredArrow (pre F G e) f} (φ : X✝ Y✝) :
((functor F f).map φ).left = φ.left.left

The inverse functor establishing the equivalence CostructuredArrow.preEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.preEquivalence.inverse_map_left_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) {G : Functor D E} {e : E} (f : CostructuredArrow G e) {X✝ Y✝ : CostructuredArrow F f.left} (φ : X✝ Y✝) :
((inverse F f).map φ).left.left = φ.left

A costructured arrow category on a CostructuredArrow.pre F G e functor is equivalent to the costructured arrow category on F

Equations
  • One or more equations did not get rendered due to their size.

The functor CostructuredArrow T d ⥤ CostructuredArrow (T ⋙ S) e that u : S.obj d ⟶ e induces via CostructuredArrow.map₂ can be expressed up to isomorphism by CostructuredArrow.preEquivalence and CostructuredArrow.proj.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.w_prod_fst {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X Y : StructuredArrow (S, S') (T.prod T')} (f : X Y) :
@[simp]
theorem CategoryTheory.StructuredArrow.w_prod_fst_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X Y : StructuredArrow (S, S') (T.prod T')} (f : X Y) {Z : D} (h : T.obj Y.right.1 Z) :
@[simp]
theorem CategoryTheory.StructuredArrow.w_prod_snd {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X Y : StructuredArrow (S, S') (T.prod T')} (f : X Y) :
@[simp]
theorem CategoryTheory.StructuredArrow.w_prod_snd_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X Y : StructuredArrow (S, S') (T.prod T')} (f : X Y) {Z : D'} (h : T'.obj Y.right.2 Z) :
def CategoryTheory.StructuredArrow.prodFunctor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :

Implementation; see StructuredArrow.prodEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.prodFunctor_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X✝ Y✝ : StructuredArrow (S, S') (T.prod T')} (η : X✝ Y✝) :
(prodFunctor S S' T T').map η = (homMk η.right.1 , homMk η.right.2 )
@[simp]
theorem CategoryTheory.StructuredArrow.prodFunctor_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') (f : StructuredArrow (S, S') (T.prod T')) :
(prodFunctor S S' T T').obj f = (mk f.hom.1, mk f.hom.2)
def CategoryTheory.StructuredArrow.prodInverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :

Implementation; see StructuredArrow.prodEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.prodInverse_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') {X✝ Y✝ : StructuredArrow S T × StructuredArrow S' T'} (η : X✝ Y✝) :
(prodInverse S S' T T').map η = homMk (η.1.right, η.2.right)
@[simp]
theorem CategoryTheory.StructuredArrow.prodInverse_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') (f : StructuredArrow S T × StructuredArrow S' T') :
(prodInverse S S' T T').obj f = mk (f.1.hom, f.2.hom)
def CategoryTheory.StructuredArrow.prodEquivalence {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :

The natural equivalence StructuredArrow (S, S') (T.prod T') ≌ StructuredArrow S T × StructuredArrow S' T'.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.StructuredArrow.prodEquivalence_unitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :
(prodEquivalence S S' T T').unitIso = NatIso.ofComponents (fun (f : StructuredArrow (S, S') (T.prod T')) => Iso.refl ((Functor.id (StructuredArrow (S, S') (T.prod T'))).obj f))
@[simp]
theorem CategoryTheory.StructuredArrow.prodEquivalence_functor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :
(prodEquivalence S S' T T').functor = prodFunctor S S' T T'
@[simp]
theorem CategoryTheory.StructuredArrow.prodEquivalence_inverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :
(prodEquivalence S S' T T').inverse = prodInverse S S' T T'
@[simp]
theorem CategoryTheory.StructuredArrow.prodEquivalence_counitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : D) (S' : D') (T : Functor C D) (T' : Functor C' D') :
(prodEquivalence S S' T T').counitIso = NatIso.ofComponents (fun (f : StructuredArrow S T × StructuredArrow S' T') => Iso.refl (((prodInverse S S' T T').comp (prodFunctor S S' T T')).obj f))
@[simp]
theorem CategoryTheory.CostructuredArrow.w_prod_fst {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {A B : CostructuredArrow (S.prod S') (T, T')} (f : A B) :
@[simp]
theorem CategoryTheory.CostructuredArrow.w_prod_fst_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {A B : CostructuredArrow (S.prod S') (T, T')} (f : A B) {Z : D} (h : ((Functor.fromPUnit (T, T')).obj B.right).1 Z) :
@[simp]
theorem CategoryTheory.CostructuredArrow.w_prod_snd {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {A B : CostructuredArrow (S.prod S') (T, T')} (f : A B) :
CategoryStruct.comp (S'.map f.left.2) B.hom.2 = A.hom.2
@[simp]
theorem CategoryTheory.CostructuredArrow.w_prod_snd_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {A B : CostructuredArrow (S.prod S') (T, T')} (f : A B) {Z : D'} (h : ((Functor.fromPUnit (T, T')).obj B.right).2 Z) :
def CategoryTheory.CostructuredArrow.prodFunctor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :

Implementation; see CostructuredArrow.prodEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.prodFunctor_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') (f : CostructuredArrow (S.prod S') (T, T')) :
(prodFunctor S S' T T').obj f = (mk f.hom.1, mk f.hom.2)
@[simp]
theorem CategoryTheory.CostructuredArrow.prodFunctor_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {X✝ Y✝ : CostructuredArrow (S.prod S') (T, T')} (η : X✝ Y✝) :
(prodFunctor S S' T T').map η = (homMk η.left.1 , homMk η.left.2 )
def CategoryTheory.CostructuredArrow.prodInverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :

Implementation; see CostructuredArrow.prodEquivalence.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.prodInverse_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') (f : CostructuredArrow S T × CostructuredArrow S' T') :
(prodInverse S S' T T').obj f = mk (f.1.hom, f.2.hom)
@[simp]
theorem CategoryTheory.CostructuredArrow.prodInverse_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') {X✝ Y✝ : CostructuredArrow S T × CostructuredArrow S' T'} (η : X✝ Y✝) :
(prodInverse S S' T T').map η = homMk (η.1.left, η.2.left)

The natural equivalence CostructuredArrow (S.prod S') (T, T') ≌ CostructuredArrow S T × CostructuredArrow S' T'.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.CostructuredArrow.prodEquivalence_counitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :
(prodEquivalence S S' T T').counitIso = NatIso.ofComponents (fun (f : CostructuredArrow S T × CostructuredArrow S' T') => Iso.refl (((prodInverse S S' T T').comp (prodFunctor S S' T T')).obj f))
@[simp]
theorem CategoryTheory.CostructuredArrow.prodEquivalence_functor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :
(prodEquivalence S S' T T').functor = prodFunctor S S' T T'
@[simp]
theorem CategoryTheory.CostructuredArrow.prodEquivalence_inverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :
(prodEquivalence S S' T T').inverse = prodInverse S S' T T'
@[simp]
theorem CategoryTheory.CostructuredArrow.prodEquivalence_unitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (S : Functor C D) (S' : Functor C' D') (T : D) (T' : D') :