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 preferred 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 preferred 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
                  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] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) :
                                        F.sum' H G.sum' I

                                        The sum of two natural transformations, where all functors have the same target category.

                                        Equations
                                          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] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) (a : A) :
                                            (sum' α β).app (Sum.inl a) = α.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] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) (b : B) :
                                            (sum' α β).app (Sum.inr b) = β.app b
                                            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
                                              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 right inclusion gives the leftt inclusion.

                                                        Equations
                                                          Instances For

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

                                                            Equations
                                                              Instances For

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

                                                                Equations
                                                                  Instances For