Documentation

Mathlib.CategoryTheory.Limits.Shapes.ZeroMorphisms

Zero morphisms and zero objects #

A category "has zero morphisms" if there is a designated "zero morphism" in each morphism space, and compositions of zero morphisms with anything give the zero morphism. (Notice this is extra structure, not merely a property.)

A category "has a zero object" if it has an object which is both initial and terminal. Having a zero object provides zero morphisms, as the unique morphisms factoring through the zero object.

References #

A category "has zero morphisms" if there is a designated "zero morphism" in each morphism space, and compositions of zero morphisms with anything give the zero morphism.

  • zero (X Y : C) : Zero (X Y)

    Every morphism space has zero

  • comp_zero {X Y : C} (f : X Y) (Z : C) : CategoryStruct.comp f 0 = 0

    f composed with 0 is 0

  • zero_comp (X : C) {Y Z : C} (f : Y Z) : CategoryStruct.comp 0 f = 0

    0 composed with f is 0

Instances
    @[simp]
    theorem CategoryTheory.Limits.comp_zero {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {X Y : C} {f : X Y} {Z : C} :

    If you're tempted to use this lemma "in the wild", you should probably carefully consider whether you've made a mistake in allowing two instances of HasZeroMorphisms to exist at all.

    See, particularly, the note on zeroMorphismsOfZeroObject below.

    theorem CategoryTheory.Limits.zero_of_comp_mono {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {X Y Z : C} {f : X Y} (g : Y Z) [Mono g] (h : CategoryStruct.comp f g = 0) :
    f = 0
    theorem CategoryTheory.Limits.zero_of_epi_comp {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {X Y Z : C} (f : X Y) {g : Y Z} [Epi f] (h : CategoryStruct.comp f g = 0) :
    g = 0
    theorem CategoryTheory.Limits.nonzero_image_of_nonzero {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {X Y : C} {f : X Y} [HasImage f] (w : f 0) :
    image.ι f 0
    @[simp]
    theorem CategoryTheory.Limits.zero_app {C : Type u} [Category.{v, u} C] (D : Type u') [Category.{v', u'} D] [HasZeroMorphisms D] (F G : Functor C D) (j : C) :
    NatTrans.app 0 j = 0
    @[implicit_reducible]

    A category with a zero object has zero morphisms.

    It is rarely a good idea to use this. Many categories that have a zero object have zero morphisms for some other reason, for example from additivity. Library code that uses zeroMorphismsOfZeroObject will then be incompatible with these categories because the HasZeroMorphisms instances will not be definitionally equal. For this reason library code should generally ask for an instance of HasZeroMorphisms separately, even if it already asks for an instance of HasZeroObject.

    Instances For
      @[implicit_reducible]

      A category with a zero object has zero morphisms.

      It is rarely a good idea to use this. Many categories that have a zero object have zero morphisms for some other reason, for example from additivity. Library code that uses zeroMorphismsOfZeroObject will then be incompatible with these categories because the HasZeroMorphisms instances will not be definitionally equal. For this reason library code should generally ask for an instance of HasZeroMorphisms separately, even if it already asks for an instance of HasZeroObject.

      Instances For
        @[simp]
        theorem CategoryTheory.Limits.IsZero.map {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] [HasZeroObject D] [HasZeroMorphisms D] {F : Functor C D} (hF : IsZero F) {X Y : C} (f : X Y) :
        F.map f = 0

        An arrow ending in the zero object is zero

        An arrow starting at the zero object is zero

        An object X has 𝟙 X = 0 if and only if it is isomorphic to the zero object.

        Because X ≅ 0 contains data (even if a subsingleton), we express this as an .

        Instances For
          noncomputable def CategoryTheory.Limits.isoZeroOfMonoZero {C : Type u} [Category.{v, u} C] [HasZeroObject C] [HasZeroMorphisms C] {X Y : C} :
          Mono 0 → (X 0)

          If 0 : X ⟶ Y is a monomorphism, then X ≅ 0.

          Instances For
            noncomputable def CategoryTheory.Limits.isoZeroOfEpiZero {C : Type u} [Category.{v, u} C] [HasZeroObject C] [HasZeroMorphisms C] {X Y : C} :
            Epi 0 → (Y 0)

            If 0 : X ⟶ Y is an epimorphism, then Y ≅ 0.

            Instances For
              noncomputable def CategoryTheory.Limits.isoZeroOfMonoEqZero {C : Type u} [Category.{v, u} C] [HasZeroObject C] [HasZeroMorphisms C] {X Y : C} {f : X Y} [Mono f] (h : f = 0) :
              X 0

              If a monomorphism out of X is zero, then X ≅ 0.

              Instances For
                noncomputable def CategoryTheory.Limits.isoZeroOfEpiEqZero {C : Type u} [Category.{v, u} C] [HasZeroObject C] [HasZeroMorphisms C] {X Y : C} {f : X Y} [Epi f] (h : f = 0) :
                Y 0

                If an epimorphism in to Y is zero, then Y ≅ 0.

                Instances For

                  If an object X is isomorphic to 0, there's no need to use choice to construct an explicit isomorphism: the zero morphism suffices.

                  Instances For

                    A zero morphism 0 : X ⟶ Y is an isomorphism if and only if the identities on both X and Y are zero.

                    Instances For

                      A zero morphism 0 : X ⟶ X is an isomorphism if and only if the identity on X is zero.

                      Instances For
                        noncomputable def CategoryTheory.Limits.isIsoZeroEquivIsoZero {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] [HasZeroObject C] (X Y : C) :
                        IsIso 0 (X 0) × (Y 0)

                        A zero morphism 0 : X ⟶ Y is an isomorphism if and only if X and Y are isomorphic to the zero object.

                        Instances For

                          A zero morphism 0 : X ⟶ Y is an isomorphism if and only if X and Y are zero objects.

                          A zero morphism 0 : X ⟶ X is an isomorphism if and only if X is isomorphic to the zero object.

                          Instances For

                            If there are zero morphisms, any initial object is a zero object.

                            If there are zero morphisms, any terminal object is a zero object.

                            The zero morphism has a MonoFactorisation through the zero object.

                            Instances For

                              The factorisation through the zero object is an image factorisation.

                              Instances For
                                noncomputable def CategoryTheory.Limits.imageZero {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] [HasZeroObject C] {X Y : C} :

                                The image of a zero morphism is the zero object.

                                Instances For
                                  noncomputable def CategoryTheory.Limits.imageZero' {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] [HasZeroObject C] {X Y : C} {f : X Y} (h : f = 0) [HasImage f] :

                                  The image of a morphism which is equal to zero is the zero object.

                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.Limits.image.ι_zero' {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] [HasZeroObject C] [HasEqualizers C] {X Y : C} {f : X Y} (h : f = 0) [HasImage f] :
                                    ι f = 0

                                    If we know f = 0, it requires a little work to conclude image.ι f = 0, because f = g only implies image f ≅ image g.

                                    In the presence of zero morphisms, coprojections into a coproduct are (split) monomorphisms.

                                    instance CategoryTheory.Limits.isSplitEpi_pi_π {C : Type u} [Category.{v, u} C] {β : Type u'} [HasZeroMorphisms C] (f : βC) [HasLimit (Discrete.functor f)] (b : β) :

                                    In the presence of zero morphisms, projections into a product are (split) epimorphisms.

                                    In the presence of zero morphisms, coprojections into a coproduct are (split) monomorphisms.

                                    In the presence of zero morphisms, coprojections into a coproduct are (split) monomorphisms.

                                    In the presence of zero morphisms, projections into a product are (split) epimorphisms.

                                    In the presence of zero morphisms, projections into a product are (split) epimorphisms.

                                    If a functor F is zero, then any cone for F with a zero point is limit.

                                    Instances For

                                      If a functor F is zero, then any cocone for F with a zero point is colimit.

                                      Instances For
                                        @[reducible]

                                        Given a functor F : D ⥤ C, zero morphisms on C induce zero morphisms on D by taking preimages.

                                        Instances For
                                          noncomputable def CategoryTheory.Limits.Pi.ι {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b : β) :
                                          f b ∏ᶜ f

                                          In the presence of 0-morphism we can define an inclusion morphism into any product.

                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.Limits.Pi.ι_π_eq_id {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b : β) :
                                            @[simp]
                                            theorem CategoryTheory.Limits.Pi.ι_π_eq_id_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b : β) {Z : C} (h : f b Z) :
                                            theorem CategoryTheory.Limits.Pi.ι_π_of_ne {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] {b c : β} (h : b c) :
                                            CategoryStruct.comp (ι f b) (π f c) = 0
                                            theorem CategoryTheory.Limits.Pi.ι_π_of_ne_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] {b c : β} (h : b c) {Z : C} (h✝ : f c Z) :
                                            theorem CategoryTheory.Limits.Pi.ι_π {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b c : β) :
                                            CategoryStruct.comp (ι f b) (π f c) = if h : b = c then eqToHom else 0
                                            theorem CategoryTheory.Limits.Pi.ι_π_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b c : β) {Z : C} (h : f c Z) :
                                            CategoryStruct.comp (ι f b) (CategoryStruct.comp (π f c) h) = CategoryStruct.comp (if h : b = c then eqToHom else 0) h
                                            instance CategoryTheory.Limits.instMonoι_1 {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasProduct f] (b : β) :
                                            Mono (Pi.ι f b)
                                            noncomputable def CategoryTheory.Limits.Sigma.π {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b : β) :
                                            f f b

                                            In the presence of 0-morphisms we can define a projection morphism from any coproduct.

                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Limits.Sigma.ι_π_eq_id {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b : β) :
                                              @[simp]
                                              theorem CategoryTheory.Limits.Sigma.ι_π_eq_id_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b : β) {Z : C} (h : f b Z) :
                                              theorem CategoryTheory.Limits.Sigma.ι_π_of_ne {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] {b c : β} (h : b c) :
                                              CategoryStruct.comp (ι f b) (π f c) = 0
                                              theorem CategoryTheory.Limits.Sigma.ι_π_of_ne_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] {b c : β} (h : b c) {Z : C} (h✝ : f c Z) :
                                              theorem CategoryTheory.Limits.Sigma.ι_π {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b c : β) :
                                              CategoryStruct.comp (ι f b) (π f c) = if h : b = c then eqToHom else 0
                                              theorem CategoryTheory.Limits.Sigma.ι_π_assoc {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b c : β) {Z : C} (h : f c Z) :
                                              CategoryStruct.comp (ι f b) (CategoryStruct.comp (π f c) h) = CategoryStruct.comp (if h : b = c then eqToHom else 0) h
                                              instance CategoryTheory.Limits.instEpiπ {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] {β : Type w} [DecidableEq β] (f : βC) [HasCoproduct f] (b : β) :
                                              noncomputable def CategoryTheory.Limits.prod.inl {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] (X Y : C) [HasBinaryProduct X Y] :
                                              X X Y

                                              If a category C has 0-morphisms, there is a canonical inclusion from the first component X into any product of objects X ⨯ Y.

                                              Instances For
                                                noncomputable def CategoryTheory.Limits.prod.inr {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] (X Y : C) [HasBinaryProduct X Y] :
                                                Y X Y

                                                If a category C has 0-morphisms, there is a canonical inclusion from the second component Y into any product of objects X ⨯ Y.

                                                Instances For
                                                  noncomputable def CategoryTheory.Limits.coprod.fst {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] (X Y : C) [HasBinaryCoproduct X Y] :
                                                  X ⨿ Y X

                                                  If a category C has 0-morphisms, there is a canonical projection from a coproduct X ⨿ Y to its first component X.

                                                  Instances For
                                                    noncomputable def CategoryTheory.Limits.coprod.snd {C : Type u} [Category.{v, u} C] [HasZeroMorphisms C] (X Y : C) [HasBinaryCoproduct X Y] :
                                                    X ⨿ Y Y

                                                    If a category C has 0-morphisms, there is a canonical projection from a coproduct X ⨿ Y to its second component Y.

                                                    Instances For