{-# OPTIONS --without-K --rewriting #-}
open import HoTT
module groups.KernelCstImageCst {i j k}
(G : Group i) (H : Group j) (K : Group k)
(H-ab : is-abelian H) where
private
module H = Group H
open import groups.KernelImage {G = G} {H = H} {K = K} cst-hom cst-hom H-ab
Ker-cst-quot-Im-cst : Ker/Im ≃ᴳ H
Ker-cst-quot-Im-cst = ≃-to-≃ᴳ (equiv to from to-from from-to) to-pres-comp where
to : Ker/Im.El → H.El
to = SetQuot-rec H.El-level to' to-rel where
to' : Ker.El (cst-hom {G = H} {H = K}) → H.El
to' ker = fst ker
abstract
to-rel : ∀ {h₁ h₂} → ker/im-rel' h₁ h₂ → h₁ == h₂
to-rel {h₁} {h₂} = Trunc-rec (H.El-level _ _)
λ{(_ , 0=h₁h₂⁻¹) → H.zero-diff-same h₁ h₂ (! 0=h₁h₂⁻¹)}
from : H.El → Ker/Im.El
from h = q[ h , idp ]
abstract
to-from : ∀ h → to (from h) == h
to-from h = idp
from-to : ∀ k/i → from (to k/i) == k/i
from-to = SetQuot-elim (λ _ → =-preserves-set SetQuot-level)
(λ _ → ap q[_] $ ker-El=-out idp)
(λ _ → prop-has-all-paths-↓ (SetQuot-level _ _))
to-pres-comp : preserves-comp Ker/Im.comp H.comp to
to-pres-comp = SetQuot-elim
(λ _ → Π-is-set λ _ → =-preserves-set H.El-level)
(λ _ → SetQuot-elim
(λ _ → =-preserves-set H.El-level)
(λ _ → idp)
(λ _ → prop-has-all-paths-↓ (H.El-level _ _)))
(λ _ → prop-has-all-paths-↓ (Π-is-prop λ _ → H.El-level _ _))