{-# OPTIONS --without-K --rewriting #-} open import HoTT open import cohomology.ChainComplex open import cohomology.Theory open import groups.KernelImage open import cw.CW module cw.cohomology.ReconstructedZerothCohomologyGroup {i : ULevel} (OT : OrdinaryTheory i) where open OrdinaryTheory OT import cw.cohomology.TipCoboundary OT as TC import cw.cohomology.TipAndAugment OT as TAA open import cw.cohomology.Descending OT open import cw.cohomology.ReconstructedCochainComplex OT import cw.cohomology.ZerothCohomologyGroup OT as ZCG import cw.cohomology.ZerothCohomologyGroupOnDiag OT as ZCGD private ≤-dec-has-all-paths : {m n : ℕ} → has-all-paths (Dec (m ≤ n)) ≤-dec-has-all-paths = prop-has-all-paths (Dec-level ≤-is-prop) private abstract zeroth-cohomology-group-descend : ∀ {n} (⊙skel : ⊙Skeleton {i} (2 + n)) → cohomology-group (cochain-complex ⊙skel) 0 == cohomology-group (cochain-complex (⊙cw-init ⊙skel)) 0 zeroth-cohomology-group-descend {n = O} ⊙skel = ap (λ δ → Ker/Im δ (TAA.cw-coε (⊙cw-take (lteSR lteS) ⊙skel)) (TAA.C2×CX₀-is-abelian (⊙cw-take (lteSR lteS) ⊙skel) 0)) (coboundary-first-template-descend-from-two ⊙skel) zeroth-cohomology-group-descend {n = S n} ⊙skel = ap (λ δ → Ker/Im δ (TAA.cw-coε (⊙cw-take (inr (O<S (2 + n))) ⊙skel)) (TAA.C2×CX₀-is-abelian (⊙cw-take (inr (O<S (2 + n))) ⊙skel) 0)) (coboundary-first-template-descend-from-far ⊙skel (O<S (1 + n)) (<-+-l 1 (O<S n))) zeroth-cohomology-group-β : ∀ (⊙skel : ⊙Skeleton {i} 1) → cohomology-group (cochain-complex ⊙skel) 0 == Ker/Im (TC.cw-co∂-head ⊙skel) (TAA.cw-coε (⊙cw-init ⊙skel)) (TAA.C2×CX₀-is-abelian (⊙cw-init ⊙skel) 0) zeroth-cohomology-group-β ⊙skel = ap (λ δ → Ker/Im δ (TAA.cw-coε (⊙cw-init ⊙skel)) (TAA.C2×CX₀-is-abelian (⊙cw-init ⊙skel) 0)) (coboundary-first-template-β ⊙skel) abstract zeroth-cohomology-group : ∀ {n} (⊙skel : ⊙Skeleton {i} n) → ⊙has-cells-with-choice 0 ⊙skel i → C 0 ⊙⟦ ⊙skel ⟧ ≃ᴳ cohomology-group (cochain-complex ⊙skel) 0 zeroth-cohomology-group {n = 0} ⊙skel ac = ZCGD.C-cw-iso-ker/im ⊙skel ac zeroth-cohomology-group {n = 1} ⊙skel ac = coe!ᴳ-iso (zeroth-cohomology-group-β ⊙skel) ∘eᴳ ZCG.C-cw-iso-ker/im ⊙skel ac zeroth-cohomology-group {n = S (S n)} ⊙skel ac = coe!ᴳ-iso (zeroth-cohomology-group-descend ⊙skel) ∘eᴳ zeroth-cohomology-group (⊙cw-init ⊙skel) (⊙init-has-cells-with-choice ⊙skel ac) ∘eᴳ C-cw-descend-at-lower ⊙skel (O<S n) ac