Documentation

Mathlib.CategoryTheory.Sigma.Basic

Disjoint union of categories #

We define the category structure on a sigma-type (disjoint union) of categories.

inductive CategoryTheory.Sigma.SigmaHom {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] :
(i : I) Ɨ C i → (i : I) Ɨ C i → Type (max w₁ v₁ u₁)

The type of morphisms of a disjoint union of categories: for X : C i and Y : C j, a morphism (i, X) ⟶ (j, Y) when i = j is just a morphism X ⟶ Y, and if i ≠ j then there are no such morphisms.

Instances For
    def CategoryTheory.Sigma.SigmaHom.id {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (X : (i : I) Ɨ C i) :

    The identity morphism on an object.

    Equations
      Instances For
        instance CategoryTheory.Sigma.SigmaHom.instInhabited {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (X : (i : I) Ɨ C i) :
        Equations
          def CategoryTheory.Sigma.SigmaHom.comp {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {X Y Z : (i : I) Ɨ C i} :
          SigmaHom X Y → SigmaHom Y Z → SigmaHom X Z

          Composition of sigma homomorphisms.

          Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Sigma.SigmaHom.comp_def {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (i : I) (X Y Z : C i) (f : X ⟶ Y) (g : Y ⟶ Z) :
              theorem CategoryTheory.Sigma.SigmaHom.assoc {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {X Y Z W : (i : I) Ɨ C i} (f : X ⟶ Y) (g : Y ⟶ Z) (h : Z ⟶ W) :
              theorem CategoryTheory.Sigma.SigmaHom.id_comp {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {X Y : (i : I) Ɨ C i} (f : X ⟶ Y) :
              theorem CategoryTheory.Sigma.SigmaHom.comp_id {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {X Y : (i : I) Ɨ C i} (f : X ⟶ Y) :
              instance CategoryTheory.Sigma.sigma {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] :
              Equations
                def CategoryTheory.Sigma.incl {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (i : I) :
                Functor (C i) ((i : I) Ɨ C i)

                The inclusion functor into the disjoint union of categories.

                Equations
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Sigma.incl_map {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (i : I) {Xāœ Yāœ : C i} (aāœ : Xāœ ⟶ Yāœ) :
                    (incl i).map aāœ = SigmaHom.mk aāœ
                    @[simp]
                    theorem CategoryTheory.Sigma.incl_obj {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {i : I} (X : C i) :
                    instance CategoryTheory.Sigma.instFullSigmaIncl {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (i : I) :
                    instance CategoryTheory.Sigma.instFaithfulSigmaIncl {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] (i : I) :
                    def CategoryTheory.Sigma.natTrans {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] {F G : Functor ((i : I) Ɨ C i) D} (h : (i : I) → (incl i).comp F ⟶ (incl i).comp G) :
                    F ⟶ G

                    To build a natural transformation over the sigma category, it suffices to specify it restricted to each subcategory.

                    Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Sigma.natTrans_app {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] {F G : Functor ((i : I) Ɨ C i) D} (h : (i : I) → (incl i).comp F ⟶ (incl i).comp G) (i : I) (X : C i) :
                        (natTrans h).app ⟨i, X⟩ = (h i).app X
                        def CategoryTheory.Sigma.descMap {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (X Y : (i : I) Ɨ C i) :
                        (X ⟶ Y) → ((F X.fst).obj X.snd ⟶ (F Y.fst).obj Y.snd)

                        (Implementation). An auxiliary definition to build the functor desc.

                        Equations
                          Instances For
                            def CategoryTheory.Sigma.desc {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) :
                            Functor ((i : I) Ɨ C i) D

                            Given a collection of functors F i : C i ℤ D, we can produce a functor (Σ i, C i) ℤ D.

                            The produced functor desc F satisfies: incl i ā‹™ desc F ≅ F i, i.e. restricted to just the subcategory C i, desc F agrees with F i, and it is unique (up to natural isomorphism) with this property.

                            This witnesses that the sigma-type is the coproduct in Cat.

                            Equations
                              Instances For
                                @[simp]
                                theorem CategoryTheory.Sigma.desc_obj {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (X : (i : I) Ɨ C i) :
                                (desc F).obj X = (F X.fst).obj X.snd
                                @[simp]
                                theorem CategoryTheory.Sigma.desc_map_mk {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) {i : I} (X Y : C i) (f : X ⟶ Y) :
                                (desc F).map (SigmaHom.mk f) = (F i).map f
                                def CategoryTheory.Sigma.inclDesc {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (i : I) :
                                (incl i).comp (desc F) ≅ F i

                                This shows that when desc F is restricted to just the subcategory C i, desc F agrees with F i.

                                Equations
                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.Sigma.inclDesc_hom_app {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (i : I) (X : C i) :
                                    @[simp]
                                    theorem CategoryTheory.Sigma.inclDesc_inv_app {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (i : I) (X : C i) :
                                    def CategoryTheory.Sigma.descUniq {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (q : Functor ((i : I) Ɨ C i) D) (h : (i : I) → (incl i).comp q ≅ F i) :

                                    If q when restricted to each subcategory C i agrees with F i, then q is isomorphic to desc F.

                                    Equations
                                      Instances For
                                        @[simp]
                                        theorem CategoryTheory.Sigma.descUniq_hom_app {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (q : Functor ((i : I) Ɨ C i) D) (h : (i : I) → (incl i).comp q ≅ F i) (i : I) (X : C i) :
                                        (descUniq F q h).hom.app ⟨i, X⟩ = (h i).hom.app X
                                        @[simp]
                                        theorem CategoryTheory.Sigma.descUniq_inv_app {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] (F : (i : I) → Functor (C i) D) (q : Functor ((i : I) Ɨ C i) D) (h : (i : I) → (incl i).comp q ≅ F i) (i : I) (X : C i) :
                                        (descUniq F q h).inv.app ⟨i, X⟩ = (h i).inv.app X
                                        def CategoryTheory.Sigma.natIso {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] {q₁ qā‚‚ : Functor ((i : I) Ɨ C i) D} (h : (i : I) → (incl i).comp q₁ ≅ (incl i).comp qā‚‚) :
                                        q₁ ≅ qā‚‚

                                        If q₁ and qā‚‚ when restricted to each subcategory C i agree, then q₁ and qā‚‚ are isomorphic.

                                        Equations
                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.Sigma.natIso_inv {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] {q₁ qā‚‚ : Functor ((i : I) Ɨ C i) D} (h : (i : I) → (incl i).comp q₁ ≅ (incl i).comp qā‚‚) :
                                            (natIso h).inv = natTrans fun (i : I) => (h i).inv
                                            @[simp]
                                            theorem CategoryTheory.Sigma.natIso_hom {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : Type uā‚‚} [Category.{vā‚‚, uā‚‚} D] {q₁ qā‚‚ : Functor ((i : I) Ɨ C i) D} (h : (i : I) → (incl i).comp q₁ ≅ (incl i).comp qā‚‚) :
                                            (natIso h).hom = natTrans fun (i : I) => (h i).hom
                                            def CategoryTheory.Sigma.map {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) :
                                            Functor ((j : J) Ɨ C (g j)) ((i : I) Ɨ C i)

                                            A function J → I induces a functor Ī£ j, C (g j) ℤ Ī£ i, C i.

                                            Equations
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Sigma.map_obj {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) (j : J) (X : C (g j)) :
                                                @[simp]
                                                theorem CategoryTheory.Sigma.map_map {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) {j : J} {X Y : C (g j)} (f : X ⟶ Y) :
                                                def CategoryTheory.Sigma.inclCompMap {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) (j : J) :
                                                (incl j).comp (map C g) ≅ incl (g j)

                                                The functor Sigma.map C g restricted to the subcategory C j acts as the inclusion of g j.

                                                Equations
                                                  Instances For
                                                    @[simp]
                                                    theorem CategoryTheory.Sigma.inclCompMap_inv_app {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) (j : J) (X : C (g j)) :
                                                    @[simp]
                                                    theorem CategoryTheory.Sigma.inclCompMap_hom_app {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} (g : J → I) (j : J) (X : C (g j)) :
                                                    def CategoryTheory.Sigma.mapId (I : Type w₁) (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] :
                                                    map C id ≅ Functor.id ((i : I) Ɨ C i)

                                                    The functor Sigma.map applied to the identity function is just the identity functor.

                                                    Equations
                                                      Instances For
                                                        @[simp]
                                                        theorem CategoryTheory.Sigma.mapId_hom_app (I : Type w₁) (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] (xāœ : (i : I) Ɨ (fun (i : I) => C (id i)) i) :
                                                        (mapId I C).hom.app xāœ = CategoryStruct.id ⟨xāœ.fst, xāœ.snd⟩
                                                        @[simp]
                                                        theorem CategoryTheory.Sigma.mapId_inv_app (I : Type w₁) (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] (xāœ : (i : I) Ɨ (fun (i : I) => C (id i)) i) :
                                                        (mapId I C).inv.app xāœ = CategoryStruct.id ⟨xāœ.fst, xāœ.snd⟩
                                                        def CategoryTheory.Sigma.mapComp {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} {K : Type wā‚ƒ} (f : K → J) (g : J → I) :
                                                        (map (fun (x : J) => C (g x)) f).comp (map C g) ≅ map C (g ∘ f)

                                                        The functor Sigma.map applied to a composition is a composition of functors.

                                                        Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.Sigma.mapComp_inv_app {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} {K : Type wā‚ƒ} (f : K → J) (g : J → I) (X : (i : K) Ɨ (fun (i : K) => C (g (f i))) i) :
                                                            @[simp]
                                                            theorem CategoryTheory.Sigma.mapComp_hom_app {I : Type w₁} (C : I → Type u₁) [(i : I) → Category.{v₁, u₁} (C i)] {J : Type wā‚‚} {K : Type wā‚ƒ} (f : K → J) (g : J → I) (X : (i : K) Ɨ (fun (i : K) => C (g (f i))) i) :
                                                            def CategoryTheory.Sigma.Functor.sigma {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : I → Type u₁} [(i : I) → Category.{v₁, u₁} (D i)] (F : (i : I) → Functor (C i) (D i)) :
                                                            Functor ((i : I) Ɨ C i) ((i : I) Ɨ D i)

                                                            Assemble an I-indexed family of functors into a functor between the sigma types.

                                                            Equations
                                                              Instances For
                                                                def CategoryTheory.Sigma.natTrans.sigma {I : Type w₁} {C : I → Type u₁} [(i : I) → Category.{v₁, u₁} (C i)] {D : I → Type u₁} [(i : I) → Category.{v₁, u₁} (D i)] {F G : (i : I) → Functor (C i) (D i)} (α : (i : I) → F i ⟶ G i) :

                                                                Assemble an I-indexed family of natural transformations into a single natural transformation.

                                                                Equations
                                                                  Instances For