{-# OPTIONS --without-K #-} module segal.composition.l2 where open import sum open import equality open import level open import function.isomorphism open import hott.level open import segal.composition.l1 open import segal.preliminaries IsWild₂ : ∀ {i} (𝓒 : Wild₁ i) → Set i IsWild₂ 𝓒 = (x0 x1 x2 : obj 𝓒) → hom 𝓒 x1 x2 → hom 𝓒 x0 x1 → hom 𝓒 x0 x2 module _ {i} (X : Segal₁ i) where open Segal₁ X Horn-2-1 = Σ X₀ λ x0 → Σ X₀ λ x1 → Σ X₀ λ x2 → (X₁ x0 x1) × (X₁ x1 x2) Spine-2 = Horn-2-1 Boundary-2 = Σ X₀ λ x0 → Σ X₀ λ x1 → Σ X₀ λ x2 → (X₁ x0 x1) × (X₁ x0 x2) × (X₁ x1 x2) Filler₂ = (x0 x1 x2 : X₀) → X₁ x0 x1 → X₁ x0 x2 → X₁ x1 x2 → Set i SegalCondition₂ : Filler₂ → Set i SegalCondition₂ X₂ = (h : Horn-2-1) → let (x0 , x1 , x2 , x01 , x12) = h in contr (Σ (X₁ x0 x2) λ x02 → X₂ _ _ _ x01 x02 x12) IsSegal₂ : Set _ IsSegal₂ = Σ Filler₂ SegalCondition₂ module _ {i} (W : Wild₁ i) where private X = invert≅ segal-wild₁ W open Segal₁ X is-segal-is-wild₂ : IsSegal₂ X ≅ IsWild₂ W is-segal-is-wild₂ = begin IsSegal₂ X ≅⟨ record { to = λ {(X₂ , hf₂) → λ x0 x1 x2 x01 x12 → (λ x02 → X₂ x0 x1 x2 x01 x02 x12) , (hf₂ (x0 , x1 , x2 , x01 , x12)) } ; from = λ t → (λ x0 x1 x2 x01 x02 x12 → proj₁ (t x0 x1 x2 x01 x12) x02) , (λ { (x0 , x1 , x2 , x01 , x12) → proj₂ (t x0 x1 x2 x01 x12) }) ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ ( (x0 x1 x2 : X₀)(x01 : X₁ x0 x1)(x12 : X₁ x1 x2) → ( Σ (X₁ x0 x2 → Set i) λ Fill → contr (Σ (X₁ x0 x2) Fill) ) ) ≅⟨ ( Π-ap-iso refl≅ λ x0 → Π-ap-iso refl≅ λ x1 → Π-ap-iso refl≅ λ x2 → Π-ap-iso refl≅ λ x01 → Π-ap-iso refl≅ λ x12 → contr-predicate) ⟩ ( (x0 x1 x2 : X₀) → X₁ x0 x1 → X₁ x1 x2 → X₁ x0 x2 ) ≅⟨ ( Π-ap-iso refl≅ λ x0 → Π-ap-iso refl≅ λ x1 → Π-ap-iso refl≅ λ x2 → Π-comm-iso ) ⟩ IsWild₂ W ∎ where open ≅-Reasoning Wild₂ : (i : Level) → Set (lsuc i) Wild₂ i = Σ (Wild₁ i) IsWild₂ module WildOps₂ {i} (W : Wild₂ i) where open Σ W renaming (proj₁ to 𝓒; proj₂ to assoc₀) public _∘_ : {a b c : obj 𝓒} → hom 𝓒 b c → hom 𝓒 a b → hom 𝓒 a c g ∘ f = assoc₀ _ _ _ g f Segal₂ : (i : Level) → Set (lsuc i) Segal₂ i = Σ (Segal₁ i) IsSegal₂ module SegalOps₂ {i} (X : Segal₂ i) where open Σ X renaming (proj₁ to X|1; proj₂ to sX₂) public open Segal₁ X|1 public open Σ sX₂ renaming (proj₁ to X₂; proj₂ to hf₂) public X₂' : {x0 x1 x2 : X₀} → X₁ x0 x1 → X₁ x0 x2 → X₁ x1 x2 → Set i X₂' x01 x02 x12 = X₂ _ _ _ x01 x02 x12 segal-wild₂ : ∀ {i} → Segal₂ i ≅ Wild₂ i segal-wild₂ = Σ-ap-iso' segal-wild₁ is-segal-is-wild₂ module _ {i} (X : Segal₂ i) where open SegalOps₂ X Δ² : Set i Δ² = Σ X₀ λ x0 → Σ X₀ λ x1 → Σ X₀ λ x2 → Σ (X₁ x0 x1) λ x01 → Σ (X₁ x0 x2) λ x02 → Σ (X₁ x1 x2) λ x12 → X₂' x01 x02 x12 spine-Δ² : Spine-2 X|1 ≅ Δ² spine-Δ² = begin Spine-2 X|1 ≅⟨ add-contr hf₂ ⟩ ( Σ (Spine-2 X|1) λ { (x0 , x1 , x2 , x01 , x12) → ( Σ (X₁ x0 x2) λ x02 → X₂' x01 x02 x12 ) } ) ≅⟨ record { to = λ {((x0 , x1 , x2 , x01 , x12) , x02 , x012) → (x0 , x1 , x2 , x01 , x02 , x12 , x012) } ; from = λ { (x0 , x1 , x2 , x01 , x02 , x12 , x012) → ((x0 , x1 , x2 , x01 , x12) , x02 , x012) } ; iso₁ = λ _ → refl ; iso₂ = λ _ → refl } ⟩ Δ² ∎ where open ≅-Reasoning