Adjoint lifting #
This file gives two constructions for building left adjoints: the adjoint triangle theorem and the
adjoint lifting theorem.
The adjoint triangle theorem says that given a functor U : B ⥤ C with a left adjoint F such
that ε_X : FUX ⟶ X is a regular epi. Then for any category A with coequalizers of reflexive
pairs, a functor R : A ⥤ B has a left adjoint if (and only if) the composite R ⋙ U does.
Note that the condition on U regarding ε_X is automatically satisfied in the case when U is
a monadic functor, giving the corollary: monadic_adjoint_triangle_lift, i.e. if U is monadic,
A has reflexive coequalizers then R : A ⥤ B has a left adjoint provided R ⋙ U does.
The adjoint lifting theorem says that given a commutative square of functors (up to isomorphism):
Q
A → B
U ↓ ↓ V C → D R
where U and V are monadic and A has reflexive coequalizers, then if R has a left adjoint
then Q has a left adjoint.
Implementation #
It is more convenient to prove this theorem by assuming we are given the explicit adjunction rather
than just a functor known to be a right adjoint. In docstrings, we write (η, ε) for the unit
and counit of the adjunction adj₁ : F ⊣ U and (ι, δ) for the unit and counit of the adjunction
adj₂ : F' ⊣ R ⋙ U.
TODO #
Dualise to lift right adjoints through comonads (by reversing 1-cells) and dualise to lift right adjoints through monads (by reversing 2-cells), and the combination.
References #
- https://ncatlab.org/nlab/show/adjoint+triangle+theorem
- https://ncatlab.org/nlab/show/adjoint+lifting+theorem
- Adjoint Lifting Theorems for Categories of Algebras (PT Johnstone, 1975)
- A unified approach to the lifting of adjoints (AJ Power, 1988)
To show that ε_X is a coequalizer for (FUε_X, ε_FUX), it suffices to assume it's always a
coequalizer of something (i.e. a regular epi).
Equations
- category_theory.lift_adjoint.counit_coequalises adj₁ X = category_theory.limits.cofork.is_colimit.mk' (category_theory.limits.cofork.of_π (adj₁.counit.app X) _) (λ (s : category_theory.limits.cofork (F.map (U.map (adj₁.counit.app X))) (adj₁.counit.app (F.obj (U.obj X)))), ⟨(category_theory.regular_epi.desc' (adj₁.counit.app X) s.π _).val, _⟩)
(Implementation)
To construct the left adjoint, we use the coequalizer of F' U ε_Y with the composite
F' U F U X ⟶ F' U F U R F U' X ⟶ F' U R F' U X ⟶ F' U X
where the first morphism is F' U F ι_UX, the second is F' U ε_RF'UX, and the third is δ_F'UX.
We will show that this coequalizer exists and that it forms the object map for a left adjoint to
R.
Equations
Instances for category_theory.lift_adjoint.other_map
(F'Uε_X, other_map X) is a reflexive pair: in particular if A has reflexive coequalizers then
it has a coequalizer.
Construct the object part of the desired left adjoint as the coequalizer of F'Uε_Y with
other_map.
Equations
- category_theory.lift_adjoint.construct_left_adjoint_obj R F' adj₁ adj₂ Y = category_theory.limits.coequalizer (F'.map (U.map (adj₁.counit.app Y))) (category_theory.lift_adjoint.other_map R F' adj₁ adj₂ Y)
The homset equivalence which helps show that R is a right adjoint.
Equations
- category_theory.lift_adjoint.construct_left_adjoint_equiv R F' adj₁ adj₂ Y X = (((category_theory.limits.cofork.is_colimit.hom_iso (category_theory.limits.colimit.is_colimit (category_theory.limits.parallel_pair (F'.map (U.map (adj₁.counit.app X))) (category_theory.lift_adjoint.other_map R F' adj₁ adj₂ X))) Y).trans ((adj₂.hom_equiv (U.obj X) Y).subtype_equiv _)).trans ((adj₁.hom_equiv (U.obj X) (R.obj Y)).symm.subtype_equiv _)).trans (category_theory.limits.cofork.is_colimit.hom_iso (category_theory.lift_adjoint.counit_coequalises adj₁ X) (R.obj Y)).symm
Construct the left adjoint to R, with object map construct_left_adjoint_obj.
Equations
- category_theory.lift_adjoint.construct_left_adjoint R F' adj₁ adj₂ = category_theory.adjunction.left_adjoint_of_equiv (λ (X : B) (Y : A), category_theory.lift_adjoint.construct_left_adjoint_equiv R F' adj₁ adj₂ Y X) _
The adjoint triangle theorem: Suppose U : B ⥤ C has a left adjoint F such that each counit
ε_X : FUX ⟶ X is a regular epimorphism. Then if a category A has coequalizers of reflexive
pairs, then a functor R : A ⥤ B has a left adjoint if the composite R ⋙ U does.
Note the converse is true (with weaker assumptions), by adjunction.comp.
See https://ncatlab.org/nlab/show/adjoint+triangle+theorem
Equations
- category_theory.adjoint_triangle_lift R adj₁ = {left := category_theory.lift_adjoint.construct_left_adjoint R (category_theory.left_adjoint (R ⋙ U)) adj₁ (category_theory.adjunction.of_right_adjoint (R ⋙ U)) (λ (X : B), _inst_4 X), adj := category_theory.adjunction.adjunction_of_equiv_left (λ (X : B) (Y : A), category_theory.lift_adjoint.construct_left_adjoint_equiv R (category_theory.left_adjoint (R ⋙ U)) adj₁ (category_theory.adjunction.of_right_adjoint (R ⋙ U)) Y X) _}
If R ⋙ U has a left adjoint, the domain of R has reflexive coequalizers and U is a monadic
functor, then R has a left adjoint.
This is a special case of adjoint_triangle_lift which is often more useful in practice.
Equations
- category_theory.monadic_adjoint_triangle_lift U = let R' : A ⥤ (category_theory.adjunction.of_right_adjoint U).to_monad.algebra := R ⋙ category_theory.monad.comparison (category_theory.adjunction.of_right_adjoint U), this : category_theory.is_right_adjoint (R' ⋙ (category_theory.monad.comparison (category_theory.adjunction.of_right_adjoint U)).inv) := category_theory.adjunction.right_adjoint_of_comp, this_1 : R' ⋙ (category_theory.monad.comparison (category_theory.adjunction.of_right_adjoint U)).inv ≅ R := category_theory.iso_whisker_left R (category_theory.monad.comparison (category_theory.adjunction.of_right_adjoint U)).as_equivalence.unit_iso.symm ≪≫ R.right_unitor in category_theory.adjunction.right_adjoint_of_nat_iso this_1
Suppose we have a commutative square of functors
Q
A → B
U ↓ ↓ V C → D R
where U has a left adjoint, A has reflexive coequalizers and V has a left adjoint such that
each component of the counit is a regular epi.
Then Q has a left adjoint if R has a left adjoint.
See https://ncatlab.org/nlab/show/adjoint+lifting+theorem
Equations
- category_theory.adjoint_square_lift Q V U R comm = let this : category_theory.is_right_adjoint (Q ⋙ V) := category_theory.adjunction.right_adjoint_of_nat_iso comm in category_theory.adjoint_triangle_lift Q (category_theory.adjunction.of_right_adjoint V)
Suppose we have a commutative square of functors
Q
A → B
U ↓ ↓ V C → D R
where U has a left adjoint, A has reflexive coequalizers and V is monadic.
Then Q has a left adjoint if R has a left adjoint.
See https://ncatlab.org/nlab/show/adjoint+lifting+theorem
Equations
- category_theory.monadic_adjoint_square_lift Q V U R comm = let this : category_theory.is_right_adjoint (Q ⋙ V) := category_theory.adjunction.right_adjoint_of_nat_iso comm in category_theory.monadic_adjoint_triangle_lift V