{-# OPTIONS
--without-K
--prop
--rewriting
--confluence-check
--postfix-projections
--hidden-argument-puns
#-}
module TT.SSC-CwF where
open import TT.Lib
open import TT.CwF.Syntax
import TT.SSC.Syntax as S
open import TT.SSC.Ind
open import TT.SSC.Path as S hiding (⌜_⌝; _∘_; id)
open import TT.SSC.Lift
open import TT.SSC.Parallel as S hiding (ε; _,_; ap-,)
module S→C where
open DM
open DModel
M : DModel
M .sorts .Conᴹ _ = Con
M .sorts .Subᴹ Δ Γ _ = Sub Δ Γ
M .sorts .Tyᴹ A i _ = Ty A i
M .sorts .Tmᴹ Γ A _ = Tm Γ A
M .core ._[_]ᵀᴹ = _[_]ᵀ
M .core ._[_]ᵗᴹ = _[_]ᵗ
M .core .◇ᴹ = ◇
M .core ._▹ᴹ_ = _▹_
M .core .pᴹ = p
M .core .qᴹ = q
M .core ⁺ᴹ = _⁺
M .core .p-⁺ᵀᴹ = dep (sym []ᵀ-∘ ∙ ap-[]ᵀᵣ ▹-β₁ ∙ []ᵀ-∘ )
M .core .p-⁺ᵗᴹ = symᵈ []ᵗ-∘ ∙ᵈ apᵈ-[]ᵗᵣ ▹-β₁ ∙ᵈ []ᵗ-∘
M .core .q-⁺ᴹ = merger ▹-β₂
M .core .⟨_⟩ᴹ = ⟨_⟩
M .core .p-⟨⟩ᵀᴹ = dep (sym []ᵀ-∘ ∙ ap-[]ᵀᵣ ▹-β₁ ∙ []ᵀ-id)
M .core .p-⟨⟩ᵗᴹ = symᵈ []ᵗ-∘ ∙ᵈ apᵈ-[]ᵗᵣ ▹-β₁ ∙ᵈ []ᵗ-id
M .core .q-⟨⟩ᴹ = merger ▹-β₂
M .core .⟨⟩-[]ᵀᴹ = dep (sym []ᵀ-∘ ∙ ap-[]ᵀᵣ ⟨⟩-∘ ∙ []ᵀ-∘)
M .core .▹-ηᵀᴹ = dep (sym []ᵀ-id ∙ ap-[]ᵀᵣ ▹-η′ ∙ []ᵀ-∘)
M .types .Uᴹ = U
M .types .U-[]ᴹ = dep U-[]
M .types .Elᴹ = El
M .types .El-[]ᴹ = dep El-[]
M .types .cᴹ = c
M .types .c-[]ᴹ = c-[]
M .types .U-βᴹ = dep U-β
M .types .U-ηᴹ = dep U-η
M .types .Liftᴹ = Lift
M .types .Lift-[]ᴹ = dep Lift-[]
M .types .lowerᴹ = lower
M .types .lower-[]ᴹ = dep lower-[]
M .types .liftᴹ = lift
M .types .lift-[]ᴹ = lift-[]
M .types .Lift-βᴹ = dep Lift-β
M .types .Lift-ηᴹ = dep Lift-η
M .types .Πᴹ = Π
M .types .Π-[]ᴹ = dep Π-[]
M .types .appᴹ = app
M .types .app-[]ᴹ = app-[]
M .types .lamᴹ = lam
M .types .lam-[]ᴹ = lam-[]
M .types .Π-βᴹ = dep Π-β
M .types .Π-ηᴹ = Π-η
open Ind M public
open S→C public using ()
renaming (⟦_⟧ᶜ to S→Cᶜ; ⟦_⟧ˢ to S→Cˢ; ⟦_⟧ᵀ to S→Cᵀ; ⟦_⟧ᵗ to S→Cᵗ)
private variable
i : ℕ
Γ Γ₀ Γ₁ Δ Δ₀ Δ₁ Θ : S.Con
A A₀ A₁ : S.Ty Γ i
a₀ a₁ : S.Tm Γ A
γᵗ γᵗ₀ γᵗ₁ δᵗ : Tms Δ Γ
opaque
unfolding coe
ap-S→Cᵀ : A₀ ≡ A₁ → S→Cᵀ A₀ ≡ S→Cᵀ A₁
ap-S→Cᵀ refl = refl
ap-S→Cᵗ :
(A₀₁ : A₀ ≡ A₁) → a₀ ≡[ S.ap-Tm A₀₁ ] a₁ →
S→Cᵗ a₀ ≡[ ap-Tm (ap-S→Cᵀ A₀₁) ] S→Cᵗ a₁
ap-S→Cᵗ refl refl = refl
S*→C : Sub* Δ Γ → Sub (S→Cᶜ Δ) (S→Cᶜ Γ)
S*→C S.⌜ γ ⌝ = S→Cˢ γ
S*→C (γ* S.∘ δ*) = S*→C γ* ∘ S*→C δ*
S*→C S.id = id
S→C-[]ᵀ* : (γ* : Sub* Δ Γ) → S→Cᵀ (A [ γ* ]ᵀ*) ≡ S→Cᵀ A [ S*→C γ* ]ᵀ
S→C-[]ᵀ* S.⌜ γ ⌝ = refl
S→C-[]ᵀ* (γ* S.∘ δ*) = S→C-[]ᵀ* δ* ∙ ap-[]ᵀ (S→C-[]ᵀ* γ*) ∙ sym []ᵀ-∘
S→C-[]ᵀ* S.id = sym []ᵀ-id
S→C-[]ᵗ* :
{A : S.Ty Γ i} {a : S.Tm Γ A} (γ* : Sub* Δ Γ) →
S→Cᵗ (a [ γ* ]ᵗ*) ≡[ ap-Tm (S→C-[]ᵀ* γ*) ] S→Cᵗ a [ S*→C γ* ]ᵗ
S→C-[]ᵗ* S.⌜ γ ⌝ = reflᵈ
S→C-[]ᵗ* (γ* S.∘ δ*) =
S→C-[]ᵗ* δ* ∙ᵈ apᵈ-[]ᵗ (S→C-[]ᵀ* γ*) (S→C-[]ᵗ* γ*) ∙ᵈ symᵈ []ᵗ-∘
S→C-[]ᵗ* S.id = symᵈ []ᵗ-id
S*→C-ε : (Γ : S.Con) → S*→C (ε* {Γ = Γ}) ≡ ε
S*→C-ε S.◇ = ◇-η
S*→C-ε (Γ S.▹ A) = ap-∘ₗ (S*→C-ε Γ) ∙ ε-∘
S*→C-⁺ :
{A : S.Ty Γ i} (γ* : Sub* Δ Γ) →
S*→C (_⁺* {A = A} γ*) ≡[ ap-Subₗ (ap-▹ᵣ (S→C-[]ᵀ* γ*)) ] S*→C γ* ⁺
S*→C-⁺ S.⌜ γ ⌝ = reflᵈ
S*→C-⁺ (γ* S.∘ δ*) =
apᵈ-∘
(ap-▹ᵣ (S→C-[]ᵀ* γ*))
refl
(S*→C-⁺ γ*)
(ap-▹ᵣ (S→C-[]ᵀ* δ* ∙ ap-[]ᵀ (S→C-[]ᵀ* γ*) ∙ sym []ᵀ-∘ ∙ []ᵀ-∘))
(S*→C-⁺ δ* ∙ᵈ apᵈ-⁺ (S→C-[]ᵀ* γ*)) ∙ᵈ
symᵈ ⁺-∘
S*→C-⁺ S.id = symᵈ ⁺-id
T→C : Tms Δ Γ → Sub (S→Cᶜ Δ) (S→Cᶜ Γ)
T→C γᵗ = S*→C ⌞ γᵗ ⌟
S→C-[]ᵀᵗ : (γᵗ : Tms Δ Γ) → S→Cᵀ (A [ γᵗ ]ᵀᵗ) ≡ S→Cᵀ A [ T→C γᵗ ]ᵀ
S→C-[]ᵀᵗ γᵗ = S→C-[]ᵀ* ⌞ γᵗ ⌟
S→C-[]ᵗᵗ :
{A : S.Ty Γ i} {a : S.Tm Γ A} (γᵗ : Tms Δ Γ) →
S→Cᵗ (a [ γᵗ ]ᵗᵗ) ≡[ ap-Tm (S→C-[]ᵀᵗ γᵗ) ] S→Cᵗ a [ T→C γᵗ ]ᵗ
S→C-[]ᵗᵗ γᵗ = S→C-[]ᵗ* ⌞ γᵗ ⌟
T→C-ε : (Γ : S.Con) → T→C (S.ε {Γ}) ≡ ε
T→C-ε Γ = S*→C-ε Γ
T→C-, :
(γᵗ : Tms Δ Γ) {A : S.Ty Γ i} (a : S.Tm Δ (A S.[ γᵗ ]ᵀᵗ)) →
T→C (γᵗ S., a) ≡ (T→C γᵗ , coe (ap-Tm (S→C-[]ᵀᵗ γᵗ)) (S→Cᵗ a))
T→C-, γᵗ a =
ap-∘₃ (ap-▹ᵣ (S→C-[]ᵀᵗ γᵗ)) (S*→C-⁺ ⌞ γᵗ ⌟) (apᵈ-⟨⟩ (S→C-[]ᵀᵗ γᵗ) refl) ∙ ⁺-⟨⟩
T→C-∘ : (γᵗ : Tms Δ Γ) {δᵗ : Tms Θ Δ} → T→C (γᵗ ∘ᵗ δᵗ) ≡ T→C γᵗ ∘ T→C δᵗ
T→C-∘ {Δ} {Θ} S.ε = T→C-ε Θ ∙ sym ε-∘ ∙ ap-∘ₗ (sym (T→C-ε Δ))
T→C-∘ (γᵗ S., a) {δᵗ} =
T→C-, (γᵗ ∘ᵗ δᵗ) (coe (S.ap-Tm (sym ([]ᵀ-∘ᵗ γᵗ δᵗ))) (a [ δᵗ ]ᵗᵗ)) ∙
ap-,
(T→C-∘ γᵗ)
(splitlr (splitl (S→C-[]ᵗᵗ δᵗ ∙ᵈ apᵈ-[]ᵗ (S→C-[]ᵀᵗ γᵗ) refl))) ∙
sym ,-∘ ∙
ap-∘ₗ (sym (T→C-, γᵗ a))
T→C-∘p : (γᵗ : Tms Δ Γ) → T→C (_∘pᵗ {A = A} γᵗ) ≡ T→C γᵗ ∘ p
T→C-∘p S.ε = refl
T→C-∘p (γᵗ S., a) =
T→C-, (γᵗ ∘pᵗ) (coe (S.ap-Tm (sym ([]ᵀ-∘pᵗ γᵗ))) (a S.[ S.p ]ᵗ)) ∙
ap-, (T→C-∘p γᵗ) (splitlr (splitl (apᵈ-[]ᵗ (S→C-[]ᵀᵗ γᵗ) refl))) ∙
sym ,-∘ ∙
ap-∘ₗ (sym (T→C-, γᵗ a))
T→C-id : (Γ : S.Con) → T→C (idᵗ {Γ = Γ}) ≡ id
T→C-id S.◇ = refl
T→C-id (Γ S.▹ A) =
T→C-, pᵗ {A = A} (coe (S.ap-Tm (sym []ᵀ-pᵗ)) S.q) ∙
ap-,
(T→C-∘p (idᵗ {Γ = Γ}) ∙ ap-∘ₗ (T→C-id Γ) ∙ idl)
(splitl (splitl reflᵈ)) ∙
sym ▹-η
T→C-p : (A : S.Ty Γ i) → T→C (pᵗ {A = A}) ≡ p
T→C-p {Γ} A = T→C-∘p (idᵗ {Γ = Γ}) ∙ ap-∘ₗ (T→C-id Γ) ∙ idl
opaque
unfolding coe
ap-S→Cᶜ : Γ₀ ≡ Γ₁ → S→Cᶜ Γ₀ ≡ S→Cᶜ Γ₁
ap-S→Cᶜ refl = refl
apᵈ-T→C :
(Δ₀₁ : Δ₀ ≡ Δ₁) (Γ₀₁ : Γ₀ ≡ Γ₁) → γᵗ₀ ≡[ ap-Tms Δ₀₁ Γ₀₁ ] γᵗ₁ →
T→C γᵗ₀ ≡[ ap-Sub (ap-S→Cᶜ Δ₀₁) (ap-S→Cᶜ Γ₀₁) ] T→C γᵗ₁
apᵈ-T→C refl refl refl = refl