{-# OPTIONS
--without-K
--prop
--rewriting
--confluence-check
--hidden-argument-puns
#-}
module TT.SSC.Parallel where
open import TT.Lib
open import TT.SSC.Syntax
open import TT.SSC.Path
open import TT.SSC.Tel
open import TT.SSC.Lift
private variable
i : ℕ
Γ Γ₀ Γ₁ Δ Δ₀ Δ₁ Θ : Con
A A₀ A₁ B : Ty Γ i
a a₀ a₁ b f α : Tm Γ A
data Tms : Con → Con → Set
⌞_⌟ : Tms Δ Γ → Sub* Δ Γ
infixl 4 _,_
data Tms where
ε : Tms Γ ◇
_,_ : (γᵗ : Tms Δ Γ) → Tm Δ (A [ ⌞ γᵗ ⌟ ]ᵀ*) → Tms Δ (Γ ▹ A)
⌞ ε ⌟ = ε*
⌞ γᵗ , a ⌟ = ⌞ γᵗ ⌟ ,* a
infixl 9 _[_]ᵀᵗ
_[_]ᵀᵗ : Ty Γ i → Tms Δ Γ → Ty Δ i
A [ γᵗ ]ᵀᵗ = A [ ⌞ γᵗ ⌟ ]ᵀ*
infixl 9 _[_]ᵗᵗ
_[_]ᵗᵗ : Tm Γ A → (γᵗ : Tms Δ Γ) → Tm Δ (A [ γᵗ ]ᵀᵗ)
a [ γᵗ ]ᵗᵗ = a [ ⌞ γᵗ ⌟ ]ᵗ*
private variable
γᵗ γᵗ₀ γᵗ₁ δᵗ δᵗ₀ δᵗ₁ θᵗ : Tms Δ Γ
opaque
unfolding coe
ap-[]ᵀᵗᵣ : γᵗ₀ ≡ γᵗ₁ → A [ γᵗ₀ ]ᵀᵗ ≡ A [ γᵗ₁ ]ᵀᵗ
ap-[]ᵀᵗᵣ refl = refl
ap-, :
{A : Ty Γ i} {a₀ : Tm Δ (A [ γᵗ₀ ]ᵀᵗ)} {a₁ : Tm Δ (A [ γᵗ₁ ]ᵀᵗ)}
(γᵗ₀₁ : γᵗ₀ ≡ γᵗ₁) →
a₀ ≡[ ap-Tm (ap-[]ᵀᵗᵣ γᵗ₀₁) ] a₁ →
(γᵗ₀ , a₀) ≡ (γᵗ₁ , a₁)
ap-, refl refl = refl
infixl 9 _∘ᵗ_
_∘ᵗ_ : Tms Δ Γ → Tms Θ Δ → Tms Θ Γ
[]ᵀ-∘ᵗ : (γᵗ : Tms Δ Γ) (δᵗ : Tms Θ Δ) → A [ γᵗ ∘ᵗ δᵗ ]ᵀᵗ ≡ A [ γᵗ ]ᵀᵗ [ δᵗ ]ᵀᵗ
[]ᵗ-∘ᵗ :
(γᵗ : Tms Δ Γ) (δᵗ : Tms Θ Δ) →
a [ γᵗ ∘ᵗ δᵗ ]ᵗᵗ ≡[ ap-Tm ([]ᵀ-∘ᵗ γᵗ δᵗ) ] a [ γᵗ ]ᵗᵗ [ δᵗ ]ᵗᵗ
ε ∘ᵗ δ = ε
(γᵗ , a) ∘ᵗ δᵗ = γᵗ ∘ᵗ δᵗ , coe (ap-Tm (sym ([]ᵀ-∘ᵗ γᵗ δᵗ))) (a [ δᵗ ]ᵗᵗ)
[]ᵀ-∘ᵗ ε δᵗ = sym (ε-[]ᵀ* ⌞ δᵗ ⌟)
[]ᵀ-∘ᵗ (γᵗ , a) δᵗ =
ap-[]ᵀ₃
(ap-▹ᵣ ([]ᵀ-∘ᵗ γᵗ δᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘ᵗ δᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌞ δᵗ ⌟)
([]ᵀ-∘ᵗ γᵗ δᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ δᵗ)
(◇ ▹ _))
(apᵈ-⟨⟩ ([]ᵀ-∘ᵗ γᵗ δᵗ) (splitl reflᵈ)) ∙
sym (⟨⟩-[]ᵀ* ⌞ δᵗ ⌟)
[]ᵗ-∘ᵗ ε δᵗ = symᵈ (ε-[]ᵗ* ⌞ δᵗ ⌟)
[]ᵗ-∘ᵗ (γᵗ , a) δᵗ =
apᵈ-[]ᵗ₄
(ap-▹ᵣ ([]ᵀ-∘ᵗ γᵗ δᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘ᵗ δᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌞ δᵗ ⌟)
([]ᵀ-∘ᵗ γᵗ δᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ δᵗ)
(◇ ▹ _))
([]ᵛ→⁺^ᵗ
⌞ γᵗ ∘ᵗ δᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌞ δᵗ ⌟)
([]ᵀ-∘ᵗ γᵗ δᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ δᵗ)
(◇ ▹ _))
(apᵈ-⟨⟩ ([]ᵀ-∘ᵗ γᵗ δᵗ) (splitl reflᵈ)) ∙ᵈ
symᵈ (⟨⟩-[]ᵗ* ⌞ δᵗ ⌟)
assocᵗ : γᵗ ∘ᵗ (δᵗ ∘ᵗ θᵗ) ≡ (γᵗ ∘ᵗ δᵗ) ∘ᵗ θᵗ
assocᵗ {γᵗ = ε} = refl
assocᵗ {γᵗ = γᵗ , a} {δᵗ} {θᵗ} =
ap-,
assocᵗ
(splitlr ([]ᵗ-∘ᵗ δᵗ θᵗ ∙ᵈ apᵈ-[]ᵗ* (sym ([]ᵀ-∘ᵗ γᵗ δᵗ)) refl ⌞ θᵗ ⌟))
infixl 9 _∘pᵗ
_∘pᵗ : Tms Δ Γ → Tms (Δ ▹ A) Γ
[]ᵀ-∘pᵗ : (γᵗ : Tms Δ Γ) → B [ γᵗ ∘pᵗ ]ᵀᵗ ≡ B [ γᵗ ]ᵀᵗ [ p ]ᵀ ∈ Ty (Δ ▹ A) i
[]ᵗ-∘pᵗ :
(γᵗ : Tms Δ Γ) →
b [ γᵗ ∘pᵗ ]ᵗᵗ ≡[ ap-Tm ([]ᵀ-∘pᵗ γᵗ) ]
b [ γᵗ ]ᵗᵗ [ p ]ᵗ ∈ Tm (Δ ▹ A) (B [ γᵗ ]ᵀᵗ [ p ]ᵀ)
ε ∘pᵗ = ε
(γᵗ , b) ∘pᵗ = γᵗ ∘pᵗ , coe (ap-Tm (sym ([]ᵀ-∘pᵗ γᵗ))) (b [ p ]ᵗ)
[]ᵀ-∘pᵗ ε = sym ε*-[]ᵀ
[]ᵀ-∘pᵗ (γᵗ , a) =
ap-[]ᵀ₃
(ap-▹ᵣ ([]ᵀ-∘pᵗ γᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘pᵗ γᵗ)
(λ _ → []ᵗ-∘pᵗ γᵗ)
(◇ ▹ _))
(apᵈ-⟨⟩ ([]ᵀ-∘pᵗ γᵗ) (splitl reflᵈ)) ∙
sym ⟨⟩-[]ᵀ
[]ᵗ-∘pᵗ ε = symᵈ ε*-[]ᵗ
[]ᵗ-∘pᵗ (γᵗ , a) =
apᵈ-[]ᵗ₄
(ap-▹ᵣ ([]ᵀ-∘pᵗ γᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘pᵗ γᵗ)
(λ _ → []ᵗ-∘pᵗ γᵗ)
(◇ ▹ _))
([]ᵛ→⁺^ᵗ
⌞ γᵗ ∘pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘pᵗ γᵗ)
(λ _ → []ᵗ-∘pᵗ γᵗ)
(◇ ▹ _))
(apᵈ-⟨⟩ ([]ᵀ-∘pᵗ γᵗ) (splitl reflᵈ)) ∙ᵈ
symᵈ (⟨⟩-[]ᵗ-⁺^ ◇)
∘p-,ᵗ : γᵗ ∘pᵗ ∘ᵗ (δᵗ , a) ≡ γᵗ ∘ᵗ δᵗ
∘p-,ᵗ {γᵗ = ε} = refl
∘p-,ᵗ {γᵗ = γᵗ , b} {δᵗ} {a} =
ap-,
∘p-,ᵗ
(splitlr (apᵈ-[]ᵗ* ([]ᵀ-∘pᵗ γᵗ) (splitl reflᵈ) ⌞ δᵗ , a ⌟ ∙ᵈ ▹-β₁ᵗ* ⌞ δᵗ ⌟))
idᵗ : Tms Γ Γ
[]ᵀ-idᵗ : {A : Ty Γ i} → A [ idᵗ ]ᵀᵗ ≡ A
[]ᵗ-idᵗ : {a : Tm Γ A} → a [ idᵗ ]ᵗᵗ ≡[ ap-Tm []ᵀ-idᵗ ] a
idᵗ {Γ = ◇} = ε
idᵗ {Γ = Γ ▹ A} =
idᵗ ∘pᵗ , coe (ap-Tm (ap-[]ᵀ (sym []ᵀ-idᵗ) ∙ sym ([]ᵀ-∘pᵗ idᵗ))) q
[]ᵀ-idᵗ {Γ = ◇} = refl
[]ᵀ-idᵗ {Γ = Γ ▹ A} =
ap-[]ᵀ₃
(ap-▹ᵣ ([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ))
([]ᵛ→⁺^ᵀ
⌞ idᵗ ∘pᵗ ⌟
⌜ p ⌝
([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ)
(λ _ → []ᵗ-∘pᵗ idᵗ ∙ᵈ apᵈ-[]ᵗ []ᵀ-idᵗ []ᵗ-idᵗ)
(◇ ▹ A))
(apᵈ-⟨⟩ ([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ) (splitl reflᵈ)) ∙
sym ▹-ηᵀ
[]ᵗ-idᵗ {Γ = ◇} = reflᵈ
[]ᵗ-idᵗ {Γ = Γ ▹ A} =
apᵈ-[]ᵗ₄
(ap-▹ᵣ ([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ))
([]ᵛ→⁺^ᵀ
⌞ idᵗ ∘pᵗ ⌟
⌜ p ⌝
([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ)
(λ _ → []ᵗ-∘pᵗ idᵗ ∙ᵈ apᵈ-[]ᵗ []ᵀ-idᵗ []ᵗ-idᵗ)
(◇ ▹ A))
([]ᵛ→⁺^ᵗ
⌞ idᵗ ∘pᵗ ⌟
⌜ p ⌝
([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ)
(λ _ → []ᵗ-∘pᵗ idᵗ ∙ᵈ apᵈ-[]ᵗ []ᵀ-idᵗ []ᵗ-idᵗ)
(◇ ▹ A))
(apᵈ-⟨⟩ ([]ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ) (splitl reflᵈ)) ∙ᵈ
symᵈ (▹-ηᵗ-⁺^ ◇)
pᵗ : Tms (Γ ▹ A) Γ
pᵗ = idᵗ ∘pᵗ
[]ᵀ-pᵗ : B [ pᵗ ]ᵀᵗ ≡ B [ p ]ᵀ ∈ Ty (Γ ▹ A) i
[]ᵀ-pᵗ = []ᵀ-∘pᵗ idᵗ ∙ ap-[]ᵀ []ᵀ-idᵗ
[]ᵗ-pᵗ : b [ pᵗ ]ᵗᵗ ≡[ ap-Tm []ᵀ-pᵗ ] b [ p ]ᵗ ∈ Tm (Γ ▹ A) (B [ p ]ᵀ)
[]ᵗ-pᵗ = []ᵗ-∘pᵗ idᵗ ∙ᵈ apᵈ-[]ᵗ []ᵀ-idᵗ []ᵗ-idᵗ
idrᵗ : γᵗ ∘ᵗ idᵗ ≡ γᵗ
idrᵗ {γᵗ = ε} = refl
idrᵗ {γᵗ = γᵗ , a} = ap-, idrᵗ (splitl []ᵗ-idᵗ)
idlᵗ : idᵗ ∘ᵗ γᵗ ≡ γᵗ
idlᵗ {γᵗ = ε} = refl
idlᵗ {γᵗ = γᵗ , a} =
ap-,
(∘p-,ᵗ ∙ idlᵗ)
(splitl
( apᵈ-[]ᵗ* []ᵀ-pᵗ (splitl reflᵈ) ⌞ γᵗ , a ⌟ ∙ᵈ
▹-β₂* ⌞ γᵗ ⌟))
qᵗ : Tm (Γ ▹ A) (A [ pᵗ ]ᵀᵗ)
qᵗ = coe (ap-Tm (ap-[]ᵀ (sym []ᵀ-idᵗ) ∙ sym ([]ᵀ-∘pᵗ idᵗ))) q
,-∘ᵗ :
{γᵗ : Tms Δ Γ} {a : Tm Δ (A [ γᵗ ]ᵀᵗ)} →
(γᵗ , a) ∘ᵗ δᵗ ≡ (γᵗ ∘ᵗ δᵗ , coe (ap-Tm (sym ([]ᵀ-∘ᵗ γᵗ δᵗ))) (a [ δᵗ ]ᵗᵗ))
,-∘ᵗ = refl
▹-β₁ᵗ : (γᵗ : Tms Δ Γ) {a : Tm Δ (A [ γᵗ ]ᵀᵗ)} → pᵗ ∘ᵗ (γᵗ , a) ≡ γᵗ
▹-β₁ᵗ γᵗ = ∘p-,ᵗ ∙ idlᵗ
▹-β₂ᵗ :
(γᵗ : Tms Δ Γ) {A : Ty Γ i} {a : Tm Δ (A [ γᵗ ]ᵀᵗ)} →
qᵗ [ γᵗ , a ]ᵗᵗ
≡[ ap-Tm (sym ([]ᵀ-∘ᵗ pᵗ (γᵗ , a)) ∙ ap-[]ᵀᵗᵣ (▹-β₁ᵗ γᵗ)) ]
a
▹-β₂ᵗ γᵗ {a} = apᵈ-[]ᵗ* []ᵀ-pᵗ (splitl reflᵈ) ⌞ γᵗ , a ⌟ ∙ᵈ ▹-β₂* ⌞ γᵗ ⌟
▹-ηᵗ : idᵗ ≡ (pᵗ , qᵗ) ∈ Tms (Γ ▹ A) (Γ ▹ A)
▹-ηᵗ = refl
opaque
unfolding coe
ap-∘ᵗᵣ : (δᵗ₀₁ : δᵗ₀ ≡ δᵗ₁) → γᵗ ∘ᵗ δᵗ₀ ≡ γᵗ ∘ᵗ δᵗ₁
ap-∘ᵗᵣ refl = refl
ap-[]ᵀᵗ : A₀ ≡ A₁ → (γᵗ : Tms Δ Γ) → A₀ [ γᵗ ]ᵀᵗ ≡ A₁ [ γᵗ ]ᵀᵗ
ap-[]ᵀᵗ refl _ = refl
apᵈ-[]ᵗᵗ :
(A₀₁ : A₀ ≡ A₁) → a₀ ≡[ ap-Tm A₀₁ ] a₁ → (γᵗ : Tms Δ Γ) →
a₀ [ γᵗ ]ᵗᵗ ≡[ ap-Tm (ap-[]ᵀᵗ A₀₁ γᵗ) ] a₁ [ γᵗ ]ᵗᵗ
apᵈ-[]ᵗᵗ refl refl _ = refl
infixl 10 _⁺ᵗ
_⁺ᵗ : (γᵗ : Tms Δ Γ) → Tms (Δ ▹ A [ γᵗ ]ᵀᵗ) (Γ ▹ A)
γᵗ ⁺ᵗ = γᵗ ∘ᵗ pᵗ , coe (ap-Tm (sym ([]ᵀ-∘ᵗ γᵗ pᵗ))) qᵗ
[]ᵀ-⁺ᵗ :
(γᵗ : Tms Δ Γ) → B [ γᵗ ⁺ᵗ ]ᵀᵗ ≡ B [ ⌞ γᵗ ⌟ ⁺* ]ᵀ* ∈ Ty (Δ ▹ A [ γᵗ ]ᵀᵗ) i
[]ᵀ-⁺ᵗ {A} γᵗ =
ap-[]ᵀ₃
(ap-▹ᵣ ([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘ᵗ pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ pᵗ ∙ᵈ []ᵗ-pᵗ)
(◇ ▹ A))
(apᵈ-⟨⟩ ([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ) (splitl (splitl reflᵈ))) ∙
sym ▹-ηᵀ
[]ᵗ-⁺ᵗ :
(γᵗ : Tms Δ Γ) →
b [ γᵗ ⁺ᵗ ]ᵗᵗ ≡[ ap-Tm ([]ᵀ-⁺ᵗ γᵗ) ]
b [ ⌞ γᵗ ⌟ ⁺* ]ᵗ* ∈ Tm (Δ ▹ A [ γᵗ ]ᵀᵗ) (B [ ⌞ γᵗ ⌟ ⁺* ]ᵀ*)
[]ᵗ-⁺ᵗ {A} γᵗ =
apᵈ-[]ᵗ₄
(ap-▹ᵣ ([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ))
([]ᵛ→⁺^ᵀ
⌞ γᵗ ∘ᵗ pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ pᵗ ∙ᵈ []ᵗ-pᵗ)
(◇ ▹ A))
([]ᵛ→⁺^ᵗ
⌞ γᵗ ∘ᵗ pᵗ ⌟
(⌞ γᵗ ⌟ ∘ ⌜ p ⌝)
([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ)
(λ _ → []ᵗ-∘ᵗ γᵗ pᵗ ∙ᵈ []ᵗ-pᵗ)
(◇ ▹ A))
(apᵈ-⟨⟩ ([]ᵀ-∘ᵗ γᵗ pᵗ ∙ []ᵀ-pᵗ) (splitl (splitl reflᵈ))) ∙ᵈ
symᵈ (▹-ηᵗ-⁺^ ◇)
⟨_⟩ᵗ : Tm Γ A → Tms Γ (Γ ▹ A)
⟨ a ⟩ᵗ = idᵗ , coe (ap-Tm (sym []ᵀ-idᵗ)) a
[]ᵀ-⟨⟩ᵗ : {a : Tm Γ A} → B [ ⟨ a ⟩ᵗ ]ᵀᵗ ≡ B [ ⟨ a ⟩ ]ᵀ
[]ᵀ-⟨⟩ᵗ {A} =
ap-[]ᵀ₃
(ap-▹ᵣ []ᵀ-idᵗ)
([]ᵛ→⁺^ᵀ ⌞ idᵗ ⌟ id []ᵀ-idᵗ (λ _ → []ᵗ-idᵗ) (◇ ▹ A))
(apᵈ-⟨⟩ []ᵀ-idᵗ (splitl reflᵈ))
[]ᵗ-⟨⟩ᵗ : {a : Tm Γ A} → b [ ⟨ a ⟩ᵗ ]ᵗᵗ ≡[ ap-Tm []ᵀ-⟨⟩ᵗ ] b [ ⟨ a ⟩ ]ᵗ
[]ᵗ-⟨⟩ᵗ {A} =
apᵈ-[]ᵗ₄
(ap-▹ᵣ []ᵀ-idᵗ)
([]ᵛ→⁺^ᵀ ⌞ idᵗ ⌟ id []ᵀ-idᵗ (λ _ → []ᵗ-idᵗ) (◇ ▹ A))
([]ᵛ→⁺^ᵗ ⌞ idᵗ ⌟ id []ᵀ-idᵗ (λ _ → []ᵗ-idᵗ) (◇ ▹ A))
(apᵈ-⟨⟩ []ᵀ-idᵗ (splitl reflᵈ))
⟨⟩-∘ᵗ : (γᵗ : Tms Δ Γ) → ⟨ a ⟩ᵗ ∘ᵗ γᵗ ≡ γᵗ ⁺ᵗ ∘ᵗ ⟨ a [ γᵗ ]ᵗᵗ ⟩ᵗ
⟨⟩-∘ᵗ {a} γᵗ =
ap-,
(idlᵗ ∙ sym idrᵗ ∙ ap-∘ᵗᵣ (sym (▹-β₁ᵗ idᵗ)) ∙ assocᵗ)
( splitlr (apᵈ-[]ᵗᵗ []ᵀ-idᵗ (splitl reflᵈ) γᵗ ∙ᵈ
symᵈ (merger (▹-β₂ᵗ idᵗ)) ∙ᵈ
apᵈ-[]ᵗᵗ (sym ([]ᵀ-∘ᵗ γᵗ pᵗ)) refl ⟨ a [ γᵗ ]ᵗᵗ ⟩ᵗ))
▹-η′ᵗ : idᵗ ≡ pᵗ ⁺ᵗ ∘ᵗ ⟨ qᵗ ⟩ᵗ ∈ Tms (Γ ▹ A) (Γ ▹ A)
▹-η′ᵗ =
ap-,
(sym idrᵗ ∙ ap-∘ᵗᵣ (sym (▹-β₁ᵗ idᵗ)) ∙ assocᵗ)
(splitr
(symᵈ (merger (▹-β₂ᵗ idᵗ)) ∙ᵈ apᵈ-[]ᵗᵗ (sym ([]ᵀ-∘ᵗ pᵗ pᵗ)) refl ⟨ qᵗ ⟩ᵗ))
U-[]ᵗ : (γᵗ : Tms Δ Γ) → U i [ γᵗ ]ᵀᵗ ≡ U i
U-[]ᵗ γᵗ = U-[]* ⌞ γᵗ ⌟
El-[]ᵗ :
(γᵗ : Tms Δ Γ) → El α [ γᵗ ]ᵀᵗ ≡ El (coe (ap-Tm (U-[]ᵗ γᵗ)) (α [ γᵗ ]ᵗᵗ))
El-[]ᵗ γᵗ = El-[]* ⌞ γᵗ ⌟
c-[]ᵗ : (γᵗ : Tms Δ Γ) → c A [ γᵗ ]ᵗᵗ ≡[ ap-Tm (U-[]ᵗ γᵗ) ] c (A [ γᵗ ]ᵀᵗ)
c-[]ᵗ γᵗ = c-[]* ⌞ γᵗ ⌟
Lift-[]ᵗ : (γᵗ : Tms Δ Γ) → Lift A [ γᵗ ]ᵀᵗ ≡ Lift (A [ γᵗ ]ᵀᵗ)
Lift-[]ᵗ γᵗ = Lift-[]* ⌞ γᵗ ⌟
lower-[]ᵗ :
(γᵗ : Tms Δ Γ) →
lower a [ γᵗ ]ᵗᵗ ≡ lower (coe (ap-Tm (Lift-[]ᵗ γᵗ)) (a [ γᵗ ]ᵗᵗ))
lower-[]ᵗ γᵗ = lower-[]* ⌞ γᵗ ⌟
lift-[]ᵗ :
(γᵗ : Tms Δ Γ) → lift a [ γᵗ ]ᵗᵗ ≡[ ap-Tm (Lift-[]ᵗ γᵗ) ] lift (a [ γᵗ ]ᵗᵗ)
lift-[]ᵗ γᵗ = lift-[]* ⌞ γᵗ ⌟
Π-[]ᵗ : (γᵗ : Tms Δ Γ) → Π A B [ γᵗ ]ᵀᵗ ≡ Π (A [ γᵗ ]ᵀᵗ) (B [ γᵗ ⁺ᵗ ]ᵀᵗ)
Π-[]ᵗ γᵗ = Π-[]* ⌞ γᵗ ⌟ ∙ ap-Π (sym ([]ᵀ-⁺ᵗ γᵗ))
appᵗ : Tm Γ (Π A B) → (a : Tm Γ A) → Tm Γ (B [ ⟨ a ⟩ᵗ ]ᵀᵗ)
appᵗ f a = coe (ap-Tm (sym []ᵀ-⟨⟩ᵗ)) (app f a)
app-[]ᵗ :
{B : Ty (Γ ▹ A) i} {f : Tm Γ (Π A B)} (γᵗ : Tms Δ Γ) →
appᵗ f a [ γᵗ ]ᵗᵗ
≡[
ap-Tm
( sym ([]ᵀ-∘ᵗ ⟨ a ⟩ᵗ γᵗ) ∙
ap-[]ᵀᵗᵣ (⟨⟩-∘ᵗ γᵗ) ∙ []ᵀ-∘ᵗ (γᵗ ⁺ᵗ) ⟨ a [ γᵗ ]ᵗᵗ ⟩ᵗ) ]
appᵗ (coe (ap-Tm (Π-[]ᵗ γᵗ)) (f [ γᵗ ]ᵗᵗ)) (a [ γᵗ ]ᵗᵗ)
app-[]ᵗ γᵗ =
splitr
( apᵈ-[]ᵗᵗ []ᵀ-⟨⟩ᵗ (splitl reflᵈ) γᵗ ∙ᵈ
app-[]* ⌞ γᵗ ⌟ ∙ᵈ
apᵈ-app refl reflᵈ (dep (sym ([]ᵀ-⁺ᵗ γᵗ))) (splitlr reflᵈ) reflᵈ)
lam-[]ᵗ :
(γᵗ : Tms Δ Γ) → lam b [ γᵗ ]ᵗᵗ ≡[ ap-Tm (Π-[]ᵗ γᵗ) ] lam (b [ γᵗ ⁺ᵗ ]ᵗᵗ)
lam-[]ᵗ γᵗ = lam-[]* ⌞ γᵗ ⌟ ∙ᵈ apᵈ-lam (sym ([]ᵀ-⁺ᵗ γᵗ)) (symᵈ ([]ᵗ-⁺ᵗ γᵗ))
Π-βᵗ : appᵗ (lam b) a ≡ b [ ⟨ a ⟩ᵗ ]ᵗᵗ
Π-βᵗ = dep Π-β ∙ᵈ symᵈ []ᵗ-⟨⟩ᵗ
Π-ηᵗ :
{B : Ty (Γ ▹ A) i} {f : Tm Γ (Π A B)} →
f ≡[ ap-Tm (ap-Π (sym []ᵀ-idᵗ ∙ ap-[]ᵀᵗᵣ ▹-η′ᵗ ∙ []ᵀ-∘ᵗ (pᵗ ⁺ᵗ) ⟨ qᵗ ⟩ᵗ)) ]
lam (appᵗ (coe (ap-Tm (Π-[]ᵗ pᵗ)) (f [ pᵗ ]ᵗᵗ)) qᵗ)
Π-ηᵗ {A} =
Π-η ∙ᵈ
apᵈ-lam
(ap-[]ᵀ₃
(ap-▹ᵣ (sym []ᵀ-pᵗ))
( []ᵛ→⁺^ᵀ ⌜ p ⌝ ⌞ pᵗ ⌟ (sym []ᵀ-pᵗ) (λ _ → symᵈ []ᵗ-pᵗ) (◇ ▹ A) ∙ᵈ
dep (sym ([]ᵀ-⁺ᵗ pᵗ)))
(apᵈ-⟨⟩ (sym []ᵀ-pᵗ) refl) ∙ sym []ᵀ-⟨⟩ᵗ)
(splitr
(apᵈ-app
refl
(dep (sym []ᵀ-pᵗ))
( []ᵛ→⁺^ᵀ ⌜ p ⌝ ⌞ pᵗ ⌟ (sym []ᵀ-pᵗ) (λ _ → symᵈ []ᵗ-pᵗ) (◇ ▹ A) ∙ᵈ
dep (sym ([]ᵀ-⁺ᵗ pᵗ)))
(splitlr (symᵈ []ᵗ-pᵗ)) refl))
opaque
unfolding coe
ap-Tms : Δ₀ ≡ Δ₁ → Γ₀ ≡ Γ₁ → Tms Δ₀ Γ₀ ≡ Tms Δ₁ Γ₁
ap-Tms refl refl = refl
ap-[]ᵀᵗ₃ :
(Γ₀₁ : Γ₀ ≡ Γ₁) → A₀ ≡[ ap-Ty Γ₀₁ ] A₁ → γᵗ₀ ≡[ ap-Tms refl Γ₀₁ ] γᵗ₁ →
A₀ [ γᵗ₀ ]ᵀᵗ ≡ A₁ [ γᵗ₁ ]ᵀᵗ
ap-[]ᵀᵗ₃ refl refl refl = refl
apᵈ-[]ᵀᵗᵣ :
(Δ₀₁ : Δ₀ ≡ Δ₁) → γᵗ₀ ≡[ ap-Tms Δ₀₁ refl ] γᵗ₁ →
A [ γᵗ₀ ]ᵀᵗ ≡[ ap-Ty Δ₀₁ ] A [ γᵗ₁ ]ᵀᵗ
apᵈ-[]ᵀᵗᵣ refl refl = refl
apᵈ-[]ᵀᵗ :
(Γ₀₁ : Γ₀ ≡ Γ₁) → A₀ ≡[ ap-Ty Γ₀₁ ] A₁ →
(Δ₀₁ : Δ₀ ≡ Δ₁) → γᵗ₀ ≡[ ap-Tms Δ₀₁ Γ₀₁ ] γᵗ₁ →
A₀ [ γᵗ₀ ]ᵀᵗ ≡[ ap-Ty Δ₀₁ ] A₁ [ γᵗ₁ ]ᵀᵗ
apᵈ-[]ᵀᵗ refl refl refl refl = refl
apᵈ-[]ᵗᵗ₄ :
(Γ₀₁ : Γ₀ ≡ Γ₁) (A₀₁ : A₀ ≡[ ap-Ty Γ₀₁ ] A₁) → a₀ ≡[ ap-Tm₂ Γ₀₁ A₀₁ ] a₁ →
(γᵗ₀₁ : γᵗ₀ ≡[ ap-Tms refl Γ₀₁ ] γᵗ₁) →
a₀ [ γᵗ₀ ]ᵗᵗ ≡[ ap-Tm (ap-[]ᵀᵗ₃ Γ₀₁ A₀₁ γᵗ₀₁) ] a₁ [ γᵗ₁ ]ᵗᵗ
apᵈ-[]ᵗᵗ₄ refl refl refl refl = refl
apᵈ-[]ᵗᵗᵣ :
{A : Ty Γ i} {a : Tm Γ A} →
(Δ₀₁ : Δ₀ ≡ Δ₁) (γᵗ₀₁ : γᵗ₀ ≡[ ap-Tms Δ₀₁ refl ] γᵗ₁) →
a [ γᵗ₀ ]ᵗᵗ ≡[ ap-Tm₂ Δ₀₁ (apᵈ-[]ᵀᵗᵣ Δ₀₁ γᵗ₀₁) ] a [ γᵗ₁ ]ᵗᵗ
apᵈ-[]ᵗᵗᵣ refl refl = refl
apᵈ-ε : (Γ₀₁ : Γ₀ ≡ Γ₁) → ε ≡[ ap-Tms Γ₀₁ refl ] ε
apᵈ-ε refl = refl
apᵈ-, :
(Δ₀₁ : Δ₀ ≡ Δ₁) (Γ₀₁ : Γ₀ ≡ Γ₁) (γᵗ₀₁ : γᵗ₀ ≡[ ap-Tms Δ₀₁ Γ₀₁ ] γᵗ₁) →
(A₀₁ : A₀ ≡[ ap-Ty Γ₀₁ ] A₁) →
a₀ ≡[ ap-Tm₂ Δ₀₁ (apᵈ-[]ᵀᵗ Γ₀₁ A₀₁ Δ₀₁ γᵗ₀₁) ] a₁ →
(γᵗ₀ , a₀) ≡[ ap-Tms Δ₀₁ (ap-▹ Γ₀₁ A₀₁) ] (γᵗ₁ , a₁)
apᵈ-, refl refl refl refl refl = refl
apᵈ-pᵗ :
(Γ₀₁ : Γ₀ ≡ Γ₁) (A₀₁ : A₀ ≡[ ap-Ty Γ₀₁ ] A₁) →
pᵗ ≡[ ap-Tms (ap-▹ Γ₀₁ A₀₁) Γ₀₁ ] pᵗ
apᵈ-pᵗ refl refl = refl
apᵈ-⁺ᵗ :
(Δ₀₁ : Δ₀ ≡ Δ₁) (Γ₀₁ : Γ₀ ≡ Γ₁) →
(γᵗ₀₁ : γᵗ₀ ≡[ ap-Tms Δ₀₁ Γ₀₁ ] γᵗ₁) (A₀₁ : A₀ ≡[ ap-Ty Γ₀₁ ] A₁) →
γᵗ₀ ⁺ᵗ ≡[ ap-Tms (ap-▹ Δ₀₁ (apᵈ-[]ᵀᵗ Γ₀₁ A₀₁ Δ₀₁ γᵗ₀₁)) (ap-▹ Γ₀₁ A₀₁) ]
γᵗ₁ ⁺ᵗ
apᵈ-⁺ᵗ refl refl refl refl = refl
apᵈ-⟨⟩ᵗ :
(Γ₀₁ : Γ₀ ≡ Γ₁) (A₀₁ : A₀ ≡[ ap-Ty Γ₀₁ ] A₁) →
a₀ ≡[ ap-Tm₂ Γ₀₁ A₀₁ ] a₁ → ⟨ a₀ ⟩ᵗ ≡[ ap-Tms Γ₀₁ (ap-▹ Γ₀₁ A₀₁) ] ⟨ a₁ ⟩ᵗ
apᵈ-⟨⟩ᵗ refl refl refl = refl