Documentation

Mathlib.CategoryTheory.Sites.EffectiveEpimorphic

Effective epimorphisms #

We define the notion of effective epimorphic (pre)sieves, morphisms and family of morphisms and provide some API for relating the three notions.

More precisely, if f is a morphism, then f is an effective epi if and only if the sieve it generates is effective epimorphic; see CategoryTheory.Sieve.effectiveEpimorphic_singleton. The analogous statement for a family of morphisms is in the theorem CategoryTheory.Sieve.effectiveEpimorphic_family.

We have defined the notion of effective epi for morphisms and families of morphisms in such a way that avoids requiring the existence of pullbacks. However, if the relevant pullbacks exist then these definitions are equivalent, see effectiveEpiStructOfRegularEpi, regularEpiOfEffectiveEpi, and effectiveEpiOfKernelPair. See nlab: Effective Epimorphism and Stacks 00WP for the standard definitions. Note that our notion of EffectiveEpi is often called "strict epi" in the literature.

References #

TODO #

A sieve is effective epimorphic if the associated cocone is a colimit cocone.

Equations
Instances For
    @[inline, reducible]

    A presieve is effective epimorphic if the cocone associated to the sieve it generates is a colimit cocone.

    Equations
    Instances For

      The sieve of morphisms which factor through a given morphism f. This is equal to Sieve.generate (Presieve.singleton f), but has more convenient definitional properties.

      Equations
      Instances For
        structure CategoryTheory.EffectiveEpiStruct {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C} {Y : C} (f : Y X) :
        Type (max u_1 u_2)

        This structure encodes the data required for a morphism to be an effective epimorphism.

        Instances For
          class CategoryTheory.EffectiveEpi {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C} {Y : C} (f : Y X) :

          A morphism f : Y ⟶ X is an effective epimorphism provided that f exhibits X as a colimit of the diagram of all "relations" R ⇉ Y. If f has a kernel pair, then this is equivalent to showing that the corresponding cofork is a colimit.

          Instances

            Some chosen EffectiveEpiStruct associated to an effective epi.

            Equations
            Instances For
              noncomputable def CategoryTheory.EffectiveEpi.desc {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X : C} {Y : C} {W : C} (f : Y X) [CategoryTheory.EffectiveEpi f] (e : Y W) (h : ∀ {Z : C} (g₁ g₂ : Z Y), CategoryTheory.CategoryStruct.comp g₁ f = CategoryTheory.CategoryStruct.comp g₂ fCategoryTheory.CategoryStruct.comp g₁ e = CategoryTheory.CategoryStruct.comp g₂ e) :
              X W

              Descend along an effective epi.

              Equations
              Instances For

                Implementation: This is a construction which will be used in the proof that the sieve generated by a single arrow is effective epimorphic if and only if the arrow is an effective epi.

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

                  Implementation: This is a construction which will be used in the proof that the sieve generated by a single arrow is effective epimorphic if and only if the arrow is an effective epi.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    def CategoryTheory.Sieve.generateFamily {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) :

                    The sieve of morphisms which factor through a morphism in a given family. This is equal to Sieve.generate (Presieve.ofArrows X π), but has more convenient definitional properties.

                    Equations
                    Instances For
                      structure CategoryTheory.EffectiveEpiFamilyStruct {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) :
                      Type (max (max u_1 u_2) u_3)

                      This structure encodes the data required for a family of morphisms to be effective epimorphic.

                      Instances For
                        class CategoryTheory.EffectiveEpiFamily {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) :

                        A family of morphisms f a : X a ⟶ B indexed by α is effective epimorphic provided that the f a exhibit B as a colimit of the diagram of all "relations" R → X a₁, R ⟶ X a₂ for all a₁ a₂ : α.

                        Instances
                          noncomputable def CategoryTheory.EffectiveEpiFamily.getStruct {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] :

                          Some chosen EffectiveEpiFamilyStruct associated to an effective epi family.

                          Equations
                          Instances For
                            noncomputable def CategoryTheory.EffectiveEpiFamily.desc {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) :
                            B W

                            Descend along an effective epi family.

                            Equations
                            Instances For
                              @[simp]
                              theorem CategoryTheory.EffectiveEpiFamily.fac_assoc {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) (a : α) {Z : C} (h : W Z) :
                              @[simp]
                              theorem CategoryTheory.EffectiveEpiFamily.fac {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) (a : α) :

                              The effective epi family structure on the identity

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                theorem CategoryTheory.EffectiveEpiFamily.uniq {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) (m : B W) (hm : ∀ (a : α), CategoryTheory.CategoryStruct.comp (π a) m = e a) :
                                theorem CategoryTheory.EffectiveEpiFamily.hom_ext {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (m₁ : B W) (m₂ : B W) (h : ∀ (a : α), CategoryTheory.CategoryStruct.comp (π a) m₁ = CategoryTheory.CategoryStruct.comp (π a) m₂) :
                                m₁ = m₂

                                Implementation: This is a construction which will be used in the proof that the sieve generated by a family of arrows is effective epimorphic if and only if the family is an effective epi.

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

                                  Implementation: This is a construction which will be used in the proof that the sieve generated by a family of arrows is effective epimorphic if and only if the family is an effective epi.

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

                                    Given an EffectiveEpiFamily X π and a corresponding coproduct cocone, the family descends to an EffectiveEpi from the coproduct.

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

                                      Given an EffectiveEpiFamily X π such that the coproduct of X exists, Sigma.desc π is an EffectiveEpi.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        theorem CategoryTheory.effectiveEpiFamilyStructOfEffectiveEpiDesc_aux {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} {X : αC} {π : (a : α) → X a B} [CategoryTheory.Limits.HasCoproduct X] [∀ {Z : C} (g : Z X) (a : α), CategoryTheory.Limits.HasPullback g (CategoryTheory.Limits.Sigma.ι X a)] [∀ {Z : C} (g : Z X), CategoryTheory.Limits.HasCoproduct fun (a : α) => CategoryTheory.Limits.pullback g (CategoryTheory.Limits.Sigma.ι X a)] [∀ {Z : C} (g : Z X), CategoryTheory.Epi (CategoryTheory.Limits.Sigma.desc fun (a : α) => CategoryTheory.Limits.pullback.fst)] {W : C} {e : (a : α) → X a W} (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) {Z : C} {g₁ : Z fun (b : α) => X b} {g₂ : Z fun (b : α) => X b} (hg : CategoryTheory.CategoryStruct.comp g₁ (CategoryTheory.Limits.Sigma.desc π) = CategoryTheory.CategoryStruct.comp g₂ (CategoryTheory.Limits.Sigma.desc π)) :

                                        This is an auxiliary lemma used twice in the definition of EffectiveEpiFamilyOfEffectiveEpiDesc. It is the h hypothesis of EffectiveEpi.desc and EffectiveEpi.fac

                                        If a coproduct interacts well enough with pullbacks, then a family whose domains are the terms of the coproduct is effective epimorphic whenever Sigma.desc induces an effective epimorphism from the coproduct itself.

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

                                          An EffectiveEpiFamily consisting of a single EffectiveEpi

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            instance CategoryTheory.instEffectiveEpiFamily {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {B : C} {X : C} (f : X B) [CategoryTheory.EffectiveEpi f] :
                                            CategoryTheory.EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f
                                            Equations
                                            • =

                                            A single element EffectiveEpiFamily constists of an EffectiveEpi

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              instance CategoryTheory.instEffectiveEpi {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {B : C} {X : C} (f : X B) [CategoryTheory.EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f] :
                                              Equations
                                              • =

                                              A family of morphisms with the same target inducing an isomorphism from the coproduct to the target is an EffectiveEpiFamily.

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

                                                The identity is an effective epi.

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

                                                  A split epi followed by an effective epi is an effective epi. This version takes an explicit section to the split epi, and is mainly used to define effectiveEpiStructCompOfEffectiveEpiSplitEpi, which takes a IsSplitEpi instance instead.

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

                                                    The data of an EffectiveEpi structure on a RegularEpi.

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

                                                      A morphism which is a coequalizer for its kernel pair is an effective epi.

                                                      An effective epi which has a kernel pair is a regular epi.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      theorem CategoryTheory.effectiveEpiFamilyStructOfEquivalence_aux {C : Type u_1} [CategoryTheory.Category.{u_5, u_1} C] {D : Type u_2} [CategoryTheory.Category.{u_4, u_2} D] (e : C D) {B : C} {α : Type u_3} (X : αC) (π : (a : α) → X a B) {W : D} (ε : (a : α) → e.functor.obj (X a) W) (h : ∀ {Z : D} (a₁ a₂ : α) (g₁ : Z e.functor.obj (X a₁)) (g₂ : Z e.functor.obj (X a₂)), CategoryTheory.CategoryStruct.comp g₁ (e.functor.map (π a₁)) = CategoryTheory.CategoryStruct.comp g₂ (e.functor.map (π a₂))CategoryTheory.CategoryStruct.comp g₁ (ε a₁) = CategoryTheory.CategoryStruct.comp g₂ (ε a₂)) {Z : C} (a₁ : α) (a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂) (hg : CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)) :
                                                      CategoryTheory.CategoryStruct.comp g₁ ((fun (a : α) => CategoryTheory.CategoryStruct.comp (e.unit.app (X a)) (e.inverse.map (ε a))) a₁) = CategoryTheory.CategoryStruct.comp g₂ ((fun (a : α) => CategoryTheory.CategoryStruct.comp (e.unit.app (X a)) (e.inverse.map (ε a))) a₂)
                                                      def CategoryTheory.effectiveEpiFamilyStructOfEquivalence {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] {D : Type u_2} [CategoryTheory.Category.{u_5, u_2} D] (e : C D) {B : C} {α : Type u_3} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] :
                                                      CategoryTheory.EffectiveEpiFamilyStruct (fun (a : α) => e.functor.obj (X a)) fun (a : α) => e.functor.map (π a)

                                                      Equivalences preserve effective epimorphic families

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        theorem CategoryTheory.effectiveEpiFamilyStructCompIso_aux {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {B' : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) (i : B B') {W : C} (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryTheory.CategoryStruct.comp g₁ (CategoryTheory.CategoryStruct.comp (π a₁) i) = CategoryTheory.CategoryStruct.comp g₂ (CategoryTheory.CategoryStruct.comp (π a₂) i)CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) {Z : C} (a₁ : α) (a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂) (hg : CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)) :
                                                        noncomputable def CategoryTheory.effectiveEpiFamilyStructCompIso {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {B' : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (i : B B') [CategoryTheory.IsIso i] :

                                                        An effective epi family followed by an iso is an effective epi family.

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For
                                                          instance CategoryTheory.instEffectiveEpiFamilyCompToCategoryStruct {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {B' : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (i : B B') [CategoryTheory.IsIso i] :
                                                          Equations
                                                          • =
                                                          theorem CategoryTheory.effectiveEpiFamilyStructIsoComp_aux {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (Y : αC) (π : (a : α) → X a B) (i : (a : α) → Y a X a) [∀ (a : α), CategoryTheory.IsIso (i a)] {W : C} (e : (a : α) → Y a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z Y a₁) (g₂ : Z Y a₂), CategoryTheory.CategoryStruct.comp g₁ (CategoryTheory.CategoryStruct.comp (i a₁) (π a₁)) = CategoryTheory.CategoryStruct.comp g₂ (CategoryTheory.CategoryStruct.comp (i a₂) (π a₂))CategoryTheory.CategoryStruct.comp g₁ (e a₁) = CategoryTheory.CategoryStruct.comp g₂ (e a₂)) {Z : C} (a₁ : α) (a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂) (hg : CategoryTheory.CategoryStruct.comp g₁ (π a₁) = CategoryTheory.CategoryStruct.comp g₂ (π a₂)) :
                                                          noncomputable def CategoryTheory.effectiveEpiFamilyStructIsoComp {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (Y : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (i : (a : α) → Y a X a) [∀ (a : α), CategoryTheory.IsIso (i a)] :

                                                          An effective epi family preceded by a family of isos is an effective epi family.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            instance CategoryTheory.effectiveEpiFamilyIsoComp {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (Y : αC) (π : (a : α) → X a B) [CategoryTheory.EffectiveEpiFamily X π] (i : (a : α) → Y a X a) [∀ (a : α), CategoryTheory.IsIso (i a)] :
                                                            Equations
                                                            • =

                                                            A functor preserves effective epimorphisms if it maps effective epimorphisms to effective epimorphisms.

                                                            Instances