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
    Instances For

      See through the type synonym StructuredArrow S T = Comma _ _.

      Equations

        The obvious projection functor from structured arrows.

        Equations
          Instances For
            @[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
              Instances For
                @[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.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) :
                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 cat_disch) :
                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
                  Instances For
                    @[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 cat_disch) :
                    (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
                      Instances For
                        @[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_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
                          Instances For
                            @[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 cat_disch) :
                            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
                              Instances For
                                @[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 cat_disch) :
                                (isoMk g w).inv.right = g.inv
                                @[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 cat_disch) :
                                (isoMk g w).hom.right = g.hom
                                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.

                                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
                                  Instances For
                                    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
                                      Instances For
                                        @[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_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_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_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_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]
                                        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)

                                        An isomorphism S ≅ S' induces an equivalence StructuredArrow S T ≌ StructuredArrow S' T.

                                        Equations
                                          Instances For
                                            @[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_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]
                                            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_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✝) :

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

                                            Equations
                                              Instances For
                                                @[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✝) :
                                                @[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]
                                                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✝) :

                                                The identity structured arrow is initial.

                                                Equations
                                                  Instances For

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

                                                    Equations
                                                      Instances For
                                                        @[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_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_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
                                                        @[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_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

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

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

                                                        Equations
                                                          Instances For
                                                            @[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)
                                                            @[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

                                                            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
                                                              Instances For
                                                                @[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) :
                                                                @[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₂_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_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₂_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
                                                                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
                                                                  Instances For

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

                                                                    Equations
                                                                      Instances For

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

                                                                        Equations
                                                                          Instances For

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

                                                                            Equations
                                                                              Instances For
                                                                                @[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
                                                                                  Instances For

                                                                                    The family of morphisms out of a universal arrow.

                                                                                    Equations
                                                                                      Instances For
                                                                                        @[simp]

                                                                                        Any structured arrow factors through a universal arrow.

                                                                                        @[simp]

                                                                                        Any structured arrow factors through a universal arrow.

                                                                                        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
                                                                                          Instances For

                                                                                            The obvious projection functor from costructured arrows.

                                                                                            Equations
                                                                                              Instances For
                                                                                                @[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
                                                                                                  Instances For
                                                                                                    @[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
                                                                                                    @[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 cat_disch) :
                                                                                                    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
                                                                                                      Instances For
                                                                                                        @[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 cat_disch) :
                                                                                                        (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
                                                                                                          Instances For
                                                                                                            @[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
                                                                                                            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
                                                                                                              Instances For
                                                                                                                @[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) :
                                                                                                                @[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
                                                                                                                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 cat_disch) :
                                                                                                                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
                                                                                                                  Instances For
                                                                                                                    @[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 cat_disch) :
                                                                                                                    (isoMk g w).inv.left = g.inv
                                                                                                                    @[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 cat_disch) :
                                                                                                                    (isoMk g w).hom.left = g.hom
                                                                                                                    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.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
                                                                                                                      Instances For
                                                                                                                        theorem CategoryTheory.CostructuredArrow.mk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} (f : CostructuredArrow S T) :
                                                                                                                        ∃ (Y : C) (g : S.obj Y T), f = mk g

                                                                                                                        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
                                                                                                                          Instances For
                                                                                                                            @[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_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_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_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_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)

                                                                                                                            An isomorphism T ≅ T' induces an equivalence CostructuredArrow S T ≌ CostructuredArrow S T'.

                                                                                                                            Equations
                                                                                                                              Instances For
                                                                                                                                @[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]
                                                                                                                                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✝) :

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

                                                                                                                                Equations
                                                                                                                                  Instances For
                                                                                                                                    @[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_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✝) :

                                                                                                                                    The identity costructured arrow is terminal.

                                                                                                                                    Equations
                                                                                                                                      Instances For

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

                                                                                                                                        Equations
                                                                                                                                          Instances For
                                                                                                                                            @[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_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
                                                                                                                                            @[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_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_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

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

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

                                                                                                                                            Equations
                                                                                                                                              Instances For
                                                                                                                                                @[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
                                                                                                                                                  Instances For
                                                                                                                                                    @[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₂_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_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
                                                                                                                                                    @[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)) :
                                                                                                                                                    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
                                                                                                                                                      Instances For
                                                                                                                                                        @[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
                                                                                                                                                          Instances For

                                                                                                                                                            The family of morphisms into a universal arrow.

                                                                                                                                                            Equations
                                                                                                                                                              Instances For
                                                                                                                                                                @[simp]

                                                                                                                                                                Any costructured arrow factors through a universal arrow.

                                                                                                                                                                @[simp]

                                                                                                                                                                Any costructured arrow factors through a universal arrow.

                                                                                                                                                                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
                                                                                                                                                                  Instances For
                                                                                                                                                                    @[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
                                                                                                                                                                      Instances For
                                                                                                                                                                        @[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
                                                                                                                                                                          Instances For
                                                                                                                                                                            @[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) :
                                                                                                                                                                            @[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✝) :
                                                                                                                                                                            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
                                                                                                                                                                              Instances For
                                                                                                                                                                                @[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
                                                                                                                                                                                  Instances For

                                                                                                                                                                                    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
                                                                                                                                                                                      Instances For

                                                                                                                                                                                        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
                                                                                                                                                                                          Instances For

                                                                                                                                                                                            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
                                                                                                                                                                                              Instances For

                                                                                                                                                                                                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
                                                                                                                                                                                                  Instances For

                                                                                                                                                                                                    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
                                                                                                                                                                                                      Instances For

                                                                                                                                                                                                        The functor establishing the equivalence StructuredArrow.preEquivalence.

                                                                                                                                                                                                        Equations
                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                            @[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
                                                                                                                                                                                                              Instances For

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

                                                                                                                                                                                                                Equations
                                                                                                                                                                                                                  Instances For
                                                                                                                                                                                                                    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
                                                                                                                                                                                                                      Instances For

                                                                                                                                                                                                                        The functor establishing the equivalence CostructuredArrow.preEquivalence.

                                                                                                                                                                                                                        Equations
                                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                                            @[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
                                                                                                                                                                                                                              Instances For
                                                                                                                                                                                                                                @[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
                                                                                                                                                                                                                                  Instances For

                                                                                                                                                                                                                                    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
                                                                                                                                                                                                                                      Instances For
                                                                                                                                                                                                                                        @[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
                                                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                                                            @[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)
                                                                                                                                                                                                                                            @[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 )
                                                                                                                                                                                                                                            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
                                                                                                                                                                                                                                              Instances For
                                                                                                                                                                                                                                                @[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)
                                                                                                                                                                                                                                                @[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)
                                                                                                                                                                                                                                                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
                                                                                                                                                                                                                                                  Instances For
                                                                                                                                                                                                                                                    @[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_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_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.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.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
                                                                                                                                                                                                                                                      Instances For
                                                                                                                                                                                                                                                        @[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 )
                                                                                                                                                                                                                                                        @[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)
                                                                                                                                                                                                                                                        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
                                                                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                                                                            @[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)
                                                                                                                                                                                                                                                            @[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)

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

                                                                                                                                                                                                                                                            Equations
                                                                                                                                                                                                                                                              Instances For
                                                                                                                                                                                                                                                                @[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_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_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') :