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
    Equations
    theorem CategoryTheory.Arrow.hom_ext {T : Type u} [Category.{v, u} T] {X Y : Arrow T} (f g : X Y) (h₁ : f.left = g.left) (h₂ : f.right = g.right) :
    f = g
    @[simp]
    theorem CategoryTheory.Arrow.comp_left {T : Type u} [Category.{v, u} T] {X Y Z : Arrow T} (f : X Y) (g : Y Z) :
    (CategoryStruct.comp f g).left = CategoryStruct.comp f.left g.left
    theorem CategoryTheory.Arrow.comp_left_assoc {T : Type u} [Category.{v, u} T] {X Y Z : Arrow T} (f : X Y) (g : Y Z) {Z✝ : T} (h : Z.left Z✝) :
    @[simp]
    theorem CategoryTheory.Arrow.comp_right {T : Type u} [Category.{v, u} T] {X Y Z : Arrow T} (f : X Y) (g : Y Z) :
    (CategoryStruct.comp f g).right = CategoryStruct.comp f.right g.right
    theorem CategoryTheory.Arrow.comp_right_assoc {T : Type u} [Category.{v, u} T] {X Y Z : Arrow T} (f : X Y) (g : Y Z) {Z✝ : T} (h : Z.right Z✝) :
    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_right {T : Type u} [Category.{v, u} T] {X Y : T} (f : X Y) :
      (mk f).right = Y
      @[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_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
      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 aesop_cat) :
      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_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 aesop_cat) :
        (homMk u v w).right = v
        @[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 aesop_cat) :
        (homMk u v w).left = u
        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 aesop_cat) :
        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'_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 aesop_cat) :
          (homMk' u v w).right = v
          @[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 aesop_cat) :
          (homMk' u v w).left = u
          @[simp]
          theorem CategoryTheory.Arrow.w {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) :
          CategoryStruct.comp sq.left g.hom = CategoryStruct.comp f.hom sq.right
          @[simp]
          theorem CategoryTheory.Arrow.w_assoc {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) {Z : T} (h : g.right Z) :
          @[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) :
          CategoryStruct.comp sq.left g = CategoryStruct.comp f.hom sq.right
          @[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.isIso_of_isIso_left_of_isIso_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (ff : f g) [IsIso ff.left] [IsIso ff.right] :
          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 aesop_cat) :
          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_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 aesop_cat) :
            (isoMk l r h).hom.left = l.hom
            @[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 aesop_cat) :
            (isoMk l r h).hom.right = r.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 aesop_cat) :
            (isoMk l r h).inv.left = l.inv
            @[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 aesop_cat) :
            (isoMk l r h).inv.right = r.inv
            @[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 aesop_cat) :
            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
              theorem CategoryTheory.Arrow.hom.congr_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} {φ₁ φ₂ : f g} (h : φ₁ = φ₂) :
              φ₁.left = φ₂.left
              @[simp]
              theorem CategoryTheory.Arrow.hom.congr_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} {φ₁ φ₂ : f g} (h : φ₁ = φ₂) :
              φ₁.right = φ₂.right
              theorem CategoryTheory.Arrow.iso_w {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) :
              g.hom = CategoryStruct.comp e.inv.left (CategoryStruct.comp f.hom e.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) :
              g = CategoryStruct.comp e.inv.left (CategoryStruct.comp f e.hom.right)
              instance CategoryTheory.Arrow.isIso_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              IsIso sq.left
              instance CategoryTheory.Arrow.isIso_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              IsIso sq.right
              @[simp]
              theorem CategoryTheory.Arrow.inv_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              (inv sq).left = inv sq.left
              @[simp]
              theorem CategoryTheory.Arrow.inv_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              (inv sq).right = inv sq.right
              theorem CategoryTheory.Arrow.left_hom_inv_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              CategoryStruct.comp sq.left (CategoryStruct.comp g.hom (inv sq.right)) = f.hom
              theorem CategoryTheory.Arrow.inv_left_hom_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [IsIso sq] :
              CategoryStruct.comp (inv sq.left) (CategoryStruct.comp f.hom sq.right) = g.hom
              instance CategoryTheory.Arrow.mono_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [Mono sq] :
              Mono sq.left
              instance CategoryTheory.Arrow.epi_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (sq : f g) [Epi sq] :
              Epi sq.right
              @[simp]
              theorem CategoryTheory.Arrow.hom_inv_id_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) :
              CategoryStruct.comp e.hom.left e.inv.left = CategoryStruct.id f.left
              @[simp]
              theorem CategoryTheory.Arrow.hom_inv_id_left_assoc {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) {Z : T} (h : f.left Z) :
              CategoryStruct.comp e.hom.left (CategoryStruct.comp e.inv.left h) = h
              @[simp]
              theorem CategoryTheory.Arrow.inv_hom_id_left {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) :
              CategoryStruct.comp e.inv.left e.hom.left = CategoryStruct.id g.left
              @[simp]
              theorem CategoryTheory.Arrow.inv_hom_id_left_assoc {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) {Z : T} (h : g.left Z) :
              CategoryStruct.comp e.inv.left (CategoryStruct.comp e.hom.left h) = h
              @[simp]
              theorem CategoryTheory.Arrow.hom_inv_id_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) :
              CategoryStruct.comp e.hom.right e.inv.right = CategoryStruct.id f.right
              @[simp]
              theorem CategoryTheory.Arrow.hom_inv_id_right_assoc {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) {Z : T} (h : f.right Z) :
              CategoryStruct.comp e.hom.right (CategoryStruct.comp e.inv.right h) = h
              @[simp]
              theorem CategoryTheory.Arrow.inv_hom_id_right {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) :
              CategoryStruct.comp e.inv.right e.hom.right = CategoryStruct.id g.right
              @[simp]
              theorem CategoryTheory.Arrow.inv_hom_id_right_assoc {T : Type u} [Category.{v, u} T] {f g : Arrow T} (e : f g) {Z : T} (h : g.right Z) :
              CategoryStruct.comp e.inv.right (CategoryStruct.comp e.hom.right h) = h
              @[simp]
              theorem CategoryTheory.Arrow.square_to_iso_invert {T : Type u} [Category.{v, u} T] (i : Arrow T) {X Y : T} (p : X Y) (sq : i mk p.hom) :
              CategoryStruct.comp i.hom (CategoryStruct.comp sq.right p.inv) = sq.left

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

              theorem CategoryTheory.Arrow.square_from_iso_invert {T : Type u} [Category.{v, u} T] {X Y : T} (i : X Y) (p : Arrow T) (sq : mk i.hom p) :
              CategoryStruct.comp i.inv (CategoryStruct.comp sq.left p.hom) = sq.right

              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)) :
                (squareToSnd sq).right = sq.right
                @[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)) :
                (squareToSnd sq).left = CategoryStruct.comp sq.left f
                @[simp]
                @[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✝) :
                leftFunc.map f = f.left
                @[simp]
                @[simp]
                theorem CategoryTheory.Arrow.rightFunc_map {C : Type u} [Category.{v, u} C] {X✝ Y✝ : Comma (Functor.id C) (Functor.id C)} (f : X✝ Y✝) :
                rightFunc.map f = f.right

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

                Equations
                Instances For
                  @[simp]
                  theorem CategoryTheory.Arrow.ext {C : Type u} [Category.{v, u} C] {f g : Arrow C} (h₁ : f.left = g.left) (h₂ : f.right = g.right) (h₃ : f.hom = CategoryStruct.comp (eqToHom h₁) (CategoryStruct.comp g.hom (eqToHom ))) :
                  f = g

                  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]
                    theorem CategoryTheory.Functor.mapArrow_obj_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (a : Arrow C) :
                    (F.mapArrow.obj a).hom = F.map a.hom
                    @[simp]
                    theorem CategoryTheory.Functor.mapArrow_obj_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (a : Arrow C) :
                    (F.mapArrow.obj a).left = F.obj a.left
                    @[simp]
                    theorem CategoryTheory.Functor.mapArrow_map_left {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✝) :
                    (F.mapArrow.map f).left = F.map f.left
                    @[simp]
                    theorem CategoryTheory.Functor.mapArrow_map_right {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✝) :
                    (F.mapArrow.map f).right = F.map f.right
                    @[simp]
                    theorem CategoryTheory.Functor.mapArrow_obj_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (a : Arrow C) :
                    (F.mapArrow.obj a).right = F.obj a.right

                    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_right (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).right = τ.app f.right
                      @[simp]
                      theorem CategoryTheory.Functor.mapArrowFunctor_obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (F : Functor C D) :
                      (mapArrowFunctor C D).obj F = F.mapArrow
                      @[simp]
                      theorem CategoryTheory.Functor.mapArrowFunctor_map_app_left (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).left = τ.app f.left

                      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
                        instance CategoryTheory.Functor.isEquivalence_mapArrow {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.IsEquivalence] :
                        F.mapArrow.IsEquivalence
                        def CategoryTheory.Arrow.isoOfNatIso {C : Type u_1} {D : Type u_2} [Category.{u_3, u_1} C] [Category.{u_4, u_2} D] {F G : Functor C D} (e : F G) (f : Arrow C) :
                        F.mapArrow.obj f G.mapArrow.obj f

                        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_apply_snd_snd (T : Type u) [Category.{v, u} T] (f : Arrow T) :
                            ((equivSigma T) f).snd.snd = f.hom
                            @[simp]
                            theorem CategoryTheory.Arrow.equivSigma_symm_apply_right (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X Y)) :
                            ((equivSigma T).symm x).right = x.snd.fst
                            @[simp]
                            theorem CategoryTheory.Arrow.equivSigma_apply_fst (T : Type u) [Category.{v, u} T] (f : Arrow T) :
                            ((equivSigma T) f).fst = f.left
                            @[simp]
                            theorem CategoryTheory.Arrow.equivSigma_symm_apply_hom (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X Y)) :
                            ((equivSigma T).symm x).hom = x.snd.snd
                            @[simp]
                            theorem CategoryTheory.Arrow.equivSigma_symm_apply_left (T : Type u) [Category.{v, u} T] (x : (X : T) × (Y : T) × (X Y)) :
                            ((equivSigma T).symm x).left = x.fst
                            @[simp]
                            theorem CategoryTheory.Arrow.equivSigma_apply_snd_fst (T : Type u) [Category.{v, u} T] (f : Arrow T) :
                            ((equivSigma T) f).snd.fst = f.right

                            The equivalence Arrow (Discrete S) ≃ S.

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