{-# OPTIONS --without-K #-} module segal.identities.l3 where open import equality open import function.extensionality open import function.isomorphism open import sum open import segal.composition.l1 open import segal.composition.l2 open import segal.composition.l3 open import segal.identities.l1 open import segal.identities.l2 module _ {i} (W : Wild₃ i) where open WildOps₃ W record HasId₃' (Wid : HasId₂ W|2) : Set i where constructor mk-id₃' open HasId₂ Wid field id-coh : (x y z : obj 𝓒) → (f : hom 𝓒 x y) (g : hom 𝓒 y z) → assoc₁ f (id y) g · ap (λ u → u ∘ f) (id-ρ _ _ g) ≡ ap (λ u → g ∘ u) (id-λ _ _ f) record HasId₃ : Set i where constructor mk-id₃ field has-id₂ : HasId₂ W|2 has-id₃' : HasId₃' has-id₂ open HasId₃' has-id₃' public module _ {i} (X : Segal₃ i) where open SegalOps₃ X record HasDeg₃' (Xdeg : HasDeg₂ X|2) : Set i where constructor mk-deg₃' open HasDeg₂ Xdeg field s21 : (s : Δ² X|2) → let (x0 , x1 , x2 , x01 , x02 , x12 , x012) = s in X₃' (s11 (x0 , x1 , x01)) x012 x012 (s10 (x1 , x2 , x12)) record HasDeg₃ : Set i where constructor mk-deg₃ field has-deg₂ : HasDeg₂ X|2 has-deg₃' : HasDeg₃' has-deg₂ module _ {i} {W : Wild₃ i} where private X = invert≅ segal-wild₃ W open WildOps₃ W open SegalOps₃ X module _ {Wid : HasId₂ W|2} where private Xdeg = invert≅ deg-id₂ Wid open HasId₂ Wid open HasDeg₂ Xdeg deg-id₃' : HasDeg₃' X Xdeg ≅ HasId₃' W Wid deg-id₃' = begin HasDeg₃' X Xdeg ≅⟨ record { to = λ { (mk-deg₃' coh) → coh } ; from = mk-deg₃' ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ ( (x : Δ² X|2) → let (x0 , x1 , x2 , x01 , x02 , x12 , x012) = x in X₃' (s11 (x0 , x1 , x01)) x012 x012 (s10 (x1 , x2 , x12)) ) ≅⟨ (Π-ap-iso (sym≅ (spine-Δ² X|2)) λ _ → refl≅ ) ⟩ ( (s : Spine-2 X|1) → let (x0 , x1 , x2 , x01 , x12) = s in X₃' (s11 (x0 , x1 , x01)) refl refl (s10 (x1 , x2 , x12)) ) ≅⟨ record { to = λ coh → λ x y z f g → coh (x , y , z , f , g) ; from = λ coh → λ { (x , y , z , f , g) → coh x y z f g } ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ ( (x y z : obj 𝓒) → (f : hom 𝓒 x y)(g : hom 𝓒 y z) → ( sym (ap (λ u → g ∘ u) (id-λ _ _ f)) · assoc₁ f (id y) g · ap (λ u → u ∘ f) (id-ρ _ _ g) · refl ≡ refl ) ) ≅⟨ ( Π-ap-iso refl≅ λ x → Π-ap-iso refl≅ λ y → Π-ap-iso refl≅ λ z → Π-ap-iso refl≅ λ f → Π-ap-iso refl≅ λ g → lem₁ (assoc₁ f (id y) g) (ap (λ u → u ∘ f) (id-ρ _ _ g)) (ap (λ u → g ∘ u) (id-λ _ _ f)) refl ·≅ lem₂ _ _ ) ⟩ ( (x y z : obj 𝓒) → (f : hom 𝓒 x y)(g : hom 𝓒 y z) → ( assoc₁ f (id y) g · ap (λ u → u ∘ f) (id-ρ _ _ g) ≡ ap (λ u → g ∘ u) (id-λ _ _ f) ) ) ≅⟨ record { to = mk-id₃' ; from = λ { (mk-id₃' coh) → coh } ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ HasId₃' W Wid ∎ where open ≅-Reasoning lem₁ : ∀ {j}{A : Set j} → {a b c d : A} → (p : a ≡ b)(q : b ≡ c)(r : a ≡ d)(s : d ≡ c) → (sym r · p · q · refl ≡ s) ≅ (p · q ≡ r · s) lem₁ refl refl refl s = refl≅ lem₂ : ∀ {j}{A : Set j} → {a b : A} → (p q : a ≡ b) → (p ≡ q · refl) ≅ (p ≡ q) lem₂ p refl = refl≅ deg-id₃ : HasDeg₃ X ≅ HasId₃ W deg-id₃ = begin HasDeg₃ X ≅⟨ record { to = λ { (mk-deg₃ a b) → (a , b) } ; from = λ { (a , b) → mk-deg₃ a b } ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ ( Σ (HasDeg₂ X|2) (HasDeg₃' X) ) ≅⟨ (Σ-ap-iso' deg-id₂ (λ _ → deg-id₃')) ⟩ ( Σ (HasId₂ W|2) (HasId₃' W) ) ≅⟨ record { to = λ { (a , b) → mk-id₃ a b } ; from = λ { (mk-id₃ a b) → (a , b) } ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ HasId₃ W ∎ where open ≅-Reasoning