module Cat.Functor.Adjoint.Reflective where
Reflective subcategories🔗
Occasionally, full subcategory inclusions (hence fully faithful functors — like the inclusion of abelian groups into the category of all groups, or the inclusion ) participate in an adjunction
When this is the case, we refer to the left adjoint functor as the reflector, and exhibits as a reflective subcategory of . Reflective subcategory inclusions are of particular importance because they are monadic functors: They exhibit as the category of algebras for an (idempotent) monad on .
: F ⊣ G → Type _
is-reflective {G = G} adj = is-fully-faithful G is-reflective
The first thing we will prove is that the counit map of a reflexive subcategory inclusion is an isomorphism. Since is fully faithful, the unit map corresponds to a map , and this map can be seen to be a left- and right- inverse to applying the triangle identities.
module
_ {C : Precategory o ℓ} {D : Precategory o' ℓ'} {F : Functor C D} {G : Functor D C}
(adj : F ⊣ G) (g-ff : is-reflective adj)
where
private
module DD = Cat.Reasoning Cat[ D , D ]
module C = Cat.Reasoning C
module D = Cat.Reasoning D
module F = Func F
module G = Func G
module GF = Func (G F∘ F)
module FG = Func (F F∘ G)
module g-ff {x} {y} = Equiv (_ , g-ff {x} {y})
open _⊣_ adj
: ∀ {o} → FG.₀ o D.≅ o
is-reflective→counit-is-iso {o} = morp where
is-reflective→counit-is-iso : F.₀ (G.₀ o) D.≅ o
morp = D.make-iso (counit.ε _) (g-ff.from (unit.η _)) invl invr
morp where abstract
: counit.ε o D.∘ g-ff.from (unit.η (G.₀ o)) ≡ D.id
invl = fully-faithful→faithful {F = G} g-ff (
invl .₁ (counit.ε o D.∘ _) ≡⟨ G.F-∘ _ _ ⟩
G.₁ (counit.ε o) C.∘ G.₁ (g-ff.from _) ≡⟨ C.refl⟩∘⟨ g-ff.ε _ ⟩
G.₁ (counit.ε o) C.∘ unit.η (G.₀ o) ≡⟨ zag ∙ sym G.F-id ⟩
G.₁ D.id ∎)
G
: g-ff.from (unit.η (G.₀ o)) D.∘ counit.ε o ≡ D.id
invr = fully-faithful→faithful {F = G} g-ff (ap G.₁ (
invr .from _ D.∘ counit.ε _ ≡˘⟨ counit.is-natural _ _ _ ⟩
g-ff.ε _ D.∘ F.₁ (G.₁ (g-ff.from _)) ≡⟨ D.refl⟩∘⟨ F.⟨ g-ff.ε _ ⟩ ⟩
counit.ε _ D.∘ F.₁ (unit.η _) ≡⟨ zig ⟩
counit.id ∎))
D
: (F F∘ G) DD.≅ Id
is-reflective→counit-iso = DD.invertible→iso counit invs where
is-reflective→counit-iso = invertible→invertibleⁿ counit λ x →
invs .iso→invertible (is-reflective→counit-is-iso {o = x}) D
We can now prove that the adjunction is monadic.
is-reflective→is-monadic: ∀ {F : Functor C D} {G : Functor D C}
→ (adj : F ⊣ G) → is-reflective adj → is-monadic adj
{C = C} {D = D} {F = F} {G} adj g-ff = eqv where is-reflective→is-monadic
It suffices to show that the comparison functor is fully faithful and split essentially surjective. For full faithfulness, observe that it’s always faithful; The fullness comes from the assumption that is ff.
: is-fully-faithful Comp
comp-ff {x} {y} = is-iso→is-equiv isom where
comp-ff open is-iso
: is-iso _
isom .inv alg = equiv→inverse g-ff (alg .morphism)
isom .rinv x = Algebra-hom-path _ (equiv→counit g-ff _)
isom .linv x = equiv→unit g-ff _ isom
To show that the comparison functor is split essentially surjective, suppose we have an object admitting the structure of an -algebra; We will show that as -algebras — note that admits a canonical (free) algebra structure. The algebra map provides an algebra morphism from , and the morphism is can be taken to be adjunction unit .
The crucial lemma in establishing that these are inverses is that , which follows because both of those morphisms are right inverses to , which is an isomorphism because is.
: is-split-eso Comp
comp-seso (ob , alg) = F.₀ ob , isom where
comp-seso : Algebra-hom _ (L∘R adj) (Comp.₀ (F.₀ ob)) (ob , alg)
Fo→o .morphism = alg .ν
Fo→o .commutes = sym (alg .ν-mult)
Fo→o
: Algebra-hom _ (L∘R adj) (ob , alg) (Comp.₀ (F.₀ ob))
o→Fo .morphism = unit.η _
o→Fo .commutes =
o→Fo .is-natural _ _ _
unit._∘_ refl (η-comonad-commute adj g-ff)
∙ ap₂ C(G.F-∘ _ _)
∙ sym .₁ (sym (F.F-∘ _ _) ·· ap F.₁ (alg .ν-unit) ·· F.F-id)
∙ ap G(ap₂ C._∘_ refl (sym (η-comonad-commute adj g-ff)) ∙ zag ∙ sym G.F-id)
∙ sym
: Comp.₀ (F.₀ ob) EM.≅ (ob , alg)
isom = EM.make-iso Fo→o o→Fo
isom (Algebra-hom-path _ (alg .ν-unit))
(Algebra-hom-path _ (
.is-natural _ _ _
unit._∘_ refl (η-comonad-commute adj g-ff)
·· ap₂ C(G.F-∘ _ _)
·· sym .₁ (sym (F.F-∘ _ _) ·· ap F.₁ (alg .ν-unit) ·· F.F-id)
·· ap G.F-id))
·· G
: is-equivalence Comp
eqv = ff+split-eso→is-equivalence comp-ff comp-seso eqv
Constructing reflective subcategories🔗
Earlier, we saw that any reflective subcategory has an invertible counit. We will now prove the converse: if the counit of an adjunction is invertible, then the left adjoint is a reflector.
Let be the (natural) inverse to the counit, and let . We can obtain a map by conjugating with and its inverse.
: is-invertibleⁿ counit → is-reflective adj
is-counit-iso→is-reflective =
is-counit-iso→is-reflective counit-iso
is-iso→is-equiv $(λ f → counit.ε _ D.∘ F.₁ f D.∘ ε⁻¹ _) iso
Proving that this conjugation forms an equivalence involves the usual adjoint yoga. For the forward direction, we need to show that ; if we take the right adjunct, this transforms our goal into .
From here, we can repeatedly apply naturality to commute the all the way to the end of the chain of morphisms. This yields , which is equal to , as is an inverse.
(λ f → Equiv.injective (_ , R-adjunct-is-equiv adj) $
.ε _ D.∘ F.₁ (G.₁ (counit.ε _ D.∘ F.₁ f D.∘ ε⁻¹ _)) ≡⟨ FG.popl (counit .is-natural _ _ _) ⟩
counit(counit.ε _ D.∘ counit.ε _) D.∘ F.₁ (G.₁ (F.₁ f D.∘ ε⁻¹ _)) ≡⟨ D.extendr (FG.shufflel (counit .is-natural _ _ _)) ⟩
(counit.ε _ D.∘ F.₁ f) D.∘ counit.ε _ D.∘ F.₁ (G.₁ (ε⁻¹ _)) ≡⟨ D.elimr (counit .is-natural _ _ _ ∙ counit-iso.invr ηₚ _) ⟩
.ε _ D.∘ F.₁ f ∎) counit
The reverse direction follows from a quick application of naturality.
(λ f →
.ε _ D.∘ F.₁ (G.₁ f) D.∘ ε⁻¹ _ ≡⟨ D.pulll (counit.is-natural _ _ _) ⟩
counit(f D.∘ counit.ε _) D.∘ ε⁻¹ _ ≡⟨ D.cancelr (counit-iso.invl ηₚ _) ⟩
)
f ∎where
module counit-iso = is-invertibleⁿ counit-iso
= counit-iso.inv .η ε⁻¹
Furthermore, if we have any natural isomorphism , then the left adjoint is a reflector! To show this, we will construct an inverse to the counit; our previous result will then ensure that is fully faithful.
To begin, recall that isos have the 2-out-of-3 property, so it suffices to show that is invertible. Next, note that we can transfer the comonad structure on onto a comonad structure on by repeatedly composing with ; this yields a natural transformation that is a right inverse to .
Finally, all natural transformations commute with one another, so is also a right inverse, and is invertible.
: (F F∘ G) ≅ⁿ Id → is-reflective adj
FG-iso→is-reflective =
FG-iso→is-reflective α
is-counit-iso→is-reflective $.invertible-cancell
[D,D]([D,D].iso→invertible (α [D,D].Iso⁻¹))
([D,D].make-invertible δ right-ident right-ident⁻¹)
where
module α = Isoⁿ α
: Id {C = D} => Id
δ .η x = α.to .η x D.∘ α.to .η (F.F₀ (G.₀ x)) D.∘ F.₁ (unit.η (G.₀ x)) D.∘ α.from .η x
δ .is-natural x y f =
δ .extendr (D.extendr (D.extendr (α.from .is-natural _ _ _)))
D.pushl (D.pushr (D.pushr (F.weave (unit .is-natural _ _ _))))
∙ D.pushl (D.pushr (α.to .is-natural _ _ _))
∙ D.pushl (α.to .is-natural _ _ _)
∙ D
: (counit ∘nt α.from) ∘nt δ ≡ idnt
right-ident = Nat-path λ x →
right-ident .cancel-inner (α.invr ηₚ _)
D.pulll (sym $ α.to .is-natural _ _ _)
∙ D.cancel-inner (F.annihilate zag)
∙ D.invl ηₚ _
∙ α
: δ ∘nt (counit ∘nt α.from) ≡ idnt
right-ident⁻¹ = id-nat-commute δ (counit ∘nt α.from) ∙ right-ident right-ident⁻¹