open import Cat.Diagram.Limit.Base open import Cat.Diagram.Terminal open import Cat.Functor.Base open import Cat.Morphism open import Cat.Prelude hiding (J) 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 !
is-conservative : Functor C D → Type _ is-conservative {C = C} {D = D} F = ∀ {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 apex-iso→is-limit).
module _ {F : Functor C D} (conservative : is-conservative F) where conservative-reflects-limits : ∀ {Dia : Functor J C} → (L : Limit Dia) → (∀ (K : Cone Dia) → Preserves-limit F K) → (∀ (K : Cone Dia) → Reflects-limit F K) conservative-reflects-limits {Dia = Dia} L-lim preserves K limits = apex-iso→is-limit Dia K L-lim $ conservative $ subst (λ ϕ → is-invertible D ϕ) F-preserves-universal $ Cone-invertible→apex-invertible (F F∘ Dia) $ !-invertible (Cones (F F∘ Dia)) F∘L-lim K-lim where F∘L-lim : Limit (F F∘ Dia) F∘L-lim .Terminal.top = F-map-cone F (Terminal.top L-lim) F∘L-lim .Terminal.has⊤ = preserves (Terminal.top L-lim) (Terminal.has⊤ L-lim) K-lim : Limit (F F∘ Dia) K-lim .Terminal.top = F-map-cone F K K-lim .Terminal.has⊤ = limits module L-lim = Terminal L-lim module F∘L-lim = Terminal F∘L-lim open Cone-hom F-preserves-universal : hom F∘L-lim.! ≡ F .F₁ (hom {x = K} L-lim.!) F-preserves-universal = hom F∘L-lim.! ≡⟨ ap hom (F∘L-lim.!-unique (F-map-cone-hom F L-lim.!)) ⟩≡ hom (F-map-cone-hom F (Terminal.! L-lim)) ≡⟨⟩ F .F₁ (hom L-lim.!) ∎