{-# OPTIONS --without-K --prop --rewriting --confluence-check --postfix-projections #-} module TT.SSC-CwF-SSC where open import TT.Lib open import TT.SSC.Syntax open import TT.SSC.Ind open import TT.SSC.Path open import TT.SSC.Tel open import TT.SSC.Lift open import TT.SSC.Parallel import TT.CwF.Syntax as C open import TT.SSC-CwF open import TT.CwF-SSC module S→C→S where open DM hiding (Subᴹ) open DModel hiding (Subᴹ) private variable i : ℕ Γ Δ : Con A : Ty Γ i a : Tm Γ A record Subᴹ (Δᴹ : C→Sᶜ (S→Cᶜ Δ) ≡ Δ) (Γᴹ : C→Sᶜ (S→Cᶜ Γ) ≡ Γ) (γ : Sub Δ Γ) : Set where eta-equality field ty : A [ coe (ap-Tms refl Γᴹ) (C→T (S→Cˢ γ)) ]ᵀᵗ ≡[ ap-Ty Δᴹ ] A [ γ ]ᵀ tm : a [ coe (ap-Tms refl Γᴹ) (C→T (S→Cˢ γ)) ]ᵗᵗ ≡[ ap-Tm₂ Δᴹ ty ] a [ γ ]ᵗ open Subᴹ M : DModel M .sorts .Conᴹ Γ = Liftₚ (C→Sᶜ (S→Cᶜ Γ) ≡ Γ) M .sorts .DM.Subᴹ (liftₚ Δᴹ) (liftₚ Γᴹ) γ = Subᴹ Δᴹ Γᴹ γ M .sorts .Tyᴹ (liftₚ Γᴹ) i A = Liftₚ (C→Sᵀ (S→Cᵀ A) ≡[ ap-Ty Γᴹ ] A) M .sorts .Tmᴹ (liftₚ Γᴹ) (liftₚ Aᴹ) a = Liftₚ (C→Sᵗ (S→Cᵗ a) ≡[ ap-Tm₂ Γᴹ Aᴹ ] a) M .core ._[_]ᵀᴹ {Γᴹ = liftₚ Γᴹ} (liftₚ Aᴹ) γᴹ .lowerₚ = dep (ap-[]ᵀᵗ₃ Γᴹ Aᴹ refl) ∙ᵈ γᴹ .ty M .core ._[_]ᵗᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} (liftₚ aᴹ) γᴹ .lowerₚ = apᵈ-[]ᵗᵗ₄ Γᴹ Aᴹ aᴹ refl ∙ᵈ γᴹ .tm M .core .◇ᴹ .lowerₚ = refl M .core ._▹ᴹ_ (liftₚ Γᴹ) (liftₚ Aᴹ) .lowerₚ = ap-▹ Γᴹ Aᴹ M .core .pᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} .ty = apᵈ-[]ᵀᵗᵣ (ap-▹ Γᴹ Aᴹ) (splitl (apᵈ-pᵗ Γᴹ Aᴹ)) ∙ᵈ dep []ᵀ-pᵗ M .core .pᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} .tm = apᵈ-[]ᵗᵗᵣ (ap-▹ Γᴹ Aᴹ) (splitl (apᵈ-pᵗ Γᴹ Aᴹ)) ∙ᵈ []ᵗ-pᵗ M .core .qᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} .lowerₚ = splitl (apᵈ-q Γᴹ Aᴹ) M .core ._⁺ᴹ {Δᴹ = liftₚ Δᴹ} {Γᴹ = liftₚ Γᴹ} {γ = γ} {i} {A} {Aᴹ = liftₚ Aᴹ} γᴹ .ty = apᵈ-[]ᵀᵗᵣ (ap-▹ Δᴹ (apᵈ-[]ᵀᵗ Γᴹ Aᴹ Δᴹ refl)) (splitl (apᵈ-⁺ᵗ Δᴹ Γᴹ refl Aᴹ)) ∙ᵈ dep ([]ᵀ-⁺ᵗ (coe _ (C→T (S→Cˢ γ)))) ∙ᵈ []ᵛ→⁺^ᵀ ⌞ coe _ (C→T (S→Cˢ γ)) ⌟ ⌜ γ ⌝ (undep (apᵈ-[]ᵀᵗᵣ (sym Δᴹ) (splitl {A₀₁ = ap-Tms Δᴹ Γᴹ} refl) ∙ᵈ γᴹ .ty)) (λ _ → apᵈ-[]ᵗᵗᵣ (sym Δᴹ) (splitl {A₀₁ = ap-Tms Δᴹ Γᴹ} refl) ∙ᵈ γᴹ .tm) (◇ ▹ A) M .core ._⁺ᴹ {Δᴹ = liftₚ Δᴹ} {Γᴹ = liftₚ Γᴹ} {γ = γ} {i} {A} {Aᴹ = liftₚ Aᴹ} γᴹ .tm = apᵈ-[]ᵗᵗᵣ (ap-▹ Δᴹ (apᵈ-[]ᵀᵗ Γᴹ Aᴹ Δᴹ refl)) (splitl (apᵈ-⁺ᵗ Δᴹ Γᴹ refl Aᴹ)) ∙ᵈ []ᵗ-⁺ᵗ (coe _ (C→T (S→Cˢ γ))) ∙ᵈ []ᵛ→⁺^ᵗ ⌞ coe _ (C→T (S→Cˢ γ)) ⌟ ⌜ γ ⌝ (undep (apᵈ-[]ᵀᵗᵣ (sym Δᴹ) (splitl {A₀₁ = ap-Tms Δᴹ Γᴹ} refl) ∙ᵈ γᴹ .ty)) (λ _ → apᵈ-[]ᵗᵗᵣ (sym Δᴹ) (splitl {A₀₁ = ap-Tms Δᴹ Γᴹ} refl) ∙ᵈ γᴹ .tm) (◇ ▹ A) M .core .p-⁺ᵀᴹ = refl M .core .p-⁺ᵗᴹ = refl M .core .q-⁺ᴹ = refl M .core .⟨_⟩ᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} (liftₚ aᴹ) .ty = apᵈ-[]ᵀᵗᵣ Γᴹ (splitl (apᵈ-⟨⟩ᵗ Γᴹ Aᴹ aᴹ)) ∙ᵈ dep []ᵀ-⟨⟩ᵗ M .core .⟨_⟩ᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} (liftₚ aᴹ) .tm = apᵈ-[]ᵗᵗᵣ Γᴹ (splitl (apᵈ-⟨⟩ᵗ Γᴹ Aᴹ aᴹ)) ∙ᵈ []ᵗ-⟨⟩ᵗ M .core .p-⟨⟩ᵀᴹ = refl M .core .p-⟨⟩ᵗᴹ = refl M .core .q-⟨⟩ᴹ = refl M .core .⟨⟩-[]ᵀᴹ = refl M .core .▹-ηᵀᴹ = refl M .types .Uᴹ {Γᴹ = liftₚ Γᴹ} i .lowerₚ = apᵈ-U Γᴹ M .types .U-[]ᴹ = refl M .types .Elᴹ {Γᴹ = liftₚ Γᴹ} (liftₚ αᴹ) .lowerₚ = apᵈ-El Γᴹ αᴹ M .types .El-[]ᴹ = refl M .types .cᴹ {Γᴹ = liftₚ Γᴹ} (liftₚ Aᴹ) .lowerₚ = apᵈ-c Γᴹ Aᴹ M .types .c-[]ᴹ = refl M .types .U-βᴹ = refl M .types .U-ηᴹ = refl M .types .Liftᴹ {Γᴹ = liftₚ Γᴹ} (liftₚ Aᴹ) .lowerₚ = apᵈ-Lift Γᴹ Aᴹ M .types .Lift-[]ᴹ = refl M .types .lowerᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} (liftₚ aᴹ) .lowerₚ = apᵈ-lower Γᴹ Aᴹ aᴹ M .types .lower-[]ᴹ = refl M .types .liftᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} (liftₚ aᴹ) .lowerₚ = apᵈ-lift Γᴹ Aᴹ aᴹ M .types .lift-[]ᴹ = refl M .types .Lift-βᴹ = refl M .types .Lift-ηᴹ = refl M .types .Πᴹ {Γᴹ = liftₚ Γᴹ} (liftₚ Aᴹ) (liftₚ Bᴹ) .lowerₚ = apᵈ-Π Γᴹ Aᴹ Bᴹ M .types .Π-[]ᴹ = refl M .types .appᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} {Bᴹ = liftₚ Bᴹ} (liftₚ fᴹ) (liftₚ aᴹ) .lowerₚ = splitl (apᵈ-app Γᴹ Aᴹ Bᴹ fᴹ aᴹ) M .types .app-[]ᴹ = refl M .types .lamᴹ {Γᴹ = liftₚ Γᴹ} {Aᴹ = liftₚ Aᴹ} {Bᴹ = liftₚ Bᴹ} (liftₚ bᴹ) .lowerₚ = apᵈ-lam₄ Γᴹ Aᴹ Bᴹ bᴹ M .types .lam-[]ᴹ = refl M .types .Π-βᴹ = refl M .types .Π-ηᴹ = refl open Ind M public private variable i : ℕ Γ Δ : Con A : Ty Γ i a : Tm Γ A γᵗ : Tms Δ Γ S→C→Sᶜ : C→Sᶜ (S→Cᶜ Γ) ≡ Γ S→C→Sᶜ {Γ = Γ} = S→C→S.⟦ Γ ⟧ᶜ .lowerₚ S→C→Sᵀ : C→Sᵀ (S→Cᵀ A) ≡[ ap-Ty S→C→Sᶜ ] A S→C→Sᵀ {A = A} = S→C→S.⟦ A ⟧ᵀ .lowerₚ S→C→Sᵗ : C→Sᵗ (S→Cᵗ a) ≡[ ap-Tm₂ S→C→Sᶜ S→C→Sᵀ ] a S→C→Sᵗ {a = a} = S→C→S.⟦ a ⟧ᵗ .lowerₚ T→C→T : C→T (T→C γᵗ) ≡[ ap-Tms S→C→Sᶜ S→C→Sᶜ ] γᵗ T→C→T {Γ} {γᵗ = ε} = dep (ap-C→T (T→C-ε Γ)) ∙ᵈ apᵈ-ε S→C→Sᶜ T→C→T {γᵗ = γᵗ , a} = dep (ap-C→T (T→C-, γᵗ a)) ∙ᵈ apᵈ-, S→C→Sᶜ S→C→Sᶜ T→C→T S→C→Sᵀ (splitl S→C→Sᵗ)