module Cat.Functor.Conservative where
Conservative functors🔗
We say a functor is conservative if it reflects isomorphisms. More concretely, if is some morphism , and if is an iso in , then must have already been an iso in !
: Functor C D → Type _
is-conservative {C = C} {D = D} F =
is-conservative ∀ {A B} {f : C .Hom A B}
→ is-invertible D (F .F₁ f) → is-invertible C f
As a general fact, conservative functors reflect limits that they preserve (given those limits exist in the first place!).
The rough proof sketch is as follows: Let
be some cone in
such that
is a limit in
,
and
a limit in
of the same diagram. By the universal property of
,
there exists a map
from the apex of
to the apex of
in
.
Furthermore, as
is a limit in
,
becomes an isomorphism in
.
However,
is conservative, which implies that
was an isomorphism in
all along! This means that
must be a limit in
as well (see is-invertible→is-limitp
).
module _ {F : Functor C D} (conservative : is-conservative F) where
private
open _=>_
module C = Cat C
module D = Cat D
module F = Func F
: ∀ {Dia : Functor J C}
conservative-reflects-limits → (L : Limit Dia)
→ preserves-limit F Dia
→ reflects-limit F Dia
{K} {eps} lim =
conservative-reflects-limits L-lim preservesa
is-invertible→is-limitp{K = Limit.Ext L-lim} {epsy = Limit.cone L-lim} (Limit.has-limit L-lim)
(eps .η) (λ f → sym (eps .is-natural _ _ f) ∙ C.elimr (K .F-id)) refl
$ conservative
$ invert
where
module L-lim = Limit L-lim
module FL-lim = is-limit (preservesa L-lim.has-limit)
module lim = is-limit lim
: D.Hom (F .F₀ L-lim.apex) (F .F₀ (K .F₀ tt))
uinv =
uinv (lim.universal
(λ j → F .F₁ (L-lim.ψ j))
(λ f → sym (F .F-∘ _ _) ∙ ap (F .F₁) (L-lim.commutes f)))
: D.is-invertible (F .F₁ (L-lim.universal (eps .η) _))
invert =
invert .make-invertible uinv
D(FL-lim.unique₂ _ (λ j → FL-lim.commutes j)
(λ j → F.pulll (L-lim.factors _ _) ∙ lim.factors _ _)
(λ j → D.idr _))
(lim.unique₂ _ (λ j → lim.commutes j)
(λ j → D.pulll (lim.factors _ _) ∙ F.collapse (L-lim.factors _ _))
(λ j → D.idr _))