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

    The obvious projection functor from structured arrows.

    Equations
    Instances For
      @[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
      @[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
      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
      @[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.w_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {A B : StructuredArrow S T} (f : A B) {Z : D} (h : T.obj B.right Z) :
        @[simp]
        @[simp]
        theorem CategoryTheory.StructuredArrow.eqToHom_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {X Y : StructuredArrow S T} (h : X = Y) :
        @[simp]
        def CategoryTheory.StructuredArrow.homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g) = f'.hom := by aesop_cat) :
        f f'

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

        Equations
        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 aesop_cat) :
          (homMk g w).right = g
          theorem CategoryTheory.StructuredArrow.homMk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (φ : f f') :
          (ψ : f.right f'.right), ( : CategoryStruct.comp f.hom (T.map ψ) = f'.hom), φ = homMk ψ
          def CategoryTheory.StructuredArrow.homMk' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') :

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

          Equations
          Instances For
            @[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
            @[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') :
            theorem CategoryTheory.StructuredArrow.homMk'_mk_id {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y : C} {T : Functor C D} (f : S T.obj Y) :
            theorem CategoryTheory.StructuredArrow.homMk'_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y' Y'' : C} {T : Functor C D} (f : StructuredArrow S T) (g : f.right Y') (g' : Y' Y'') :
            theorem CategoryTheory.StructuredArrow.homMk'_mk_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' Y'' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') (g' : Y' Y'') :
            def CategoryTheory.StructuredArrow.mkPostcomp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') :

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

            Equations
            Instances For
              @[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') :
              @[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') :
              theorem CategoryTheory.StructuredArrow.mkPostcomp_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {Y Y' Y'' : C} {T : Functor C D} (f : S T.obj Y) (g : Y Y') (g' : Y' Y'') :
              def CategoryTheory.StructuredArrow.isoMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S : D} {T : Functor C D} {f f' : StructuredArrow S T} (g : f.right f'.right) (w : CategoryStruct.comp f.hom (T.map g.hom) = f'.hom := by aesop_cat) :
              f f'

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

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

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

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

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

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

                Eta rule for structured arrows.

                Equations
                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_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_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_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' : D} {Y : C} {T : Functor C D} {f : S' T.obj Y} (g : S S') :
                    @[simp]
                    @[simp]
                    theorem CategoryTheory.StructuredArrow.map_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {S S' S'' : D} {T : Functor C D} {f : S S'} {f' : S' S''} {h : StructuredArrow S'' T} :
                    (map (CategoryStruct.comp f f')).obj h = (map f).obj ((map f').obj h)

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

                    Equations
                    Instances For

                      The identity structured arrow is initial.

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

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

                        Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.StructuredArrow.pre_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) (X : Comma (Functor.fromPUnit S) (F.comp G)) :
                          ((pre S F G).obj X).left = X.left
                          @[simp]
                          theorem CategoryTheory.StructuredArrow.pre_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_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_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_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
                          instance CategoryTheory.StructuredArrow.instFullCompPre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {B : Type u₄} [Category.{v₄, u₄} B] (S : D) (F : Functor B C) (G : Functor C D) [F.Full] :
                          (pre S F G).Full

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

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

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

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

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

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

                            Equations
                            Instances For
                              @[simp]
                              theorem CategoryTheory.StructuredArrow.map₂_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') (X : Comma (Functor.fromPUnit L) R) :
                              ((map₂ α β).obj X).left = X.left
                              @[simp]
                              theorem CategoryTheory.StructuredArrow.map₂_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {L : D} {R : Functor C D} {L' : B} {R' : Functor A B} {F : Functor C A} {G : Functor D B} (α : L' G.obj L) (β : R.comp G F.comp R') (X : Comma (Functor.fromPUnit L) R) :
                              ((map₂ α β).obj X).right = F.obj X.right
                              @[simp]
                              theorem CategoryTheory.StructuredArrow.map₂_map_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_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₂_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
                              • One or more equations did not get rendered due to their size.
                              Instances For

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

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

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

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

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

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    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]
                                          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_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : Functor C D) (T : D) (X : Comma S (Functor.fromPUnit T)) :
                                              (proj S T).obj X = X.left
                                              @[simp]
                                              theorem CategoryTheory.CostructuredArrow.proj_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (S : Functor C D) (T : D) {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f : X✝ Y✝) :
                                              (proj S T).map f = f.left
                                              theorem CategoryTheory.CostructuredArrow.hom_ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} (f g : X Y) (h : f.left = g.left) :
                                              f = g
                                              @[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
                                                theorem CategoryTheory.CostructuredArrow.w {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) :
                                                @[simp]
                                                @[simp]
                                                theorem CategoryTheory.CostructuredArrow.eqToHom_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {X Y : CostructuredArrow S T} (h : X = Y) :
                                                def CategoryTheory.CostructuredArrow.homMk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (g : f.left f'.left) (w : CategoryStruct.comp (S.map g) f'.hom = f.hom := by aesop_cat) :
                                                f f'

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

                                                Equations
                                                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 aesop_cat) :
                                                  (homMk g w).left = g
                                                  theorem CategoryTheory.CostructuredArrow.homMk_surjective {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {f f' : CostructuredArrow S T} (φ : f f') :
                                                  (ψ : f.left f'.left), ( : CategoryStruct.comp (S.map ψ) f'.hom = f.hom), φ = homMk ψ
                                                  def CategoryTheory.CostructuredArrow.homMk' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y' : C} {S : Functor C D} (f : CostructuredArrow S T) (g : Y' f.left) :

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

                                                  Equations
                                                  Instances For
                                                    @[simp]
                                                    @[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_id {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y : C} {S : Functor C D} (f : S.obj Y T) :
                                                    theorem CategoryTheory.CostructuredArrow.homMk'_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y' Y'' : C} {S : Functor C D} (f : CostructuredArrow S T) (g : Y' f.left) (g' : Y'' Y') :
                                                    theorem CategoryTheory.CostructuredArrow.homMk'_mk_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' Y'' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) (g' : Y'' Y') :
                                                    def CategoryTheory.CostructuredArrow.mkPrecomp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {Y Y' : C} {S : Functor C D} (f : S.obj Y T) (g : Y' Y) :

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

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

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

                                                      Equations
                                                      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 aesop_cat) :
                                                        (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 aesop_cat) :
                                                        (isoMk g w).hom.left = g.hom
                                                        theorem CategoryTheory.CostructuredArrow.ext {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f g : A B) (h : f.left = g.left) :
                                                        f = g
                                                        theorem CategoryTheory.CostructuredArrow.ext_iff {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f g : A B) :
                                                        f = g f.left = g.left
                                                        theorem CategoryTheory.CostructuredArrow.mono_of_mono_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) [h : Mono f.left] :
                                                        theorem CategoryTheory.CostructuredArrow.epi_of_epi_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A B : CostructuredArrow S T} (f : A B) [h : Epi f.left] :
                                                        Epi f

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

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

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

                                                        Eta rule for costructured arrows.

                                                        Equations
                                                        Instances For

                                                          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_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
                                                            ((map f).obj X).left = X.left
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_map_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f✝ : X✝ Y✝) :
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_map_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') {X✝ Y✝ : Comma S (Functor.fromPUnit T)} (f✝ : X✝ Y✝) :
                                                            ((map f).map f✝).left = f✝.left
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
                                                            ((map f).obj X).right = X.right
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {S : Functor C D} (f : T T') (X : Comma S (Functor.fromPUnit T)) :
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_mk {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' : D} {Y : C} {S : Functor C D} {f : S.obj Y T} (g : T T') :
                                                            @[simp]
                                                            theorem CategoryTheory.CostructuredArrow.map_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T T' T'' : D} {S : Functor C D} {f : T T'} {f' : T' T''} {h : CostructuredArrow S T} :
                                                            (map (CategoryStruct.comp f f')).obj h = (map f').obj ((map f).obj h)

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

                                                            Equations
                                                            Instances For

                                                              The identity costructured arrow is terminal.

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

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

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

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                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_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) (X : Comma S (Functor.fromPUnit T)) :
                                                                    @[simp]
                                                                    theorem CategoryTheory.CostructuredArrow.map₂_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) (X : Comma S (Functor.fromPUnit T)) :
                                                                    ((map₂ α β).obj X).left = F.obj X.left
                                                                    instance CategoryTheory.CostructuredArrow.faithful_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.Faithful] :
                                                                    instance CategoryTheory.CostructuredArrow.full_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [G.Faithful] [F.Full] [IsIso α] [IsIso β] :
                                                                    (map₂ α β).Full
                                                                    instance CategoryTheory.CostructuredArrow.essSurj_map₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.EssSurj] [G.Full] [IsIso α] [IsIso β] :
                                                                    (map₂ α β).EssSurj
                                                                    instance CategoryTheory.CostructuredArrow.isEquivalenceMap₂ {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {T : D} {S : Functor C D} {A : Type u₃} [Category.{v₃, u₃} A] {B : Type u₄} [Category.{v₄, u₄} B] {U : Functor A B} {V : B} {F : Functor C A} {G : Functor D B} (α : F.comp U S.comp G) (β : G.obj T V) [F.IsEquivalence] [G.Faithful] [G.Full] [IsIso α] [IsIso β] :

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

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    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.

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

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

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

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

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

                                                                          Equations
                                                                          • One or more equations did not get rendered due to their size.
                                                                          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
                                                                              • One or more equations did not get rendered due to their size.
                                                                              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
                                                                                  • One or more equations did not get rendered due to their size.
                                                                                  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
                                                                                    • One or more equations did not get rendered due to their size.
                                                                                    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
                                                                                      • One or more equations did not get rendered due to their size.
                                                                                      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
                                                                                        • One or more equations did not get rendered due to their size.
                                                                                        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
                                                                                          • One or more equations did not get rendered due to their size.
                                                                                          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
                                                                                            • One or more equations did not get rendered due to their size.
                                                                                            Instances For

                                                                                              The functor establishing the equivalence StructuredArrow.preEquivalence.

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

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

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

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

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

                                                                                                      The functor establishing the equivalence CostructuredArrow.preEquivalence.

                                                                                                      Equations
                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                      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
                                                                                                        @[simp]

                                                                                                        The inverse functor establishing the equivalence CostructuredArrow.preEquivalence.

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

                                                                                                                    Implementation; see CostructuredArrow.prodEquivalence.

                                                                                                                    Equations
                                                                                                                    • One or more equations did not get rendered due to their size.
                                                                                                                    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
                                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                                      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
                                                                                                                        • One or more equations did not get rendered due to their size.
                                                                                                                        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_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') :
                                                                                                                          @[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'