Documentation

Mathlib.CategoryTheory.Comma.Arrow

The category of arrows #

The category of arrows, with morphisms commutative squares. We set this up as a specialization of the comma category Comma L R, where L and R are both the identity functor.

Tags #

comma, arrow

def CategoryTheory.Arrow (T : Type u) [Category.{v, u} T] :
Type (max u v)

The arrow category of T has as objects all morphisms in T and as morphisms commutative squares in T.

Equations
Instances For

    The type of morphisms in the category Arrow T.

    Equations
    Instances For
      @[instance_reducible]
      Equations
      • One or more equations did not get rendered due to their size.
      @[reducible, inline]
      abbrev CategoryTheory.Arrow.left {T : Type u} [Category.{v, u} T] (X : Arrow T) :
      T

      The left object of an arrow.

      Equations
      Instances For
        @[reducible, inline]

        The right object of an arrow.

        Equations
        Instances For
          @[reducible, inline]

          Given X : Arrow T, this is the morphism X.left ⟶ X.right.

          Equations
          Instances For
            @[reducible, inline]
            abbrev CategoryTheory.Arrow.Hom.left {T : Type u} [Category.{v, u} T] {X Y : Arrow T} (f : X ⟶ Y) :

            The left part of a morphism in the category of arrows.

            Equations
            Instances For
              @[reducible, inline]
              abbrev CategoryTheory.Arrow.Hom.right {T : Type u} [Category.{v, u} T] {X Y : Arrow T} (f : Y ⟶ X) :

              The right part of a morphism in the category of arrows.

              Equations
              Instances For
                theorem CategoryTheory.Arrow.hom_ext {T : Type u} [Category.{v, u} T] {X Y : Arrow T} (f g : X ⟶ Y) (h₁ : Hom.left f = Hom.left g) (h₂ : Hom.right f = Hom.right g) :
                f = g
                @[simp]
                @[implicit_reducible]
                def CategoryTheory.Arrow.mk {T : Type u} [Category.{v, u} T] {X Y : T} (f : X ⟶ Y) :

                An object in the arrow category is simply a morphism in T.

                Equations
                Instances For
                  @[simp]
                  theorem CategoryTheory.Arrow.mk_hom {T : Type u} [Category.{v, u} T] {X Y : T} (f : X ⟶ Y) :
                  (mk f).hom = f
                  @[simp]
                  theorem CategoryTheory.Arrow.mk_right {T : Type u} [Category.{v, u} T] {X Y : T} (f : X ⟶ Y) :
                  (mk f).right = Y
                  @[simp]
                  theorem CategoryTheory.Arrow.mk_left {T : Type u} [Category.{v, u} T] {X Y : T} (f : X ⟶ Y) :
                  (mk f).left = X
                  @[simp]
                  theorem CategoryTheory.Arrow.mk_eq {T : Type u} [Category.{v, u} T] (f : Arrow T) :
                  mk f.hom = f
                  theorem CategoryTheory.Arrow.mk_inj {T : Type u} [Category.{v, u} T] (A B : T) {f g : A ⟶ B} :
                  mk f = mk g ↔ f = g
                  @[instance_reducible]
                  instance CategoryTheory.Arrow.instCoeOutHom {T : Type u} [Category.{v, u} T] {X Y : T} :
                  CoeOut (X ⟶ Y) (Arrow T)
                  Equations
                  theorem CategoryTheory.Arrow.hom.congr_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} {φ₁ φ₂ : f ⟶ g} (h : φ₁ = φ₂) :
                  Hom.left φ₁ = Hom.left φ₂
                  theorem CategoryTheory.Arrow.hom.congr_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} {φ₁ φ₂ : g ⟶ f} (h : φ₁ = φ₂) :
                  Hom.right φ₁ = Hom.right φ₂
                  theorem CategoryTheory.Arrow.iso_w' {T : Type u} [Category.{v, u} T] {W X Y Z : T} {f : W ⟶ X} {g : Y ⟶ Z} (e : mk f ≅ mk g) :
                  theorem CategoryTheory.Arrow.mk_eq_mk_iff {T : Type u} [Category.{v, u} T] {X Y X' Y' : T} (f : X ⟶ Y) (f' : X' ⟶ Y') :
                  mk f = mk f' ↔ ∃ (hX : X = X'), ∃ (hY : Y = Y'), f = CategoryStruct.comp (eqToHom hX) (CategoryStruct.comp f' (eqToHom ⋯))
                  theorem CategoryTheory.Arrow.ext {T : Type u} [Category.{v, u} T] {f g : Arrow T} (h₁ : f.left = g.left) (h₂ : f.right = g.right) (h₃ : f.hom = CategoryStruct.comp (eqToHom h₁) (CategoryStruct.comp g.hom (eqToHom ⋯))) :
                  f = g
                  @[simp]
                  theorem CategoryTheory.Arrow.arrow_mk_comp_eqToHom {T : Type u} [Category.{v, u} T] {X Y Y' : T} (f : X ⟶ Y) (h : Y = Y') :
                  @[simp]
                  theorem CategoryTheory.Arrow.arrow_mk_eqToHom_comp {T : Type u} [Category.{v, u} T] {X' X Y : T} (f : X ⟶ Y) (h : X' = X) :
                  def CategoryTheory.Arrow.homMk {T : Type u} [Category.{v, u} T] {f g : Arrow T} (u : f.left ⟶ g.left) (v : f.right ⟶ g.right) (w : CategoryStruct.comp u g.hom = CategoryStruct.comp f.hom v := by cat_disch) :
                  f ⟶ g

                  A morphism in the arrow category is a commutative square connecting two objects of the arrow category.

                  Equations
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Arrow.homMk_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (u : f.left ⟶ g.left) (v : f.right ⟶ g.right) (w : CategoryStruct.comp u g.hom = CategoryStruct.comp f.hom v := by cat_disch) :
                    (homMk u v w).left = u
                    @[simp]
                    theorem CategoryTheory.Arrow.homMk_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (u : f.left ⟶ g.left) (v : f.right ⟶ g.right) (w : CategoryStruct.comp u g.hom = CategoryStruct.comp f.hom v := by cat_disch) :
                    (homMk u v w).right = v
                    @[reducible, inline]
                    abbrev CategoryTheory.Arrow.homMk'' {T : Type u} [Category.{v, u} T] {f g : Arrow T} (u : g.right ⟶ f.right) (v : g.left ⟶ f.left) (w : CategoryStruct.comp g.hom u = CategoryStruct.comp v f.hom := by cat_disch) :
                    g ⟶ f

                    homMk'' is the dual of homMk, which we need for to_dual. Please avoid using this directly.

                    Equations
                    Instances For
                      def CategoryTheory.Arrow.homMk' {T : Type u} [Category.{v, u} T] {X Y : T} {f : X ⟶ Y} {P Q : T} {g : P ⟶ Q} (u : X ⟶ P) (v : Y ⟶ Q) (w : CategoryStruct.comp u g = CategoryStruct.comp f v := by cat_disch) :
                      mk f ⟶ mk g

                      We can also build a morphism in the arrow category out of any commutative square in T.

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Arrow.homMk'_left {T : Type u} [Category.{v, u} T] {X Y : T} {f : X ⟶ Y} {P Q : T} {g : P ⟶ Q} (u : X ⟶ P) (v : Y ⟶ Q) (w : CategoryStruct.comp u g = CategoryStruct.comp f v := by cat_disch) :
                        (homMk' u v w).left = u
                        @[simp]
                        theorem CategoryTheory.Arrow.homMk'_right {T : Type u} [Category.{v, u} T] {X Y : T} {f : X ⟶ Y} {P Q : T} {g : P ⟶ Q} (u : X ⟶ P) (v : Y ⟶ Q) (w : CategoryStruct.comp u g = CategoryStruct.comp f v := by cat_disch) :
                        (homMk' u v w).right = v
                        @[reducible, inline]
                        abbrev CategoryTheory.Arrow.homMk''' {T : Type u} [Category.{v, u} T] {X Y : T} {f : Y ⟶ X} {P Q : T} {g : Q ⟶ P} (u : P ⟶ X) (v : Q ⟶ Y) (w : CategoryStruct.comp g u = CategoryStruct.comp v f := by cat_disch) :
                        mk g ⟶ mk f

                        homMk''' is the dual of homMk', which we need for to_dual. Please avoid using this directly.

                        Equations
                        Instances For
                          theorem CategoryTheory.Arrow.w_mk_left {T : Type u} [Category.{v, u} T] {X Y : T} {f : X ⟶ Y} {g : Arrow T} (sq : mk f ⟶ g) :
                          @[simp]
                          theorem CategoryTheory.Arrow.w_mk_right {T : Type u} [Category.{v, u} T] {f : Arrow T} {X Y : T} {g : X ⟶ Y} (sq : f ⟶ mk g) :
                          @[simp]
                          theorem CategoryTheory.Arrow.w_mk_right_assoc {T : Type u} [Category.{v, u} T] {f : Arrow T} {X Y : T} {g : X ⟶ Y} (sq : f ⟶ mk g) {Z : T} (h : Y ⟶ Z) :
                          theorem CategoryTheory.Arrow.w_mk {T : Type u} [Category.{v, u} T] {X Y X' Y' : T} {f : X ⟶ Y} {g : X' ⟶ Y'} (sq : mk f ⟶ mk g) :
                          theorem CategoryTheory.Arrow.w_mk_assoc {T : Type u} [Category.{v, u} T] {X Y X' Y' : T} {f : X ⟶ Y} {g : X' ⟶ Y'} (sq : mk f ⟶ mk g) {Z : T} (h : Y' ⟶ Z) :
                          def CategoryTheory.Arrow.isoMk {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.left ≅ g.left) (r : f.right ≅ g.right) (h : CategoryStruct.comp l.hom g.hom = CategoryStruct.comp f.hom r.hom := by cat_disch) :
                          f ≅ g

                          Create an isomorphism between arrows, by providing isomorphisms between the domains and codomains, and a proof that the square commutes.

                          Equations
                          Instances For
                            @[simp]
                            theorem CategoryTheory.Arrow.isoMk_hom_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.left ≅ g.left) (r : f.right ≅ g.right) (h : CategoryStruct.comp l.hom g.hom = CategoryStruct.comp f.hom r.hom := by cat_disch) :
                            (isoMk l r h).hom.right = r.hom
                            @[simp]
                            theorem CategoryTheory.Arrow.isoMk_inv_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.left ≅ g.left) (r : f.right ≅ g.right) (h : CategoryStruct.comp l.hom g.hom = CategoryStruct.comp f.hom r.hom := by cat_disch) :
                            (isoMk l r h).inv.right = r.inv
                            @[simp]
                            theorem CategoryTheory.Arrow.isoMk_hom_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.left ≅ g.left) (r : f.right ≅ g.right) (h : CategoryStruct.comp l.hom g.hom = CategoryStruct.comp f.hom r.hom := by cat_disch) :
                            (isoMk l r h).hom.left = l.hom
                            @[simp]
                            theorem CategoryTheory.Arrow.isoMk_inv_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.left ≅ g.left) (r : f.right ≅ g.right) (h : CategoryStruct.comp l.hom g.hom = CategoryStruct.comp f.hom r.hom := by cat_disch) :
                            (isoMk l r h).inv.left = l.inv
                            @[reducible, inline]
                            abbrev CategoryTheory.Arrow.isoMk'' {T : Type u} [Category.{v, u} T] {f g : Arrow T} (l : f.right ≅ g.right) (r : f.left ≅ g.left) (h : CategoryStruct.comp g.hom l.inv = CategoryStruct.comp r.inv f.hom := by cat_disch) :
                            f ≅ g

                            isoMk'' is the dual of isoMk, which we need for to_dual. Please avoid using this directly.

                            Equations
                            Instances For
                              @[reducible, inline]
                              abbrev CategoryTheory.Arrow.isoMk' {T : Type u} [Category.{v, u} T] {W X Y Z : T} (f : W ⟶ X) (g : Y ⟶ Z) (e₁ : W ≅ Y) (e₂ : X ≅ Z) (h : CategoryStruct.comp e₁.hom g = CategoryStruct.comp f e₂.hom := by cat_disch) :
                              mk f ≅ mk g

                              A variant of Arrow.isoMk that creates an iso between two Arrow.mks with a better type signature.

                              Equations
                              Instances For
                                @[reducible, inline]
                                abbrev CategoryTheory.Arrow.isoMk''' {T : Type u} [Category.{v, u} T] {W X Y Z : T} (f : X ⟶ W) (g : Z ⟶ Y) (e₁ : W ≅ Y) (e₂ : X ≅ Z) (h : CategoryStruct.comp g e₁.inv = CategoryStruct.comp e₂.inv f := by cat_disch) :
                                mk f ≅ mk g

                                isoMk''' is the dual of isoMk', which we need for to_dual. Please avoid using this directly.

                                Equations
                                Instances For
                                  instance CategoryTheory.Arrow.isIso_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f ⟶ g) [IsIso sq] :
                                  instance CategoryTheory.Arrow.isIso_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : g ⟶ f) [IsIso sq] :
                                  theorem CategoryTheory.Arrow.isIso_iff_isIso_of_isIso {T : Type u} [Category.{v, u} T] {W X Y Z : T} {f : W ⟶ X} {g : Y ⟶ Z} (sq : mk f ⟶ mk g) [IsIso sq] :
                                  theorem CategoryTheory.Arrow.isIso_hom_iff_isIso_of_isIso {T : Type u} [Category.{v, u} T] {Y Z : T} {f : Arrow T} {g : Y ⟶ Z} (sq : f ⟶ mk g) [IsIso sq] :
                                  @[simp]
                                  theorem CategoryTheory.Arrow.inv_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f ⟶ g) [IsIso sq] :
                                  @[simp]
                                  theorem CategoryTheory.Arrow.inv_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : g ⟶ f) [IsIso sq] :
                                  instance CategoryTheory.Arrow.mono_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f ⟶ g) [Mono sq] :
                                  instance CategoryTheory.Arrow.epi_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : g ⟶ f) [Epi sq] :
                                  @[simp]

                                  Given a square from an arrow i to an isomorphism p, express the source part of sq in terms of the inverse of p.

                                  Given a square from an isomorphism i to an arrow p, express the target part of sq in terms of the inverse of i.

                                  def CategoryTheory.Arrow.squareToSnd {C : Type u} [Category.{v, u} C] {X Y Z : C} {i : Arrow C} {f : X ⟶ Y} {g : Y ⟶ Z} (sq : i ⟶ mk (CategoryStruct.comp f g)) :
                                  i ⟶ mk g

                                  A helper construction: given a square between i and f ≫ g, produce a square between i and g, whose top leg uses f:

                                  A  → X
                                       ↓f
                                  ↓i   Y             --> A → Y
                                       ↓g                ↓i  ↓g
                                  B  → Z                 B → Z
                                  
                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.Arrow.squareToSnd_right {C : Type u} [Category.{v, u} C] {X Y Z : C} {i : Arrow C} {f : X ⟶ Y} {g : Y ⟶ Z} (sq : i ⟶ mk (CategoryStruct.comp f g)) :
                                    @[simp]
                                    theorem CategoryTheory.Arrow.squareToSnd_left {C : Type u} [Category.{v, u} C] {X Y Z : C} {i : Arrow C} {f : X ⟶ Y} {g : Y ⟶ Z} (sq : i ⟶ mk (CategoryStruct.comp f g)) :
                                    @[simp]
                                    theorem CategoryTheory.Arrow.rightFunc_map {C : Type u} [Category.{v, u} C] {Y✝ X✝ : Comma (Functor.id C) (Functor.id C)} (f : Y✝ ⟶ X✝) :
                                    @[simp]
                                    theorem CategoryTheory.Arrow.leftFunc_map {C : Type u} [Category.{v, u} C] {X✝ Y✝ : Comma (Functor.id C) (Functor.id C)} (f : X✝ ⟶ Y✝) :

                                    The natural transformation from leftFunc to rightFunc, given by the arrow itself.

                                    Equations
                                    Instances For

                                      A functor C ⥤ D induces a functor between the corresponding arrow categories.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[simp]
                                        @[simp]
                                        theorem CategoryTheory.Functor.mapArrow_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) {X Y : Arrow C} (f : X ⟶ Y) :

                                        The functor (C ⥤ D) ⥤ (Arrow C ⥤ Arrow D) which sends a functor F : C ⥤ D to F.mapArrow.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Functor.mapArrowFunctor_map_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X Y : Functor C D} (τ : X ⟶ Y) (f : Arrow C) :
                                          ((mapArrowFunctor C D).map τ).app f = Arrow.homMk (τ.app f.left) (τ.app f.right) ⋯

                                          The equivalence of categories Arrow C ≌ Arrow D induced by an equivalence C ≌ D.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            def CategoryTheory.Arrow.isoOfNatIso {C : Type u_1} {D : Type u_2} [Category.{v_1, u_1} C] [Category.{v_2, u_2} D] {F G : Functor C D} (e : F ≅ G) (f : Arrow C) :

                                            The images of f : Arrow C by two isomorphic functors F : C ⥤ D are isomorphic arrows in D.

                                            Equations
                                            Instances For
                                              def CategoryTheory.Arrow.equivSigma (T : Type u) [Category.{v, u} T] :
                                              Arrow T ≃ (X : T) × (Y : T) × (X ⟶ Y)

                                              Arrow T is equivalent to a sigma type.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Arrow.equivSigma_symm_apply_left (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X ⟶ Y)) :
                                                @[simp]
                                                theorem CategoryTheory.Arrow.equivSigma_symm_apply_hom (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X ⟶ Y)) :
                                                @[simp]
                                                theorem CategoryTheory.Arrow.equivSigma_symm_apply_right (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X ⟶ Y)) :

                                                The equivalence Arrow (Discrete S) ≃ S.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  theorem CategoryTheory.Arrow.functor_ext {C : Type u_1} {D : Type u_2} [Category.{v_1, u_1} C] [Category.{v_2, u_2} D] {F G : Functor C D} (h : ∀ ⦃X Y : C⦄ (f : X ⟶ Y), F.mapArrow.obj (mk f) = G.mapArrow.obj (mk f)) :
                                                  F = G

                                                  Extensionality lemma for functors C ⥤ D which uses as an assumption that the induced maps Arrow C → Arrow D coincide.