Documentation

Mathlib.CategoryTheory.Monad.Monadicity

Monadicity theorems #

We prove monadicity theorems which can establish a given functor is monadic. In particular, we show three versions of Beck's monadicity theorem, and the reflexive (crude) monadicity theorem:

G is a monadic right adjoint if it has a left adjoint, and:

This file has been adapted to Mathlib/CategoryTheory/Monad/Comonadicity.lean. Please try to keep them in sync.

Tags #

Beck, monadicity, descent

The "main pair" for an algebra (A, α) is the pair of morphisms (F α, ε_FA). It is always a reflexive pair, and will be used to construct the left adjoint to the comparison functor and show it is an equivalence.

instance CategoryTheory.Monad.MonadicityInternal.main_pair_G_split {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) (A : adj.toMonad.Algebra) :
G.IsSplitPair (F.map A.a) (adj.counit.app (F.obj A.A))

The "main pair" for an algebra (A, α) is the pair of morphisms (F α, ε_FA). It is always a G-split pair, and will be used to construct the left adjoint to the comparison functor and show it is an equivalence.

noncomputable def CategoryTheory.Monad.MonadicityInternal.comparisonLeftAdjointObj {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) (A : adj.toMonad.Algebra) [Limits.HasCoequalizer (F.map A.a) (adj.counit.app (F.obj A.A))] :
D

The object function for the left adjoint to the comparison functor.

Instances For

    We have a bijection of homsets which will be used to construct the left adjoint to the comparison functor.

    Instances For
      @[simp]
      theorem CategoryTheory.Monad.MonadicityInternal.comparisonLeftAdjointHomEquiv_symm_apply {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) (A : adj.toMonad.Algebra) (B : D) [Limits.HasCoequalizer (F.map A.a) (adj.counit.app (F.obj A.A))] (aāœ : A ⟶ (comparison adj).obj B) :
      (comparisonLeftAdjointHomEquiv adj A B).symm aāœ = (Limits.Cofork.IsColimit.homIso (Limits.colimit.isColimit (Limits.parallelPair (F.map A.a) (adj.counit.app (F.obj A.A)))) B).symm ⟨(adj.homEquiv A.A B).symm aāœ.f, ā‹ÆāŸ©
      noncomputable def CategoryTheory.Monad.MonadicityInternal.leftAdjointComparison {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) [āˆ€ (A : adj.toMonad.Algebra), Limits.HasCoequalizer (F.map A.a) (adj.counit.app (F.obj A.A))] :

      Construct the adjunction to the comparison functor.

      Instances For

        Provided we have the appropriate coequalizers, we have an adjunction to the comparison functor.

        Instances For
          @[simp]
          theorem CategoryTheory.Monad.MonadicityInternal.comparisonAdjunction_counit {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) [āˆ€ (A : adj.toMonad.Algebra), Limits.HasCoequalizer (F.map A.a) (adj.counit.app (F.obj A.A))] :
          (comparisonAdjunction adj).counit = { app := fun (Y : D) => (Limits.Cofork.IsColimit.homIso (Limits.colimit.isColimit (Limits.parallelPair (F.map (G.map (adj.counit.app Y))) (adj.counit.app (F.obj (G.obj Y))))) Y).symm ⟨(adj.homEquiv (G.obj Y) Y).symm (CategoryStruct.id (G.obj Y)), ā‹ÆāŸ©, naturality := ⋯ }
          noncomputable def CategoryTheory.Monad.MonadicityInternal.unitCofork {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} {adj : F ⊣ G} (A : adj.toMonad.Algebra) [Limits.HasCoequalizer (F.map A.a) (adj.counit.app (F.obj A.A))] :
          Limits.Cofork (G.map (F.map A.a)) (G.map (adj.counit.app (F.obj A.A)))

          This is a cofork which is helpful for establishing monadicity: the morphism from the Beck coequalizer to this cofork is the unit for the adjunction on the comparison functor.

          Instances For
            def CategoryTheory.Monad.MonadicityInternal.counitCofork {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) (B : D) :
            Limits.Cofork (F.map (G.map (adj.counit.app B))) (adj.counit.app (F.obj (G.obj B)))

            The cofork which describes the counit of the adjunction: the morphism from the coequalizer of this pair to this morphism is the counit.

            Instances For
              @[simp]
              theorem CategoryTheory.Monad.MonadicityInternal.counitCofork_pt {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] {G : Functor D C} {F : Functor C D} (adj : F ⊣ G) (B : D) :
              (counitCofork adj B).pt = B

              The unit cofork is a colimit provided G preserves it.

              Instances For

                The counit cofork is a colimit provided G reflects it.

                Instances For
                  @[implicit_reducible]

                  If G is monadic, it creates colimits of G-split pairs. This is the "boring" direction of Beck's monadicity theorem, the converse is given in monadicOfCreatesGSplitCoequalizers.

                  Instances For

                    Typeclass expressing that for all G-split pairs f,g, f and g have a coequalizer.

                    Instances

                      Typeclass expressing that for all G-split pairs f,g, G preserves colimits of parallelPair f g.

                      Instances

                        Typeclass expressing that for all G-split pairs f,g, G reflects colimits for parallelPair f g.

                        Instances
                          @[implicit_reducible]

                          To show G is a monadic right adjoint, we can show it preserves and reflects G-split coequalizers, and D has them.

                          Instances For
                            class CategoryTheory.Monad.CreatesColimitOfIsSplitPair {C : Type u₁} {D : Type uā‚‚} [Category.{v₁, u₁} C] [Category.{v₁, uā‚‚} D] (G : Functor D C) :
                            Type (max (max u₁ uā‚‚) v₁)

                            Typeclass expressing that for all G-split pairs f,g, G creates colimits of parallelPair f g.

                            Instances
                              @[implicit_reducible]

                              Beck's monadicity theorem: if G has a left adjoint and creates coequalizers of G-split pairs, then it is monadic. This is the converse of createsGSplitCoequalizersOfMonadic.

                              Instances For
                                @[implicit_reducible]

                                An alternate version of Beck's monadicity theorem: if G reflects isomorphisms, preserves coequalizers of G-split pairs and C has coequalizers of G-split pairs, then it is monadic.

                                Instances For

                                  Typeclass expressing that for all reflexive pairs f,g, G preserves colimits of parallelPair f g.

                                  Instances
                                    @[implicit_reducible]

                                    Reflexive (crude) monadicity theorem. If G has a right adjoint, D has and G preserves reflexive coequalizers and G reflects isomorphisms, then G is monadic.

                                    Instances For