Documentation

Mathlib.CategoryTheory.EffectiveEpi.Basic

Effective epimorphisms #

We define the notion of effective epimorphism and effective epimorphic family of morphisms.

A morphism is an effective epi if it is a joint coequalizer of all pairs of morphisms which it coequalizes.

A family of morphisms with fixed target is effective epimorphic if it is initial among families of morphisms with its sources and a general fixed target, coequalizing every pair of morphisms it coequalizes (here, the pair of morphisms coequalized can have different targets among the sources of the 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 the file CategoryTheory/EffectiveEpi/RegularEpi.lean 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 #

structure CategoryTheory.EffectiveEpiStruct {C : Type u_1} [Category.{u_2, u_1} C] {X 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} [Category.{u_2, u_1} C] {X 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
      noncomputable def CategoryTheory.EffectiveEpi.getStruct {C : Type u_1} [Category.{u_2, u_1} C] {X Y : C} (f : Y X) [EffectiveEpi f] :

      Some chosen EffectiveEpiStruct associated to an effective epi.

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

          Descend along an effective epi.

          Equations
            Instances For
              @[simp]
              theorem CategoryTheory.EffectiveEpi.fac {C : Type u_1} [Category.{u_2, u_1} C] {X Y W : C} (f : Y X) [EffectiveEpi f] (e : Y W) (h : ∀ {Z : C} (g₁ g₂ : Z Y), CategoryStruct.comp g₁ f = CategoryStruct.comp g₂ fCategoryStruct.comp g₁ e = CategoryStruct.comp g₂ e) :
              CategoryStruct.comp f (desc f e ) = e
              @[simp]
              theorem CategoryTheory.EffectiveEpi.fac_assoc {C : Type u_1} [Category.{u_2, u_1} C] {X Y W : C} (f : Y X) [EffectiveEpi f] (e : Y W) (h : ∀ {Z : C} (g₁ g₂ : Z Y), CategoryStruct.comp g₁ f = CategoryStruct.comp g₂ fCategoryStruct.comp g₁ e = CategoryStruct.comp g₂ e) {Z : C} (h✝ : W Z) :
              theorem CategoryTheory.EffectiveEpi.uniq {C : Type u_1} [Category.{u_2, u_1} C] {X Y W : C} (f : Y X) [EffectiveEpi f] (e : Y W) (h : ∀ {Z : C} (g₁ g₂ : Z Y), CategoryStruct.comp g₁ f = CategoryStruct.comp g₂ fCategoryStruct.comp g₁ e = CategoryStruct.comp g₂ e) (m : X W) (hm : CategoryStruct.comp f m = e) :
              m = desc f e
              instance CategoryTheory.epiOfEffectiveEpi {C : Type u_1} [Category.{u_2, u_1} C] {X Y : C} (f : Y X) [EffectiveEpi f] :
              Epi f
              structure CategoryTheory.EffectiveEpiFamilyStruct {C : Type u_1} [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} [Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) :

                A family of morphisms π a : X a ⟶ B indexed by α is effective epimorphic provided that the π 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} [Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [EffectiveEpiFamily X π] :

                  Some chosen EffectiveEpiFamilyStruct associated to an effective epi family.

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

                      Descend along an effective epi family.

                      Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.EffectiveEpiFamily.fac {C : Type u_1} [Category.{u_3, u_1} C] {B W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryStruct.comp g₁ (π a₁) = CategoryStruct.comp g₂ (π a₂)CategoryStruct.comp g₁ (e a₁) = CategoryStruct.comp g₂ (e a₂)) (a : α) :
                          CategoryStruct.comp (π a) (desc X π e ) = e a
                          @[simp]
                          theorem CategoryTheory.EffectiveEpiFamily.fac_assoc {C : Type u_1} [Category.{u_3, u_1} C] {B W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryStruct.comp g₁ (π a₁) = CategoryStruct.comp g₂ (π a₂)CategoryStruct.comp g₁ (e a₁) = CategoryStruct.comp g₂ (e a₂)) (a : α) {Z : C} (h✝ : W Z) :
                          CategoryStruct.comp (π a) (CategoryStruct.comp (desc X π e ) h✝) = CategoryStruct.comp (e a) h✝
                          theorem CategoryTheory.EffectiveEpiFamily.uniq {C : Type u_1} [Category.{u_3, u_1} C] {B W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [EffectiveEpiFamily X π] (e : (a : α) → X a W) (h : ∀ {Z : C} (a₁ a₂ : α) (g₁ : Z X a₁) (g₂ : Z X a₂), CategoryStruct.comp g₁ (π a₁) = CategoryStruct.comp g₂ (π a₂)CategoryStruct.comp g₁ (e a₁) = CategoryStruct.comp g₂ (e a₂)) (m : B W) (hm : ∀ (a : α), CategoryStruct.comp (π a) m = e a) :
                          m = desc X π e
                          theorem CategoryTheory.EffectiveEpiFamily.hom_ext {C : Type u_1} [Category.{u_3, u_1} C] {B W : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [EffectiveEpiFamily X π] (m₁ m₂ : B W) (h : ∀ (a : α), CategoryStruct.comp (π a) m₁ = CategoryStruct.comp (π a) m₂) :
                          m₁ = m₂
                          noncomputable def CategoryTheory.effectiveEpiFamilyStructSingletonOfEffectiveEpi {C : Type u_1} [Category.{u_2, u_1} C] {B X : C} (f : X B) [EffectiveEpi f] :
                          EffectiveEpiFamilyStruct (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f

                          An EffectiveEpiFamily consisting of a single EffectiveEpi

                          Equations
                            Instances For
                              instance CategoryTheory.instEffectiveEpiFamily {C : Type u_1} [Category.{u_2, u_1} C] {B X : C} (f : X B) [EffectiveEpi f] :
                              EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f
                              noncomputable def CategoryTheory.effectiveEpiStructOfEffectiveEpiFamilySingleton {C : Type u_1} [Category.{u_2, u_1} C] {B X : C} (f : X B) [EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f] :

                              A single element EffectiveEpiFamily consists of an EffectiveEpi

                              Equations
                                Instances For
                                  instance CategoryTheory.instEffectiveEpiOfEffectiveEpiFamily {C : Type u_1} [Category.{u_2, u_1} C] {B X : C} (f : X B) [EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f] :
                                  theorem CategoryTheory.effectiveEpi_iff_effectiveEpiFamily {C : Type u_1} [Category.{u_2, u_1} C] {B X : C} (f : X B) :
                                  EffectiveEpi f EffectiveEpiFamily (fun (x : Unit) => X) fun (x : Unit) => match x with | PUnit.unit => f
                                  noncomputable def CategoryTheory.effectiveEpiFamilyStructOfIsIsoDesc {C : Type u_1} [Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [Limits.HasCoproduct X] [IsIso (Limits.Sigma.desc π)] :

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

                                  Equations
                                    Instances For
                                      instance CategoryTheory.instEffectiveEpiFamilyOfIsIsoDesc {C : Type u_1} [Category.{u_3, u_1} C] {B : C} {α : Type u_2} (X : αC) (π : (a : α) → X a B) [Limits.HasCoproduct X] [IsIso (Limits.Sigma.desc π)] :
                                      noncomputable def CategoryTheory.effectiveEpiStructOfIsIso {C : Type u_1} [Category.{u_2, u_1} C] {X Y : C} (f : X Y) [IsIso f] :

                                      Any isomorphism is an effective epi.

                                      Equations
                                        Instances For
                                          def CategoryTheory.EffectiveEpiFamilyStruct.reindex {C : Type u_1} [Category.{u_4, u_1} C] {B : C} {α : Type u_2} {α' : Type u_3} (X : αC) (π : (a : α) → X a B) (e : α' α) (P : EffectiveEpiFamilyStruct (fun (a : α') => X (e a)) fun (a : α') => π (e a)) :

                                          Reindex the indexing type of an effective epi family struct.

                                          Equations
                                            Instances For
                                              theorem CategoryTheory.EffectiveEpiFamily.reindex {C : Type u_1} [Category.{u_4, u_1} C] {B : C} {α : Type u_2} {α' : Type u_3} (X : αC) (π : (a : α) → X a B) (e : α' α) (h : EffectiveEpiFamily (fun (a : α') => X (e a)) fun (a : α') => π (e a)) :

                                              Reindex the indexing type of an effective epi family.