{-# OPTIONS --without-K --rewriting #-} open import HoTT open import homotopy.PtdAdjoint open import homotopy.SuspAdjointLoop open import cohomology.WithCoefficients module cohomology.SuspAdjointLoopIso where module SuspAdjointLoopIso {i} where private hadj : HomAdjoint {i} {i} Σ⊣Ω.SuspFunctor Σ⊣Ω.LoopFunctor hadj = counit-unit-to-hom Σ⊣Ω.adj module A = HomAdjoint hadj module _ (X Y : Ptd i) where abstract pres-comp : (h₁ h₂ : ⊙Susp X ⊙→ ⊙Ω Y) → –> (A.eq X (⊙Ω Y)) (⊙Ω-∙ ⊙∘ ⊙fanout h₁ h₂) == ⊙Ω-∙ ⊙∘ ⊙fanout (–> (A.eq X (⊙Ω Y)) h₁) (–> (A.eq X (⊙Ω Y)) h₂) pres-comp h₁ h₂ = B.nat-cod h₁ h₂ ⊙Ω-∙ ∙ ap (_⊙∘ ⊙fanout (–> (A.eq X (⊙Ω Y)) h₁) (–> (A.eq X (⊙Ω Y)) h₂)) arr2-lemma where module A× = RightAdjoint× hadj module B = RightAdjointBinary hadj ap2-lemma : ∀ {i j k} {A : Type i} {B : Type j} {C : Type k} (f : A × B → C) {r s : A × B} (p : r == s) → ap f p == ap2 (curry f) (ap fst p) (ap snd p) ap2-lemma f idp = idp ⊙ap2-lemma : ∀ {i j k} {X : Ptd i} {Y : Ptd j} {Z : Ptd k} (f : X ⊙× Y ⊙→ Z) → ⊙Ω-fmap f == ⊙Ω-fmap2 f ⊙∘ ⊙fanout (⊙Ω-fmap ⊙fst) (⊙Ω-fmap ⊙snd) ⊙ap2-lemma (f , idp) = ⊙λ= (ap2-lemma f) idp arr2-lemma : B.arr2 ⊙Ω-∙ == ⊙Ω-∙ arr2-lemma = ⊙Ω-fmap ⊙Ω-∙ ⊙∘ A×.⊙out _ _ =⟨ ⊙ap2-lemma ⊙Ω-∙ |in-ctx _⊙∘ A×.⊙out _ _ ⟩ (⊙Ω-fmap2 ⊙Ω-∙ ⊙∘ A×.⊙into _ _) ⊙∘ A×.⊙out _ _ =⟨ ⊙∘-assoc (⊙Ω-fmap2 ⊙Ω-∙) (A×.⊙into _ _) (A×.⊙out _ _) ⟩ ⊙Ω-fmap2 ⊙Ω-∙ ⊙∘ (A×.⊙into _ _ ⊙∘ A×.⊙out _ _) =⟨ A×.⊙into-out _ _ |in-ctx ⊙Ω-fmap2 ⊙Ω-∙ ⊙∘_ ⟩ ⊙Ω-fmap2 ⊙Ω-∙ =⟨ ⊙Ω-fmap2-∙ ⟩ ⊙Ω-∙ ∎ iso : Trunc-⊙→Ω-group (⊙Susp X) Y ≃ᴳ Trunc-⊙→Ω-group X (⊙Ω Y) iso = Trunc-group-emap (≃-to-≃ᴳˢ (A.eq X (⊙Ω Y)) pres-comp) abstract nat-dom : {X Y : Ptd i} (f : X ⊙→ Y) (Z : Ptd i) → fst (iso X Z) ∘ᴳ Trunc-⊙→Ω-group-fmap-dom (⊙Susp-fmap f) Z == Trunc-⊙→Ω-group-fmap-dom f (⊙Ω Z) ∘ᴳ fst (iso Y Z) nat-dom f Z = group-hom= $ λ= $ Trunc-elim (λ _ → =-preserves-level Trunc-level) (λ g → ap [_] (! (A.nat-dom f (⊙Ω Z) g)))