{-# OPTIONS
--without-K
--prop
--rewriting
--confluence-check
#-}
module TT.SSC.Tel where
open import TT.Lib
open import TT.SSC.Syntax
open import TT.SSC.Path
private variable
i i₀ i₁ : ℕ
Γ Δ : Con
A A₀ A₁ : Ty Γ i
infixl 2 _++_
data Tel (Γ : Con) : Set
_++_ : (Γ : Con) → Tel Γ → Con
infixl 2 _▹_
data Tel Γ where
◇ : Tel Γ
_▹_ : (Ω : Tel Γ) → Ty (Γ ++ Ω) i → Tel Γ
Γ ++ ◇ = Γ
Γ ++ (Ω ▹ A) = (Γ ++ Ω) ▹ A
private variable
Ω Ω₀ Ω₁ : Tel Γ
infixl 9 _[_]ᵀˡ
infixl 10 _⁺^
_[_]ᵀˡ : Tel Γ → Sub Δ Γ → Tel Δ
_⁺^ : (γ : Sub Δ Γ) → Sub (Δ ++ Ω [ γ ]ᵀˡ) (Γ ++ Ω)
◇ [ γ ]ᵀˡ = ◇
(Ω ▹ A) [ γ ]ᵀˡ = Ω [ γ ]ᵀˡ ▹ A [ γ ⁺^ ]ᵀ
_⁺^ {Ω = ◇} γ = γ
_⁺^ {Ω = Ω ▹ A} γ = γ ⁺^ ⁺
infixl 9 _[_]ᵀˡ*
infixl 10 _⁺^*
_[_]ᵀˡ* : Tel Γ → Sub* Δ Γ → Tel Δ
_⁺^* : (γ* : Sub* Δ Γ) → Sub* (Δ ++ Ω [ γ* ]ᵀˡ*) (Γ ++ Ω)
◇ [ γ* ]ᵀˡ* = ◇
(Ω ▹ A) [ γ* ]ᵀˡ* = Ω [ γ* ]ᵀˡ* ▹ A [ γ* ⁺^* ]ᵀ*
_⁺^* {Ω = ◇} γ* = γ*
_⁺^* {Ω = Ω ▹ A} γ* = γ* ⁺^* ⁺*
opaque
unfolding coe
ap-++ : Ω₀ ≡ Ω₁ → (Γ ++ Ω₀) ≡ (Γ ++ Ω₁)
ap-++ refl = refl
ap-▹ᵀˡ :
(Ω₀₁ : Ω₀ ≡ Ω₁) → A₀ ≡[ ap-Ty (ap-++ Ω₀₁) ] A₁ → (Ω₀ ▹ A₀) ≡ (Ω₁ ▹ A₁)
ap-▹ᵀˡ refl refl = refl
▹ᵀˡ-inj-Ω : (Ω₀ ▹ A₀) ≡ (Ω₁ ▹ A₁) → Ω₀ ≡ Ω₁
▹ᵀˡ-inj-Ω refl = refl
▹ᵀˡ-inj-i :
{A₀ : Ty (Γ ++ Ω₀) i₀} {A₁ : Ty (Γ ++ Ω₁) i₁} →
(Ω₀ ▹ A₀) ≡ (Ω₁ ▹ A₁) → i₀ ≡ i₁
▹ᵀˡ-inj-i refl = refl
▹ᵀˡ-inj-A :
(e : (Ω₀ ▹ A₀) ≡ (Ω₁ ▹ A₁)) →
A₀ ≡[ ap-Ty₂ (ap-++ (▹ᵀˡ-inj-Ω e)) (▹ᵀˡ-inj-i e) ] A₁
▹ᵀˡ-inj-A refl = refl