Documentation

Mathlib.CategoryTheory.Sums.Basic

Binary disjoint unions of categories #

We define the category instance on C ⊕ D when C and D are categories.

We define:

We provide an induction principle Sum.homInduction to reason and work with morphisms in this category.

The sum of two functors F : A ⥤ C and G : B ⥤ C is a functor A ⊕ B ⥤ C, written F.sum' G. This construction should be prefered when defining functors out of a sum.

We provide natural isomorphisms inlCompSum' : inl_ ⋙ F.sum' G ≅ F and inrCompSum' : inl_ ⋙ F.sum' G ≅ G.

Furthermore, we provide Functor.sumIsoExt, which constructs a natural isomorphism of functors out of a sum out of natural isomorphism with their precomposition with the inclusion. This construction sholud be preffered when trying to construct isomorphisms between functors out of a sum.

We further define sums of functors and natural transformations, written F.sum G and α.sum β.

sum C D gives the direct sum of two categories.

Equations

inl_ is the functor X ↦ inl X.

Equations
Instances For
    @[simp]
    theorem CategoryTheory.Sum.inl__obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : C) :
    (inl_ C D).obj X = Sum.inl X

    inr_ is the functor X ↦ inr X.

    Equations
    Instances For
      @[simp]
      theorem CategoryTheory.Sum.inr__obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : D) :
      (inr_ C D).obj X = Sum.inr X
      def CategoryTheory.Sum.homInduction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : C D} (f : x y) :
      P f

      An induction principle for morphisms in a sum of category: a morphism is either of the form (inl_ _ _).map _ or of the form (inr_ _ _).map _).

      Equations
      Instances For
        @[simp]
        theorem CategoryTheory.Sum.homInduction_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : C} (f : x y) :
        homInduction inl inr ((inl_ C D).map f) = inl x y f
        @[simp]
        theorem CategoryTheory.Sum.homInduction_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : D} (f : x y) :
        homInduction inl inr ((inr_ C D).map f) = inr x y f
        def CategoryTheory.Functor.sum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
        Functor (A B) C

        The sum of two functors that land in a given category C.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          def CategoryTheory.Functor.inlCompSum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
          (Sum.inl_ A B).comp (F.sum' G) F

          The sum F.sum' G precomposed with the left inclusion functor is isomorphic to F

          Equations
          Instances For
            @[simp]
            @[simp]
            def CategoryTheory.Functor.inrCompSum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
            (Sum.inr_ A B).comp (F.sum' G) G

            The sum F.sum' G precomposed with the right inclusion functor is isomorphic to G

            Equations
            Instances For
              @[simp]
              @[simp]
              @[simp]
              theorem CategoryTheory.Functor.sum'_obj_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) (a : A) :
              (F.sum' G).obj (Sum.inl a) = F.obj a
              @[simp]
              theorem CategoryTheory.Functor.sum'_obj_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) (b : B) :
              (F.sum' G).obj (Sum.inr b) = G.obj b
              @[simp]
              theorem CategoryTheory.Functor.sum'_map_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) {a a' : A} (f : a a') :
              (F.sum' G).map ((Sum.inl_ A B).map f) = F.map f
              @[simp]
              theorem CategoryTheory.Functor.sum'_map_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) {b b' : B} (f : b b') :
              (F.sum' G).map ((Sum.inr_ A B).map f) = G.map f
              def CategoryTheory.Functor.sum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) :
              Functor (A C) (B D)

              The sum of two functors.

              Equations
              Instances For
                @[simp]
                theorem CategoryTheory.Functor.sum_obj_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) (a : A) :
                (F.sum G).obj (Sum.inl a) = Sum.inl (F.obj a)
                @[simp]
                theorem CategoryTheory.Functor.sum_obj_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) (c : C) :
                (F.sum G).obj (Sum.inr c) = Sum.inr (G.obj c)
                @[simp]
                theorem CategoryTheory.Functor.sum_map_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) {a a' : A} (f : a a') :
                (F.sum G).map ((Sum.inl_ A C).map f) = (Sum.inl_ B D).map (F.map f)
                @[simp]
                theorem CategoryTheory.Functor.sum_map_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) {c c' : C} (f : c c') :
                (F.sum G).map ((Sum.inr_ A C).map f) = (Sum.inr_ B D).map (G.map f)
                def CategoryTheory.Functor.sumIsoExt {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) :
                F G

                A functor out of a sum is uniquely characterized by its precompositions with inl_ and inr_.

                Equations
                Instances For
                  @[simp]
                  theorem CategoryTheory.Functor.sumIsoExt_hom_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (a : A) :
                  (sumIsoExt e₁ e₂).hom.app (Sum.inl a) = e₁.hom.app a
                  @[simp]
                  theorem CategoryTheory.Functor.sumIsoExt_hom_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (b : B) :
                  (sumIsoExt e₁ e₂).hom.app (Sum.inr b) = e₂.hom.app b
                  @[simp]
                  theorem CategoryTheory.Functor.sumIsoExt_inv_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (a : A) :
                  (sumIsoExt e₁ e₂).inv.app (Sum.inl a) = e₁.inv.app a
                  @[simp]
                  theorem CategoryTheory.Functor.sumIsoExt_inv_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (b : B) :
                  (sumIsoExt e₁ e₂).inv.app (Sum.inr b) = e₂.inv.app b
                  def CategoryTheory.Functor.isoSum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor (A B) C) :
                  F ((Sum.inl_ A B).comp F).sum' ((Sum.inr_ A B).comp F)

                  Any functor out of a sum is the sum of its precomposition with the inclusions.

                  Equations
                  Instances For
                    def CategoryTheory.NatTrans.sum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) :
                    F.sum H G.sum I

                    The sum of two natural transformations.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      @[simp]
                      theorem CategoryTheory.NatTrans.sum_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) (a : A) :
                      (sum α β).app (Sum.inl a) = (Sum.inl_ B D).map (α.app a)
                      @[simp]
                      theorem CategoryTheory.NatTrans.sum_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) (c : C) :
                      (sum α β).app (Sum.inr c) = (Sum.inr_ B D).map (β.app c)

                      The functor exchanging two direct summand categories.

                      Equations
                      Instances For
                        @[simp]
                        @[simp]
                        @[simp]
                        theorem CategoryTheory.Sum.swap_map_inl (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X Y : C} {f : Sum.inl X Sum.inl Y} :
                        (swap C D).map f = f
                        @[simp]
                        theorem CategoryTheory.Sum.swap_map_inr (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X Y : D} {f : Sum.inr X Sum.inr Y} :
                        (swap C D).map f = f

                        Precomposing swap with the left inclusion gives the right inclusion.

                        Equations
                        Instances For

                          Precomposing swap with the rightt inclusion gives the leftt inclusion.

                          Equations
                          Instances For

                            swap gives an equivalence between C ⊕ D and D ⊕ C.

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

                              The double swap on C ⊕ D is naturally isomorphic to the identity functor.

                              Equations
                              Instances For