{-# OPTIONS --without-K --rewriting #-} open import HoTT module groups.KernelCstImage {i j k} {G : Group i} {H : Group j} (K : Group k) (φ : G →ᴳ H) (H-ab : is-abelian H) where open import groups.KernelImage {K = K} cst-hom φ H-ab open import groups.Cokernel φ H-ab Ker-cst-quot-Im : Ker/Im ≃ᴳ Coker Ker-cst-quot-Im = ≃-to-≃ᴳ (equiv to from to-from from-to) to-pres-comp where to : Ker/Im.El → Coker.El to = SetQuot-rec SetQuot-level to' quot-rel where to' : Ker.El (cst-hom {G = H} {H = K}) → Coker.El to' ker = q[ fst ker ] from : Coker.El → Ker/Im.El from = SetQuot-rec SetQuot-level from' quot-rel where from' : Group.El H → Ker/Im.El from' h = q[ h , idp ] abstract to-from : ∀ cok → to (from cok) == cok to-from = SetQuot-elim (λ _ → =-preserves-set SetQuot-level) (λ _ → idp) (λ _ → prop-has-all-paths-↓ (SetQuot-level _ _)) from-to : ∀ ker → from (to ker) == ker 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 Coker.comp to to-pres-comp = SetQuot-elim (λ _ → Π-is-set λ _ → =-preserves-set SetQuot-level) (λ _ → SetQuot-elim (λ _ → =-preserves-set SetQuot-level) (λ _ → idp) (λ _ → prop-has-all-paths-↓ (SetQuot-level _ _))) (λ _ → prop-has-all-paths-↓ (Π-is-prop λ _ → SetQuot-level _ _))