{-# OPTIONS --without-K --safe #-}

open import Level
open import Axiom.Extensionality.Propositional

module NonCumulative.Unascribed.Properties.Equivalence.Soundness (fext : ∀ {ℓ₁ ℓ₂} → Extensionality ℓ₁ ℓ₂) where

open import Data.List using (drop)

open import Lib

open import NonCumulative.Ascribed.Statics.Presup as A
open import NonCumulative.Ascribed.Statics.CtxEquiv as A
open import NonCumulative.Ascribed.Statics.Refl as A
open import NonCumulative.Ascribed.Statics.Misc as A
open import NonCumulative.Ascribed.Statics.Inversion as A
open import NonCumulative.Ascribed.Statics.Properties.Contexts as A
open import NonCumulative.Ascribed.Statics.Properties as A
open import NonCumulative.Ascribed.Completeness.Consequences fext
open import NonCumulative.Ascribed.Consequences fext
open import NonCumulative.Ascribed.Statics.Full as A
open import NonCumulative.Ascribed.Statics.Simpl
open import NonCumulative.Unascribed.Statics.Full as U
open import NonCumulative.Unascribed.Statics.Transfer

U⇒A-vlookup : ∀ {x} →
 A.Γ [↝] U.Γ′ →
 x ∶ U.T′ ∈! U.Γ′ →
 ∃₂ λ i T → (T ↝ U.T′) × (x ∶[ i ] T ∈! A.Γ)
U⇒A-vlookup (↝∷ {Γ′} {Γ} {T′} {T} {i′} Γ↝Γ′ T↝T′) here = -, -, (↝sub T↝T′ ↝wk , here)
U⇒A-vlookup (↝∷ Γ↝Γ′ _) (there x∈Γ') with U⇒A-vlookup Γ↝Γ′ x∈Γ'
... | i , T , T↝T′ , x∈Γ = -, -, ↝sub T↝T′ ↝wk , there x∈Γ

unique-lvl : ∀ {i j} →
 A.Γ ⊢ A.t ∶[ i ] A.T →
 A.Γ ⊢ A.t ∶[ j ] A.T′ →
 i ≡ j
unique-lvl ⊢t ⊢t′ = proj₁ (unique-typ ⊢t ⊢t′)

infix 4 ⫢_ ⫢_≈_ _⫢_∶_ _⫢s_∶_ _⫢_≈_∶_ _⫢s_≈_∶_

-- (drop n) gives a stronger IH about the correspondece on all prefixes of the context
-- which is essential for s-wk and wk-≈ 
_[↝≈]_ : A.Ctx → U.Ctx → Set
Γ [↝≈] Γ′ = ∀ {Γᵢ} n → Γᵢ [↝] (drop n Γ′) → A.⊢ Γᵢ → A.⊢ (drop n Γ) ≈ Γᵢ

_⊨_↝≈_ : A.Ctx → A.Exp → U.Exp → Set
Γ ⊨ t ↝≈ t′  = ∀ {tᵢ iᵢ Tᵢ} → tᵢ ↝ t′ → Γ ⊢ tᵢ ∶[ iᵢ ] Tᵢ → Γ A.⊢ t ≈ tᵢ ∶[ iᵢ ] Tᵢ

_⊨s_↝≈_ : A.Ctx → A.Subst → U.Subst → Set
Γ ⊨s σ ↝≈ σ′ = ∀ {σᵢ Δᵢ} → σᵢ ↝s σ′ → Γ A.⊢s σᵢ ∶ Δᵢ → Γ A.⊢s σ ≈ σᵢ ∶ Δᵢ

⫢_ : U.Ctx → Set
⫢ Γ′ = 
  ∃ λ Γ → 
    Γ [↝] Γ′ × 
    A.⊢ Γ × 
    Γ [↝≈] Γ′

_⫢_∶_ : U.Ctx → U.Exp → U.Typ → Set
Γ′ ⫢ t′ ∶ T′ = 
  ∃₂ λ i Γ → 
    ∃₂ λ t T →
      (Γ [↝] Γ′) × 
      (t ↝ t′) ×
      (T ↝ T′) ×
      Γ A.⊢ t ∶[ i ] T ×
      Γ [↝≈] Γ′ ×
      Γ ⊨ t ↝≈ t′ 

_⫢s_∶_ : U.Ctx → U.Subst → U.Ctx → Set
Γ′ ⫢s σ′ ∶ Δ′ = 
  ∃₂ λ Γ Δ → 
    ∃ λ σ → 
      (Γ [↝] Γ′) × 
      (Δ [↝] Δ′) × 
      (σ ↝s σ′) × 
      Γ A.⊢s σ ∶ Δ ×
      Γ [↝≈] Γ′ ×
      Γ ⊨s σ ↝≈ σ′ × 
      Δ [↝≈] Δ′

⫢_≈_ : U.Ctx → U.Ctx → Set
⫢ Γ′ ≈ Δ′ = 
  ∃₂ λ Γ Δ → 
    (Γ [↝] Γ′) × 
    (Δ [↝] Δ′) × 
    A.⊢ Γ ≈ Δ × 
    Γ [↝≈] Γ′ × 
    Δ [↝≈] Δ′

_⫢_≈_∶_ : U.Ctx → U.Exp → U.Exp → U.Typ → Set
Γ′ ⫢ t′ ≈ s′ ∶ T′ = 
  ∃₂ λ i Γ → 
    ∃₂ λ t s → 
      ∃ λ T → 
        (Γ [↝] Γ′) × 
        (t ↝ t′) × 
        (s ↝ s′) × 
        (T ↝ T′) × 
        Γ A.⊢ t ≈ s ∶[ i ] T × 
        Γ [↝≈] Γ′ × 
        Γ ⊨ t ↝≈ t′ ×
        Γ ⊨ s ↝≈ s′

_⫢s_≈_∶_ : U.Ctx → U.Subst → U.Subst → U.Ctx → Set
Γ′ ⫢s σ′ ≈ τ′ ∶ Δ′ = 
  ∃₂ λ Γ Δ → 
    ∃₂ λ σ τ → 
      (Γ [↝] Γ′) × 
      (Δ [↝] Δ′) × 
      (σ ↝s σ′) × 
      (τ ↝s τ′) × 
      Γ A.⊢s σ ≈ τ ∶ Δ × 
      Γ [↝≈] Γ′ × 
      Γ ⊨s σ ↝≈ σ′ × 
      Γ ⊨s τ ↝≈ τ′ × 
      Δ [↝≈] Δ′

[↝≈][] : L.[] [↝≈] L.[]
[↝≈][] ℕ.zero ↝[] _ = []-≈
[↝≈][] (ℕ.suc x) ↝[] _ = []-≈

⫢⊢[] : ⫢ []
⫢⊢[] = -, ↝[] , ⊢[] , [↝≈][]

⫢[]-≈ : ⫢ [] ≈ []
⫢[]-≈ = -, -, ↝[] , ↝[] , []-≈ , [↝≈][] , [↝≈][]

IH-transform : ∀ {Γ t′ t t₁ i i₁ T T₁} →  
               Γ ⊨ t ↝≈ t′  →
               t₁ ↝ t′ →
               Γ ⊢ t₁ ∶[ i₁ ] T₁ → 
               Γ ⊢ t ∶[ i ] T →
               i ≡ i₁ × Γ ⊢ t₁ ≈ t ∶[ i ] T
IH-transform IH t₁↝ ⊢t₁ ⊢t 
  with t≈t₁ ← IH t₁↝ ⊢t₁ 
  with refl , T≈T₁ ← unique-typ ⊢t (proj₁ (proj₂ (presup-≈ t≈t₁)))
  = refl , ≈-conv (≈-sym t≈t₁) (≈-sym T≈T₁)

⫢⊢∷ : ∀ {i} →
      ⫢ U.Γ′ →
      U.Γ′ ⫢ U.T′ ∶ Se i →
      --------------------
      ⫢ U.T′ ∷ U.Γ′
⫢⊢∷  {Γ′} ⫢Γ′ ⫢T′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
     | i , Γ₁ , T , .(Se _) , Γ₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
  with refl ← ⊢T:Se-lvl ⊢T
  with Γ≈Γ₁  ← IHΓ 0 Γ₁↝ (proj₁ (presup-tm ⊢T)) 
  = -, ↝∷ Γ↝ T↝ , ⊢∷ ⊢Γ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢T) , helper

  where
    helper : _ [↝≈] _
    helper ℕ.zero (↝∷ Γᵢ↝ Tᵢ↝) (⊢∷ ⊢Γᵢ ⊢Tᵢ) 
      with Γᵢ≈Γ ← IHΓ 0 Γᵢ↝ ⊢Γᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-trans (⊢≈-sym Γᵢ≈Γ) Γ≈Γ₁) ⊢Tᵢ) ⊢T
      = ∷-cong-simp Γᵢ≈Γ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym T≈Tᵢ))
    helper (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΓ n Γᵢ↝ ⊢Γᵢ

⫢∷-cong : ∀ {i} →
          ⫢ U.Γ′ ≈ U.Δ′ →
          U.Γ′ ⫢ U.T′ ∶ Se i →
          U.Δ′ ⫢ U.S′ ∶ Se i →
          U.Γ′ ⫢ U.T′ ≈ U.S′ ∶ Se i →
          U.Δ′ ⫢ U.T′ ≈ U.S′ ∶ Se i →
          --------------------
          ⫢ U.T′ ∷ U.Γ′ ≈ U.S′ ∷ U.Δ′
⫢∷-cong Γ′≈Δ′ ⫢T′ ⫢S′ Γ⫢T≈S′ Δ⫢T≈S′
  with Γ , Δ , Γ↝ , Δ↝ , Γ≈Δ , IHΓ , IHΔ ← Γ′≈Δ′
     | _ , Γ₁ , T , _ , Γ₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | _ , Δ₁ , S , _ , Δ₁↝ , S↝ , ↝Se , ⊢S , _ , IHS ← ⫢S′
     | _ , Γ₂ , T₁ , S₁ , _ , Γ₂↝ , T↝₁ , S↝₁ , ↝Se , T₁≈S₁ , _ ← Γ⫢T≈S′ 
  with refl ← ⊢T:Se-lvl ⊢T
  with refl ← ⊢T:Se-lvl ⊢S
  with ⊢Γ₂ , ⊢T₁ , ⊢S₁ , _  ← presup-≈ T₁≈S₁
  with ⊢Γ , ⊢Δ ← presup-⊢≈ Γ≈Δ 
  with refl ← ⊢T:Se-lvl ⊢T₁ 
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ (proj₁ (presup-tm ⊢T))
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₁ (presup-tm ⊢S)) 
  with T≈T₁ ← IHT T↝₁ (ctxeq-tm (⊢≈-trans (⊢≈-sym Γ≈Γ₂)  Γ≈Γ₁) ⊢T₁)
     | S≈S₁ ← IHS S↝₁ (ctxeq-tm (⊢≈-trans (⊢≈-sym Γ≈Γ₂) (⊢≈-trans Γ≈Δ Δ≈Δ₁)) ⊢S₁) 
  = -, -, ↝∷ Γ↝ T↝ , ↝∷ Δ↝ S↝ , ∷-cong-simp Γ≈Δ ((≈-trans (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) T≈T₁) (≈-trans (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) T₁≈S₁) (ctxeq-≈ (⊢≈-trans (⊢≈-sym Δ≈Δ₁) (⊢≈-sym Γ≈Δ)) (≈-sym S≈S₁))))) , IHT∷Γ , IHS∷Δ
  where 
    IHT∷Γ : _ [↝≈] _
    IHT∷Γ ℕ.zero (↝∷ {T = Tᵢ} ↝Γᵢ ↝Tᵢ) (⊢∷ ⊢Γᵢ ⊢Tᵢ)
      with Γ≈Γᵢ ← IHΓ 0 ↝Γᵢ ⊢Γᵢ
      with T≈Tᵢ ← IHT ↝Tᵢ (ctxeq-tm (⊢≈-trans (⊢≈-sym Γ≈Γᵢ) Γ≈Γ₁) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) = ∷-cong-simp Γ≈Γᵢ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) T≈Tᵢ)
    IHT∷Γ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΓ n Γᵢ↝ ⊢Γᵢ
    
    IHS∷Δ : _ [↝≈] _
    IHS∷Δ ℕ.zero (↝∷ {T = Sᵢ} ↝Δᵢ ↝Sᵢ) (⊢∷ ⊢Δᵢ ⊢Sᵢ) 
      with Δ≈Δᵢ ← IHΔ 0 ↝Δᵢ ⊢Δᵢ 
      with S≈Sᵢ ← IHS ↝Sᵢ (ctxeq-tm (⊢≈-trans (⊢≈-sym Δ≈Δᵢ) Δ≈Δ₁) ⊢Sᵢ) 
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ))) = ∷-cong-simp Δ≈Δᵢ (ctxeq-≈ (⊢≈-sym Δ≈Δ₁) S≈Sᵢ)
    IHS∷Δ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΔ n Γᵢ↝ ⊢Γᵢ
    
⫢N-wf : ⫢ U.Γ′ →
        U.Γ′ ⫢ N ∶ Se 0
⫢N-wf ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′ = -, -, -, -, Γ↝ , ↝N , ↝Se , N-wf ⊢Γ , IHΓ , λ { ↝N ⊢N → ≈-refl ⊢N }

⫢Se-wf : ∀ {i} →
         ⫢ U.Γ′ →
         U.Γ′ ⫢ Se i ∶ Se (1 + i)
⫢Se-wf ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′ = -, -, -, -, Γ↝ , ↝Se , ↝Se , Se-wf _ ⊢Γ , IHΓ , λ { ↝Se ⊢Se → ≈-refl ⊢Se }

⫢Liftt-wf : ∀ {i n} →
            U.Γ′ ⫢ U.T′ ∶ Se i →
            U.Γ′ ⫢ Liftt n U.T′ ∶ Se (n + i)
⫢Liftt-wf ⫢T′
  with _ , Γ , T , .(Se _) , Γ↝ , T↝ , ↝Se , ⊢T , IHΓ , IHT ← ⫢T′
  with refl ← ⊢T:Se-lvl ⊢T = -, -, -, -, Γ↝ , ↝Liftt T↝ , ↝Se , Liftt-wf _ ⊢T , IHΓ , IHLiftT
    where
      IHLiftT : ∀ {tᵢ iᵢ Tᵢ} → tᵢ ↝ _ → Γ A.⊢ tᵢ ∶[ iᵢ ] Tᵢ → Γ ⊢ _ ≈ tᵢ ∶[ iᵢ ] Tᵢ
      IHLiftT (↝Liftt tᵢ↝) ⊢Lifttᵢ
        with Liftt-inv′ ⊢Lifttᵢ
      ... | refl , ⊢Tᵢ , ≈Se
        with IHT tᵢ↝ ⊢Tᵢ
      ... | T≈Tᵢ
        with unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ)))
      ... | refl = ≈-conv (Liftt-cong _ T≈Tᵢ) (≈-sym ≈Se)

⫢Π-wf : ∀ {i j k} →
        U.Γ′ ⫢ U.S′ ∶ Se i →
        (U.S′ ∷ U.Γ′) ⫢ U.T′ ∶ Se j →
        k ≡ max i j →
        --------------------
        U.Γ′ ⫢ Π U.S′ U.T′ ∶ Se k
⫢Π-wf ⫢S′ ⫢T′ k≡maxij
  with _ , Γ , S , _ , Γ↝ , S↝ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | _ , _ , T , .(Se _) , (↝∷ {T = S₁} Γ↝₁ S↝₁) , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′ 
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T 
  with ⊢∷ ⊢Γ₁ ⊢S₁ ← proj₁ (presup-tm ⊢T) 
  with Γ≈Γ₁ ← IHΓ 0 Γ↝₁ ⊢Γ₁
  with S≈S₁ ← IHS S↝₁ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁)
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁))) 
  = -, -, -, -, Γ↝ , ↝Π S↝ T↝ , ↝Se , Π-wf ⊢S (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym S≈S₁))) ⊢T) k≡maxij , IHΓ , IHΠST
  where
    IHΠST : _ ⊨ _ ↝≈ _
    IHΠST (↝Π Sᵢ↝ Tᵢ↝) ⊢Πtᵢ
      with refl , ≈Se , ⊢Sᵢ , ⊢Tᵢ ← Π-inv′ ⊢Πtᵢ
      with S≈Sᵢ ← IHS Sᵢ↝ ⊢Sᵢ 
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ))) 
      with Sᵢ≈S₁ ← ≈-trans (≈-sym S≈Sᵢ) S≈S₁ 
      with T≈Tᵢ ← IHT Tᵢ↝ (ctxeq-tm (∷-cong-simp Γ≈Γ₁ Sᵢ≈S₁) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) = ≈-conv (Π-cong ⊢S S≈Sᵢ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym S≈S₁))) T≈Tᵢ) refl) (≈-sym ≈Se)

⫢vlookup : ∀ {x} →
           ⫢ U.Γ′ →
           x ∶ U.T′ ∈! U.Γ′ →
           ------------
           U.Γ′ ⫢ v x ∶ U.T′
⫢vlookup ⫢Γ′ x∈Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
  with  _ , _ , T↝ , x∈Γ ← U⇒A-vlookup Γ↝ x∈Γ′ = -, -, -, -, Γ↝ , ↝v , T↝ , vlookup ⊢Γ x∈Γ , IHΓ , λ { ↝v ⊢v → ≈-refl ⊢v }

⫢ze-I : ⫢ U.Γ′ →
        ------------------
        U.Γ′ ⫢ ze ∶ N
⫢ze-I ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′ = -, -, -, -, Γ↝ , ↝ze , ↝N , ze-I ⊢Γ , IHΓ , λ { ↝ze ⊢ze → ≈-refl ⊢ze }

⫢su-I : U.Γ′ ⫢ U.t′ ∶ N →
        U.Γ′ ⫢ su U.t′ ∶ N
⫢su-I ⫢t′
  with _ , Γ , t , .N , Γ↝ , t↝ , ↝N , ⊢t , IHΓ , IHt ← ⫢t′
  with  ⊢t∶N-lvl ⊢t
...  | refl = -, -, -, -, Γ↝ , ↝su t↝ , ↝N , (su-I ⊢t) , IHΓ , IHsu
  where
    IHsu : _ ⊨ _ ↝≈ _
    IHsu (↝su t₁↝) ⊢sut₁
      with su-inv ⊢sut₁
    ...  | refl , T₁≈N , ⊢t₁ = ≈-conv (su-cong (IHt t₁↝ ⊢t₁)) (≈-sym T₁≈N)

T[I,ze]-inv : ∀ {i j} →
              A.Γ A.⊢ sub A.T (I , ze ∶ N ↙ j) ∶[ 1 + i ] Se i →
              ∃ λ S → j ≡ 0 × N₀ ∷ A.Γ ⊢ A.T ∶[ 1 + i ] S
T[I,ze]-inv ⊢T[|ze]
  with t[σ]-inv ⊢T[|ze]
... | Δ , S , ⊢[|ze] , ⊢T , ≈Sei
  with ⊢ze , ≈Δ ← ,-inv′ ⊢[|ze] (s-I (proj₁ (presup-tm ⊢T[|ze])))
  with refl , ≈N ← ze-inv ⊢ze = -, refl , ctxeq-tm (⊢≈-sym ≈Δ) ⊢T

T[wkwk,suv1]-inv : ∀ {i j} →
                   A.lS ∷ A.lT ∷ A.Γ A.⊢ sub A.T ((wk ∘ wk) , su (v 1) ∶ N ↙ j) ∶[ 1 + i ] Se i →
                   ∃ λ S → j ≡ 0 × N₀ ∷ A.Γ ⊢ A.T ∶[ 1 + i ] S
T[wkwk,suv1]-inv ⊢T[wkwk,suv1]
  with t[σ]-inv ⊢T[wkwk,suv1]
... | Δ , S , ⊢[wkwk,suv1] , ⊢T , ≈Sei
  with ⊢suv1 , ≈Δ ← ,-inv′ ⊢[wkwk,suv1] (⊢wk∘wk-gen (proj₁ (presup-tm ⊢T[wkwk,suv1])))
  with refl , _ ← su-inv ⊢suv1 = -, refl , ctxeq-tm (⊢≈-sym ≈Δ) ⊢T

I,t-inv : ∀ {i j R} →
          A.Γ A.⊢ sub A.s (I , A.t ∶ A.T ↙ j) ∶[ i ] R →
          ∃ λ S → (A.T ↙ j) ∷ A.Γ ⊢ A.s ∶[ i ] S × A.Γ A.⊢ R ≈ sub S (I , A.t ∶ A.T ↙ j) ∶[ 1 + i ] Se i × A.Γ ⊢ A.t ∶[ j ] A.T
I,t-inv ⊢s[|t]
  with t[σ]-inv ⊢s[|t]
... | Δ , S , ⊢[|t] , ⊢s , ≈R
  with ⊢t , ≈Δ ← ,-inv′ ⊢[|t] (s-I (proj₁ (presup-tm ⊢s[|t]))) = -, ctxeq-tm (⊢≈-sym ≈Δ) ⊢s , ≈R , conv ⊢t ([I] ([I]-inv (proj₂ (presup-tm ⊢t))))

I,t,t-inv : ∀ {i j₁ j₂ t₁ t₂ T₁ T₂ R} →
          A.Γ A.⊢ sub A.s ((I , t₁ ∶ T₁ ↙ j₁) , t₂ ∶ T₂ ↙ j₂) ∶[ i ] R →
          ∃ λ S → (T₂ ↙ j₂) ∷ (T₁ ↙ j₁) ∷ A.Γ ⊢ A.s ∶[ i ] S × A.Γ ⊢ t₁ ∶[ j₁ ] T₁ ×  A.Γ ⊢ t₂ ∶[ j₂ ] sub T₂ (I , t₁ ∶ T₁ ↙ j₁) × 
                  A.Γ A.⊢ R ≈ sub S ((I , t₁ ∶ T₁ ↙ j₁) , t₂ ∶ T₂ ↙ j₂) ∶[ 1 + i ] Se i
I,t,t-inv ⊢s[I,t₁,t₂]
  with t[σ]-inv ⊢s[I,t₁,t₂]
... | Δ , S , ⊢[I,t₁,t₂] , ⊢s , ≈R
  with Ψ , ⊢I,t₁ , ⊢t₂ , T₂∷Ψ≈Δ ← ,-inv ⊢[I,t₁,t₂] 
  with ⊢t₁ , ≈Ψ ← ,-inv′ ⊢I,t₁ (s-I (proj₁ (presup-tm ⊢s[I,t₁,t₂])))
  with ⊢∷ _ ⊢T₂ ← proj₁ (presup-⊢≈ T₂∷Ψ≈Δ)
  = -, ctxeq-tm (⊢≈-trans (⊢≈-sym T₂∷Ψ≈Δ) (∷-cong-simp (⊢≈-sym ≈Ψ) (≈-refl ⊢T₂))) ⊢s , conv ⊢t₁ ([I] ([I]-inv (proj₂ (presup-tm ⊢t₁)))) , ⊢t₂ , ≈R

⫢N-E : ∀ {i} →
       (N ∷ U.Γ′) ⫢ U.T′ ∶ Se i →
       U.Γ′ ⫢ U.s′ ∶ U.T′ U.[| ze ∶ N ] →
       (U.T′ ∷ N ∷ U.Γ′) ⫢ U.r′ ∶ U.T′ U.[ (wk ∘ wk) , su (v 1) ∶ N ] →
       U.Γ′ ⫢ U.t′ ∶ N →
       --------------------------
       U.Γ′ ⫢ rec U.T′ U.s′ U.r′ U.t′ ∶ U.T′ U.[| U.t′ ∶ N ]
⫢N-E  ⫢T′ ⫢s′ ⫢r′ ⫢t′
  with _ , _ , T , _ , (↝∷ Γ₁↝ ↝N) , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | j , Γ , s , _ , Γ↝ , s↝ , ↝sub {t = T₁} T↝₁ (↝, ↝I ↝ze ↝N) , ⊢s , IHΓ , IHs ← ⫢s′
     | k , _ , r , _ , (↝∷ {T = T₃} (↝∷ Γ₂↝ ↝N) T↝₃) , r↝ , ↝sub {t = T₂} T↝₂ (↝, (↝∘ ↝wk ↝wk) (↝su ↝v) ↝N) , ⊢r , _ , IHr ← ⫢r′
     | _ , Γ₃ , t , _ , Γ₃↝ , t↝ , ↝N , ⊢t , _ , IHt ← ⫢t′ 
  with (⊢∷ {Γ = Γ₁} ⊢Γ₁ ⊢N₁) ← proj₁ (presup-tm ⊢T)
     | ⊢Γ , ⊢T₁[|ze] ← presup-tm ⊢s
     | (⊢∷ (⊢∷ ⊢Γ₂ ⊢N₂) ⊢T₃) , ⊢T₂[wkwk,ze] ← (presup-tm ⊢r) 
  with refl ← N≈⇒eq-lvl (≈-refl ⊢N₁)
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₂) 
  with refl ← ⊢T:Se-lvl ⊢T
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Γ≈Γ₃ ← IHΓ 0 Γ₃↝ (proj₁ (presup-tm ⊢t)) 
  with T≈T₃ ← IHT T↝₃ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (≈-refl ⊢N₂)) ⊢T₃) 
  with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈T₃))) 
  = -, -, -, -, Γ↝ , ↝rec T↝ s↝ r↝ t↝ , ↝sub T↝ (↝, ↝I t↝ ↝N) , N-E (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) ⊢T) ⊢s′ ⊢r′ ⊢t′ , IHΓ , IHrec
  where
    N∷Γ₁≈N∷Γ = ∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)
    Γ₁≈Γ₂ = ⊢≈-trans (⊢≈-sym Γ≈Γ₁) Γ≈Γ₂
    N∷Γ₁≈N∷Γ₂ = ∷-cong-simp Γ₁≈Γ₂ (≈-refl ⊢N₁)

    ⊢s′ : Γ ⊢ s ∶[ _ ] T A.[| ze ∶ N₀ ]
    ⊢s′ 
      with SeS , refl , ⊢T₁ ← T[I,ze]-inv ⊢T₁[|ze] 
      with T≈T₁ ← IHT T↝₁ (ctxeq-tm (∷-cong-simp Γ≈Γ₁ (≈-refl (N-wf ⊢Γ))) ⊢T₁)
      with refl , Sej≈ ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈T₁)))
      = conv ⊢s ([]-cong-Se′ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) (≈-conv (≈-sym T≈T₁) (≈-sym Sej≈))) (⊢I,ze ⊢Γ))

    ⊢r′ : (T ↙ _) L.∷ N₀ L.∷ Γ ⊢ r ∶[ _ ] sub T ((wk ∘ wk) , su (v 1) ∶ N₀) 
    ⊢r′ 
      with SeS , refl , ⊢T₂ ← T[wkwk,suv1]-inv ⊢T₂[wkwk,ze]
      with T≈T₂ ← IHT T↝₂ (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ₁≈Γ₂) (≈-refl ⊢N₂)) ⊢T₂)
      with refl , Sej≈SeS ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈T₂)))
      = conv (ctxeq-tm (∷-cong-simp (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (≈-refl ⊢N₂)) (ctxeq-≈ N∷Γ₁≈N∷Γ₂ (≈-sym T≈T₃))) ⊢r) ([]-cong-Se′ (ctxeq-≈ N∷Γ₁≈N∷Γ (≈-conv (≈-sym T≈T₂) (≈-sym Sej≈SeS))) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) (ctxeq-tm N∷Γ₁≈N∷Γ ⊢T))))
        
    ⊢t′ : Γ ⊢ t ∶[ _ ] N
    ⊢t′
      with refl ← ⊢t∶N-lvl ⊢t = (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢t)
      
    IHrec : _ ⊨ _ ↝≈ _
    IHrec (↝rec ↝Tᵢ ↝sᵢ ↝rᵢ ↝tᵢ) ⊢rectᵢ 
      with rec-inv ⊢rectᵢ
    ...  | refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢tᵢ , Tᵢ≈ 
      with T≈Tᵢ ← IHT ↝Tᵢ (ctxeq-tm (⊢≈-sym N∷Γ₁≈N∷Γ) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ)))
      with T₃∷N∷Γ₂≈Tᵢ∷N∷Γ ← ∷-cong-simp (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (≈-refl ⊢N₂)) (ctxeq-≈ N∷Γ₁≈N∷Γ₂ (≈-trans (≈-sym T≈T₃) T≈Tᵢ))
      with s≈sᵢ ← IHs ↝sᵢ ⊢sᵢ
         | r≈rᵢ ← IHr ↝rᵢ (ctxeq-tm (⊢≈-sym T₃∷N∷Γ₂≈Tᵢ∷N∷Γ) ⊢rᵢ)
         | t≈tᵢ ← IHt ↝tᵢ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ)
      = ≈-conv (≈-sym (rec-cong ⊢Tᵢ (ctxeq-≈ N∷Γ₁≈N∷Γ (≈-sym T≈Tᵢ)) (≈-sym s≈sᵢ) (ctxeq-≈ T₃∷N∷Γ₂≈Tᵢ∷N∷Γ (≈-sym r≈rᵢ)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym t≈tᵢ)))) 
        (≈-sym Tᵢ≈)

⫢Λ-I : ∀ {i} →
       U.Γ′ ⫢ U.S′ ∶ Se i →
       (U.S′ ∷ U.Γ′) ⫢ U.t′ ∶ U.T′ →
       --------------------
       U.Γ′ ⫢ Λ U.S′ U.t′ ∶ Π U.S′ U.T′
⫢Λ-I {i = i} ⫢S′ ⫢t′
  with  _ , Γ , S , _ , Γ↝ , S↝ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | k , _ , t , T , (↝∷ {T = S₁} Γ↝₁ S↝₁) , t↝ , T↝ , ⊢t , _ , IHt ← ⫢t′
  with ⊢∷ ⊢Γ₁ ⊢S₁ ← proj₁ (presup-tm ⊢t)
  with Γ≈Γ₁ ← IHΓ 0 Γ↝₁ ⊢Γ₁
  with S≈S₁ ← IHS S↝₁ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁)
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁)))
  with refl ← ⊢T:Se-lvl ⊢S
  = -, -, -, -, Γ↝ , ↝Λ S↝ t↝ , ↝Π {i = i} {j = k} S↝ T↝ , Λ-I ⊢S (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym S≈S₁))) ⊢t) refl , IHΓ , IHΛ
  where
    IHΛ : _ ⊨ _ ↝≈ _
    IHΛ (↝Λ {i = i} Sᵢ↝ tᵢ↝) ⊢Λtᵢ
      with jᵢ , Tᵢ , Tᵢ≈ , i≡maxjᵢ , ⊢tᵢ ← Λ-inv′ ⊢Λtᵢ 
      with ⊢∷ ⊢Γ ⊢Sᵢ , _ ← presup-tm ⊢tᵢ
      with S≈Sᵢ ← IHS Sᵢ↝ ⊢Sᵢ
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ)))
      with S₁≈S₂ ← ctxeq-≈ Γ≈Γ₁ (≈-trans (≈-sym S≈S₁) S≈Sᵢ)
      with Sᵢ∷Γ≈S₁∷Γ₁ ← ∷-cong-simp (⊢≈-sym Γ≈Γ₁)  S₁≈S₂
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Sᵢ∷Γ≈S₁∷Γ₁) ⊢tᵢ)
      = ≈-conv (≈-sym (Λ-cong ⊢Sᵢ (≈-sym S≈Sᵢ) (ctxeq-≈ Sᵢ∷Γ≈S₁∷Γ₁ (≈-sym t≈tᵢ)) i≡maxjᵢ)) (≈-sym Tᵢ≈)

⫢Λ-E : ∀ {i j} →
       U.Γ′ ⫢ U.S′ ∶ Se i →
       U.S′ ∷ U.Γ′ ⫢ U.T′ ∶ Se j →
       U.Γ′ ⫢ U.r′ ∶ Π U.S′ U.T′ →
       U.Γ′ ⫢ U.s′ ∶ U.S′ →
       --------------------
       U.Γ′ ⫢ U.r′ $ U.s′ ∶ U.T′ U.[| U.s′ ∶ U.S′ ]
⫢Λ-E ⫢S′ ⫢T′ ⫢r′ ⫢s′
  with  _ , Γ , S , _ , Γ↝ , S↝S′ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | _ , .(S₁ ↙ _) L.∷ Γ₁ , T , .(Se _) , (↝∷ {T = S₁} Γ↝₁ S↝₁S′) , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | k , Γ₂ , r , _ , Γ↝₂ , r↝r′ , ↝Π S↝₂S′ T↝T′ , ⊢r , _ , IHr ← ⫢r′
     | j , Γ₃ , s , S₃ , Γ↝₃ , s↝s′ , S↝₃S′ , ⊢s , _ , IHs ← ⫢s′ 
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T 
  with ⊢∷ ⊢Γ₁ ⊢S₁ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ₂ , ⊢ΠS₂T₁ ← presup-tm ⊢r
     | ⊢Γ₃ , ⊢S₃ ← presup-tm ⊢s
  with IHΓ 0 Γ↝₁ ⊢Γ₁
     | IHΓ 0 Γ↝₂ ⊢Γ₂
     | IHΓ 0 Γ↝₃ ⊢Γ₃
...  | Γ≈Γ₁ | Γ≈Γ₂ | Γ≈Γ₃ 
  with refl , ⊢S₂ , ⊢T₁ ← Π-inv ⊢ΠS₂T₁
  with S≈S₁ ← IHS S↝₁S′ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁)
     | S≈S₂ ← IHS S↝₂S′ (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₂)
     | S≈S₃ ← IHS S↝₃S′ (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢S₃) 
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁)))
     | refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₂)))
     | refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₃))) 
  with T≈T₁ ← IHT T↝T′ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₂ (≈-trans (≈-sym S≈S₂) S≈S₁))) ⊢T₁) 
  with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈T₁)))
  = -, -, -, -, Γ↝ , ↝$ r↝r′ s↝s′ , ↝sub T↝ (↝, ↝I s↝s′ S↝S′) , 
    Λ-E ⊢S 
        (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym S≈S₁))) ⊢T) 
        (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢r) 
              (Π-cong (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₂) (≈-sym S≈S₂) (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-trans (≈-sym S≈S₁) S≈S₂))) (≈-sym T≈T₁)) refl)) (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢s) (≈-sym S≈S₃)) 
        refl , 
    IHΓ , IHrs
  where
    IHrs : _ ⊨ _ ↝≈ _
    IHrs (↝$ rᵢ↝ sᵢ↝) ⊢Λrs
      with j , k , Sᵢ , Tᵢ , ⊢rᵢ , ⊢sᵢ , i≡maxjk , ≈T[|s] ← $-inv ⊢Λrs
      with _ , ⊢Sᵢ , ⊢Tᵢ ← Π-inv (proj₂ (presup-tm ⊢rᵢ)) 
      with rᵢ≈r ← IHr rᵢ↝ (ctxeq-tm Γ≈Γ₂ ⊢rᵢ)
         | sᵢ≈s ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢sᵢ) = ≈-conv (≈-sym ($-cong-simp (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) (≈-sym rᵢ≈r)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym sᵢ≈s)) i≡maxjk)) (≈-sym ≈T[|s])

⫢L-I : ∀ {j} →
       U.Γ′ ⫢ U.t′ ∶ U.T′ →
       --------------------
       U.Γ′ ⫢ liftt j U.t′ ∶ Liftt j U.T′
⫢L-I ⫢t′
  with i , Γ , t , T , Γ↝ , t↝ , T↝ , ⊢t , IHΓ , IHt ← ⫢t′
    = -, -, -, -, Γ↝ , ↝liftt t↝ , ↝Liftt T↝ , L-I _ ⊢t , IHΓ , IHlift
  where
    IHlift : _ ⊨ _ ↝≈ _
    IHlift (↝liftt tᵢ↝) ⊢lifttᵢ
      with liftt-inv ⊢lifttᵢ
    ... | jᵢ , Sᵢ , refl , ⊢tᵢ , Tᵢ≈ = ≈-conv (liftt-cong _ (IHt tᵢ↝ ⊢tᵢ))  (≈-sym Tᵢ≈)

⫢L-E : ∀ {i j} →
       U.Γ′ ⫢ U.T′ ∶ Se i →
       U.Γ′ ⫢ U.t′ ∶ Liftt j U.T′ →
       --------------------
       U.Γ′ ⫢ unlift U.t′ ∶ U.T′
⫢L-E ⫢T′ ⫢t′
  with i , Γ , T , _ , Γ↝ , T↝ , ↝Se , ⊢T , IHΓ , IHT ← ⫢T′
     | j , Γ₁ , t , _ , Γ₁↝ , t↝ , ↝Liftt T₁↝ , ⊢t , _ , IHt ← ⫢t′ 
  with ⊢Γ₁ , ⊢LifttT₁ ← presup-tm ⊢t
  with refl , ⊢T₁ ← Liftt-inv ⊢LifttT₁
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with refl ← ⊢T:Se-lvl ⊢T
  with T≈T₁ ← IHT T₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢T₁)
  with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈T₁))) 
  = -, -, -, -, Γ↝ , ↝unlift t↝ , T↝ , 
    L-E _ ⊢T (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢t) (Liftt-cong _ (≈-sym T≈T₁))) , 
    IHΓ , IHlift

  where
    IHlift : _ ⊨ _ ↝≈ _
    IHlift (↝unlift tᵢ↝) ⊢unlifttᵢ
      with jᵢ , nᵢ , Sᵢ , refl , ⊢tᵢ , Tᵢ≈ ← unlift-inv ⊢unlifttᵢ
      with _ , ⊢Tᵢ ← Liftt-inv (proj₂ (presup-tm ⊢tᵢ))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ) 
      = ≈-conv (unlift-cong _ ⊢Tᵢ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t≈tᵢ))  (≈-sym Tᵢ≈)

⫢t[σ] : U.Δ′ ⫢ U.t′ ∶ U.T′ →
        U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
        --------------------
        U.Γ′ ⫢ U.t′ U.[ U.σ′ ] ∶ U.T′ U.[ U.σ′ ]
⫢t[σ] ⫢t′ ⫢σ′
  with i , Δ , t , T , Δ↝ , t↝ , T↝ , ⊢t , IHΔ , IHt ← ⫢t′
     | Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₂ (presup-s ⊢σ)) 
  = -, -, -, -, Γ↝ , ↝sub t↝ σ↝ , ↝sub T↝ σ↝ , t[σ] ⊢t (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) , IHΓ , IHt[σ] 
  where 
    IHt[σ] : _ ⊨ _ ↝≈ _
    IHt[σ] (↝sub tᵢ↝ σᵢ↝) ⊢tᵢ[σ]
      with Δᵢ , S , ⊢σᵢ , ⊢tᵢ , ≈S[σᵢ] ← t[σ]-inv ⊢tᵢ[σ]
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ 
      with Δ₁≈Δᵢ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ))) 
      with Δᵢ≈Δ ← ⊢≈-trans (⊢≈-sym Δ₁≈Δᵢ) (⊢≈-sym Δ≈Δ₁)
      = ≈-conv (≈-sym ([]-cong (≈-sym (IHt tᵢ↝ (ctxeq-tm Δᵢ≈Δ ⊢tᵢ))) (s-≈-sym (IHσ σᵢ↝ (s-conv ⊢σᵢ Δᵢ≈Δ))))) (≈-sym ≈S[σᵢ])

⫢conv : ∀ {i} →
        U.Γ′ ⫢ U.t′ ∶ U.S′ →
        U.Γ′ ⫢ U.S′ ≈ U.T′ ∶ Se i →
        --------------------
        U.Γ′ ⫢ U.t′ ∶ U.T′
⫢conv ⫢t′ S′≈T′
  with i , Γ , t , S₁ , Γ↝ , t↝ , S₁↝ , ⊢t , IHΓ , IHt ← ⫢t′
     | _ , Γ₁ , S , T , _ , Γ₁↝ , S↝ , T↝ , ↝Se , S≈T , _ , IHS , _ ← S′≈T′ 
  with ⊢Γ₁ , ⊢S , _ , _ ← presup-≈ S≈T
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with refl ← ⊢T:Se-lvl ⊢S 
  with S≈S₁ ← IHS S₁↝ (ctxeq-tm Γ≈Γ₁ (proj₂ (presup-tm ⊢t))) 
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁)))
  = -, -, -, -, Γ↝ , t↝ , T↝ , conv ⊢t (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-trans (≈-sym S≈S₁) S≈T)) , IHΓ , IHt

⫢s-I : ⫢ U.Γ′ →
       --------------------
       U.Γ′ ⫢s I ∶ U.Γ′
⫢s-I ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′ = -, -, -, Γ↝ , Γ↝ , ↝I , s-I ⊢Γ , IHΓ , (λ { ↝I ⊢σᵢ → s-≈-refl ⊢σᵢ }) , IHΓ

⫢s-wk : ⫢ U.T′ ∷ U.Γ′ →
        --------------------
        U.T′ ∷ U.Γ′ ⫢s wk ∶ U.Γ′
⫢s-wk ⫢T∷Γ′
  with .((_ ↙ _) L.∷ _) , ↝∷ Γ↝ T↝ , ⊢∷ ⊢Γ ⊢T , IHΓ ← ⫢T∷Γ′ 
  = -, -, -, ↝∷ Γ↝ T↝ , Γ↝ , ↝wk , s-wk (⊢∷ ⊢Γ ⊢T) , IHΓ , (λ { ↝wk ⊢σᵢ → s-≈-refl ⊢σᵢ }) , IHCΓ

  where
    IHCΓ : _ [↝≈] _
    IHCΓ n ↝Γᵢ ⊢Γᵢ = IHΓ (ℕ.suc n) ↝Γᵢ ⊢Γᵢ

⫢s-∘ :  U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
        U.Δ′ ⫢s U.τ′ ∶ U.Ψ′ →
        --------------------
        U.Γ′ ⫢s U.τ′ ∘ U.σ′ ∶ U.Ψ′
⫢s-∘ ⫢σ′ ⫢τ′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHτ , _ ← ⫢σ′
     | Δ , Ψ , τ , Δ↝ , Ψ↝ , τ↝ , ⊢τ , IHΔ , IHσ , IHΨ ← ⫢τ′ 
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₂ (presup-s ⊢σ)) 
  = -, -, -, Γ↝ , Ψ↝ , ↝∘ τ↝ σ↝ , s-∘ ⊢σ  (ctxeq-s Δ≈Δ₁ ⊢τ) , 
    IHΓ , IHτ∘σ , IHΨ
  where 
    IHτ∘σ : _ ⊨s _ ↝≈ _
    IHτ∘σ (↝∘ {σ = τᵢ} {τ = σᵢ} τᵢ↝ σᵢ↝) ⊢σᵢ∘τᵢ 
      with ∘-inv ⊢σᵢ∘τᵢ
    ...  | Ψᵢ , ⊢σᵢ , ⊢τᵢ
      with σ≈σᵢ ← (IHτ σᵢ↝ ⊢σᵢ)  
      with Δ₁≈Ψᵢ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ))) 
      with Δ≈Ψᵢ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Ψᵢ
      with τ≈τᵢ ← IHσ τᵢ↝ (ctxeq-s (⊢≈-sym Δ≈Ψᵢ) ⊢τᵢ)  = ∘-cong σ≈σᵢ (ctxeq-s-≈ Δ≈Ψᵢ τ≈τᵢ) 

⫢s-, : ∀ {i} →
       U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
       U.Δ′ ⫢ U.T′ ∶ Se i →
       U.Γ′ ⫢ U.t′ ∶ U.T′ U.[ U.σ′ ] →
       -------------------------
       U.Γ′ ⫢s U.σ′ , U.t′ ∶ U.T′ ∶ U.T′ ∷ U.Δ′
⫢s-, ⫢σ′ ⫢T′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , T , _ , Δ↝ , T↝ , ↝Se , ⊢T , IHΔ , IHT ← ⫢T′
     | i , Γ₁ , t , _ , Γ₁↝ , t↝ , (↝sub {T₁} T↝₁ σ↝₁) , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢T 
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ (proj₁ (presup-tm ⊢t))
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₂ (presup-s ⊢σ))
  = -, -, -, Γ↝ , ↝∷ Δ↝ T↝ , (↝, σ↝ t↝ T↝) , 
    s-, (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢T ⊢t_ , 
    IHΓ , IHσ,t , IHCT∷Δ

  where
    ⊢t_ : Γ ⊢ t ∶[ _ ] sub T σ
    ⊢t_
      with ⊢T₁[σ] ← proj₂ (presup-tm ⊢t)
      with Δ₂ , S , ⊢σ₁ , ⊢T₁ , _ ← t[σ]-inv ⊢T₁[σ]
      with σ≈σ₁ ← IHσ σ↝₁ (ctxeq-s (⊢≈-sym Γ≈Γ₁) ⊢σ₁) 
      with Δ₁≈Δ₂ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σ₁))) 
      with Δ₂≈Δ ← ⊢≈-trans (⊢≈-sym Δ₁≈Δ₂) (⊢≈-sym Δ≈Δ₁)
      with T≈T₁ ← IHT T↝₁ (ctxeq-tm Δ₂≈Δ ⊢T₁) 
      with refl , ≈Se ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈T₁))) 
      = conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢t) ([]-cong-Se-simp (ctxeq-≈ (⊢≈-sym Δ₂≈Δ) (≈-conv (≈-sym T≈T₁) (≈-sym ≈Se))) (s-≈-sym σ≈σ₁))

    IHσ,t : _ ⊨s _ ↝≈ _
    IHσ,t  (↝, {σ = σᵢ} {t = tᵢ} {T = Tᵢ} σᵢ↝ tᵢ↝ Tᵢ↝) ⊢σᵢ,
      with ,-inv ⊢σᵢ,
    ...  | Δᵢ , ⊢σᵢ , ⊢tᵢ , ≈T∷Δᵢ
      with ⊢Tᵢ[σᵢ] ← proj₂ (presup-tm ⊢tᵢ)
      with S , ⊢Tᵢ , Seᵢ≈S[σᵢ] ← t[σ]-inv′ ⊢Tᵢ[σᵢ] ⊢σᵢ
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ 
      with Δ₁≈Δᵢ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ))) 
      with Δ≈Δᵢ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Δᵢ
      with T≈Tᵢ ← IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ)
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ) 
      with refl , Sei≈ ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) 
      = s-≈-conv (,-cong σ≈σᵢ 
                         (ctxeq-tm Δ≈Δᵢ ⊢T) 
                         (ctxeq-≈ Δ≈Δᵢ (≈-conv T≈Tᵢ (≈-sym Sei≈))) 
                         (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t≈tᵢ) ([]-cong-Se-simp (≈-conv (≈-sym T≈Tᵢ) (≈-sym Sei≈)) (s-≈-conv (s-≈-sym σ≈σᵢ) (⊢≈-sym Δ≈Δᵢ))))) 
                 (⊢≈-trans (∷-cong″ (ctxeq-≈ Δ≈Δᵢ (≈-conv T≈Tᵢ (≈-sym Sei≈)))) ≈T∷Δᵢ) 
    
    IHCT∷Δ : _ [↝≈] _
    IHCT∷Δ ℕ.zero (↝∷ {T = Tᵢ} ↝Δᵢ ↝Tᵢ) (⊢∷ ⊢Δᵢ ⊢Tᵢ) 
      with Δ≈Δᵢ ← IHΔ 0 ↝Δᵢ ⊢Δᵢ 
      with T≈Tᵢ ← IHT ↝Tᵢ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) = ∷-cong-simp Δ≈Δᵢ T≈Tᵢ
    IHCT∷Δ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΔ n Γᵢ↝ ⊢Γᵢ

⫢s-conv : U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
          ⫢ U.Δ′ ≈ U.Ψ′ →
          -------------------------
          U.Γ′ ⫢s U.σ′ ∶ U.Ψ′
⫢s-conv ⫢σ′ Δ′≈Ψ′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | Δ , Ψ , Δ↝ , Ψ↝ , Δ≈Ψ , IHΔ , IHΨ ← Δ′≈Ψ′ 
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₂ (presup-s ⊢σ)) 
     = -, -, -, Γ↝ , Ψ↝ , σ↝ , s-conv ⊢σ (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Ψ) , IHΓ , IHσ , IHΨ

⫢N-[] : U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
        --------------------
        U.Γ′ ⫢ N U.[ U.σ′ ] ≈ N ∶ Se 0
⫢N-[] ⫢σ′
  with Γ , Δ , σ , Γ↝ , Δ↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′ 
  = -, -, -, -, -, Γ↝ , ↝sub ↝N σ↝ , ↝N , ↝Se , N-[] ⊢σ , IHΓ , IHN[σ] , λ { ↝N ⊢N → ≈-refl ⊢N }
  where 
    IHN[σ] : _ ⊨ _ ↝≈ _
    IHN[σ] (↝sub ↝N σ₁↝) ⊢N[σᵢ] 
      with Δᵢ , SeS , ⊢σᵢ , ⊢N , T≈ ← t[σ]-inv ⊢N[σᵢ] 
      with refl , T≈Se ← N:T-inv′ ⊢N
      with σᵢ≈σ ← IHσ σ₁↝ ⊢σᵢ
      = ≈-conv (≈-sym ([]-cong (≈-refl ⊢N) (s-≈-sym σᵢ≈σ))) (≈-sym T≈)

⫢Se-[] : ∀ {i} →
          U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
          --------------------
          U.Γ′ ⫢ Se i U.[ U.σ′ ] ≈ Se i ∶ Se (1 + i)
⫢Se-[] ⫢σ′
  with Γ , Δ , σ , Γ↝ , Δ↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
  = -, -, -, -, -, Γ↝ , ↝sub ↝Se σ↝ , ↝Se , ↝Se , Se-[] _ ⊢σ , IHΓ , IHSe[σ] , λ { ↝Se ⊢Se → ≈-refl ⊢Se }
  where 
    IHSe[σ] : _ ⊨ _ ↝≈ _
    IHSe[σ] (↝sub ↝Se σ₁↝) ⊢Se[σᵢ] 
      with Δᵢ , SeS , ⊢σᵢ , ⊢Se , T≈ ← t[σ]-inv ⊢Se[σᵢ] 
      with σᵢ≈σ ← IHσ σ₁↝ ⊢σᵢ
      = ≈-conv (≈-sym ([]-cong (≈-refl ⊢Se) (s-≈-sym σᵢ≈σ))) (≈-sym T≈)

⫢Liftt-[] : ∀ {i j} →
            U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
            U.Δ′ ⫢ U.T′ ∶ Se i →
            --------------------
            U.Γ′ ⫢ Liftt j U.T′ U.[ U.σ′ ] ≈ Liftt j (U.T′ U.[ U.σ′ ]) ∶ Se (j + i)
⫢Liftt-[] ⫢σ′ ⫢T′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , T , _ , Δ↝ , T↝ , ↝Se , ⊢T , IHΔ , IHT ← ⫢T′ 
  with refl ← ⊢T:Se-lvl ⊢T
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ (proj₂ (presup-s ⊢σ)) 
  = -, -, -, -, -, Γ↝ , ↝sub (↝Liftt T↝) σ↝ , ↝Liftt (↝sub T↝ σ↝) , ↝Se , Liftt-[] _ ⊢σ (ctxeq-tm Δ≈Δ₁ ⊢T) , IHΓ , IHLiftT[σ] , IHLift,T[σ]
  where
    IHLiftT[σ] : _ ⊨ _ ↝≈ _
    IHLiftT[σ] (↝sub (↝Liftt Tᵢ↝) σᵢ↝) ⊢Lift[σᵢ] 
      with Δᵢ , SeS , ⊢σᵢ , ⊢LiftTᵢ , S≈ ← t[σ]-inv ⊢Lift[σᵢ]
      with refl , ⊢Tᵢ , Se≈ ← Liftt-inv′ ⊢LiftTᵢ
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ 
      with Δ₁≈Δᵢ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ))) 
      with Δ≈Δᵢ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Δᵢ
      with T≈Tᵢ ← IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ)
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ)))
      = ≈-conv (≈-sym ([]-cong (≈-conv (Liftt-cong _ (ctxeq-≈ Δ≈Δᵢ (≈-sym T≈Tᵢ))) (≈-sym Se≈)) (s-≈-sym σ≈σᵢ))) (≈-sym S≈)
    
    IHLift,T[σ] : _ ⊨ _ ↝≈ _
    IHLift,T[σ] (↝Liftt (↝sub Tᵢ↝ σᵢ↝) ) ⊢Lift,T[σᵢ] 
      with refl , ⊢Tᵢ[σ] , Se≈ ← Liftt-inv′ ⊢Lift,T[σᵢ] 
      with Δᵢ , SeS , ⊢σᵢ , ⊢Tᵢ , S≈ ← t[σ]-inv ⊢Tᵢ[σ] 
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ 
      with Δ₁≈Δᵢ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ))) 
      with Δ≈Δᵢ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Δᵢ
      with T≈Tᵢ ← IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ)
      with refl , S≈Se ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ)))
      = ≈-conv (Liftt-cong _ ([]-cong-Se-simp (ctxeq-≈ Δ≈Δᵢ (≈-conv T≈Tᵢ (≈-sym S≈Se)))  σ≈σᵢ)) (≈-sym Se≈)

qσ-inv : ∀ {i j} →
           (A.T ↙ j) ∷ A.Γ A.⊢s A.q (A.S ↙ i) A.σ ∶ A.Δ →
           ∃ λ Ψ → A.⊢ A.Δ ≈ (A.S ↙ i) ∷ Ψ × A.Γ A.⊢s A.σ ∶ Ψ
qσ-inv ⊢qσ
  with Ψ , ⊢σwk , ⊢v0 , (∷-cong Γ≈Δ _ _ _ S≈S′) ← ,-inv ⊢qσ 
  with Θ , ⊢wk , ⊢σ ← ∘-inv ⊢σwk 
  with Γ≈θ ← wk-inv ⊢wk = Ψ , ∷-cong-simp (⊢≈-sym Γ≈Δ) (≈-sym S≈S′) , ctxeq-s (⊢≈-sym Γ≈θ) ⊢σ

qqσ-inv : ∀ {i₁ i₂ j₁ j₂ T₁ T₂ S₁ S₂} →
           (T₂ ↙ j₂) ∷ (T₁ ↙ j₁) ∷ A.Γ A.⊢s A.q (S₂ ↙ i₂) (A.q (S₁ ↙ i₁) A.σ) ∶ A.Δ →
           ∃ λ Ψ → A.Γ A.⊢s A.σ ∶ Ψ × A.⊢ A.Δ ≈ (S₂ ↙ i₂) ∷ (S₁ ↙ i₁) ∷ Ψ
qqσ-inv ⊢qqσ 
  with Ψ , Ψ≈ , ⊢qσ ← qσ-inv ⊢qqσ
  with _ , ⊢∷ ⊢Ψ ⊢S₂ ← presup-⊢≈ Ψ≈
  with θ , θ≈ , ⊢σ ← qσ-inv ⊢qσ = -, ⊢σ , ⊢≈-trans Ψ≈ (∷-cong-simp θ≈ (≈-refl ⊢S₂))


t[σ]-inv-IH : ∀ {σ₁ i} →
              A.Γ ⊨s A.σ ↝≈ U.σ′ → 
              A.Γ ⊢ A.t A.[ σ₁ ] ∶[ i ] A.T →
              σ₁ ↝s U.σ′ →
              A.Γ A.⊢s A.σ ∶ A.Δ →
              ∃ λ S → A.Γ A.⊢s σ₁ ≈ A.σ ∶ A.Δ × A.Γ A.⊢s σ₁ ∶ A.Δ × A.Δ ⊢ A.t ∶[ i ] S × A.Γ ⊢ A.T ≈ S A.[ σ₁ ] ∶[ 1 + i ] Se i
t[σ]-inv-IH IHσ ⊢t[σ₁] σ₁↝ ⊢σ 
  with Δ₁ , S , ⊢σ₁ , ⊢t , T≈ ← t[σ]-inv ⊢t[σ₁] 
  with σ≈σ₁ ← IHσ σ₁↝ ⊢σ₁
  with Δ≈Δ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σ₁)))
  = -, s-≈-conv (s-≈-sym σ≈σ₁) (⊢≈-sym Δ≈Δ₁) , s-conv ⊢σ₁ (⊢≈-sym Δ≈Δ₁) , ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢t , T≈

,-inv-IH : ∀ {σ₁ i Ψ} →
          A.Γ ⊨s A.σ ↝≈ U.σ′ →
          A.Γ A.⊢s (σ₁ , A.t ∶ A.T ↙ i) ∶ Ψ →
          σ₁ ↝s U.σ′ →
          A.Γ A.⊢s A.σ ∶ A.Δ →
          A.Γ A.⊢s σ₁ ≈ A.σ ∶ A.Δ × A.Γ A.⊢s σ₁ ∶ A.Δ × A.Γ ⊢ A.t ∶[ i ] sub A.T A.σ × A.⊢ (A.T ↙ i) ∷ A.Δ ≈ Ψ 
,-inv-IH IHσ ⊢σ₁,t σ₁↝ ⊢σ 
  with Ψ , ⊢σ₁ , ⊢t , S≈ ← ,-inv ⊢σ₁,t 
  with ⊢∷ ⊢Ψ ⊢T , _ ← presup-⊢≈ S≈
  with σ≈σ₁ ← IHσ σ₁↝ ⊢σ₁ 
  with Δ≈Ψ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σ₁)))
  = s-≈-conv (s-≈-sym σ≈σ₁) (⊢≈-sym Δ≈Ψ) , s-conv ⊢σ₁ (⊢≈-sym Δ≈Ψ) , conv ⊢t ([]-cong-Se‴ ⊢T (s-≈-sym σ≈σ₁)) , ⊢≈-trans (∷-cong-simp Δ≈Ψ (≈-refl (ctxeq-tm (⊢≈-sym Δ≈Ψ) ⊢T))) S≈
  
qσ-inv-IH : ∀ {i j σ₁ Ψ} →
           A.Γ ⊨s A.σ ↝≈ U.σ′ →
           (A.T ↙ j) ∷ A.Γ A.⊢s A.q (A.S ↙ i) σ₁ ∶ Ψ →
           σ₁ ↝s U.σ′ →
           A.Γ A.⊢s A.σ ∶ A.Δ →
           A.Γ A.⊢s σ₁ ≈ A.σ ∶ A.Δ × A.Γ A.⊢s σ₁ ∶ A.Δ × A.⊢ Ψ ≈ (A.S ↙ i) ∷ A.Δ × A.Δ A.⊢ A.S ∶[ 1 + i ] Se i
qσ-inv-IH IHσ ⊢qσ₁ σ₁↝ ⊢σ 
  with θ , Ψ≈ , ⊢σ₁ ← qσ-inv ⊢qσ₁
  with _ , ⊢∷ _ ⊢S ← presup-⊢≈ Ψ≈
  with σ≈σ₁ ← IHσ σ₁↝ ⊢σ₁ 
  with Δ≈Θ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σ₁))) 
  = s-≈-conv (s-≈-sym σ≈σ₁) (⊢≈-sym Δ≈Θ) , s-conv ⊢σ₁ (⊢≈-sym Δ≈Θ) , ⊢≈-trans Ψ≈ (∷-cong-simp (⊢≈-sym Δ≈Θ) (≈-refl ⊢S)) , ctxeq-tm (⊢≈-sym Δ≈Θ) ⊢S

qqσ-inv-IH : ∀ {i₁ i₂ j₁ j₂ σ₁ T₁ T₂ S₁ S₂ Ψ} →
            (∀ {σᵢ Δᵢ} → σᵢ ↝s U.σ′ → A.Γ A.⊢s σᵢ ∶ Δᵢ → A.Γ A.⊢s A.σ ≈ σᵢ ∶ Δᵢ) →
            (T₂ ↙ j₂) ∷ (T₁ ↙ j₁) ∷ A.Γ A.⊢s A.q (S₂ ↙ i₂) (A.q (S₁ ↙ i₁) σ₁) ∶ Ψ →
            σ₁ ↝s U.σ′ →
            A.Γ A.⊢s A.σ ∶ A.Δ →
            A.Γ A.⊢s σ₁ ≈ A.σ ∶ A.Δ × A.Γ A.⊢s σ₁ ∶ A.Δ × A.⊢ Ψ ≈ (S₂ ↙ i₂) ∷ (S₁ ↙ i₁) ∷ A.Δ
qqσ-inv-IH IHσ ⊢qqσ₁ σ₁↝ ⊢σ
  with Ψ , ⊢σ₁ , Ψ≈ ← qqσ-inv ⊢qqσ₁
  with _ , ⊢∷ (⊢∷ _ ⊢S₁) ⊢S₂ ← presup-⊢≈ Ψ≈
  with σ≈σ₁ ← IHσ σ₁↝ ⊢σ₁
  with Δ≈Ψ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σ₁)))
  = s-≈-conv (s-≈-sym σ≈σ₁) (⊢≈-sym Δ≈Ψ) , s-conv ⊢σ₁ (⊢≈-sym Δ≈Ψ) , ⊢≈-trans Ψ≈ (∷-cong-simp (∷-cong-simp (⊢≈-sym Δ≈Ψ) (≈-refl ⊢S₁)) (≈-refl ⊢S₂))
  
⫢Π-[] : ∀ {i j k} →
         U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
         U.Δ′ ⫢ U.S′ ∶ Se i →
         (U.S′ ∷ U.Δ′) ⫢ U.T′ ∶ Se j →
         k ≡ max i j →
         --------------------
         U.Γ′ ⫢ Π U.S′ U.T′ U.[ U.σ′ ] ≈ Π (U.S′ U.[ U.σ′ ]) (U.T′ U.[ U.q U.S′ U.σ′ ]) ∶ Se k
⫢Π-[] ⫢σ′ ⫢S′ ⫢T′ k≡maxij
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , S , _ , Δ↝ , S↝ , ↝Se , ⊢S , IHΔ , IHS ← ⫢S′
     | _ , _ , T , _ , (↝∷ {Γ = Δ₂} {T = S₁} Δ₂↝ S₁↝) , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢∷ ⊢Δ₂ ⊢S₁ ← proj₁ (presup-tm ⊢T)
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂ 
  with S≈S₁ ← IHS S₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₂) ⊢S₁) 
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁))) 
  = -, -, -, -, -, Γ↝ , ↝sub (↝Π S↝ T↝) σ↝ , ↝Π (↝sub S↝ σ↝) (↝sub T↝ (↝, (↝∘ σ↝ ↝wk) ↝v S↝)) , ↝Se 
    , Π-[] (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢S (ctxeq-tm (∷-cong-simp (⊢≈-sym Δ≈Δ₂) (ctxeq-≈ Δ≈Δ₂ (≈-sym S≈S₁))) ⊢T) k≡maxij , IHΓ , IHΠST[σ] , IHΠS[σ]T[qσ]
  where
    ⊢S[σ]∷Γ : A.⊢ (sub S σ ↙ _) ∷ Γ
    ⊢S[σ]∷Γ = ⊢∷ ⊢Γ (t[σ]-Se ⊢S (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)))

    IHΠST[σ] : _ ⊨ _ ↝≈ _
    IHΠST[σ] (↝sub (↝Π Sᵢ↝ Tᵢ↝) σᵢ↝) ⊢ΠST[σ] 
      with _ , σ≈σᵢ , ⊢σᵢ , ⊢ΠST , ≈Se[σᵢ]  ← t[σ]-inv-IH IHσ ⊢ΠST[σ] σᵢ↝ ⊢σ 
      with refl , ≈Se , ⊢Sᵢ , ⊢Tᵢ ← Π-inv′ ⊢ΠST
      with refl , Sᵢ≈S ← IH-transform IHS Sᵢ↝ (ctxeq-tm (⊢≈-sym  Δ≈Δ₁) ⊢Sᵢ) ⊢S
      with S₁≈Sᵢ ← ≈-trans (≈-sym S≈S₁) (≈-sym Sᵢ≈S)
      with refl , Tᵢ≈T ← IH-transform IHT Tᵢ↝ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂) (ctxeq-≈ Δ≈Δ₁ (≈-sym  S₁≈Sᵢ))) ⊢Tᵢ) ⊢T
      = ≈-conv (≈-sym ([]-cong (≈-conv (Π-cong-simp (ctxeq-≈ Δ≈Δ₁ Sᵢ≈S) (ctxeq-≈ (∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₂) Δ≈Δ₁) (ctxeq-≈ Δ≈Δ₂ S₁≈Sᵢ)) Tᵢ≈T) refl) (≈-sym ≈Se)) σ≈σᵢ)) (≈-sym ≈Se[σᵢ])
        
    IHΠS[σ]T[qσ] : _ ⊨ _ ↝≈ _
    IHΠS[σ]T[qσ] (↝Π (↝sub {t = S₁₁} {σ = σᵢ₁} Sᵢ₁↝ σᵢ₁↝) (↝sub {t = Tᵢ} Tᵢ↝ (↝, {T = Sᵢ₂} (↝∘ σᵢ₂↝ ↝wk) ↝v Sᵢ₂↝))) ⊢ΠS[σ]T[qσ] 
      with refl , ≈Se , ⊢Sᵢ₁[σᵢ₁] , ⊢Tᵢ[qσᵢ₂] ← Π-inv′ ⊢ΠS[σ]T[qσ] 
      with Δᵢ₁ , _ , ⊢σᵢ₁ , ⊢Sᵢ₁ , [σ]≈Se ← t[σ]-inv ⊢Sᵢ₁[σᵢ₁]
      with σ≈σᵢ₁ ← IHσ σᵢ₁↝ ⊢σᵢ₁
      with Δ₁≈Δᵢ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ₁)))
      with Δ≈Δᵢ₁ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Δᵢ₁
      with S≈Sᵢ₁ ← IHS Sᵢ₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ₁) ⊢Sᵢ₁)
      with refl , ≈Sei ← unique-typ ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ₁)))
      with Sᵢ₂∷Δᵢ₂ , _ , ⊢qσᵢ₂ , ⊢Tᵢ , e ← t[σ]-inv ⊢Tᵢ[qσᵢ₂]
      with Δᵢ₂ , ≈Sᵢ₂∷Δᵢ₂ , ⊢σᵢ₂ ← qσ-inv ⊢qσᵢ₂
      with σ≈σᵢ₂ ← IHσ σᵢ₂↝ ⊢σᵢ₂
      with Δ₁≈Δᵢ₂ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ₂)))
      with Δ≈Δᵢ₂ ← ⊢≈-trans Δ≈Δ₁ Δ₁≈Δᵢ₂
      with (⊢∷ ⊢Δᵢ₂ ⊢Sᵢ₂) ← proj₂ (presup-⊢≈ ≈Sᵢ₂∷Δᵢ₂)
      with S≈Sᵢ₂ ← IHS Sᵢ₂↝ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ₂) ⊢Sᵢ₂)
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ₂)))
      with T≈Tᵢ ← IHT Tᵢ↝ (ctxeq-tm (⊢≈-trans ≈Sᵢ₂∷Δᵢ₂ (∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δᵢ₂) Δ≈Δ₂) (ctxeq-≈ Δ≈Δᵢ₂ (≈-trans (≈-sym S≈Sᵢ₂) S≈S₁) ))) ⊢Tᵢ)
      with refl , ≈Sej ← unique-typ ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ)))
      = ≈-conv (Π-cong (t[σ]-Se (ctxeq-tm Δ≈Δ₁ ⊢S) ⊢σ) ([]-cong-Se-simp (ctxeq-≈ Δ≈Δᵢ₁ (≈-conv S≈Sᵢ₁ (≈-sym ≈Sei))) σ≈σᵢ₁) 
                       ([]-cong-Se-simp (ctxeq-≈ (∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₂) Δ≈Δ₁) (ctxeq-≈ Δ≈Δ₂ (≈-sym S≈S₁))) (≈-conv T≈Tᵢ (≈-sym ≈Sej) ))
                                        (,-cong (∘-cong (wk-≈ ⊢S[σ]∷Γ) (s-≈-conv σ≈σᵢ₂ (⊢≈-trans (⊢≈-sym Δ≈Δᵢ₂) Δ≈Δ₁))) (ctxeq-tm Δ≈Δ₁ ⊢S) (ctxeq-≈ Δ≈Δ₁ S≈Sᵢ₂) (≈-refl (conv (vlookup ⊢S[σ]∷Γ here) ([∘]-Se ⊢S (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) (s-wk ⊢S[σ]∷Γ)))))) refl) 
               (≈-sym ≈Se)

⫢Π-cong : ∀ {i j k S₁′ S₂′ T₁′ T₂′} →
           U.Γ′ ⫢ S₁′ ∶ Se i →
           U.Γ′ ⫢ S₁′ ≈ S₂′ ∶ Se i →
           S₁′ ∷ U.Γ′ ⫢ T₁′ ≈ T₂′ ∶ Se j →
           k ≡ max i j →
           --------------------
           U.Γ′ ⫢ Π S₁′ T₁′ ≈ Π S₂′ T₂′ ∶ Se k
⫢Π-cong ⫢S₁′ S₁′≈S₂′ T₁′≈T₂′ k≡maxij
  with _ , Γ , S₁₁ , _ , Γ↝ , S₁₁↝ , ↝Se , ⊢S₁ , IHΓ , IHS₁ ← ⫢S₁′
     | _ , Γ₁ , S₁₂ , S₂₁ , _ , Γ₁↝ , S₁₂↝ , S₂₁↝ , ↝Se , S₁₂≈S₂₁ , _ , _ , IHS₂ ← S₁′≈S₂′
     | _ , S∷Γ₂ , T₁₁ , T₂₁ , _ , (↝∷ {T = S₁₃} Γ₂↝ S₁₃↝) , T₁₁↝ , T₂₁↝ , ↝Se , T₁₁≈T₂₁ , _ , IHT₁ , IHT₂ ← T₁′≈T₂′ 
  with ⊢Γ₁ , ⊢S₁₂ , ⊢S₂₁ , _ ← presup-≈ S₁₂≈S₂₁
     | ⊢∷ ⊢Γ₂ ⊢S₁₃ , ⊢T₁₁ , ⊢T₂₁ , _ ← presup-≈ T₁₁≈T₂₁
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
  with refl ← ⊢T:Se-lvl ⊢S₁
     | refl ← ⊢T≈S:Se-lvl S₁₂≈S₂₁
     | refl ← ⊢T≈S:Se-lvl T₁₁≈T₂₁ 
  with S₁≈S₁₂ ← IHS₁ S₁₂↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁₂)
     | S₁≈S₁₃ ← IHS₁ S₁₃↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₁₃) 
  with refl ← unique-lvl ⊢S₁ (proj₁ (proj₂ (presup-≈ S₁≈S₁₃)))
  = -, -, -, -, -, Γ↝ , ↝Π S₁₁↝ T₁₁↝ , ↝Π S₂₁↝ T₂₁↝ , ↝Se , 
    Π-cong ⊢S₁ (≈-trans S₁≈S₁₂ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) S₁₂≈S₂₁)) (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (ctxeq-≈ Γ≈Γ₂ (≈-sym S₁≈S₁₃))) T₁₁≈T₂₁) k≡maxij , IHΓ , IHΠS₁T₁ , IHΠS₂T₂
  
  where
    IHΠS₁T₁ : _ ⊨ _ ↝≈ _
    IHΠS₁T₁ (↝Π {S = Sᵢ} {T = Rᵢ} Sᵢ↝ Rᵢ↝) ⊢ΠSᵢRᵢ 
      with refl , Tᵢ≈ , ⊢Sᵢ , ⊢Rᵢ ← Π-inv′ ⊢ΠSᵢRᵢ
      with S₁≈Sᵢ ← IHS₁ Sᵢ↝ ⊢Sᵢ
      with refl ← unique-lvl ⊢S₁ (proj₁ (proj₂ (presup-≈ S₁≈Sᵢ)))
      with T₁≈Rᵢ ← IHT₁ Rᵢ↝ (ctxeq-tm (∷-cong-simp Γ≈Γ₂ (≈-trans (≈-sym S₁≈Sᵢ) S₁≈S₁₃)) ⊢Rᵢ)
      with refl ← unique-lvl ⊢T₁₁ (proj₁ (proj₂ (presup-≈ T₁≈Rᵢ)))
      = ≈-conv (Π-cong ⊢S₁ S₁≈Sᵢ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (ctxeq-≈ Γ≈Γ₂ (≈-sym S₁≈S₁₃))) T₁≈Rᵢ) refl) (≈-sym Tᵢ≈)

    IHΠS₂T₂ : _ ⊨ _ ↝≈ _
    IHΠS₂T₂ (↝Π {S = Sᵢ} {T = Rᵢ} Sᵢ↝ Rᵢ↝) ⊢ΠSᵢRᵢ 
      with refl , Tᵢ≈ , ⊢Sᵢ , ⊢Rᵢ ← Π-inv′ ⊢ΠSᵢRᵢ 
      with S₂≈Sᵢ ← IHS₂ Sᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢Sᵢ)
      with refl ← unique-lvl ⊢S₂₁ (proj₁ (proj₂ (presup-≈ S₂≈Sᵢ)))
      with T₂≈Rᵢ ← IHT₂ Rᵢ↝ (ctxeq-tm (∷-cong-simp Γ≈Γ₂ (≈-trans (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym S₂≈Sᵢ)) (≈-trans (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym S₁₂≈S₂₁)) (≈-trans (≈-sym S₁≈S₁₂) S₁≈S₁₃)))) ⊢Rᵢ)
      with refl ← unique-lvl ⊢T₂₁ (proj₁ (proj₂ (presup-≈ T₂≈Rᵢ)))
      = ≈-conv (Π-cong (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₂₁) (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) S₂≈Sᵢ) (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (ctxeq-≈ Γ≈Γ₂ (≈-trans (≈-sym S₁≈S₁₃) (≈-trans S₁≈S₁₂ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) S₁₂≈S₂₁))))) T₂≈Rᵢ) refl) (≈-sym Tᵢ≈)

⫢Liftt-cong : ∀ {i j} →
              U.Γ′ ⫢ U.S′ ≈ U.T′ ∶ Se i →
              --------------------
              U.Γ′ ⫢ Liftt j U.S′ ≈ Liftt j U.T′ ∶ Se (j + i)
⫢Liftt-cong S′≈T′
  with _ , Γ , S , T , _ , Γ↝ , S↝ , T↝ , ↝Se , S≈T , IHΓ , IHS , IHT ← S′≈T′
  with ⊢Γ , ⊢S , ⊢T , _ ← presup-≈ S≈T
  with refl ← ⊢T≈S:Se-lvl S≈T = -, -, -, -, -, Γ↝ , ↝Liftt S↝ , ↝Liftt T↝ , ↝Se , Liftt-cong _ S≈T , IHΓ , IHLifttS , IHLifttT 

  where 
    IHLifttS : _ ⊨ _ ↝≈ _
    IHLifttS (↝Liftt Sᵢ↝) ⊢Liftt 
      with refl , ⊢Sᵢ , ≈Se ← Liftt-inv′ ⊢Liftt
      with refl , Sᵢ≈S ← IH-transform IHS Sᵢ↝ ⊢Sᵢ ⊢S
      = ≈-conv (Liftt-cong _ (≈-sym Sᵢ≈S)) (≈-sym ≈Se) 

    IHLifttT : _ ⊨ _ ↝≈ _
    IHLifttT (↝Liftt Tᵢ↝) ⊢Liftt        
      with refl , ⊢Tᵢ , ≈Se ← Liftt-inv′ ⊢Liftt
      with refl , Tᵢ≈T ← IH-transform IHT Tᵢ↝ ⊢Tᵢ ⊢T
      = ≈-conv (Liftt-cong _ (≈-sym Tᵢ≈T)) (≈-sym ≈Se) 

⫢v-≈ : ∀ {x} →
       ⫢ U.Γ′ →
       x ∶ U.T′ ∈! U.Γ′ →
       --------------------
       U.Γ′ ⫢ v x ≈ v x ∶ U.T′
⫢v-≈ ⫢Γ′ x∈Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
  with i , T , T↝ , x∈Γ ← U⇒A-vlookup Γ↝ x∈Γ′ = -, -, -, -, -, Γ↝ , ↝v , ↝v , T↝ , v-≈ ⊢Γ x∈Γ , IHΓ , (λ {↝v ⊢v → ≈-refl ⊢v }) , (λ {↝v ⊢v → ≈-refl ⊢v })

⫢ze-≈ : ⫢ U.Γ′ →
        --------------------
        U.Γ′ ⫢ ze ≈ ze ∶ N
⫢ze-≈ ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
    = -, -, -, -, -, Γ↝ , ↝ze , ↝ze , ↝N , ze-≈ ⊢Γ , IHΓ , (λ {↝ze ⊢ze → ≈-refl ⊢ze }) , (λ {↝ze ⊢ze → ≈-refl ⊢ze })

⫢su-cong : U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ N →
           --------------------
           U.Γ′ ⫢ su U.s′ ≈ su U.t′ ∶ N
⫢su-cong s′≈t′
  with _ , Γ , s , t , _ , Γ↝ , s↝ , t↝ , ↝N , s≈t , IHΓ , IHs , IHt ← s′≈t′
  with ⊢Γ , ⊢s , ⊢t , _ ← presup-≈ s≈t
  with refl ← ⊢t≈s∶N-lvl s≈t
    = -, -, -, -, -, Γ↝ , ↝su s↝ , ↝su t↝ , ↝N , su-cong s≈t , IHΓ , IHsus , IHsut
  
  where
    IHsus : _ ⊨ _ ↝≈ _
    IHsus (↝su sᵢ↝) ⊢susᵢ 
      with refl , ≈N , ⊢sᵢ ← su-inv ⊢susᵢ
      with _ , sᵢ≈s ← IH-transform IHs sᵢ↝ ⊢sᵢ ⊢s
      = ≈-conv (su-cong (≈-sym sᵢ≈s)) (≈-sym ≈N)

    IHsut : _ ⊨ _ ↝≈ _
    IHsut (↝su tᵢ↝) ⊢sutᵢ
      with refl , ≈N , ⊢tᵢ ← su-inv ⊢sutᵢ
      with _ , tᵢ≈t ← IH-transform IHt tᵢ↝ ⊢tᵢ ⊢t
      = ≈-conv (su-cong (≈-sym tᵢ≈t)) (≈-sym ≈N)

⫢rec-cong : ∀ {i T₁′ T₂′ s₁′ s₂′ r₁′ r₂′ t₁′ t₂′} →
            N ∷ U.Γ′ ⫢ T₁′ ∶ Se i →
            N ∷ U.Γ′ ⫢ T₁′ ≈ T₂′ ∶ Se i →
            U.Γ′ ⫢ s₁′ ≈ s₂′ ∶ T₁′ U.[| ze ∶ N ] →
            T₁′ ∷ N ∷ U.Γ′ ⫢ r₁′ ≈ r₂′ ∶ T₁′ U.[ (wk ∘ wk) , su (v 1) ∶ N ] →
            U.Γ′ ⫢ t₁′ ≈ t₂′ ∶ N →
            --------------------
            U.Γ′ ⫢ rec T₁′ s₁′ r₁′ t₁′ ≈ rec T₂′ s₂′ r₂′ t₂′ ∶ T₁′ U.[| t₁′ ∶ N ]
⫢rec-cong _ T₁′≈T₂′ s₁′≈s₂′ r₁≈r₂′ t₁≈t₂′
  with _ , N∷Γ₁ , T₁₁ , T₂₁ , _ , (↝∷ Γ₁↝ ↝N) , T₁₁↝ , T₂₁↝ , ↝Se , T₁₁≈T₂₁ , _ , IHT₁ , IHT₂ ← T₁′≈T₂′
     | _ , Γ , s₁ , s₂ , _ , Γ↝ , s₁↝ , s₂↝ , ↝sub {t = T₁₂} T₁₂↝ (↝, ↝I ↝ze ↝N) , s₁≈s₂ , IHΓ , IHs₁ , IHs₂ ← s₁′≈s₂′
     | _ , T₁∷N∷Γ₂ , r₁ , r₂ , _ , ↝∷ {T = T₁₄} (↝∷ Γ₂↝ ↝N) T₁₄↝ , r₁↝ , r₂↝ , ↝sub {t = T₁₃} T₁₃↝ (↝, (↝∘ ↝wk ↝wk) (↝su ↝v) ↝N) , r₁≈r₂ , _ , IHr₁ , IHr₂ ← r₁≈r₂′
     | _ , Γ₃ , t₁ , t₂ , N , Γ₃↝ , t₁↝ , t₂↝ , ↝N , t₁≈t₂ , _ , IHt₁ , IHt₂ ← t₁≈t₂′ 
  with refl ← ⊢T≈S:Se-lvl T₁₁≈T₂₁
  with _ , refl , ⊢T₁₂ ← T[I,ze]-inv (proj₂ (proj₂ (proj₂ (presup-≈ s₁≈s₂))))
     | _ , refl , ⊢T₁₃ ← T[wkwk,suv1]-inv (proj₂ (proj₂ (proj₂ (presup-≈ r₁≈r₂)))) 
  with (⊢∷ ⊢Γ₁ ⊢N₁) , ⊢T₁₁ , ⊢T₂₁ , _ ← presup-≈ T₁₁≈T₂₁
     | ⊢Γ , ⊢s₁ , ⊢s₂ , _ ← presup-≈ s₁≈s₂
     | ⊢∷ (⊢∷ ⊢Γ₂ ⊢N₂) ⊢T₁₄ , ⊢r₁ , ⊢r₂ , _ ← presup-≈ r₁≈r₂
     | ⊢Γ₃ , ⊢t₁ , ⊢t₂ , _ ← presup-≈ t₁≈t₂
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Γ≈Γ₃ ← IHΓ 0 Γ₃↝ ⊢Γ₃ 
  with refl ← N≈⇒eq-lvl (≈-refl ⊢N₁)
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₂)
     | refl ← ⊢t≈s∶N-lvl t₁≈t₂ 
  with N∷Γ₂≈N∷Γ₁ ← ∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (≈-refl ⊢N₂)
     | N∷Γ≈N∷Γ₁ ← ∷-cong-simp Γ≈Γ₁ (≈-refl (N-wf ⊢Γ))
     | N∷Γ≈N∷Γ₂ ← ∷-cong-simp Γ≈Γ₂ (≈-refl (N-wf ⊢Γ))
  with refl , T₁₁≈T₁₂ ← IH-transform IHT₁ T₁₂↝ (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T₁₂) ⊢T₁₁
     | refl , T₁₁≈T₁₃ ← IH-transform IHT₁ T₁₃↝ (ctxeq-tm N∷Γ₂≈N∷Γ₁ ⊢T₁₃) ⊢T₁₁
     | refl , T₁₁≈T₁₄ ← IH-transform IHT₁ T₁₄↝ (ctxeq-tm  N∷Γ₂≈N∷Γ₁ ⊢T₁₄) ⊢T₁₁
    = -, -, -, -, -, Γ↝ , ↝rec T₁₁↝ s₁↝ r₁↝ t₁↝ , ↝rec T₂₁↝ s₂↝ r₂↝ t₂↝ , ↝sub T₁₁↝ (↝, ↝I t₁↝ ↝N) , 
      rec-cong-simp (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) T₁₁≈T₂₁) 
                    (≈-conv s₁≈s₂ ([]-cong-Se′ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) T₁₁≈T₁₂) (⊢I,ze ⊢Γ))) 
                    (≈-conv (ctxeq-≈ (∷-cong-simp (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (≈-refl ⊢N₂)) (ctxeq-≈ (⊢≈-sym N∷Γ₂≈N∷Γ₁) T₁₁≈T₁₄)) r₁≈r₂) ([]-cong-Se′ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) T₁₁≈T₁₃) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)) ⊢T₁₁))))) 
                    (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) t₁≈t₂) , 
      IHΓ , IHrec₁ , IHrec₂

    where
      IHrec₁ : _ ⊨ _ ↝≈ _
      IHrec₁ (↝rec Tᵢ↝ sᵢ↝ rᵢ↝ tᵢ↝) ⊢recᵢ 
        with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢tᵢ , ≈Tᵢ[|tᵢ] ← rec-inv ⊢recᵢ 
        with refl , Tᵢ≈T₁₁ ← IH-transform IHT₁ Tᵢ↝ (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢Tᵢ) ⊢T₁₁
        with _ , sᵢ≈s₁ ← IH-transform IHs₁ sᵢ↝  ⊢sᵢ ⊢s₁
        with _ , rᵢ≈r₁ ← IH-transform IHr₁ rᵢ↝ (ctxeq-tm (∷-cong-simp N∷Γ≈N∷Γ₂ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans Tᵢ≈T₁₁ (≈-sym T₁₁≈T₁₄)))) ⊢rᵢ) ⊢r₁
        with refl , tᵢ≈t₁ ← IH-transform IHt₁ tᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ) ⊢t₁
        = ≈-conv (≈-sym (rec-cong-simp (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) Tᵢ≈T₁₁) 
                        (≈-conv sᵢ≈s₁ ([]-cong-Se′ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans T₁₁≈T₁₂ (≈-sym Tᵢ≈T₁₁))) (⊢I,ze ⊢Γ) )) 
                        (≈-conv (ctxeq-≈ (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ (⊢≈-sym N∷Γ₂≈N∷Γ₁) (≈-trans T₁₁≈T₁₄ (≈-sym Tᵢ≈T₁₁)))) rᵢ≈r₁) ([]-cong-Se′ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans T₁₁≈T₁₃ (≈-sym Tᵢ≈T₁₁))) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) ⊢Tᵢ)))) 
                        (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) tᵢ≈t₁))) (≈-sym ≈Tᵢ[|tᵢ])

      IHrec₂ : _ ⊨ _ ↝≈ _
      IHrec₂ (↝rec Tᵢ↝ sᵢ↝ rᵢ↝ tᵢ↝) ⊢recᵢ 
        with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢tᵢ , ≈Tᵢ[|tᵢ] ← rec-inv ⊢recᵢ 
        with refl , Tᵢ≈T₂₁ ← IH-transform IHT₂ Tᵢ↝ (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢Tᵢ) ⊢T₂₁
        with _ , sᵢ≈s₁ ← IH-transform IHs₂ sᵢ↝  ⊢sᵢ ⊢s₂
        with _ , rᵢ≈r₁ ← IH-transform IHr₂ rᵢ↝ (ctxeq-tm (∷-cong-simp N∷Γ≈N∷Γ₂ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans Tᵢ≈T₂₁ (≈-trans (≈-sym T₁₁≈T₂₁) (≈-sym T₁₁≈T₁₄))))) ⊢rᵢ) ⊢r₂
        with refl , tᵢ≈t₁ ← IH-transform IHt₂ tᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ) ⊢t₂
        = ≈-conv (≈-sym (rec-cong-simp (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) Tᵢ≈T₂₁) 
                        (≈-conv sᵢ≈s₁ ([]-cong-Se′ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans T₁₁≈T₁₂ (≈-trans T₁₁≈T₂₁ (≈-sym Tᵢ≈T₂₁)))) (⊢I,ze ⊢Γ) )) 
                        (≈-conv (ctxeq-≈ (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ (⊢≈-sym N∷Γ₂≈N∷Γ₁) (≈-trans T₁₁≈T₁₄ (≈-trans T₁₁≈T₂₁ (≈-sym Tᵢ≈T₂₁))))) rᵢ≈r₁) ([]-cong-Se′ (ctxeq-≈ (⊢≈-sym N∷Γ≈N∷Γ₁) (≈-trans T₁₁≈T₁₃ (≈-trans T₁₁≈T₂₁ (≈-sym Tᵢ≈T₂₁)))) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) ⊢Tᵢ)))) 
                        (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) tᵢ≈t₁))) (≈-sym ≈Tᵢ[|tᵢ])

⫢Λ-cong : ∀ {i S₁′ S₂′ t₁′ t₂′} →
           U.Γ′ ⫢ S₁′ ∶ Se i →
           U.Γ′ ⫢ S₁′ ≈ S₂′ ∶ Se i →
           (S₁′ ∷ U.Γ′) ⫢ t₁′ ≈ t₂′ ∶ U.T′ →
           --------------------
           U.Γ′ ⫢ Λ S₁′ t₁′ ≈ Λ S₂′ t₂′ ∶ Π S₁′ U.T′
⫢Λ-cong _ S₁′≈S₂′ t₁′≈t₂′
  with _ , Γ , S₁₁ , S₂₁ , _ , Γ↝ , S₁₁↝ , S₂₁↝ , ↝Se , S₁₁≈S₂₁ , IHΓ , IHS₁ , IHS₂ ← S₁′≈S₂′
     | _ , S∷Γ₁ , t₁ , t₂ , T , ↝∷ {T = S₁₂} Γ₁↝ S₁₂↝ , t₁↝ , t₂↝ , T↝ , t₁≈t₂ , _ , IHt₁ , IHt₂ ← t₁′≈t₂′ 
  with refl ← ⊢T≈S:Se-lvl S₁₁≈S₂₁
  with ⊢∷ ⊢Γ₁ ⊢S₁₂ , ⊢t₁ , ⊢t₂ , _ ← presup-≈ t₁≈t₂
     | ⊢Γ , ⊢S₁₁ , ⊢S₂₁ , _ ← presup-≈ S₁₁≈S₂₁
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with refl , S₁₁≈S₁₂ ← IH-transform IHS₁ S₁₂↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁₂) ⊢S₁₁ 
    = -, -, -, -, -, Γ↝ , ↝Λ S₁₁↝ t₁↝ , ↝Λ S₂₁↝ t₂↝ , ↝Π S₁₁↝ T↝ ,
      Λ-cong-simp S₁₁≈S₂₁ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ S₁₁≈S₁₂)) t₁≈t₂) refl , 
      IHΓ , IHΛ₁ , IHΛ₂
  where
    IHΛ₁ : _ ⊨ _ ↝≈ _
    IHΛ₁ (↝Λ Sᵢ↝ tᵢ↝) ⊢Λ 
      with _ , _ , ≈Π , refl , ⊢tᵢ ← Λ-inv′ ⊢Λ
      with ⊢∷ ⊢Γᵢ ⊢Sᵢ , _ ← presup-tm ⊢tᵢ
      with refl , Sᵢ≈S ← IH-transform IHS₁ Sᵢ↝  ⊢Sᵢ ⊢S₁₁
      with t≈tᵢ ← IHt₁ tᵢ↝ (ctxeq-tm (∷-cong-simp Γ≈Γ₁ (≈-trans Sᵢ≈S (≈-sym S₁₁≈S₁₂))) ⊢tᵢ)
      with refl , T≈ ← unique-typ ⊢t₁ (proj₁ (proj₂ (presup-≈ t≈tᵢ)))
      = ≈-conv (≈-sym (Λ-cong-simp Sᵢ≈S (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym ( ≈-trans Sᵢ≈S (≈-sym S₁₁≈S₁₂) )) )) (≈-sym t≈tᵢ)) refl)) (≈-sym ≈Π)

    IHΛ₂ : _ ⊨ _ ↝≈ _
    IHΛ₂ (↝Λ Sᵢ↝ tᵢ↝) ⊢Λ 
      with _ , _ , ≈Π , refl , ⊢tᵢ ← Λ-inv′ ⊢Λ
      with ⊢∷ ⊢Γᵢ ⊢Sᵢ , _ ← presup-tm ⊢tᵢ
      with refl , Sᵢ≈S ← IH-transform IHS₂ Sᵢ↝ ⊢Sᵢ ⊢S₂₁
      with t≈tᵢ ← IHt₂ tᵢ↝ (ctxeq-tm (∷-cong-simp Γ≈Γ₁ (≈-trans Sᵢ≈S (≈-trans (≈-sym S₁₁≈S₂₁) (≈-sym S₁₁≈S₁₂))) ) ⊢tᵢ)
      with refl , T≈ ← unique-typ ⊢t₂ (proj₁ (proj₂ (presup-≈ t≈tᵢ)))
      = ≈-conv (≈-sym (Λ-cong-simp Sᵢ≈S (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-sym (≈-trans Sᵢ≈S (≈-trans (≈-sym S₁₁≈S₂₁) (≈-sym S₁₁≈S₁₂)))) )) (≈-sym t≈tᵢ)) refl)) (≈-sym ≈Π)


⫢$-cong : ∀ {i j s₁′ s₂′ r₁′ r₂′} →
           U.Γ′ ⫢ U.S′ ∶ Se i →
           (U.S′ ∷ U.Γ′) ⫢ U.T′ ∶ Se j →
           U.Γ′ ⫢ r₁′ ≈ r₂′ ∶ Π U.S′ U.T′ →
           U.Γ′ ⫢ s₁′ ≈ s₂′ ∶ U.S′ →
           --------------------
           U.Γ′ ⫢ r₁′ $ s₁′ ≈ r₂′ $ s₂′ ∶ U.T′ U.[| s₁′ ∶ U.S′ ]
⫢$-cong ⫢S′ ⫢T′ ⫢r₁′≈r₂′ ⫢s₁′≈s₂′
  with _ , Γ , S , _ , Γ↝ , S↝ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | _ , S₄∷Γ₁ , T , _ , ↝∷ {T = S₁} {i = i} Γ₁↝ S₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | _ , Γ₂ , r₁ , r₂ , _ , Γ₂↝ , r₁↝ , r₂↝ , ↝Π S₂↝ T₁↝ , r₁≈r₂ , _ , IHr₁ , IHr₂ ← ⫢r₁′≈r₂′
     | _ , Γ₃ , s₁ , s₂ , S₃ , Γ₃↝ , s₁↝ , s₂↝ , S₃↝ , s₁≈s₂ , _ , IHs₁ , IHs₂ ← ⫢s₁′≈s₂′ 
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T
  with ⊢Γ ← proj₁ (presup-tm ⊢S)
     | ⊢∷ ⊢Γ₁ ⊢S₁ , _ ← presup-tm ⊢T
     | ⊢Γ₂ , ⊢r₁ , ⊢r₂ , ⊢ΠS₂T₁ ← presup-≈ r₁≈r₂
     | ⊢Γ₃ , ⊢s₁ , ⊢s₂ , ⊢S₃ ← presup-≈ s₁≈s₂
  with refl , ⊢S₂ , ⊢T₁ ← Π-inv ⊢ΠS₂T₁
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Γ≈Γ₃ ← IHΓ 0 Γ₃↝ ⊢Γ₃ 
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁) ⊢S
     | refl , S≈S₂ ← IH-transform IHS S₂↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₂) ⊢S
     | refl , S≈S₃ ← IH-transform IHS S₃↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢S₃) ⊢S
  with S₁≈S₂ ← ≈-trans S≈S₁ (≈-sym S≈S₂)
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₂ (≈-sym S₁≈S₂))) ⊢T₁) ⊢T 
  = -, -, -, -, -, Γ↝ , ↝$ r₁↝ s₁↝ , ↝$ r₂↝ s₂↝ , ↝sub T↝ (↝, ↝I s₁↝ S↝) , 
    $-cong-simp (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) r₁≈r₂) (Π-cong-simp S≈S₂ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ S₁≈S₂)) T≈T₁) refl)) 
                (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) s₁≈s₂) S≈S₃) 
                refl , 
    IHΓ , IHr$s₁ , IHr$s₂
  where 
    IHr$s₁ : _ ⊨ _ ↝≈ _
    IHr$s₁ (↝$ rᵢ↝ sᵢ↝) ⊢r$s
      with i , k , Sᵢ , Tᵢ , ⊢rᵢ , ⊢sᵢ , refl , ≈Tᵢ[s] ← $-inv ⊢r$s 
      with ⊢ΠSᵢTᵢ ← proj₂ (presup-tm ⊢rᵢ)
      with _ , ⊢Sᵢ , ⊢Tᵢ ← Π-inv ⊢ΠSᵢTᵢ
      with r≈rᵢ ← IHr₁ rᵢ↝ (ctxeq-tm Γ≈Γ₂ ⊢rᵢ)
      with s≈sᵢ ← IHs₁ sᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢sᵢ)
      = ≈-conv (≈-sym ($-cong ⊢Sᵢ ⊢Tᵢ (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) (≈-sym r≈rᵢ)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym s≈sᵢ)) refl)) (≈-sym ≈Tᵢ[s])

    IHr$s₂ : _ ⊨ _ ↝≈ _
    IHr$s₂ (↝$ rᵢ↝ sᵢ↝) ⊢r$s
      with i , k , Sᵢ , Tᵢ , ⊢rᵢ , ⊢sᵢ , refl , ≈Tᵢ[s] ← $-inv ⊢r$s 
      with ⊢ΠSᵢTᵢ ← proj₂ (presup-tm ⊢rᵢ)
      with _ , ⊢Sᵢ , ⊢Tᵢ ← Π-inv ⊢ΠSᵢTᵢ
      with r≈rᵢ ← IHr₂ rᵢ↝ (ctxeq-tm Γ≈Γ₂ ⊢rᵢ)
      with s≈sᵢ ← IHs₂ sᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢sᵢ)
      = ≈-conv (≈-sym ($-cong-simp (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) (≈-sym r≈rᵢ)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym s≈sᵢ)) refl)) (≈-sym ≈Tᵢ[s])

⫢liftt-cong : ∀ {j} →
              U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ U.T′ →
              --------------------
              U.Γ′ ⫢ liftt j U.s′ ≈ liftt j U.t′ ∶ Liftt j U.T′
⫢liftt-cong s′≈t′
  with _ , Γ , s , t , T , Γ↝ , s↝ , t↝ , ↝T , s≈t , IHΓ , IHs , IHt ← s′≈t′ 
  = -, -, -, -, -, Γ↝ , ↝liftt s↝ , ↝liftt t↝ , ↝Liftt ↝T , liftt-cong _ s≈t , IHΓ , IHlifts , IHliftt

  where
    IHlifts : _ ⊨ _ ↝≈ _
    IHlifts (↝liftt sᵢ↝) ⊢liftsᵢ
      with i , _ , refl , ⊢sᵢ , ≈Liftt ← liftt-inv ⊢liftsᵢ
      with s≈sᵢ ← IHs sᵢ↝ ⊢sᵢ
      = ≈-conv (liftt-cong _ s≈sᵢ) (≈-sym ≈Liftt)
    
    IHliftt : _ ⊨ _ ↝≈ _
    IHliftt (↝liftt tᵢ↝) ⊢lifttᵢ 
      with i , _ , refl , ⊢tᵢ , ≈Liftt ← liftt-inv ⊢lifttᵢ
      with t≈tᵢ ← IHt tᵢ↝ ⊢tᵢ
      = ≈-conv (liftt-cong _ t≈tᵢ) (≈-sym ≈Liftt)

⫢unliftt-cong : ∀ {i j} →
                U.Γ′ ⫢ U.T′ ∶ Se i →
                U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ Liftt j U.T′ →
                --------------------
                U.Γ′ ⫢ unlift U.s′ ≈ unlift U.t′ ∶ U.T′
⫢unliftt-cong _ ⫢s′≈t′
  with _ , Γ , s , t , _ , Γ↝ , s↝ , t↝ , ↝Liftt ↝T , s≈t , IHΓ , IHs , IHt ← ⫢s′≈t′
  with ⊢Γ , ⊢s , ⊢t , ⊢LifttT ← presup-≈ s≈t
  with refl , ⊢T ← Liftt-inv ⊢LifttT
    = -, -, -, -, -, Γ↝ , ↝unlift s↝ , ↝unlift t↝ , ↝T , unlift-cong _ ⊢T s≈t , IHΓ , IHunlifts , IHunliftt
  
  where
    IHunlifts : _ ⊨ _ ↝≈ _
    IHunlifts (↝unlift sᵢ↝) ⊢unliftsᵢ 
      with i , j , Tᵢ , refl , ⊢sᵢ , ≈S ← unlift-inv ⊢unliftsᵢ
      with ⊢LiftTᵢ ← proj₂ (presup-tm ⊢sᵢ)
      with _ , ⊢Tᵢ ← Liftt-inv ⊢LiftTᵢ
      with s≈sᵢ ← IHs sᵢ↝ ⊢sᵢ
      = ≈-conv (unlift-cong _ ⊢Tᵢ s≈sᵢ) (≈-sym ≈S)

    IHunliftt : _ ⊨ _ ↝≈ _
    IHunliftt (↝unlift tᵢ↝) ⊢unlifttᵢ
      with i , j , Tᵢ , refl , ⊢tᵢ , ≈S ← unlift-inv ⊢unlifttᵢ
      with ⊢LiftTᵢ ← proj₂ (presup-tm ⊢tᵢ)
      with _ , ⊢Tᵢ ← Liftt-inv ⊢LiftTᵢ
      with t≈tᵢ ← IHt tᵢ↝ ⊢tᵢ
      = ≈-conv (unlift-cong _ ⊢Tᵢ t≈tᵢ) (≈-sym ≈S)

⫢[]-cong : U.Δ′ ⫢ U.t′ ≈ U.s′ ∶ U.T′ →
           U.Γ′ ⫢s U.σ′ ≈ U.τ′ ∶ U.Δ′ →
           --------------------
           U.Γ′ ⫢ U.t′ U.[ U.σ′ ] ≈ U.s′ U.[ U.τ′ ] ∶ U.T′ U.[ U.σ′ ]
⫢[]-cong t′≈s′ σ′≈τ′
  with _ , Δ , t , s , T , Δ₁↝ , t↝ , s↝ , ↝T , t≈s , IHΔ , IHt , IHs ← t′≈s′
     | Γ , Δ₁ , σ , τ , Γ↝ , Δ₁↝ , σ↝ , τ↝ , σ≈τ , IHΓ , IHσ , IHτ , _ ← σ′≈τ′
  with ⊢Γ , ⊢σ , ⊢τ , ⊢Δ ← presup-s-≈ σ≈τ
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ
     = -, -, -, -, -, Γ↝ , ↝sub t↝ σ↝ , ↝sub s↝ τ↝ , ↝sub ↝T σ↝ , []-cong (ctxeq-≈ Δ≈Δ₁ t≈s) σ≈τ , IHΓ ,  IHt[σ] , IHs[τ]

  where
    IHt[σ] : _ ⊨ _ ↝≈ _
    IHt[σ] (↝sub tᵢ↝ σᵢ↝) ⊢tᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢tᵢ[σᵢ] σᵢ↝ ⊢σ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-sym t≈tᵢ) (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₁)))) (≈-sym ≈T[σ])

    IHs[τ] : _ ⊨ _ ↝≈ _
    IHs[τ] (↝sub sᵢ↝ τᵢ↝) ⊢sᵢ[τᵢ] 
      with _ , τᵢ≈τ , ⊢τᵢ , ⊢sᵢ , ≈T[τ] ← t[σ]-inv-IH IHτ ⊢sᵢ[τᵢ] τᵢ↝ ⊢τ 
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢sᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-sym s≈sᵢ) (s-≈-conv τᵢ≈τ (⊢≈-sym Δ≈Δ₁)))) (≈-sym ≈T[τ])

⫢ze-[] :  U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
          --------------------
          U.Γ′ ⫢ ze U.[ U.σ′ ] ≈ ze ∶ N
⫢ze-[] ⫢σ′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′ 
  = -, -, -, -, -, Γ↝ , ↝sub ↝ze σ↝ , ↝ze , ↝N , ze-[] ⊢σ , IHΓ , IHze[σ] , λ { ↝ze ⊢ze → ≈-refl ⊢ze }
  
  where
    IHze[σ] : _ ⊨ _ ↝≈ _
    IHze[σ] (↝sub ↝ze σᵢ↝) ⊢ze[σᵢ]
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢ze , ≈T[σᵢ] ← t[σ]-inv-IH IHσ ⊢ze[σᵢ] σᵢ↝ ⊢σ
      = ≈-conv (≈-sym ([]-cong (≈-refl ⊢ze) σᵢ≈σ)) (≈-sym ≈T[σᵢ])

⫢su-[] : U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
         U.Δ′ ⫢ U.t′ ∶ N →
         --------------------
         U.Γ′ ⫢ su U.t′ U.[ U.σ′ ] ≈ su (U.t′ U.[ U.σ′ ]) ∶ N
⫢su-[] ⫢σ′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , t , _ , Δ↝ , t↝ , ↝N , ⊢t , IHΔ , IHt ← ⫢t′ 
  with refl ← ⊢t∶N-lvl ⊢t
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Δ , _ ← presup-tm ⊢t
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
      = -, -, -, -, -, Γ↝ , ↝sub (↝su t↝) σ↝ , ↝su (↝sub t↝ σ↝) , ↝N , (su-[] (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢t) , IHΓ , IHsut[σ] , IHsu,t[σ]

  where
    IHsut[σ] : _ ⊨ _ ↝≈ _
    IHsut[σ] (↝sub (↝su tᵢ↝) σᵢ↝) ⊢sutᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢sutᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢sutᵢ[σᵢ] σᵢ↝ ⊢σ 
      with refl , ≈N , ⊢tᵢ ← su-inv ⊢sutᵢ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv (su-cong (ctxeq-≈ Δ≈Δ₁ (≈-sym t≈tᵢ))) (≈-sym ≈N)) σᵢ≈σ)) (≈-sym ≈T[σ])

    IHsu,t[σ] : _ ⊨ _ ↝≈ _
    IHsu,t[σ] (↝su (↝sub tᵢ↝ σᵢ↝)) ⊢su,tᵢ 
      with refl , ≈N , ⊢tᵢ[σᵢ] ← su-inv ⊢su,tᵢ
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢tᵢ[σᵢ] σᵢ↝ ⊢σ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ)
      = ≈-conv (su-cong (≈-conv (≈-sym ([]-cong (ctxeq-≈ Δ≈Δ₁ (≈-sym t≈tᵢ)) σᵢ≈σ)) (≈-sym ≈T[σ]))) (≈-sym ≈N)

⫢rec-[] : ∀ {i} →
          U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
          N ∷ U.Δ′ ⫢ U.T′ ∶ Se i →
          U.Δ′ ⫢ U.s′ ∶ U.T′ U.[| ze ∶ N ] →
          U.T′ ∷ N ∷ U.Δ′ ⫢ U.r′ ∶ U.T′ U.[ (wk ∘ wk) , su (v 1) ∶ N ] →
          U.Δ′ ⫢ U.t′ ∶ N →
          --------------------
          U.Γ′ ⫢ rec U.T′ U.s′ U.r′ U.t′ U.[ U.σ′ ] ≈ rec (U.T′ U.[ U.q N U.σ′ ]) (U.s′ U.[ U.σ′ ]) (U.r′ U.[ U.q U.T′ (U.q N U.σ′) ]) (U.t′ U.[ U.σ′ ]) ∶ U.T′ U.[ U.σ′ , U.t′ U.[ U.σ′ ] ∶ N ]
⫢rec-[] ⫢σ′ ⫢T′ ⫢s′ ⫢r′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , _ , T , _ , ↝∷ {Γ = Δ₂} Δ₂↝ ↝N , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | i , Δ₃ , s , _ , Δ₃↝ , s↝ , ↝sub {t = T₁} T₁↝ (↝, ↝I ↝ze ↝N) , ⊢s , _ , IHs ← ⫢s′
     | _ , _ , r , _ , (↝∷ (↝∷ {Γ = Δ₄} Δ₄↝ ↝N) T₃↝) , r↝ , ↝sub {t = T₂} T₂↝ (↝, (↝∘ ↝wk ↝wk) (↝su ↝v) ↝N) , ⊢r , _ , IHr ← ⫢r′
     | _ , Δ , t , _ , Δ↝ , t↝ , ↝N , ⊢t , IHΔ , IHt ← ⫢t′
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢∷ ⊢Δ₂ ⊢N₁ ← proj₁ (presup-tm ⊢T)
     | ⊢Δ₃ , ⊢T₁[I,ze] ← presup-tm ⊢s
     | ⊢∷ (⊢∷ ⊢Δ₄ ⊢N₂) ⊢T₃ , ⊢T₂[wkwk,suv1] ← presup-tm ⊢r
     | ⊢Δ , _ ← presup-tm ⊢t 
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂
     | Δ≈Δ₃ ← IHΔ 0 Δ₃↝ ⊢Δ₃
     | Δ≈Δ₄ ← IHΔ 0 Δ₄↝ ⊢Δ₄ 
  with refl ← ⊢T:Se-lvl ⊢T 
     | refl ← ⊢t∶N-lvl ⊢t
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₁)
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₂) 
  with _ , refl , ⊢T₁ ← T[I,ze]-inv ⊢T₁[I,ze]
     | _ , refl , ⊢T₂ ← T[wkwk,suv1]-inv ⊢T₂[wkwk,suv1] 
  with Δ₂≈Δ₄ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₂) Δ≈Δ₄
     | Δ₁≈Δ₂ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂
  with N∷Δ₂≈N∷Δ ← ∷-cong-simp (⊢≈-sym Δ≈Δ₂) (≈-refl ⊢N₁)
     | N∷Δ₄≈N∷Δ₂ ← ∷-cong-simp (⊢≈-sym Δ₂≈Δ₄) (≈-refl ⊢N₂)
     | N∷Δ₁≈N∷Δ₂ ← ∷-cong-simp (⊢≈-sym Δ₁≈Δ₂) (≈-refl ⊢N₁)
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₃) Δ≈Δ₂) (≈-refl (N-wf ⊢Δ₃))) ⊢T₁) ⊢T
     | refl , T≈T₂ ← IH-transform IHT T₂↝ (ctxeq-tm N∷Δ₄≈N∷Δ₂ ⊢T₂) ⊢T
     | refl , T≈T₃ ← IH-transform IHT T₃↝ (ctxeq-tm N∷Δ₄≈N∷Δ₂ ⊢T₃) ⊢T
   = -, -, -, -, -, Γ↝ ,
      ↝sub (↝rec T↝ s↝ r↝ t↝) σ↝ , ↝rec (↝sub T↝ (↝, (↝∘ σ↝ ↝wk) ↝v ↝N)) (↝sub s↝ σ↝) (↝sub r↝ (↝, (↝∘ (↝, (↝∘ σ↝ ↝wk) ↝v ↝N) ↝wk) ↝v T↝)) (↝sub t↝ σ↝) , ↝sub T↝ (↝, σ↝ (↝sub t↝ σ↝) ↝N) , 
      rec-[] (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) 
             (ctxeq-tm N∷Δ₂≈N∷Δ ⊢T) 
             (conv (ctxeq-tm (⊢≈-sym Δ≈Δ₃) ⊢s) ([]-cong-Se′ (ctxeq-≈ N∷Δ₂≈N∷Δ T≈T₁) (⊢I,ze ⊢Δ))) 
             (conv (ctxeq-tm (∷-cong-simp (∷-cong-simp (⊢≈-sym Δ≈Δ₄) (≈-refl ⊢N₂)) (ctxeq-≈ (⊢≈-sym N∷Δ₄≈N∷Δ₂) T≈T₃)) ⊢r) ([]-cong-Se′ (ctxeq-≈ N∷Δ₂≈N∷Δ T≈T₂) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Δ (N-wf ⊢Δ)) (ctxeq-tm N∷Δ₂≈N∷Δ ⊢T) )))) 
             ⊢t , 
      IHΓ , IHrec[σ] , IHrec,t[σ]
  where
    IHrec[σ] : _ ⊨ _ ↝≈ _
    IHrec[σ] (↝sub (↝rec Tᵢ↝ sᵢ↝ rᵢ↝ tᵢ↝) σᵢ↝) ⊢recᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢recᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢recᵢ[σᵢ] σᵢ↝ ⊢σ
      with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢tᵢ , ≈Tᵢ[|tᵢ] ← rec-inv ⊢recᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym N∷Δ₁≈N∷Δ₂) ⊢Tᵢ) ⊢T
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₃) ⊢sᵢ)
      with Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄ ← ∷-cong-simp (⊢≈-trans (⊢≈-sym N∷Δ₁≈N∷Δ₂) (⊢≈-sym N∷Δ₄≈N∷Δ₂)) (ctxeq-≈ N∷Δ₁≈N∷Δ₂ (≈-trans T≈Tᵢ (≈-sym T≈T₃))) 
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄ ⊢rᵢ)
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv (rec-cong-simp (ctxeq-≈ N∷Δ₁≈N∷Δ₂ T≈Tᵢ) 
                                                      (ctxeq-≈ (⊢≈-trans (⊢≈-sym Δ≈Δ₃) Δ≈Δ₁) (≈-sym s≈sᵢ)) 
                                                      (ctxeq-≈ (⊢≈-sym Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄) (≈-sym r≈rᵢ))
                                                      (ctxeq-≈ Δ≈Δ₁ (≈-sym t≈tᵢ))) 
                                       (≈-sym ≈Tᵢ[|tᵢ])) 
                               σᵢ≈σ)) 
               (≈-sym ≈T[σ])

    IHrec,t[σ] : _ ⊨ _ ↝≈ _
    IHrec,t[σ] (↝rec (↝sub {t = Tᵢ} Tᵢ↝ (↝, (↝∘ σᵢ↝ ↝wk) ↝v ↝N)) (↝sub sᵢ↝ σᵢ₁↝) (↝sub rᵢ↝ (↝, (↝∘ (↝, (↝∘ σᵢ₂↝ ↝wk) ↝v ↝N) ↝wk) ↝v Tᵢ₁↝)) (↝sub tᵢ↝ σᵢ₃↝)) ⊢rec,tᵢ[σ] 
      with refl , ⊢Tᵢ[qσᵢ] , ⊢sᵢ[σᵢ₁] , ⊢rᵢ[qqσᵢ₂] , ⊢t[σᵢ₃] , ≈Tᵢ[|tᵢ[σᵢ₃]] ← rec-inv ⊢rec,tᵢ[σ] 
      with _ , R , ⊢qσᵢ , ⊢Tᵢ , ≈R[qσᵢ] ← t[σ]-inv ⊢Tᵢ[qσᵢ]
      with σᵢ≈σ , ⊢σᵢ , ≈N∷Δ₁ , ⊢Nᵢ₁ ← qσ-inv-IH IHσ ⊢qσᵢ σᵢ↝ ⊢σ
      with refl ← N≈⇒eq-lvl (≈-refl ⊢Nᵢ₁)
      with Rᵢ₁ , σᵢ₁≈σ , ⊢σᵢ₂ , ⊢sᵢ , ≈R[σᵢ₁] ← t[σ]-inv-IH IHσ ⊢sᵢ[σᵢ₁] σᵢ₁↝ ⊢σ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-trans ≈N∷Δ₁ (∷-cong-simp Δ₁≈Δ₂ (≈-refl (N-wf ⊢Δ₁)))) ⊢Tᵢ) ⊢T
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₃) ⊢sᵢ)
      with _ , Rᵢ₂ , ⊢qqσᵢ , ⊢rᵢ , ≈R[qqσᵢ] ← t[σ]-inv ⊢rᵢ[qqσᵢ₂]
      with σᵢ₂≈σ , ⊢σᵢ₂ , ≈Tᵢ₁∷N∷Δ₁ ← qqσ-inv-IH IHσ ⊢qqσᵢ σᵢ₂↝ ⊢σ
      with _ , ⊢∷ (⊢∷ _ ⊢N) ⊢Tᵢ₁ ← presup-⊢≈ ≈Tᵢ₁∷N∷Δ₁
      with refl ← N≈⇒eq-lvl (≈-refl ⊢N)
      with refl , T≈Tᵢ₁ ← IH-transform IHT Tᵢ₁↝ (ctxeq-tm (⊢≈-sym N∷Δ₁≈N∷Δ₂) ⊢Tᵢ₁) ⊢T
      with Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄ ← ∷-cong-simp (⊢≈-trans (⊢≈-sym N∷Δ₁≈N∷Δ₂) (⊢≈-sym N∷Δ₄≈N∷Δ₂)) (ctxeq-≈ N∷Δ₁≈N∷Δ₂ (≈-trans T≈Tᵢ₁ (≈-sym T≈T₃))) 
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm (⊢≈-trans ≈Tᵢ₁∷N∷Δ₁ Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄) ⊢rᵢ)
      with Rᵢ₃ , σ≈σ₁₃ , ⊢σ₁₃ , ⊢tᵢ , N≈ ← t[σ]-inv-IH IHσ ⊢t[σᵢ₃] σᵢ₃↝ ⊢σ
      with t≈t₁ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ) 
      = ≈-conv (≈-sym (rec-cong-simp ([]-cong-Se-simp (ctxeq-≈ N∷Δ₁≈N∷Δ₂ T≈Tᵢ) (ctxeq-s-≈ (∷-cong-simp (⊢≈-refl ⊢Γ) (N-[] ⊢σᵢ)) (q-cong σᵢ≈σ (N-wf ⊢Δ₁)))) 
                                     (≈-conv ([]-cong (≈-sym s≈sᵢ) (s-≈-conv σᵢ₁≈σ (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₃))) (≈-sym ≈R[σᵢ₁])) 
                                     (≈-conv ([]-cong (≈-sym r≈rᵢ) (ctxeq-s-≈ (∷-cong-simp (∷-cong-simp (⊢≈-refl ⊢Γ) (N-[] ⊢σᵢ₂)) ([]-cong-Se-simp (ctxeq-≈ N∷Δ₁≈N∷Δ₂ (≈-trans T≈Tᵢ₁ (≈-sym T≈Tᵢ))) (q-cong (s-≈-trans σᵢ₂≈σ (s-≈-sym σᵢ≈σ)) (N-wf ⊢Δ₁)))) 
                                                                              (s-≈-conv (q-cong′ (q-cong σᵢ₂≈σ (N-wf ⊢Δ₁)) (ctxeq-≈ N∷Δ₁≈N∷Δ₂ T≈Tᵢ₁)) Tᵢ₁∷N∷Δ₁≈T₃∷N∷Δ₄))) (≈-sym ≈R[qqσᵢ])) 
                                     (≈-conv ([]-cong (≈-sym t≈t₁) (s-≈-conv σ≈σ₁₃ (⊢≈-sym Δ≈Δ₁))) (≈-sym  N≈)))) 
               (≈-sym ≈Tᵢ[|tᵢ[σᵢ₃]])


⫢Λ-[] : ∀ {i} →
         U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
         U.Δ′ ⫢ U.S′ ∶ Se i →
         U.S′ ∷ U.Δ′ ⫢ U.t′ ∶ U.T′ →
         --------------------
         U.Γ′ ⫢ Λ U.S′ U.t′ U.[ U.σ′ ] ≈ Λ (U.S′ U.[ U.σ′ ]) (U.t′ U.[ U.q U.S′ U.σ′ ]) ∶ Π U.S′ U.T′ U.[ U.σ′ ]
⫢Λ-[] ⫢σ′ ⫢S′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , S , _ , Δ↝ , S↝ , ↝Se , ⊢S , IHΔ , IHS ← ⫢S′
     | _ , _ , t , T , ↝∷ {Γ = Δ₂} {T = S₁} Δ₂↝ S₁↝ , t↝ , ↝T , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢S
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Δ ← proj₁ (presup-tm ⊢S)
     | ⊢∷ ⊢Δ₂ ⊢S₁ ← proj₁ (presup-tm ⊢t)
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₂) ⊢S₁) ⊢S 
  = -, -, -, -, -, Γ↝ , ↝sub (↝Λ S↝ t↝) σ↝ , ↝Λ (↝sub S↝ σ↝) (↝sub t↝ (↝, (↝∘ σ↝ ↝wk) ↝v S↝)) , ↝sub (↝Π S↝ ↝T) σ↝ , 
    Λ-[] (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢S (ctxeq-tm (∷-cong-simp (⊢≈-sym Δ≈Δ₂) (ctxeq-≈ Δ≈Δ₂ S≈S₁)) ⊢t) refl , 
    IHΓ , IHΛSt[σ] , IHΛS[σ]t[qσ]

  where
    IHΛSt[σ] : _ ⊨ _ ↝≈ _
    IHΛSt[σ] (↝sub (↝Λ Sᵢ↝ tᵢ↝) σᵢ↝) ⊢ΛStᵢ[σ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢ΛSt , ≈R[σᵢ] ← t[σ]-inv-IH IHσ ⊢ΛStᵢ[σ] σᵢ↝ ⊢σ
      with _ , _ , ≈Π , refl , ⊢tᵢ ← Λ-inv′ ⊢ΛSt
      with ⊢∷ _ ⊢Sᵢ ← proj₁ (presup-tm ⊢tᵢ)
      with refl , S≈Sᵢ ← IH-transform IHS Sᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Sᵢ) ⊢S
      with Sᵢ∷Δ₁≈S₁∷Δ₂ ← ∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂) (ctxeq-≈ Δ≈Δ₁ (≈-trans S≈Sᵢ (≈-sym S≈S₁)))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Sᵢ∷Δ₁≈S₁∷Δ₂ ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv (Λ-cong-simp (ctxeq-≈ Δ≈Δ₁ S≈Sᵢ) (ctxeq-≈ (⊢≈-sym Sᵢ∷Δ₁≈S₁∷Δ₂) (≈-sym t≈tᵢ)) refl) (≈-sym ≈Π)) σᵢ≈σ)) (≈-sym ≈R[σᵢ])

    IHΛS[σ]t[qσ] : _ ⊨ _ ↝≈ _
    IHΛS[σ]t[qσ] (↝Λ (↝sub {t = Sᵢ} Sᵢ↝ σᵢ↝) (↝sub tᵢ↝ (↝, {T = Sᵢ₁} (↝∘ σᵢ₁↝ ↝wk) ↝v Sᵢ₁↝))) ⊢ΛS[σ]t[qσ] 
      with _ , _ , ≈Π , refl , ⊢tᵢ[qσᵢ₁] ← Λ-inv′ ⊢ΛS[σ]t[qσ] 
      with ⊢∷ _ ⊢Sᵢ[σᵢ] ← proj₁ (presup-tm ⊢tᵢ[qσᵢ₁])
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢Sᵢ , ≈R[σᵢ] ← t[σ]-inv-IH IHσ ⊢Sᵢ[σᵢ] σᵢ↝ ⊢σ
      with S≈Sᵢ ← IHS Sᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Sᵢ)
      with refl , ≈Se ← unique-typ ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ)))
      with _ , Rᵢ , ⊢qσᵢ₁ , ⊢tᵢ , ≈R[qσᵢ₁] ← t[σ]-inv ⊢tᵢ[qσᵢ₁]
      with σᵢ₁≈σ , ⊢σᵢ , ≈Sᵢ₁∷Δ₁ , ⊢Sᵢ₁ ← qσ-inv-IH IHσ ⊢qσᵢ₁ σᵢ₁↝ ⊢σ
      with S≈Sᵢ₁ ← IHS Sᵢ₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Sᵢ₁)
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ₁)))
      with Sᵢ∷Δ₁≈S₁∷Δ₂ ← ∷-cong-simp (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂) (ctxeq-≈ Δ≈Δ₁ (≈-trans (≈-sym S≈Sᵢ₁) (≈-sym S≈S₁)))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-trans ≈Sᵢ₁∷Δ₁ Sᵢ∷Δ₁≈S₁∷Δ₂) ⊢tᵢ)
      = ≈-conv (≈-sym (Λ-cong-simp (≈-conv ([]-cong (ctxeq-≈ Δ≈Δ₁ (≈-sym S≈Sᵢ)) σᵢ≈σ) (≈-sym ≈R[σᵢ])) 
        (≈-conv ([]-cong (ctxeq-≈ (⊢≈-sym Sᵢ∷Δ₁≈S₁∷Δ₂) (≈-sym t≈tᵢ)) 
                         (ctxeq-s-≈ (∷-cong-simp (⊢≈-refl ⊢Γ) ([]-cong-Se-simp (ctxeq-≈ Δ≈Δ₁ (≈-trans (≈-sym S≈Sᵢ₁) (≈-conv S≈Sᵢ (≈-sym ≈Se)))) (s-≈-trans σᵢ₁≈σ (s-≈-sym σᵢ≈σ)))) (q-cong′ σᵢ₁≈σ (ctxeq-≈ Δ≈Δ₁ (≈-sym S≈Sᵢ₁))))) 
                (≈-sym ≈R[qσᵢ₁])) refl)) (≈-sym ≈Π)

⫢$-[] : ∀ {i j} →
         U.Δ′ ⫢ U.S′ ∶ Se i →
         U.S′ ∷ U.Δ′ ⫢ U.T′ ∶ Se j →
         U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
         U.Δ′ ⫢ U.r′ ∶ Π U.S′ U.T′ →
         U.Δ′ ⫢ U.s′ ∶ U.S′ →
         --------------------
         U.Γ′ ⫢ (U.r′ $ U.s′) U.[ U.σ′ ] ≈ (U.r′ U.[ U.σ′ ]) $ (U.s′ U.[ U.σ′ ]) ∶ U.T′ U.[ U.σ′ , U.s′ U.[ U.σ′ ] ∶ U.S′ ]
⫢$-[] ⫢S′ ⫢T′ ⫢σ′ ⫢r′ ⫢s′
  with _ , Δ₁ , S , _ , Δ₁↝ , S↝ , ↝Se , ⊢S , _ , IHS ← ⫢S′
     | _ , _ , T , _ , ↝∷ {Γ = Δ₂} {T = S₁} Δ₂↝ S₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | Γ , Δ₃ , σ , Γ↝ , Δ₃↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , r , _ , Δ₄↝ , r↝ , ↝Π S₂↝ T₁↝ , ⊢r , IHΔ , IHr ← ⫢r′
     | _ , Δ₄ , s , S₃ , Δ₄↝ , s↝ , S₃↝ , ⊢s , _ , IHs ← ⫢s′
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T
  with ⊢Δ₁ ← proj₁ (presup-tm ⊢S)
      | ⊢∷ ⊢Δ₂ ⊢S₁ ← proj₁ (presup-tm ⊢T)
      | ⊢Δ₃ ← proj₂ (presup-s ⊢σ)
      | ⊢Δ , ⊢ΠS₂T₁ ← presup-tm ⊢r
      | ⊢Δ₄ , ⊢S₃ ← presup-tm ⊢s
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂
     | Δ≈Δ₃ ← IHΔ 0 Δ₃↝ ⊢Δ₃
     | Δ≈Δ₄ ← IHΔ 0 Δ₄↝ ⊢Δ₄
  with Δ₁≈Δ₂ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂
     | Δ₄≈Δ₁ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₄) Δ≈Δ₁
     | Δ₃≈Δ₄ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₃) Δ≈Δ₄
  with refl , Se≈ , ⊢S₂ , ⊢T₁ ← Π-inv′ ⊢ΠS₂T₁ 
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Δ₁≈Δ₂) ⊢S₁) ⊢S
     | refl , S≈S₂ ← IH-transform IHS S₂↝ (ctxeq-tm Δ≈Δ₁ ⊢S₂) ⊢S
     | refl , S≈S₃ ← IH-transform IHS S₃↝ (ctxeq-tm Δ₄≈Δ₁ ⊢S₃) ⊢S 
  with S₁∷Δ₂≈S₂∷Δ ← ∷-cong-simp (⊢≈-sym Δ≈Δ₂) (ctxeq-≈ Δ₁≈Δ₂ (≈-trans S≈S₁ (≈-sym S≈S₂)))
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym S₁∷Δ₂≈S₂∷Δ) ⊢T₁) ⊢T
    = -, -, -, -, -, Γ↝ , ↝sub (↝$ r↝ s↝) σ↝ , ↝$ (↝sub r↝ σ↝) (↝sub s↝ σ↝) , ↝sub T↝ (↝, σ↝ (↝sub s↝ σ↝) S↝) , 
      $-[] (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢S) 
           (ctxeq-tm (∷-cong-simp (⊢≈-sym Δ≈Δ₂) (ctxeq-≈ Δ₁≈Δ₂ S≈S₁)) ⊢T) 
           (s-conv ⊢σ (⊢≈-sym Δ≈Δ₃)) 
           (conv ⊢r (Π-cong-simp (ctxeq-≈ (⊢≈-sym Δ≈Δ₁) S≈S₂) (ctxeq-≈ S₁∷Δ₂≈S₂∷Δ T≈T₁) refl)) 
           (conv (ctxeq-tm (⊢≈-sym Δ≈Δ₄) ⊢s) (ctxeq-≈ (⊢≈-sym Δ≈Δ₁) S≈S₃)) 
           refl , 
      IHΓ , IHrs[σ] , IHr[σ]s[σ]
  where
    IHrs[σ] : _ ⊨ _ ↝≈ _
    IHrs[σ] (↝sub (↝$ rᵢ↝ sᵢ↝) σᵢ↝) ⊢rᵢ$rᵢ[σ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢rᵢ$sᵢ , ≈Rᵢ[σᵢ] ← t[σ]-inv-IH IHσ ⊢rᵢ$rᵢ[σ] σᵢ↝ ⊢σ
      with _ , _ , Sᵢ , Tᵢ , ⊢rᵢ , ⊢sᵢ , refl , ≈Tᵢ[|sᵢ] ← $-inv ⊢rᵢ$sᵢ
      with _ , ⊢ΠSᵢTᵢ ← presup-tm ⊢rᵢ
      with _ , ⊢Sᵢ , ⊢Tᵢ ← Π-inv ⊢ΠSᵢTᵢ
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₃) ⊢rᵢ)
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Δ₃≈Δ₄ ⊢sᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv ($-cong-simp (ctxeq-≈ Δ≈Δ₃ (≈-sym r≈rᵢ)) 
                                                    (ctxeq-≈ (⊢≈-sym Δ₃≈Δ₄) (≈-sym s≈sᵢ)) 
                                                    refl) 
                                        (≈-sym ≈Tᵢ[|sᵢ])) 
                                σᵢ≈σ))
               (≈-sym ≈Rᵢ[σᵢ])

    IHr[σ]s[σ] : _ ⊨ _ ↝≈ _
    IHr[σ]s[σ] (↝$ (↝sub rᵢ↝ σᵢ↝) (↝sub sᵢ↝ σᵢ₁↝)) ⊢rᵢ[σᵢ]$sᵢ[σᵢ₁]
      with _ , _ , Sᵢ , Tᵢ , ⊢rᵢ[σᵢ] , ⊢sᵢ[σᵢ₁] , refl , ≈Tᵢ[|sᵢ[σᵢ₁]] ← $-inv ⊢rᵢ[σᵢ]$sᵢ[σᵢ₁] 
      with _ , ⊢ΠSᵢTᵢ ← presup-tm ⊢rᵢ[σᵢ]
      with _ , ⊢Sᵢ , ⊢Tᵢ ← Π-inv ⊢ΠSᵢTᵢ
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢rᵢ[σᵢ] , ≈Π[σᵢ] ← t[σ]-inv-IH IHσ ⊢rᵢ[σᵢ] σᵢ↝ ⊢σ
      with _ , σᵢ₁≈σ , ⊢σᵢ₁ , ⊢sᵢ[σᵢ₁] , ≈Tᵢ[σᵢ] ← t[σ]-inv-IH IHσ ⊢sᵢ[σᵢ₁] σᵢ₁↝ ⊢σ
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₃) ⊢rᵢ[σᵢ])
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Δ₃≈Δ₄ ⊢sᵢ[σᵢ₁])
      = ≈-conv (≈-sym ($-cong-simp (≈-conv ([]-cong (≈-sym r≈rᵢ) (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₃))) (≈-sym ≈Π[σᵢ])) 
                                   (≈-conv ([]-cong (≈-sym s≈sᵢ) (s-≈-conv σᵢ₁≈σ Δ₃≈Δ₄)) (≈-sym ≈Tᵢ[σᵢ])) refl)) (≈-sym ≈Tᵢ[|sᵢ[σᵢ₁]])

  
⫢liftt-[] : ∀ {i j} →
            U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
            U.Δ′ ⫢ U.T′ ∶ Se i →
            U.Δ′ ⫢ U.t′ ∶ U.T′ →
            ------------------------
            U.Γ′ ⫢ liftt j U.t′ U.[ U.σ′ ] ≈ liftt j (U.t′ U.[ U.σ′ ]) ∶ Liftt j U.T′ U.[ U.σ′ ]
⫢liftt-[] ⫢σ′ ⫢T′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , T , _ , Δ↝ , T↝ , ↝Se , ⊢T , IHΔ , IHT ← ⫢T′
     | _ , Δ₂ , t , T₁ , Δ₂↝ , t↝ , T₁↝ , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢T
  with ⊢Δ₁ ← proj₂ (presup-s ⊢σ)
     | ⊢Δ₂ , ⊢T₁ ← presup-tm ⊢t
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂ 
  with Δ₁≈Δ₂ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂ 
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₂) ⊢T₁) ⊢T
  = -, -, -, -, -, Γ↝ , ↝sub (↝liftt t↝) σ↝ , ↝liftt (↝sub t↝ σ↝) , ↝sub (↝Liftt T↝) σ↝ , 
    liftt-[] _ ⊢σ (ctxeq-tm Δ≈Δ₁ ⊢T) (conv (ctxeq-tm (⊢≈-trans (⊢≈-sym Δ≈Δ₂) Δ≈Δ₁) ⊢t) (ctxeq-≈ Δ≈Δ₁ T≈T₁)) , 
    IHΓ , IHliftt[σ] , IHlift,t[σ]

  where
    IHliftt[σ] : _ ⊨ _ ↝≈ _
    IHliftt[σ] (↝sub (↝liftt tᵢ↝) σᵢ↝) ⊢lifttᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢lifttᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢lifttᵢ[σᵢ] σᵢ↝ ⊢σ 
      with _ , Rᵢ , refl , ⊢tᵢ , ≈Liftt ← liftt-inv ⊢lifttᵢ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δ₁≈Δ₂ ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv (liftt-cong _ (ctxeq-≈ (⊢≈-sym Δ₁≈Δ₂) (≈-sym t≈tᵢ))) (≈-sym ≈Liftt)) σᵢ≈σ)) (≈-sym ≈T[σ])

    IHlift,t[σ] : _ ⊨ _ ↝≈ _
    IHlift,t[σ] (↝liftt (↝sub tᵢ↝ σᵢ↝)) ⊢lift,tᵢ[σᵢ] 
      with _ , Rᵢ , refl , ⊢tᵢ[σᵢ] , ≈Liftt ← liftt-inv ⊢lift,tᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢tᵢ[σᵢ] σᵢ↝ ⊢σ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δ₁≈Δ₂ ⊢tᵢ)
      = ≈-conv (liftt-cong _ (≈-conv (≈-sym ([]-cong (≈-sym t≈tᵢ) (s-≈-conv σᵢ≈σ Δ₁≈Δ₂))) (≈-sym ≈T[σ]))) (≈-sym ≈Liftt)

⫢unlift-[] : ∀ {i j} →
             U.Δ′ ⫢ U.T′ ∶ Se i →
             U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
             U.Δ′ ⫢ U.t′ ∶ Liftt j U.T′ →
             ---------------------------------
             U.Γ′ ⫢ unlift U.t′ U.[ U.σ′ ] ≈ unlift (U.t′ U.[ U.σ′ ]) ∶ U.T′ U.[ U.σ′ ]
⫢unlift-[] ⫢T′ ⫢σ′ ⫢t′
  with _ , Δ , T , _ , Δ₂↝ , T↝ , ↝Se , ⊢T , IHΔ , IHT ← ⫢T′
     | Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ₂ , t , _ , Δ₂↝ , t↝ , ↝Liftt T₁↝ , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢T
  with ⊢Δ₁ ← proj₂ (presup-s ⊢σ)
     | ⊢Δ ← proj₁ (presup-tm ⊢T)
     | ⊢Δ₂ , ⊢LiftT₁ ← presup-tm ⊢t
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂
  with Δ₁≈Δ₂ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂
  with refl , ⊢T₁ , _ ← Liftt-inv′ ⊢LiftT₁
  with T≈T₁ ← IHT T₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₂) ⊢T₁)
  with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈T₁))) 
  = -, -, -, -, -, Γ↝ , ↝sub (↝unlift t↝) σ↝ , ↝unlift (↝sub t↝ σ↝) , ↝sub T↝ σ↝ , 
    unlift-[] _ ⊢T (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) (conv (ctxeq-tm (⊢≈-sym Δ≈Δ₂) ⊢t) (Liftt-cong _ (≈-sym T≈T₁))) , 
    IHΓ , IHunliftt[σ] , IHunlift,t[σ]

  where
    IHunliftt[σ] : _ ⊨ _ ↝≈ _
    IHunliftt[σ] (↝sub (↝unlift tᵢ↝) σᵢ↝) ⊢unliftᵢ[σᵢ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢unliftᵢ , ≈T[σᵢ] ← t[σ]-inv-IH IHσ ⊢unliftᵢ[σᵢ] σᵢ↝ ⊢σ
      with _ , _ , Tᵢ , refl , ⊢tᵢ , ≈Tᵢ ← unlift-inv ⊢unliftᵢ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δ₁≈Δ₂ ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (unlift-cong _ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) (proj₂ (presup-tm ⊢unliftᵢ))) (ctxeq-≈ (⊢≈-sym Δ≈Δ₂) (≈-conv (≈-sym t≈tᵢ) 
                (Liftt-cong _ (ctxeq-≈ Δ₁≈Δ₂ (≈-sym ≈Tᵢ)))))) (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₁)))) (≈-sym ≈T[σᵢ])

    IHunlift,t[σ] : _ ⊨ _ ↝≈ _
    IHunlift,t[σ] (↝unlift (↝sub tᵢ↝ σᵢ↝)) ⊢unlift,tᵢ[σᵢ] 
      with _ , _ , Tᵢ , refl , ⊢tᵢ[σᵢ] , ≈Tᵢ ← unlift-inv ⊢unlift,tᵢ[σᵢ]
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈T[σ] ← t[σ]-inv-IH IHσ ⊢tᵢ[σᵢ] σᵢ↝ ⊢σ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δ₁≈Δ₂ ⊢tᵢ)
      = unlift-cong _ (proj₁ (proj₂ (presup-≈ ≈Tᵢ))) 
                      (≈-conv (≈-sym ([]-cong (ctxeq-≈ (⊢≈-sym Δ≈Δ₂) (≈-sym t≈tᵢ)) 
                      (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₁)))) (≈-trans (≈-sym ≈T[σ]) (Liftt-cong _ (≈-sym ≈Tᵢ))))
  
⫢rec-β-ze : ∀ {i} →
            N ∷ U.Γ′ ⫢ U.T′ ∶ Se i →
            U.Γ′ ⫢ U.s′ ∶ U.T′ U.[| ze ∶ N ] →
            U.T′ ∷ N ∷ U.Γ′ ⫢ U.r′ ∶ U.T′ U.[ (wk ∘ wk) , su (v 1) ∶ N ] →
            --------------------
            U.Γ′ ⫢ rec U.T′ U.s′ U.r′ ze ≈ U.s′ ∶ U.T′ U.[| ze ∶ N ]
⫢rec-β-ze ⫢T′ ⫢s′ ⫢r′
  with _ , _ , T , _ , ↝∷ {Γ = Γ₁} Γ₁↝ ↝N , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | _ , Γ , s , _ , Γ↝ , s↝ , ↝sub {t = T₁} T₁↝ (↝, ↝I ↝ze ↝N) , ⊢s , IHΓ , IHs ← ⫢s′
     | _ , _ , r , _ , (↝∷ (↝∷ {Γ = Γ₂} Γ₂↝ ↝N) T₃↝) , r↝ , ↝sub {t = T₂} T₂↝ (↝, (↝∘ ↝wk ↝wk) (↝su ↝v) ↝N) , ⊢r , _ , IHr ← ⫢r′
  with ⊢∷ ⊢Γ₁ ⊢N₁ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ ← proj₁ (presup-tm ⊢s)
     | ⊢∷ (⊢∷ ⊢Γ₂ ⊢N₂) ⊢T₃ ← proj₁ (presup-tm ⊢r)
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
  with refl ← ⊢T:Se-lvl ⊢T
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₁)
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₂)
  with N∷Γ≈N∷Γ₁ ← ∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)
  with N∷Γ≈N∷Γ₂ ← ∷-cong-simp (⊢≈-sym Γ≈Γ₂) (≈-refl (N-wf ⊢Γ₂))
  with N∷Γ₁≈N∷Γ₂ ← ⊢≈-trans N∷Γ≈N∷Γ₁ (⊢≈-sym N∷Γ≈N∷Γ₂)
  with _ , refl , ⊢T₁ ← T[I,ze]-inv (proj₂ (presup-tm ⊢s))
     | _ , refl , ⊢T₂ ← T[wkwk,suv1]-inv (proj₂ (presup-tm ⊢r)) 
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢T₁) ⊢T
     | refl , T≈T₂ ← IH-transform IHT T₂↝ (ctxeq-tm (⊢≈-sym N∷Γ₁≈N∷Γ₂) ⊢T₂) ⊢T
     | refl , T≈T₃ ← IH-transform IHT T₃↝ (ctxeq-tm (⊢≈-sym N∷Γ₁≈N∷Γ₂) ⊢T₃) ⊢T
  = -, -, -, -, -, Γ↝ , ↝rec T↝ s↝ r↝ ↝ze , s↝ , ↝sub T↝ (↝, ↝I ↝ze ↝N) , 
    rec-β-ze (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T) 
             (conv ⊢s ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈T₁) (⊢I,ze ⊢Γ))) 
             (conv (ctxeq-tm (∷-cong-simp N∷Γ≈N∷Γ₂ (ctxeq-≈ N∷Γ₁≈N∷Γ₂ T≈T₃)) ⊢r) ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈T₂) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T))))) , 
    IHΓ , IHrecze , IHs

  where
    IHrecze : _ ⊨ _ ↝≈ _
    IHrecze (↝rec Tᵢ↝ sᵢ↝ rᵢ↝ ↝ze) ⊢recᵢ 
      with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢tᵢ , ≈Tᵢ[|ze] ← rec-inv ⊢recᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢Tᵢ) ⊢T
      with s≈sᵢ ← IHs sᵢ↝ ⊢sᵢ
      with Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ← (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-trans T≈Tᵢ (≈-sym T≈T₃))))
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ⊢rᵢ)
      = ≈-conv (≈-sym (rec-cong-simp (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈Tᵢ) (≈-sym s≈sᵢ) (ctxeq-≈ (⊢≈-sym Tᵢ∷N∷Γ≈T₃∷N∷Γ₂) (≈-sym r≈rᵢ)) (ze-≈ ⊢Γ))) (≈-sym ≈Tᵢ[|ze])

⫢rec-β-su : ∀ {i} →
            N ∷ U.Γ′ ⫢ U.T′ ∶ Se i →
            U.Γ′ ⫢ U.s′ ∶ U.T′ U.[| ze ∶ N ] →
            U.T′ ∷ N ∷ U.Γ′ ⫢ U.r′ ∶ U.T′ U.[ (wk ∘ wk) , su (v 1) ∶ N ] →
            U.Γ′ ⫢ U.t′ ∶ N →
            --------------------------------
            U.Γ′ ⫢ rec U.T′ U.s′ U.r′ (su U.t′) ≈ U.r′ U.[ (I , U.t′ ∶ N) , rec U.T′ U.s′ U.r′ U.t′ ∶ U.T′ ] ∶ U.T′ U.[| su U.t′ ∶ N ]
⫢rec-β-su ⫢T′ ⫢s′ ⫢r′ ⫢t′
  with _ , _ , T , _ , ↝∷ {Γ = Γ₁} Γ₁↝ ↝N , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | _ , Γ , s , _ , Γ↝ , s↝ , ↝sub {t = T₁} T₁↝ (↝, ↝I ↝ze ↝N) , ⊢s , IHΓ , IHs ← ⫢s′
     | _ , _ , r , _ , (↝∷ (↝∷ {Γ = Γ₂} Γ₂↝ ↝N) T₃↝) , r↝ , ↝sub {t = T₂} T₂↝ (↝, (↝∘ ↝wk ↝wk) (↝su ↝v) ↝N) , ⊢r , _ , IHr ← ⫢r′
     | _ , Γ₃ , t , _ , Γ₃↝ , t↝ , ↝N , ⊢t , _ , IHt ← ⫢t′
  with ⊢∷ ⊢Γ₁ ⊢N₁ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ ← proj₁ (presup-tm ⊢s)
     | ⊢∷ (⊢∷ ⊢Γ₂ ⊢N₂) ⊢T₃ ← proj₁ (presup-tm ⊢r)
     | ⊢Γ₃ ← proj₁ (presup-tm ⊢t) 
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Γ≈Γ₃ ← IHΓ 0 Γ₃↝ ⊢Γ₃ 
  with refl ← ⊢T:Se-lvl ⊢T
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₁)
     | refl ← N≈⇒eq-lvl (≈-refl ⊢N₂)
     | refl ← ⊢t∶N-lvl ⊢t 
  with N∷Γ≈N∷Γ₁ ← ∷-cong-simp (⊢≈-sym Γ≈Γ₁) (≈-refl ⊢N₁)
     | N∷Γ≈N∷Γ₂ ← ∷-cong-simp (⊢≈-sym Γ≈Γ₂) (≈-refl (N-wf ⊢Γ₂))
  with N∷Γ₁≈N∷Γ₂ ← ⊢≈-trans N∷Γ≈N∷Γ₁ (⊢≈-sym N∷Γ≈N∷Γ₂)
  with _ , refl , ⊢T₁ ← T[I,ze]-inv (proj₂ (presup-tm ⊢s))
     | _ , refl , ⊢T₂ ← T[wkwk,suv1]-inv (proj₂ (presup-tm ⊢r)) 
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢T₁) ⊢T
     | refl , T≈T₂ ← IH-transform IHT T₂↝ (ctxeq-tm (⊢≈-sym N∷Γ₁≈N∷Γ₂) ⊢T₂) ⊢T
     | refl , T≈T₃ ← IH-transform IHT T₃↝ (ctxeq-tm (⊢≈-sym N∷Γ₁≈N∷Γ₂) ⊢T₃) ⊢T
  =  _ , _ , _ , _ , _ , Γ↝ , ↝rec T↝ s↝ r↝ (↝su t↝) , ↝sub r↝ (↝, (↝, ↝I t↝ ↝N) (↝rec T↝ s↝ r↝ t↝) T↝) , ↝sub T↝ (↝, ↝I (↝su t↝) ↝N) , 
     rec-β-su (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T) 
              (conv ⊢s ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈T₁) (⊢I,ze ⊢Γ) )) 
              (conv (ctxeq-tm (∷-cong-simp N∷Γ≈N∷Γ₂ (ctxeq-≈ N∷Γ₁≈N∷Γ₂ T≈T₃)) ⊢r) ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈T₂) (⊢[wk∘wk],su[v1] (⊢∷ (⊢∷ ⊢Γ (N-wf ⊢Γ)) (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T))))) 
              (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢t) , 
     IHΓ , IHrecsut , IHrtrect
  
  where
    IHrecsut : _ ⊨ _ ↝≈ _
    IHrecsut (↝rec Tᵢ↝ sᵢ↝ rᵢ↝ (↝su tᵢ↝)) ⊢recsutᵢ 
      with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ , ⊢sutᵢ , ≈Tᵢ[|sutᵢ] ← rec-inv ⊢recsutᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢Tᵢ) ⊢T
      with s≈sᵢ ← IHs sᵢ↝ ⊢sᵢ
      with Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ← (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-trans T≈Tᵢ (≈-sym T≈T₃))))
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ⊢rᵢ)
      with _ , _ , ⊢tᵢ ← su-inv ⊢sutᵢ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ)
      = ≈-conv (≈-sym (rec-cong-simp (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈Tᵢ) (≈-sym s≈sᵢ) (ctxeq-≈ (⊢≈-sym Tᵢ∷N∷Γ≈T₃∷N∷Γ₂) (≈-sym r≈rᵢ)) (su-cong (ctxeq-≈ (⊢≈-sym  Γ≈Γ₃) (≈-sym t≈tᵢ))))) (≈-sym ≈Tᵢ[|sutᵢ])

    IHrtrect : _ ⊨ _ ↝≈ _
    IHrtrect (↝sub {t = rᵢ} rᵢ↝ (↝, (↝, ↝I tᵢ↝ ↝N) (↝rec Tᵢ↝ sᵢ↝ rᵢ₁↝ tᵢ₁↝) Tᵢ₁↝)) ⊢rtrectᵢ 
      with Rᵢ , ⊢rᵢ , ⊢tᵢ , ⊢rectᵢ , Rᵢ≈ ← I,t,t-inv ⊢rtrectᵢ
      with ⊢∷ _ ⊢Tᵢ₁ ← proj₁ (presup-tm ⊢rᵢ)
      with refl ← ⊢t∶N-lvl ⊢tᵢ
      with refl , ⊢Tᵢ , ⊢sᵢ , ⊢rᵢ₁ , ⊢tᵢ₁ , Rᵢ₁≈ ← rec-inv ⊢rectᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢Tᵢ) ⊢T
      with _ , T≈Tᵢ₁ ← IH-transform IHT Tᵢ₁↝ (ctxeq-tm (⊢≈-sym N∷Γ≈N∷Γ₁) ⊢Tᵢ₁) ⊢T
      with Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ← (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-trans T≈Tᵢ (≈-sym T≈T₃))))
      with Tᵢ₁∷N∷Γ≈T₃∷N∷Γ₂ ← (∷-cong-simp (⊢≈-sym N∷Γ≈N∷Γ₂) (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-trans T≈Tᵢ₁ (≈-sym T≈T₃))))
      with s≈sᵢ ← IHs sᵢ↝ ⊢sᵢ
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm Tᵢ₁∷N∷Γ≈T₃∷N∷Γ₂ ⊢rᵢ)
      with r≈rᵢ₁ ← IHr rᵢ₁↝ (ctxeq-tm Tᵢ∷N∷Γ≈T₃∷N∷Γ₂ ⊢rᵢ₁)
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ)
      with t≈tᵢ₁ ← IHt tᵢ₁↝ (ctxeq-tm Γ≈Γ₃ ⊢tᵢ₁)
      = ≈-conv (≈-sym ([]-cong (ctxeq-≈ (⊢≈-sym Tᵢ₁∷N∷Γ≈T₃∷N∷Γ₂) (≈-sym r≈rᵢ)) 
                               (,-cong-simp (,-cong-simp (s-≈-refl (s-I ⊢Γ))  (≈-refl (N-wf ⊢Γ)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-conv (≈-sym t≈tᵢ) (≈-sym (N-[] (s-I ⊢Γ₃)))))) 
                                            (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈Tᵢ₁)  
                                            (≈-sym (≈-conv (rec-cong-simp (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-sym T≈Tᵢ)) (≈-conv s≈sᵢ ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈Tᵢ) (⊢I,ze ⊢Γ))) 
                                                                          (≈-conv (ctxeq-≈ (∷-cong-simp N∷Γ≈N∷Γ₂ (ctxeq-≈ N∷Γ₁≈N∷Γ₂ T≈T₃)) r≈rᵢ₁) ([]-cong-Se′ (ctxeq-≈ N∷Γ≈N∷Γ₁ T≈Tᵢ) (⊢[wk∘wk],su[v1] (⊢∷ (proj₂ (presup-⊢≈ N∷Γ≈N∷Γ₁)) (ctxeq-tm N∷Γ≈N∷Γ₁ ⊢T))))) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) t≈tᵢ₁)) 
                                                           ([]-cong-Se-simp (ctxeq-≈ N∷Γ≈N∷Γ₁ (≈-sym T≈Tᵢ₁)) (,-cong-simp (s-≈-refl (s-I ⊢Γ)) (≈-refl (N-wf ⊢Γ)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-conv t≈tᵢ (≈-sym (N-[] (s-I ⊢Γ₃)))))))))))) (≈-sym Rᵢ≈)

⫢Λ-β : ∀ {i j} →
        U.Γ′ ⫢ U.S′ ∶ Se i →
        U.S′ ∷ U.Γ′ ⫢ U.T′ ∶ Se j →
        U.S′ ∷ U.Γ′ ⫢ U.t′ ∶ U.T′ →
        U.Γ′ ⫢ U.s′ ∶ U.S′ →
        --------------------
        U.Γ′ ⫢ (Λ U.S′ U.t′) $ U.s′ ≈ U.t′ U.[| U.s′ ∶ U.S′ ] ∶ U.T′ U.[| U.s′ ∶ U.S′ ]
⫢Λ-β ⫢S′ ⫢T′ ⫢t′ ⫢s′
  with _ , Γ , S , _ , Γ↝ , S↝ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | _ , _ , T , _ , ↝∷ {Γ = Γ₁} {T = S₁} Γ₁↝ S₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | j , _ , t , T₁ , ↝∷ {Γ = Γ₂} {T = S₂} Γ₂↝ S₂↝ , t↝ , T₁↝ , ⊢t , _ , IHt ← ⫢t′
     | i , Γ₃ , s , S₃ , Γ₃↝ , s↝ , S₃↝ , ⊢s , _ , IHs ← ⫢s′
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T
  with ⊢Γ , _ ← presup-tm ⊢S
     | ⊢∷ ⊢Γ₁ ⊢S₁ ← proj₁ (presup-tm ⊢T)
     | ⊢∷ ⊢Γ₂ ⊢S₂ , ⊢T₁ ← presup-tm ⊢t
     | ⊢Γ₃ , ⊢S₃ ← presup-tm ⊢s
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
     | Γ≈Γ₃ ← IHΓ 0 Γ₃↝ ⊢Γ₃ 
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁) ⊢S
     | refl , S≈S₂ ← IH-transform IHS S₂↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₂) ⊢S
     | refl , S≈S₃ ← IH-transform IHS S₃↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢S₃) ⊢S
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₂ (≈-trans S≈S₂ (≈-sym S≈S₁) ))) ⊢T₁) ⊢T   
  = -, -, -, -, -, Γ↝ , ↝$ (↝Λ S↝ t↝) s↝ , ↝sub t↝ (↝, ↝I s↝ S↝) , ↝sub T↝ (↝, ↝I s↝ S↝) , 
    Λ-β ⊢S (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ S≈S₁)) ⊢T) 
           (conv (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₂) (ctxeq-≈ Γ≈Γ₂ S≈S₂)) ⊢t) (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ S≈S₁)) T≈T₁)) 
           (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₃) ⊢s) S≈S₃) , 
    IHΓ , IHΛt$s , IHt[|s] 

  where
    IHΛt$s : _ ⊨ _ ↝≈ _
    IHΛt$s (↝$ (↝Λ Sᵢ↝ tᵢ↝) sᵢ↝) ⊢Λtᵢ$sᵢ 
      with j , k , Sᵢ₁ , Tᵢ , ⊢rᵢ , ⊢sᵢ , refl , ≈T[|sᵢ] ← $-inv ⊢Λtᵢ$sᵢ
      with _ , ⊢ΠSᵢTᵢ ← presup-tm ⊢rᵢ
      with _ , ⊢Sᵢ₁ , ⊢Tᵢ ← Π-inv ⊢ΠSᵢTᵢ
      with refl , _ , ≈Sᵢ , ⊢tᵢ ← Λ-inv ⊢rᵢ 
      with _ , ⊢Sᵢ , _ , _ ← presup-≈ ≈Sᵢ
      with S≈Sᵢ ← IHS Sᵢ↝ ⊢Sᵢ
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ)))
      with S₂∷Γ₂≈Sᵢ∷Γ ← ∷-cong-simp Γ≈Γ₂ (≈-trans (≈-sym S≈Sᵢ) (≈-sym S≈S₂))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm S₂∷Γ₂≈Sᵢ∷Γ ⊢tᵢ)
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢sᵢ)
      = ≈-conv (≈-sym ($-cong-simp (≈-conv (Λ-cong-simp (≈-sym S≈Sᵢ) (ctxeq-≈ (⊢≈-sym S₂∷Γ₂≈Sᵢ∷Γ) (≈-sym t≈tᵢ))  refl) 
               (Π-cong-simp ≈Sᵢ (≈-refl (proj₂ (presup-tm ⊢tᵢ))) refl)) (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym s≈sᵢ)) refl)) (≈-sym ≈T[|sᵢ])

    IHt[|s] : _ ⊨ _ ↝≈ _
    IHt[|s] (↝sub tᵢ↝ (↝, ↝I sᵢ↝ Sᵢ↝)) ⊢tᵢ[|sᵢ] 
      with Tᵢ , ⊢tᵢ , ≈Tᵢ[|sᵢ] , ⊢sᵢ ← I,t-inv ⊢tᵢ[|sᵢ]
      with _ , ⊢Sᵢ ← presup-tm ⊢sᵢ
      with S≈Sᵢ ← IHS Sᵢ↝ ⊢Sᵢ
      with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈Sᵢ)))
      with Sᵢ∷Γ≈S₂∷Γ₂ ← (∷-cong-simp Γ≈Γ₂ (≈-trans (≈-sym S≈Sᵢ) (≈-sym S≈S₂)))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Sᵢ∷Γ≈S₂∷Γ₂ ⊢tᵢ)
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₃ ⊢sᵢ)
      with _ ← unique-lvl ⊢s (proj₁ (proj₂ (presup-≈ s≈sᵢ)))
      = ≈-conv (≈-sym ([]-cong (ctxeq-≈ (⊢≈-sym Sᵢ∷Γ≈S₂∷Γ₂) (≈-sym t≈tᵢ)) 
                               (,-cong-simp (s-≈-refl (s-I ⊢Γ)) (≈-sym S≈Sᵢ) 
                                            (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₃) (≈-sym s≈sᵢ)) (≈-sym ([I] ⊢Sᵢ)))))) (≈-sym ≈Tᵢ[|sᵢ])

⫢Λ-η : ∀ {i j} →
        U.Γ′ ⫢ U.S′ ∶ Se i →
        U.S′ ∷ U.Γ′ ⫢ U.T′ ∶ Se j →
        U.Γ′ ⫢ U.t′ ∶ Π U.S′ U.T′ →
        --------------------
        U.Γ′ ⫢ U.t′ ≈ Λ U.S′ (U.t′ U.[ wk ] $ v 0) ∶ Π U.S′ U.T′
⫢Λ-η ⫢S′ ⫢T′ ⫢t′
  with _ , Γ , S , _ , Γ↝ , S↝ , ↝Se , ⊢S , IHΓ , IHS ← ⫢S′
     | _ , _ , T , _ , ↝∷ {Γ = Γ₁} {T = S₁} Γ₁↝ S₁↝ , T↝ , ↝Se , ⊢T , _ , IHT ← ⫢T′
     | _ , Γ₂ , t , _ , Γ₂↝ , t↝ , ↝Π S₂↝ T₁↝ , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢S
     | refl ← ⊢T:Se-lvl ⊢T
  with ⊢Γ ← proj₁ (presup-tm ⊢S)
     | ⊢∷ ⊢Γ₁ ⊢S₁ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ₂ , ⊢ΠS₂T₁ ← presup-tm ⊢t
  with refl , ⊢S₂ , ⊢T₁ ← Π-inv ⊢ΠS₂T₁
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Γ≈Γ₂ ← IHΓ 0 Γ₂↝ ⊢Γ₂
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁) ⊢S 
     | refl , S≈S₂ ← IH-transform IHS S₂↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢S₂) ⊢S 
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (∷-cong-simp (⊢≈-trans (⊢≈-sym Γ≈Γ₂) Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₂ (≈-trans S≈S₂ (≈-sym S≈S₁)))) ⊢T₁) ⊢T
  = -, -, -, -, -, Γ↝ , t↝ , ↝Λ S↝ (↝$ (↝sub t↝ ↝wk) ↝v) , ↝Π S↝ T↝ , 
    Λ-η ⊢S 
        (ctxeq-tm (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ S≈S₁)) ⊢T) 
        (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₂) ⊢t) (Π-cong-simp S≈S₂ (ctxeq-≈ (∷-cong-simp (⊢≈-sym Γ≈Γ₁) (ctxeq-≈ Γ≈Γ₁ (≈-trans S≈S₁ (≈-sym S≈S₂)))) T≈T₁) refl))
        refl , 
    IHΓ , IHt′ , IHΛ,t0

  where
    IHt′ : _ ⊨ _ ↝≈ _
    IHt′ tᵢ↝ ⊢tᵢ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₂ ⊢tᵢ)
      = ctxeq-≈ (⊢≈-sym Γ≈Γ₂) t≈tᵢ

    IHΛ,t0 : _ ⊨ _ ↝≈ _
    IHΛ,t0 (↝Λ Sᵢ↝ (↝$ (↝sub tᵢ↝ ↝wk) ↝v)) ⊢Λ,tᵢ[wk]$v0 
      with _ , _ , ≈Π , refl , ⊢tᵢ[wk]$v ← Λ-inv′ ⊢Λ,tᵢ[wk]$v0
      with ⊢∷ _ ⊢Sᵢ ← proj₁ (presup-tm ⊢tᵢ[wk]$v)
      with refl , S≈Sᵢ ← IH-transform IHS Sᵢ↝ ⊢Sᵢ ⊢S
      with i , j , Sᵢ₁ , Tᵢ , ⊢tᵢ[wk] , ⊢v0 , refl , ≈T[|v0] ← $-inv ⊢tᵢ[wk]$v
      with _ , ⊢tᵢ , ≈[wk] ← t[σ]-inv′ ⊢tᵢ[wk] (s-wk (proj₁ (presup-tm ⊢tᵢ[wk])))
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₂ ⊢tᵢ)
      = ≈-conv (≈-sym (Λ-cong-simp S≈Sᵢ (≈-conv ($-cong-simp (≈-conv ([]-cong (ctxeq-≈ (⊢≈-sym Γ≈Γ₂) (≈-sym t≈tᵢ)) (s-≈-refl (s-wk (proj₁ (presup-tm ⊢v0))))) (≈-sym ≈[wk])) 
                                                             (≈-refl ⊢v0) 
                                                             refl) 
                                                (≈-sym ≈T[|v0])) 
                                                refl)) 
               (≈-sym ≈Π)

⫢L-β : ∀ {j} →
       U.Γ′ ⫢ U.t′ ∶ U.T′ →
       -----------------------------
       U.Γ′ ⫢ unlift (liftt j U.t′) ≈ U.t′ ∶ U.T′
⫢L-β ⫢t′
  with _ , Γ , t , T , Γ↝ , t↝ , T↝ , ⊢t , IHΓ , IHt ← ⫢t′
    = -, -, -, -, -, Γ↝ , ↝unlift (↝liftt t↝) , t↝ , T↝ , 
      L-β _ ⊢t , 
      IHΓ , IHunliftlift , IHt

  where
    IHunliftlift : _ ⊨ _ ↝≈ _
    IHunliftlift (↝unlift (↝liftt tᵢ↝)) ⊢unliftliftᵢ 
      with j , k , Tᵢ , refl , ⊢lifttᵢ , ≈T ← unlift-inv ⊢unliftliftᵢ 
      with _ , Tᵢ₁ , _ , ⊢tᵢ , ≈LifttT ← liftt-inv ⊢lifttᵢ
      with refl , refl , _ , ≈Tᵢ ← Liftt-≈-inj ≈LifttT
      with t≈tᵢ ← IHt tᵢ↝ ⊢tᵢ
      with refl ← unique-lvl ⊢t (proj₁ (proj₂ (presup-≈ t≈tᵢ)))
      = unlift-cong _ (proj₁ (proj₂ (presup-≈ ≈T))) (liftt-cong _ (≈-conv t≈tᵢ (≈-trans (≈-sym ≈Tᵢ) (≈-sym ≈T))))

⫢L-η : ∀ {i j} →
       U.Γ′ ⫢ U.T′ ∶ Se i →
       U.Γ′ ⫢ U.t′ ∶ Liftt j U.T′ →
       -----------------------------
       U.Γ′ ⫢ U.t′ ≈ liftt j (unlift U.t′) ∶ Liftt j U.T′
⫢L-η ⫢T′ ⫢t′
  with _ , Γ , T , _ , Γ↝ , T↝ , ↝Se , ⊢T , IHΓ , IHT ← ⫢T′
     | _ , Γ₁ , t , _ , Γ₁↝ , t↝ , ↝Liftt T₁↝ , ⊢t , _ , IHt ← ⫢t′
  with refl ← ⊢T:Se-lvl ⊢T
  with ⊢Γ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ₁ , ⊢LiftT₁ ← presup-tm ⊢t
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with refl , ⊢T₁ ← Liftt-inv ⊢LiftT₁
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢T₁) ⊢T
  = -, -, -, -, -, Γ↝ , t↝ , ↝liftt (↝unlift t↝) , ↝Liftt T↝ , 
    L-η _ ⊢T (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢t) (Liftt-cong _ T≈T₁)) , 
    IHΓ , IHt′ , IHliftunlift

  where
    IHt′ : _ ⊨ _ ↝≈ _
    IHt′ tᵢ↝ ⊢tᵢ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ)
      = ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t≈tᵢ
    
    IHliftunlift : _ ⊨ _ ↝≈ _
    IHliftunlift (↝liftt (↝unlift tᵢ↝)) ⊢liftunlifttᵢ 
      with _ , Tᵢ , refl , ⊢unlifttᵢ , ≈T ← liftt-inv ⊢liftunlifttᵢ 
      with _ , _ , Tᵢ , refl , ⊢tᵢ , ≈Tᵢ ← unlift-inv ⊢unlifttᵢ 
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ)
      = ≈-conv (liftt-cong _ (unlift-cong _ (proj₁ (proj₂ (presup-≈ ≈Tᵢ))) (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t≈tᵢ) (Liftt-cong _ (≈-sym ≈Tᵢ))))) (≈-sym ≈T)

⫢[I] : U.Γ′ ⫢ U.t′ ∶ U.T′ →
       ---------------------
       U.Γ′ ⫢ U.t′ U.[ I ] ≈ U.t′ ∶ U.T′
⫢[I] ⫢t′
  with _ , Γ , t , T , Γ↝ , t↝ , T↝ , ⊢t , IHΓ , IHt ← ⫢t′
    = -, -, -, -, -, Γ↝ , ↝sub t↝ ↝I , t↝ , T↝ , [I] ⊢t , IHΓ , IHt[I] , IHt
  
  where
    IHt[I] : _ ⊨ _ ↝≈ _
    IHt[I] (↝sub tᵢ↝ ↝I) ⊢tᵢ[I] 
      with ⊢tᵢ ← [I]-inv ⊢tᵢ[I]
      with ⊢Γ , ⊢T ← presup-tm ⊢tᵢ
      with tᵢ≈t ← IHt tᵢ↝ ⊢tᵢ
      = ≈-conv ([]-cong tᵢ≈t (s-≈-refl (s-I ⊢Γ))) ([I] ⊢T)

⫢[wk] : ∀ {i x} →
        ⫢ U.Γ′ →
        U.Γ′ ⫢ U.S′ ∶ Se i →
        x ∶ U.T′ ∈! U.Γ′ →
        ---------------------
        U.S′ ∷ U.Γ′ ⫢ v x U.[ wk ] ≈ v (1 + x) ∶ U.T′ U.[ wk ]
⫢[wk] ⫢Γ′ ⫢S′ x∈Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
     | _ , Γ₁ , S , _ , Γ₁↝ , S↝ , ↝Se , ⊢S , _ , IHS ← ⫢S′
  with refl ← ⊢T:Se-lvl ⊢S
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ (proj₁ (presup-tm ⊢S))
  with i , T , T↝ , x∈Γ ← U⇒A-vlookup Γ↝ x∈Γ′
  = -, -, -, -, -, ↝∷ Γ↝ S↝ , ↝sub ↝v ↝wk , ↝v , ↝sub T↝ ↝wk , 
    [wk] ⊢Γ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S) x∈Γ , 
    IHS∷Γ , IHvx[wk] , IHv1+x

  where
    IHS∷Γ : _ [↝≈] _
    IHS∷Γ ℕ.zero (↝∷ Γᵢ↝ Sᵢ↝) (⊢∷ ⊢Γᵢ ⊢Sᵢ) 
      with Γᵢ≈Γ ← IHΓ 0 Γᵢ↝ ⊢Γᵢ
      with refl , Sᵢ≈S ← IH-transform IHS Sᵢ↝ (ctxeq-tm (⊢≈-trans (⊢≈-sym Γᵢ≈Γ) Γ≈Γ₁) ⊢Sᵢ) ⊢S
      = ∷-cong-simp Γᵢ≈Γ (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym Sᵢ≈S))
    IHS∷Γ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΓ n Γᵢ↝ ⊢Γᵢ

    IHvx[wk] : _ ⊨ _ ↝≈ _
    IHvx[wk] (↝sub ↝v ↝wk) ⊢vx[wk] = ≈-refl ⊢vx[wk]

    IHv1+x : _ ⊨ _ ↝≈ _
    IHv1+x ↝v ⊢v = ≈-refl ⊢v

⫢[∘]  : U.Γ′ ⫢s U.τ′ ∶ U.Ψ′ →
        U.Ψ′ ⫢s U.σ′ ∶ U.Δ′ →
        U.Δ′ ⫢ U.t′ ∶ U.T′ →
        ---------------------
        U.Γ′ ⫢ U.t′ U.[ U.σ′ ∘ U.τ′ ] ≈ U.t′ U.[ U.σ′ ] U.[ U.τ′ ] ∶ U.T′ U.[ U.σ′ ∘ U.τ′ ]
⫢[∘] ⫢τ′ ⫢σ′ ⫢t′
  with Γ , Ψ₁ , τ , Γ↝ , Ψ₁↝ , τ↝ , ⊢τ , IHΓ , IHτ , _ ← ⫢τ′
     | Ψ , Δ₁ , σ , Ψ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΨ , IHσ , _ ← ⫢σ′
     | i , Δ , t , T , Δ↝ , t↝ , T↝ , ⊢t , IHΔ , IHt ← ⫢t′
  with ⊢Ψ₁ ← proj₂ (presup-s ⊢τ)
     | ⊢Ψ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Δ ← proj₁ (presup-tm ⊢t)
  with Ψ≈Ψ₁ ← IHΨ 0 Ψ₁↝ ⊢Ψ₁
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  = -, -, -, -, -, Γ↝ , ↝sub t↝ (↝∘ σ↝ τ↝) , ↝sub (↝sub t↝ σ↝) τ↝ , ↝sub T↝ (↝∘ σ↝ τ↝) , 
    [∘] (s-conv ⊢τ (⊢≈-sym Ψ≈Ψ₁)) (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢t , IHΓ , IHt[στ] , IHt[σ][τ]

  where
    IHt[στ] : _ ⊨ _ ↝≈ _
    IHt[στ] (↝sub tᵢ↝ (↝∘ σᵢ↝ τᵢ↝)) ⊢t[σᵢτᵢ] 
      with Δᵢ , Rᵢ , ⊢σᵢτᵢ , ⊢tᵢ , ≈R[σᵢτᵢ] ← t[σ]-inv ⊢t[σᵢτᵢ] 
      with Ψᵢ , ⊢τᵢ , ⊢σᵢ ← ∘-inv ⊢σᵢτᵢ
      with τᵢ≈τ ← IHτ τᵢ↝  ⊢τᵢ
      with Ψᵢ≈Ψ₁ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τᵢ≈τ)))
      with Ψᵢ≈Ψ ← ⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁)
      with σᵢ≈σ ← IHσ σᵢ↝ (ctxeq-s Ψᵢ≈Ψ ⊢σᵢ)
      with Δᵢ≈Δ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σᵢ≈σ)))
      with Δᵢ≈Δ ← ⊢≈-trans (⊢≈-sym Δᵢ≈Δ₁) (⊢≈-sym Δ≈Δ₁)
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δᵢ≈Δ ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-sym t≈tᵢ) (∘-cong (s-≈-sym τᵢ≈τ) (s-≈-conv (ctxeq-s-≈ (⊢≈-sym Ψᵢ≈Ψ) (s-≈-sym σᵢ≈σ))  (⊢≈-sym (⊢≈-sym Δᵢ≈Δ)))))) (≈-sym ≈R[σᵢτᵢ])

    IHt[σ][τ] : _ ⊨ _ ↝≈ _
    IHt[σ][τ] (↝sub (↝sub tᵢ↝ σᵢ↝) τᵢ↝) ⊢t[σᵢ][τᵢ] 
      with _ , τᵢ≈τ , ⊢τᵢ , ⊢t[σᵢ] , ≈T[τᵢ] ← t[σ]-inv-IH IHτ ⊢t[σᵢ][τᵢ] τᵢ↝ ⊢τ
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈T[σᵢ] ← t[σ]-inv-IH IHσ (ctxeq-tm (⊢≈-sym Ψ≈Ψ₁) ⊢t[σᵢ]) σᵢ↝ ⊢σ
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢tᵢ)
      = ≈-conv (≈-sym ([]-cong (≈-conv ([]-cong (ctxeq-≈ Δ≈Δ₁ (≈-sym t≈tᵢ)) σᵢ≈σ) (≈-sym ≈T[σᵢ])) (s-≈-conv τᵢ≈τ (⊢≈-sym Ψ≈Ψ₁)))) (≈-sym ≈T[τᵢ])

⫢[,]-v-ze : ∀ {i} →
            U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
            U.Δ′ ⫢ U.S′ ∶ Se i →
            U.Γ′ ⫢ U.s′ ∶ U.S′ U.[ U.σ′ ] →
            ---------------------
            U.Γ′ ⫢ v 0 U.[ U.σ′ , U.s′ ∶ U.S′ ] ≈ U.s′ ∶ U.S′ U.[ U.σ′ ]
⫢[,]-v-ze ⫢σ ⫢S′ ⫢s′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ
     | _ , Δ , S , _ , Δ↝ , S↝ , ↝Se , ⊢S , IHΔ , IHS ← ⫢S′
     | i , Γ₁ , s , _ , Γ₁↝ , s↝ , ↝sub {t = S₁} S₁↝ σ₁↝ , ⊢s , _ , IHs ← ⫢s′
  with refl ← ⊢T:Se-lvl ⊢S
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Γ₁ , ⊢S₁[σ₁] ← presup-tm ⊢s
     | ⊢Δ ← proj₁ (presup-tm ⊢S)
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  with _ , σ₁≈σ , ⊢σ₁ , ⊢S₁ , _ ← t[σ]-inv-IH IHσ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁[σ₁]) σ₁↝ ⊢σ
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢S₁) ⊢S
  = -, -, -, -, -, Γ↝ , ↝sub ↝v (↝, σ↝ s↝ S↝) , s↝ , ↝sub S↝ σ↝ , 
    [,]-v-ze (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) 
             ⊢S 
             (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢s) ([]-cong-Se-simp S≈S₁ (s-≈-conv σ₁≈σ (⊢≈-sym Δ≈Δ₁)))), 
    IHΓ , IHv0[σ,s] , IHs′

  where
    IHv0[σ,s] : _ ⊨ _ ↝≈ _
    IHv0[σ,s] (↝sub ↝v (↝, σᵢ↝ sᵢ↝ Sᵢ↝)) ⊢v0[σ,s] 
      with _ , Rᵢ , ⊢σᵢ,sᵢ , ⊢v , ≈Rᵢ[σᵢ,sᵢ] ← t[σ]-inv ⊢v0[σ,s]
      with σᵢ≈σ , ⊢σᵢ , ⊢sᵢ , Sᵢ∷Δ₁≈ ← ,-inv-IH IHσ ⊢σᵢ,sᵢ σᵢ↝ ⊢σ
      with ⊢∷ _ ⊢Sᵢ ← proj₁ (presup-⊢≈ Sᵢ∷Δ₁≈)
      with refl , S≈Sᵢ ← IH-transform IHS Sᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Sᵢ) ⊢S
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢sᵢ)
      = ≈-conv (≈-sym ([]-cong (ctxeq-≈ (⊢≈-trans (⊢≈-sym Sᵢ∷Δ₁≈) (∷-cong-simp (⊢≈-sym Δ≈Δ₁) (≈-refl ⊢Sᵢ))) (≈-refl ⊢v)) 
                               (,-cong-simp (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₁)) S≈Sᵢ (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym s≈sᵢ)) ([]-cong-Se-simp′ ⊢Sᵢ (s-≈-sym σᵢ≈σ)))))) (≈-sym ≈Rᵢ[σᵢ,sᵢ])

    IHs′ : _ ⊨ _ ↝≈ _
    IHs′ sᵢ↝ ⊢sᵢ 
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢sᵢ)
      = ctxeq-≈ (⊢≈-sym Γ≈Γ₁) s≈sᵢ

⫢[,]-v-su : ∀ {i x} →
            U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
            U.Δ′ ⫢ U.S′ ∶ Se i →
            U.Γ′ ⫢ U.s′ ∶ U.S′ U.[ U.σ′ ] →
            x ∶ U.T′ ∈! U.Δ′ →
            ---------------------
            U.Γ′ ⫢ v (1 + x) U.[ U.σ′ , U.s′ ∶ U.S′ ] ≈ v x U.[ U.σ′ ] ∶ U.T′ U.[ U.σ′ ]
⫢[,]-v-su ⫢σ ⫢S′ ⫢s′ x∈Δ′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ
     | _ , Δ , S , _ , Δ↝ , S↝ , ↝Se , ⊢S , IHΔ , IHS ← ⫢S′
     | i , Γ₁ , s , _ , Γ₁↝ , s↝ , ↝sub {t = S₁} S₁↝ σ₁↝ , ⊢s , _ , IHs ← ⫢s′
  with refl ← ⊢T:Se-lvl ⊢S
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Γ₁ , ⊢S₁[σ₁] ← presup-tm ⊢s
     | ⊢Δ ← proj₁ (presup-tm ⊢S)
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  with _ , σ₁≈σ , ⊢σ₁ , ⊢S₁ , _ ← t[σ]-inv-IH IHσ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢S₁[σ₁]) σ₁↝ ⊢σ
  with refl , S≈S₁ ← IH-transform IHS S₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢S₁) ⊢S
  with j , T , T↝ , x∈Δ ← U⇒A-vlookup Δ↝ x∈Δ′
    = -, -, -, -, -, Γ↝ , ↝sub ↝v (↝, σ↝ s↝ S↝) , ↝sub ↝v σ↝ , ↝sub T↝ σ↝ , 
      [,]-v-su (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢S 
               (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢s) ([]-cong-Se-simp S≈S₁ (s-≈-conv σ₁≈σ (⊢≈-sym Δ≈Δ₁)))) x∈Δ , 
      IHΓ , IHv1+x[σ,s] , IHvx[σ]

  where
    IHv1+x[σ,s] : _ ⊨ _ ↝≈ _
    IHv1+x[σ,s] (↝sub ↝v (↝, σᵢ↝ sᵢ↝ Sᵢ↝)) ⊢v1+x[σ,s]
      with _ , Rᵢ , ⊢σᵢ,sᵢ , ⊢v , ≈Rᵢ[σᵢ,sᵢ] ← t[σ]-inv ⊢v1+x[σ,s]
      with σᵢ≈σ , ⊢σᵢ , ⊢sᵢ , Sᵢ∷Δ₁≈ ← ,-inv-IH IHσ ⊢σᵢ,sᵢ σᵢ↝ ⊢σ
      with ⊢∷ _ ⊢Sᵢ ← proj₁ (presup-⊢≈ Sᵢ∷Δ₁≈)
      with refl , S≈Sᵢ ← IH-transform IHS Sᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Sᵢ) ⊢S
      with s≈sᵢ ← IHs sᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢sᵢ) 
      = ≈-conv (≈-sym ([]-cong (ctxeq-≈ (⊢≈-trans (⊢≈-sym Sᵢ∷Δ₁≈) (∷-cong-simp (⊢≈-sym Δ≈Δ₁) (≈-refl ⊢Sᵢ))) (≈-refl ⊢v)) 
                               (,-cong-simp (s-≈-conv σᵢ≈σ (⊢≈-sym Δ≈Δ₁)) S≈Sᵢ (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym s≈sᵢ)) ([]-cong-Se-simp′ ⊢Sᵢ (s-≈-sym σᵢ≈σ)))))) (≈-sym ≈Rᵢ[σᵢ,sᵢ])

    IHvx[σ] : _ ⊨ _ ↝≈ _
    IHvx[σ] (↝sub ↝v σᵢ↝) ⊢vx[σ] 
      with _ , σᵢ≈σ , ⊢σᵢ , ⊢v , ≈Tᵢ[σᵢ] ← t[σ]-inv-IH IHσ ⊢vx[σ] σᵢ↝ ⊢σ
      = ≈-conv (≈-sym ([]-cong (≈-refl ⊢v) σᵢ≈σ)) (≈-sym ≈Tᵢ[σᵢ])

⫢≈-conv : ∀ {i} →
          U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ U.S′ →
          U.Γ′ ⫢ U.S′ ≈ U.T′ ∶ Se i →
          ---------------------
          U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ U.T′
⫢≈-conv s′≈t′ S′≈T′
  with i , Γ , s , t , S , Γ↝ , s↝ , t↝ , S₁↝ , s≈t , IHΓ , IHs , IHt ← s′≈t′
     | _ , Γ₁ , S , T , _ , Γ₁↝ , S↝ , T↝ , ↝Se , S≈T , _ , IHS , IHT ← S′≈T′
  with ⊢Γ , ⊢s , ⊢t , ⊢S₁ ← presup-≈ s≈t
     | ⊢Γ₁ , ⊢S , ⊢T , _ ← presup-≈ S≈T
  with refl ← ⊢T:Se-lvl ⊢S
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with S≈S₁ ← IHS S₁↝ (ctxeq-tm Γ≈Γ₁ ⊢S₁)
  with refl ← unique-lvl ⊢S (proj₁ (proj₂ (presup-≈ S≈S₁)))
    = -, -, -, -, -, Γ↝ , s↝ , t↝ , T↝ , 
      ≈-conv s≈t (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-trans (≈-sym S≈S₁) S≈T)) , 
      IHΓ , IHs , IHt

⫢≈-sym : U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ U.S′ →
         ---------------------
         U.Γ′ ⫢ U.t′ ≈ U.s′ ∶ U.S′
⫢≈-sym s′≈t′
  with _ , Γ , s , t , S , Γ↝ , s↝ , t↝ , S↝ , s≈t , IHΓ , IHs , IHt ← s′≈t′
    = -, -, -, -, -, Γ↝ , t↝ , s↝ , S↝ , ≈-sym s≈t , IHΓ , IHt , IHs

⫢≈-trans : U.Γ′ ⫢ U.s′ ≈ U.t′ ∶ U.S′ →
           U.Γ′ ⫢ U.t′ ≈ U.r′ ∶ U.S′ →
           ---------------------
           U.Γ′ ⫢ U.s′ ≈ U.r′ ∶ U.S′
⫢≈-trans s′≈t′ t′≈r′
  with i , Γ , s , t , S , Γ↝ , s↝ , t↝ , S↝ , s≈t , IHΓ , IHs , IHt ← s′≈t′
     | _ , Γ₁ , t₁ , r , S₁ , Γ₁↝ , t₁↝ , r↝ , S₁↝ , t≈r , _ , _ , IHr ← t′≈r′
  with ⊢Γ , ⊢s , ⊢t , ⊢S ← presup-≈ s≈t
     | ⊢Γ₁ , ⊢t₁ , ⊢r , ⊢S₁ ← presup-≈ t≈r
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with t≈t₁ ← IHt t₁↝ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢t₁)
  with refl , S≈S₁ ← unique-typ ⊢t (proj₁ (proj₂ (presup-≈ t≈t₁)))
  = -, -, -, -, -, Γ↝ , s↝ , r↝ , S↝ , 
    ≈-trans s≈t (≈-trans (≈-conv t≈t₁ (≈-sym S≈S₁)) (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t≈r) (≈-sym S≈S₁))) , 
    IHΓ , IHs , IHr′
  
  where
    IHr′ : _ ⊨ _ ↝≈ _
    IHr′ rᵢ↝ ⊢rᵢ 
      with r≈rᵢ ← IHr rᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢rᵢ)
      = ctxeq-≈ (⊢≈-sym Γ≈Γ₁) r≈rᵢ

⫢I-≈ : ⫢ U.Γ′ →
       ----------------
        U.Γ′ ⫢s I ≈ I ∶ U.Γ′
⫢I-≈ ⫢Γ′
  with Γ , Γ↝ , ⊢Γ , IHΓ ← ⫢Γ′
  = -, -, -, -, Γ↝ , Γ↝ , ↝I , ↝I , 
    I-≈ ⊢Γ , 
    IHΓ , (λ {↝I ⊢I → s-≈-refl ⊢I}) , (λ {↝I ⊢I → s-≈-refl ⊢I}) , IHΓ

⫢wk-≈ : ⫢ U.S′ ∷ U.Γ′ →
        ---------------------
        U.S′ ∷ U.Γ′ ⫢s wk ≈ wk ∶ U.Γ′
⫢wk-≈ ⫢S∷Γ′
  with Γ , S∷Γ↝@(↝∷ Γ↝ S↝) , ⊢S∷Γ , IHS∷Γ ← ⫢S∷Γ′ 
  = -, -, -, -, S∷Γ↝ , Γ↝ , ↝wk , ↝wk , 
    wk-≈ ⊢S∷Γ ,  
    IHS∷Γ , (λ {↝wk ⊢wk → s-≈-refl ⊢wk}) , (λ {↝wk ⊢wk → s-≈-refl ⊢wk}) , IHCΓ

  where
    IHCΓ : _ [↝≈] _
    IHCΓ n ↝Γᵢ ⊢Γᵢ = IHS∷Γ (ℕ.suc n) ↝Γᵢ ⊢Γᵢ

⫢∘-cong : ∀ {σ₁′ σ₂′ τ₁′ τ₂′} →
          U.Γ′ ⫢s τ₁′ ≈ τ₂′ ∶ U.Ψ′ →
          U.Ψ′ ⫢s σ₁′ ≈ σ₂′ ∶ U.Δ′ →
          ---------------------
          U.Γ′ ⫢s σ₁′ ∘ τ₁′ ≈ σ₂′ ∘ τ₂′ ∶ U.Δ′
⫢∘-cong τ₁′≈τ₂′ σ₁′≈σ₂′
  with Γ , Ψ₁ , τ₁ , τ₂ , Γ↝ , Ψ₁↝ , τ₁↝ , τ₂↝ , τ₁≈τ₂ , IHΓ , IHτ₁ , IHτ₂ , _ ← τ₁′≈τ₂′
     | Ψ , Δ , σ₁ , σ₂ , Ψ₂↝ , Δ↝ , σ₁↝ , σ₂↝ , σ₁≈σ₂ , IHΨ , IHσ₁ , IHσ₂ , IHΔ ← σ₁′≈σ₂′
  with ⊢Γ , ⊢τ₁ , ⊢τ₂ , ⊢Ψ₁ ← presup-s-≈ τ₁≈τ₂
     | ⊢Ψ , ⊢σ₁ , ⊢σ₂ , _ ← presup-s-≈ σ₁≈σ₂  
  with Ψ≈Ψ₁ ← IHΨ 0 Ψ₁↝ ⊢Ψ₁
  = -, -, -, -, Γ↝ , Δ↝ , ↝∘ σ₁↝ τ₁↝ , ↝∘ σ₂↝ τ₂↝ , 
    ∘-cong τ₁≈τ₂ (ctxeq-s-≈ Ψ≈Ψ₁ σ₁≈σ₂) ,
    IHΓ , IHσ₁τ₁ , IHσ₂τ₂ , IHΔ

  where
    IHσ₁τ₁ : _ ⊨s _ ↝≈ _
    IHσ₁τ₁ (↝∘ σᵢ↝ τᵢ↝) ⊢σᵢ∘τᵢ 
      with Ψᵢ , ⊢τᵢ , ⊢σᵢ ← ∘-inv ⊢σᵢ∘τᵢ
      with τᵢ≈τ₁ ← IHτ₁ τᵢ↝ ⊢τᵢ
      with Ψᵢ≈Ψ₁ ← unique-ctx ⊢τ₁ (proj₁ (proj₂ (presup-s-≈ τᵢ≈τ₁)))
      with σᵢ≈σ₁ ← IHσ₁ σᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁)) ⊢σᵢ)
      = ∘-cong (s-≈-conv τᵢ≈τ₁ (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁))) σᵢ≈σ₁

    IHσ₂τ₂ : _ ⊨s _ ↝≈ _
    IHσ₂τ₂ (↝∘ σᵢ↝ τᵢ↝) ⊢σᵢ∘τᵢ
      with Ψᵢ , ⊢τᵢ , ⊢σᵢ ← ∘-inv ⊢σᵢ∘τᵢ
      with τᵢ≈τ₁ ← IHτ₂ τᵢ↝ ⊢τᵢ
      with Ψᵢ≈Ψ₁ ← unique-ctx ⊢τ₂ (proj₁ (proj₂ (presup-s-≈ τᵢ≈τ₁)))
      with σᵢ≈σ₁ ← IHσ₂ σᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁)) ⊢σᵢ)
      = ∘-cong (s-≈-conv τᵢ≈τ₁ (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁))) σᵢ≈σ₁

⫢,-cong : ∀ {i σ₁′ σ₂′ t₁′ t₂′ T₁′ T₂′ } →
          U.Γ′ ⫢s σ₁′ ≈ σ₂′ ∶ U.Δ′ →
          U.Δ′ ⫢ T₁′ ∶ Se i →
          U.Δ′ ⫢ T₁′ ≈ T₂′ ∶ Se i →
          U.Γ′ ⫢ t₁′ ≈ t₂′ ∶ T₁′ U.[ σ₁′ ] →
          ----------------------
          U.Γ′ ⫢s (σ₁′ , t₁′ ∶ T₁′) ≈ (σ₂′ , t₂′ ∶ T₂′) ∶ T₁′ ∷ U.Δ′
⫢,-cong σ₁′≈σ₂′ _ T₁′≈T₂′ t₁′≈t₂′
  with Γ , Δ₁ , σ₁₁ , σ₂ , Γ↝ , Δ₁↝ , σ₁₁↝ , σ₂₁↝ , σ₁₁≈σ₂₁ , IHΓ , IHσ₁ , IHσ₂ , _ ← σ₁′≈σ₂′
     | _ , Δ , T₁₁ , T₂₁ , _ , Δ↝ , T₁₁↝ , T₂₁↝ , ↝Se , T₁≈T₂ , IHΔ , IHT₁ , IHT₂ ← T₁′≈T₂′
     | i , Γ₁ , t₁ , t₂ , _ , Γ₁↝ , t₁↝ , t₂↝ , ↝sub {t = T₁₂} {σ = σ₁₂} T₁₂↝ σ₁₂↝ , t₁≈t₂ , _ , IHt₁ , IHt₂ ← t₁′≈t₂′
  with ⊢Γ , ⊢σ₁₁ , ⊢σ₂₁ , ⊢Δ₁ ← presup-s-≈ σ₁₁≈σ₂₁
     | ⊢Δ , ⊢T₁₁ , ⊢T₂₁ , _ ← presup-≈ T₁≈T₂
     | ⊢Γ₁ , ⊢t₁ , ⊢t₂ , ⊢T₁₂[σ₁₂] ← presup-≈ t₁≈t₂
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  with _ , σ₁₂≈ , ⊢σ₁₂ , ⊢T₁₂ , _ ← t[σ]-inv-IH IHσ₁ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢T₁₂[σ₁₂]) σ₁₂↝ ⊢σ₁₁ 
  with σ≈σ₁₂ ← IHσ₁ σ₁₂↝ ⊢σ₁₂
  with refl , T₁₁≈T₁₂ ← IH-transform IHT₁ T₁₂↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢T₁₂) ⊢T₁₁
  with refl ← ⊢T≈S:Se-lvl T₁₁≈T₁₂
  = -, -, -, -, Γ↝ , ↝∷ Δ↝ T₁₁↝ , ↝, σ₁₁↝ t₁↝ T₁₁↝ , ↝, σ₂₁↝ t₂↝ T₂₁↝ , 
    ,-cong (s-≈-conv σ₁₁≈σ₂₁ (⊢≈-sym Δ≈Δ₁)) ⊢T₁₁ T₁≈T₂ 
           (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) t₁≈t₂) ([]-cong-Se-simp T₁₁≈T₁₂ (s-≈-conv (s-≈-sym  σ≈σ₁₂) (⊢≈-sym Δ≈Δ₁)))) , 
    IHΓ , IHσ₁,t₁ , IHσ₂,t₂ , IHCT∷Δ 

  where
    IHσ₁,t₁ : _ ⊨s _ ↝≈ _
    IHσ₁,t₁ (↝, {σ = σᵢ} {t = tᵢ} σᵢ↝ tᵢ↝ Tᵢ↝) ⊢σᵢ,tᵢ 
      with σ≈σᵢ , ⊢σᵢ , ⊢tᵢ , T∷Δ₁≈ ← ,-inv-IH IHσ₁ ⊢σᵢ,tᵢ σᵢ↝ ⊢σ₁₁
      with ⊢∷ _ ⊢Tᵢ , _ ← presup-⊢≈ T∷Δ₁≈
      with T₁≈Tᵢ ← IHT₁ Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Tᵢ)
      with Δ₁⊢T₁≈Tᵢ ← ctxeq-≈ Δ≈Δ₁ (≈-sym T₁≈Tᵢ)
      with t₁≈tᵢ ← IHt₁ tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ)
      with refl , ≈T ← unique-typ ⊢t₁ (proj₁ (proj₂ (presup-≈ t₁≈tᵢ)))
      = s-≈-conv (s-≈-sym (,-cong σ≈σᵢ ⊢Tᵢ Δ₁⊢T₁≈Tᵢ (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym t₁≈tᵢ)) ([]-cong-Se‴ ⊢Tᵢ (s-≈-sym σ≈σᵢ))))) T∷Δ₁≈

    IHσ₂,t₂ : _ ⊨s _ ↝≈ _
    IHσ₂,t₂ (↝, {σ = σᵢ} {t = tᵢ} σᵢ↝ tᵢ↝ Tᵢ↝) ⊢σᵢ,tᵢ 
      with σ≈σᵢ , ⊢σᵢ , ⊢tᵢ , T∷Δ₁≈ ← ,-inv-IH IHσ₂ ⊢σᵢ,tᵢ σᵢ↝ ⊢σ₂₁
      with ⊢∷ _ ⊢Tᵢ , _ ← presup-⊢≈ T∷Δ₁≈
      with T₂≈Tᵢ ← IHT₂ Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Tᵢ)
      with Δ₁⊢T₂≈Tᵢ ← ctxeq-≈ Δ≈Δ₁ (≈-sym T₂≈Tᵢ)
      with t₂≈tᵢ ← IHt₂ tᵢ↝ (ctxeq-tm Γ≈Γ₁ ⊢tᵢ)
      with refl , ≈T ← unique-typ ⊢t₂ (proj₁ (proj₂ (presup-≈ t₂≈tᵢ)))
      = s-≈-conv (s-≈-sym (,-cong σ≈σᵢ ⊢Tᵢ Δ₁⊢T₂≈Tᵢ (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym t₂≈tᵢ)) ([]-cong-Se‴ ⊢Tᵢ (s-≈-sym σ≈σᵢ))))) T∷Δ₁≈

    IHCT∷Δ : _ [↝≈] _
    IHCT∷Δ ℕ.zero (↝∷ {T = Tᵢ} ↝Δᵢ ↝Tᵢ) (⊢∷ ⊢Δᵢ ⊢Tᵢ) 
      with Δ≈Δᵢ ← IHΔ 0 ↝Δᵢ ⊢Δᵢ 
      with T≈Tᵢ ← IHT₁ ↝Tᵢ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T₁₁ (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) = ∷-cong-simp Δ≈Δᵢ T≈Tᵢ
    IHCT∷Δ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΔ n Γᵢ↝ ⊢Γᵢ

⫢I-∘ : U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
       ---------------------
       U.Γ′ ⫢s I ∘ U.σ′ ≈ U.σ′ ∶ U.Δ′
⫢I-∘ ⫢σ′
  with Γ , Δ , σ , Γ↝ , Δ↝ , σ↝ , ⊢σ , IHΓ , IHσ , IHΔ ← ⫢σ′
    = -, -, -, -, Γ↝ , Δ↝ , ↝∘ ↝I σ↝ , σ↝ , I-∘ ⊢σ , IHΓ , IHIσ , IHσ , IHΔ

  where
    IHIσ : _ ⊨s _ ↝≈ _
    IHIσ (↝∘ ↝I σᵢ↝) ⊢Iσᵢ 
      with Ψ , ⊢σᵢ , ⊢I ← ∘-inv ⊢Iσᵢ
      with σᵢ≈σ ← IHσ σᵢ↝ ⊢σᵢ
      = ∘-cong σᵢ≈σ (s-≈-refl ⊢I)

⫢∘-I : U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
       ---------------------
       U.Γ′ ⫢s U.σ′ ∘ I ≈ U.σ′ ∶ U.Δ′
⫢∘-I ⫢σ′
  with Γ , Δ , σ , Γ↝ , Δ↝ , σ↝ , ⊢σ , IHΓ , IHσ , IHΔ ← ⫢σ′
    = -, -, -, -, Γ↝ , Δ↝ , ↝∘ σ↝ ↝I , σ↝ , ∘-I ⊢σ , IHΓ , IHσI , IHσ , IHΔ

  where
    IHσI : _ ⊨s _ ↝≈ _
    IHσI (↝∘ σᵢ↝ ↝I ) ⊢Iσᵢ 
      with Ψ , ⊢I , ⊢σᵢ ← ∘-inv ⊢Iσᵢ
      with Ψ≈Δ₁ ← I-inv ⊢I
      with σᵢ≈σ ← IHσ σᵢ↝ (ctxeq-s (⊢≈-sym Ψ≈Δ₁) ⊢σᵢ)
      = ∘-cong (s-≈-refl (s-I (proj₁ (presup-s ⊢σ)))) σᵢ≈σ

⫢∘-assoc : ∀ {ζ′ Ω′} →
           U.Ψ′ ⫢s ζ′ ∶ Ω′ →
           U.Δ′ ⫢s U.τ′ ∶ U.Ψ′ →
           U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
           ---------------------
           U.Γ′ ⫢s (ζ′ ∘ U.τ′) ∘ U.σ′ ≈ ζ′ ∘ (U.τ′ ∘ U.σ′) ∶ Ω′
⫢∘-assoc ⫢ζ′ ⫢τ′ ⫢σ′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | Δ , Ψ₁ , τ , Δ↝ , Ψ₁↝ , τ↝ , ⊢τ , IHΔ , IHτ , _ ← ⫢τ′
     | Ψ , Ω , ζ , Ψ↝ , Ω↝ , ζ↝ , ⊢ζ , IHΨ , IHζ , IHΩ ← ⫢ζ′
  with ⊢Γ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Δ , ⊢Ψ₁ ← presup-s ⊢τ
     | ⊢Ψ ← proj₁ (presup-s ⊢ζ)
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Ψ≈Ψ₁ ← IHΨ 0 Ψ₁↝ ⊢Ψ₁
    = -, -, -, -, Γ↝ , Ω↝ , ↝∘ (↝∘ ζ↝ τ↝) σ↝ , ↝∘ ζ↝ (↝∘ τ↝ σ↝) ,
      ∘-assoc ⊢ζ (ctxeq-s Δ≈Δ₁ (s-conv ⊢τ (⊢≈-sym Ψ≈Ψ₁))) ⊢σ ,
      IHΓ , IH⦇ζ∘τ⦈∘σ , IHζ∘⦇τ∘σ⦈ , IHΩ
  
  where 
    IH⦇ζ∘τ⦈∘σ : _ ⊨s _ ↝≈ _
    IH⦇ζ∘τ⦈∘σ (↝∘ (↝∘ ζᵢ↝ τᵢ↝) σᵢ↝) ⊢⦇ζᵢ∘τᵢ⦈∘σᵢ
      with Δᵢ , ⊢σᵢ , ⊢ζᵢ∘τᵢ ← ∘-inv ⊢⦇ζᵢ∘τᵢ⦈∘σᵢ
      with Ψᵢ , ⊢τᵢ , ⊢ζᵢ ← ∘-inv ⊢ζᵢ∘τᵢ
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ
      with Δᵢ≈Δ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ)))
      with τ≈τᵢ ← IHτ τᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Δᵢ≈Δ₁) (⊢≈-sym Δ≈Δ₁)) ⊢τᵢ)
      with Ψᵢ≈Ψ₁ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τ≈τᵢ)))
      with ζᵢ≈ζ ← IHζ ζᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁)) ⊢ζᵢ)
      = ∘-cong (s-≈-conv σ≈σᵢ (⊢≈-sym Δᵢ≈Δ₁)) (∘-cong (ctxeq-s-≈ Δ≈Δ₁ (s-≈-conv τ≈τᵢ (⊢≈-sym Ψᵢ≈Ψ₁))) (ctxeq-s-≈ Ψ≈Ψ₁ ζᵢ≈ζ))

    IHζ∘⦇τ∘σ⦈ : _ ⊨s _ ↝≈ _
    IHζ∘⦇τ∘σ⦈ (↝∘ ζᵢ↝ (↝∘ τᵢ↝ σᵢ↝)) ⊢ζᵢ∘⦇τᵢ∘σᵢ⦈ 
      with Ψᵢ , ⊢τᵢ∘σᵢ , ⊢ζᵢ ← ∘-inv ⊢ζᵢ∘⦇τᵢ∘σᵢ⦈
      with Δᵢ , ⊢σᵢ , ⊢τᵢ ← ∘-inv ⊢τᵢ∘σᵢ 
      with σ≈σᵢ ← IHσ σᵢ↝ ⊢σᵢ
      with Δᵢ≈Δ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σ≈σᵢ)))
      with τ≈τᵢ ← IHτ τᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Δᵢ≈Δ₁) (⊢≈-sym Δ≈Δ₁)) ⊢τᵢ)
      with Ψᵢ≈Ψ₁ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τ≈τᵢ)))
      with ζᵢ≈ζ ← IHζ ζᵢ↝ (ctxeq-s (⊢≈-trans (⊢≈-sym Ψᵢ≈Ψ₁) (⊢≈-sym Ψ≈Ψ₁)) ⊢ζᵢ)
      = ∘-cong (∘-cong (s-≈-conv σ≈σᵢ (⊢≈-sym Δᵢ≈Δ₁)) (ctxeq-s-≈ Δ≈Δ₁ (s-≈-conv τ≈τᵢ (⊢≈-sym Ψᵢ≈Ψ₁)))) (ctxeq-s-≈ Ψ≈Ψ₁ ζᵢ≈ζ)

⫢,-∘ : ∀ {i} →
       U.Δ′ ⫢s U.σ′ ∶ U.Ψ′ →
       U.Ψ′ ⫢ U.T′ ∶ Se i →
       U.Δ′ ⫢ U.t′ ∶ U.T′ U.[ U.σ′ ] →
       U.Γ′ ⫢s U.τ′ ∶ U.Δ′ →
       ---------------------
       U.Γ′ ⫢s (U.σ′ , U.t′ ∶ U.T′) ∘ U.τ′ ≈ (U.σ′ ∘ U.τ′) , U.t′ U.[ U.τ′ ] ∶ U.T′ ∶ U.T′ ∷ U.Ψ′
⫢,-∘ ⫢σ′ ⫢T′ ⫢t′ ⫢τ′
  with Δ , Ψ₁ , σ , Δ↝ , Ψ₁↝ , σ↝ , ⊢σ , IHΔ , IHσ , IHΨ ← ⫢σ′
     | _ , Ψ , T , _ , Ψ↝ , T↝ , ↝Se , ⊢T , IHΨ , IHT ← ⫢T′
     | i , Δ₁ , t , _ , Δ₁↝ , t↝ , ↝sub {t = T₁} T₁↝ σ₁↝ , ⊢t , _ , IHt ← ⫢t′
     | Γ , Δ₂ , τ , Γ↝ , Δ₂↝ , τ↝ , ⊢τ , IHΓ , IHτ , _ ← ⫢τ′
  with refl ← ⊢T:Se-lvl ⊢T
  with ⊢Δ , ⊢Ψ₁ ← presup-s ⊢σ
     | ⊢Ψ ← proj₁ (presup-tm ⊢T)
     | ⊢Δ₁ , ⊢T₁[σ₁] ← presup-tm ⊢t
     | _ , ⊢Δ₂ ← presup-s ⊢τ 
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
     | Δ≈Δ₂ ← IHΔ 0 Δ₂↝ ⊢Δ₂
     | Ψ≈Ψ₁ ← IHΨ 0 Ψ₁↝ ⊢Ψ₁
  with _ , σ₁≈σ , ⊢σ₁ , ⊢T₁ , _ ← t[σ]-inv-IH IHσ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢T₁[σ₁]) σ₁↝ ⊢σ
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym Ψ≈Ψ₁) ⊢T₁) ⊢T 
  = -, -, -, -, Γ↝ , ↝∷ Ψ↝ T↝ , ↝∘ (↝, σ↝ t↝ T↝) τ↝ , ↝, (↝∘ σ↝ τ↝) (↝sub t↝ τ↝) T↝ ,
    ,-∘ (s-conv ⊢σ (⊢≈-sym Ψ≈Ψ₁)) ⊢T (conv (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢t) ([]-cong-Se-simp T≈T₁ (s-≈-conv σ₁≈σ (⊢≈-sym Ψ≈Ψ₁)))) (s-conv ⊢τ (⊢≈-sym Δ≈Δ₂)) ,
    IHΓ , IHC⦇σ,s⦈∘τ , IHCσ∘τ,s[τ] , IHCT∷Ψ
  where 
    IHC⦇σ,s⦈∘τ : _ ⊨s _ ↝≈ _
    IHC⦇σ,s⦈∘τ (↝∘ (↝, σᵢ↝ tᵢ↝ Tᵢ↝) τᵢ↝) ⊢⦇σᵢ,sᵢ⦈∘τᵢ 
      with Δᵢ , ⊢τᵢ , ⊢σᵢ,tᵢ ← ∘-inv ⊢⦇σᵢ,sᵢ⦈∘τᵢ
      with τᵢ≈τ ← IHτ τᵢ↝ ⊢τᵢ
      with Δᵢ≈Δ₁ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τᵢ≈τ)))
      with σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈Tᵢ∷Δᵢ ← ,-inv-IH IHσ (ctxeq-s (⊢≈-trans (⊢≈-sym Δᵢ≈Δ₁) (⊢≈-sym Δ≈Δ₂)) ⊢σᵢ,tᵢ) σᵢ↝ ⊢σ
      with ⊢∷ _ ⊢Tᵢ , _ ← presup-⊢≈ ≈Tᵢ∷Δᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Ψ≈Ψ₁) ⊢Tᵢ) ⊢T
      with t≈tᵢ ← IHt tᵢ↝ (ctxeq-tm Δ≈Δ₁ ⊢tᵢ)
      = ∘-cong (s-≈-conv τᵢ≈τ (⊢≈-trans (⊢≈-sym Δᵢ≈Δ₁) (⊢≈-sym Δ≈Δ₂))) (s-≈-conv (s-≈-sym (,-cong-simp σᵢ≈σ (ctxeq-≈ Ψ≈Ψ₁ T≈Tᵢ) (≈-conv (ctxeq-≈ (⊢≈-sym Δ≈Δ₁) (≈-sym t≈tᵢ)) ([]-cong-Se-simp′ ⊢Tᵢ (s-≈-sym σᵢ≈σ))))) ≈Tᵢ∷Δᵢ)

    IHCσ∘τ,s[τ] : _ ⊨s _ ↝≈ _
    IHCσ∘τ,s[τ] (↝, (↝∘ σᵢ↝ τᵢ↝) (↝sub tᵢ↝ τᵢ₁↝) Tᵢ↝) ⊢σᵢ∘τᵢ,sᵢ[τᵢ₁] 
      with Ψᵢ , ⊢σᵢ∘τᵢ , ⊢tᵢ[τᵢ₁] , ≈Ψᵢ ← ,-inv ⊢σᵢ∘τᵢ,sᵢ[τᵢ₁]
      with ⊢∷ _ ⊢Tᵢ , _ ← presup-⊢≈ ≈Ψᵢ
      with Δᵢ , ⊢τᵢ , ⊢σᵢ ← ∘-inv ⊢σᵢ∘τᵢ
      with τᵢ≈τ ← IHτ τᵢ↝ ⊢τᵢ
      with Δᵢ≈Δ₂ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τᵢ≈τ)))
      with Δᵢ≈Δ ← ⊢≈-trans (⊢≈-sym Δᵢ≈Δ₂) (⊢≈-sym Δ≈Δ₂)
      with Δ₁≈Δ₂ ← ⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Δ₂
      with σᵢ≈σ ← IHσ σᵢ↝ (ctxeq-s Δᵢ≈Δ ⊢σᵢ)
      with Ψ₁≈Ψ₁ ← unique-ctx ⊢σ (proj₁ (proj₂ (presup-s-≈ σᵢ≈σ)))
      with Ψ≈Ψᵢ ← ⊢≈-trans Ψ≈Ψ₁ Ψ₁≈Ψ₁
      with _ , τᵢ₁≈τ , ⊢τᵢ₁ , ⊢tᵢ , ≈Tᵢ[σᵢ∘τᵢ] ← t[σ]-inv-IH IHτ ⊢tᵢ[τᵢ₁] τᵢ₁↝ ⊢τ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Ψ≈Ψᵢ) ⊢Tᵢ) ⊢T
      with tᵢ≈t ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym Δ₁≈Δ₂) ⊢tᵢ)
      = s-≈-conv (s-≈-sym (,-cong-simp (∘-cong (s-≈-conv (s-≈-sym τᵢ≈τ) (⊢≈-sym Δᵢ≈Δ₂)) (ctxeq-s-≈ Δ≈Δ₂ (s-≈-sym  σᵢ≈σ))) (ctxeq-≈ Ψ≈Ψᵢ T≈Tᵢ) (≈-conv ([]-cong (≈-sym tᵢ≈t) (s-≈-conv τᵢ₁≈τ (⊢≈-sym Δ₁≈Δ₂))) (≈-sym ≈Tᵢ[σᵢ∘τᵢ])))) ≈Ψᵢ

    IHCT∷Ψ : _ [↝≈] _
    IHCT∷Ψ ℕ.zero (↝∷ {T = Tᵢ} ↝Δᵢ ↝Tᵢ) (⊢∷ ⊢Δᵢ ⊢Tᵢ) 
      with Δ≈Δᵢ ← IHΨ 0 ↝Δᵢ ⊢Δᵢ 
      with T≈Tᵢ ← IHT ↝Tᵢ (ctxeq-tm (⊢≈-sym Δ≈Δᵢ) ⊢Tᵢ) 
      with refl ← unique-lvl ⊢T (proj₁ (proj₂ (presup-≈ T≈Tᵢ))) = ∷-cong-simp Δ≈Δᵢ T≈Tᵢ
    IHCT∷Ψ (ℕ.suc n) Γᵢ↝ ⊢Γᵢ = IHΨ n Γᵢ↝ ⊢Γᵢ

⫢p-, : ∀ {i} →
       U.Γ′ ⫢s U.σ′ ∶ U.Δ′ →
       U.Δ′ ⫢ U.T′ ∶ Se i →
       U.Γ′ ⫢ U.t′ ∶ U.T′ U.[ U.σ′ ] →
       ---------------------
       U.Γ′ ⫢s U.p (U.σ′ , U.t′ ∶ U.T′) ≈ U.σ′ ∶ U.Δ′
⫢p-, ⫢σ′ ⫢T′ ⫢t′
  with Γ , Δ₁ , σ , Γ↝ , Δ₁↝ , σ↝ , ⊢σ , IHΓ , IHσ , _ ← ⫢σ′
     | _ , Δ , T , _ , Δ↝ , T↝ , ↝Se , ⊢T , IHΔ , IHT ← ⫢T′
     | i , Γ₁ , t , _ , Γ₁↝ , t↝ , ↝sub {t = T₁} T₁↝ σ₁↝ , ⊢t , _ , IHt ← ⫢t′
  with ⊢Γ₁ , ⊢Δ₁ ← presup-s ⊢σ
     | ⊢Δ ← proj₁ (presup-tm ⊢T)
     | ⊢Γ₁ , ⊢T₁[σ] ← presup-tm ⊢t
  with refl ← ⊢T:Se-lvl ⊢T
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
     | Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  with _ , σ₁≈σ , ⊢σ₁ , ⊢T₁ , _ ← t[σ]-inv-IH IHσ (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢T₁[σ]) σ₁↝ ⊢σ
  with refl , T≈T₁ ← IH-transform IHT T₁↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢T₁) ⊢T 
  = -, -, -, -, Γ↝ , Δ↝ , ↝∘ ↝wk (↝, σ↝ t↝ T↝) , σ↝ , 
    p-, (s-conv ⊢σ (⊢≈-sym Δ≈Δ₁)) ⊢T (conv (ctxeq-tm (⊢≈-sym Γ≈Γ₁) ⊢t) ([]-cong-Se-simp T≈T₁ (s-≈-conv σ₁≈σ (⊢≈-sym Δ≈Δ₁)))) , 
    IHΓ ,  IHCp⦇σ,t⦈ , IHσ , IHΔ
  
  where 
    IHCp⦇σ,t⦈ : _ ⊨s _ ↝≈ _
    IHCp⦇σ,t⦈ (↝∘ ↝wk (↝, σᵢ↝ tᵢ↝ Tᵢ↝)) ⊢p⦇σᵢ,tᵢ⦈ 
      with Tᵢ∷Δᵢ , ⊢σᵢ,tᵢ , ⊢wk ← ∘-inv ⊢p⦇σᵢ,tᵢ⦈
      with σᵢ≈σ , ⊢σᵢ , ⊢tᵢ , ≈Tᵢ∷Δᵢ ← ,-inv-IH IHσ ⊢σᵢ,tᵢ σᵢ↝ ⊢σ
      with ⊢∷ _ ⊢Tᵢ , _ ← presup-⊢≈ ≈Tᵢ∷Δᵢ
      with refl , T≈Tᵢ ← IH-transform IHT Tᵢ↝ (ctxeq-tm (⊢≈-sym Δ≈Δ₁) ⊢Tᵢ) ⊢T
      with tᵢ≈t ← IHt tᵢ↝ (ctxeq-tm (⊢≈-sym (⊢≈-sym Γ≈Γ₁)) ⊢tᵢ)
      = ∘-cong (s-≈-conv (s-≈-sym (,-cong-simp σᵢ≈σ (ctxeq-≈ Δ≈Δ₁ T≈Tᵢ) (≈-conv (ctxeq-≈ (⊢≈-sym Γ≈Γ₁) (≈-sym tᵢ≈t)) ([]-cong-Se-simp′ ⊢Tᵢ (s-≈-sym σᵢ≈σ))))) ≈Tᵢ∷Δᵢ) (s-≈-refl ⊢wk)

⫢,-ext : U.Γ′ ⫢s U.σ′ ∶ U.T′ ∷ U.Δ′ →
         ---------------------
         U.Γ′ ⫢s U.σ′ ≈ U.p U.σ′ , v 0 U.[ U.σ′ ] ∶ U.T′ ∶ U.T′ ∷ U.Δ′
⫢,-ext ⫢σ′
  with Γ , Δ , σ , Γ↝ , ↝T∷Δ@(↝∷ Δ↝ T↝) , σ↝ , ⊢σ , IHΓ , IHσ , IHT∷Δ ← ⫢σ′
    = -, -, -, -, Γ↝ , ↝T∷Δ , σ↝ , ↝, (↝∘ ↝wk σ↝) (↝sub ↝v σ↝) T↝ , 
      ,-ext ⊢σ , 
      IHΓ , IHσ ,  IHpσ,v0[σ] , IHT∷Δ
  
  where
    IHpσ,v0[σ] : _ ⊨s _ ↝≈ _
    IHpσ,v0[σ] (↝, (↝∘ {τ = σᵢ} ↝wk σᵢ↝) (↝sub {σ = σᵢ₁} ↝v σᵢ₁↝) Tᵢ↝) ⊢pσᵢ,v0[σᵢ₁] 
      with Δᵢ , ⊢pσ₁ , ⊢v0[σᵢ₁] , ≈Tᵢ∷Δᵢ ← ,-inv ⊢pσᵢ,v0[σᵢ₁]
      with ⊢∷ _ ⊢Tᵢ ← proj₁ (presup-⊢≈ ≈Tᵢ∷Δᵢ)
      with Tᵢ∷Δᵢ , ⊢σᵢ , ⊢wk ←  ∘-inv ⊢pσ₁
      with _ , σᵢ₁≈σ , ⊢σᵢ₁ , ⊢v0 , ≈Tᵢ[pτ] ← t[σ]-inv-IH IHσ  ⊢v0[σᵢ₁] σᵢ₁↝ ⊢σ
      with σᵢ≈σ ← IHσ σᵢ↝ ⊢σᵢ 
      with σᵢ₁≈σ ← IHσ σᵢ₁↝ ⊢σᵢ₁
      with Tᵢ∷Δᵢ≈Tᵢ₁∷Δ ← unique-ctx (proj₁ (proj₂ (presup-s-≈ σᵢ≈σ))) (proj₁ (proj₂ (presup-s-≈ σᵢ₁≈σ)))
      with _ , ⊢∷ ⊢Δ _ ← presup-⊢≈ Tᵢ∷Δᵢ≈Tᵢ₁∷Δ
      with ⊢wkᵢ ← ctxeq-s Tᵢ∷Δᵢ≈Tᵢ₁∷Δ ⊢wk
      with Δᵢ≈Γ₁ ← wk-inv ⊢wkᵢ
      with ∷-cong _ _ _ Tᵢ≈Tᵢ₁ _ ← IHT∷Δ 0 (↝∷ Δ↝ Tᵢ↝) (⊢∷ ⊢Δ (ctxeq-tm (⊢≈-sym Δᵢ≈Γ₁) ⊢Tᵢ))
      = s-≈-conv (s-≈-sym (,-cong-simp (∘-cong (s-≈-conv (s-≈-sym σᵢ≈σ) Tᵢ∷Δᵢ≈Tᵢ₁∷Δ) (s-≈-refl ⊢wkᵢ)) (ctxeq-≈ Δᵢ≈Γ₁ (≈-sym Tᵢ≈Tᵢ₁)) (≈-conv ([]-cong (≈-refl ⊢v0) (s-≈-sym σᵢ₁≈σ)) (≈-sym ≈Tᵢ[pτ])))) ≈Tᵢ∷Δᵢ

⫢s-≈-sym : U.Γ′ ⫢s U.σ′ ≈ U.τ′ ∶ U.Δ′ →
           ---------------------
           U.Γ′ ⫢s U.τ′ ≈ U.σ′ ∶ U.Δ′
⫢s-≈-sym σ′≈τ′
  with Γ , Δ , σ , τ , Γ↝ , Δ↝ , σ↝ , τ↝ , σ≈τ , IHΓ , IHσ , IHτ , IHΔ ← σ′≈τ′
    = -, -, -, -, Γ↝ , Δ↝ , τ↝ , σ↝ , s-≈-sym σ≈τ , IHΓ , IHτ , IHσ , IHΔ

⫢s-≈-trans : ∀ {ζ′} →
             U.Γ′ ⫢s U.σ′ ≈ U.τ′ ∶ U.Δ′ →
             U.Γ′ ⫢s U.τ′ ≈ ζ′ ∶ U.Δ′ →
             ---------------------
             U.Γ′ ⫢s U.σ′ ≈ ζ′ ∶ U.Δ′
⫢s-≈-trans σ′≈τ′ τ′≈ζ′
  with Γ , Δ , σ , τ , Γ↝ , Δ↝ , σ↝ , τ↝ , σ≈τ , IHΓ , IHσ , IHτ , IHΔ ← σ′≈τ′
     | Γ₁ , Δ₁ , τ₁ , ζ , Γ₁↝ , Δ₁↝ , τ₁↝ , ζ↝ , τ≈ζ , _ , _ , IHζ , _ ← τ′≈ζ′
  with ⊢Γ , _ , ⊢τ , ⊢Δ ← presup-s-≈ σ≈τ
     | ⊢Γ₁ , ⊢τ₁ , _ , ⊢Δ₁ ← presup-s-≈ τ≈ζ
  with Γ≈Γ₁ ← IHΓ 0 Γ₁↝ ⊢Γ₁
  with τ≈τ₁ ← IHτ τ₁↝ (ctxeq-s (⊢≈-sym Γ≈Γ₁) ⊢τ₁)
  with Δ≈Δ₁ ← unique-ctx ⊢τ (proj₁ (proj₂ (presup-s-≈ τ≈τ₁)))
  = -, -, -, -, Γ↝ , Δ↝ , σ↝ , ζ↝ , 
    s-≈-trans σ≈τ (s-≈-trans (s-≈-conv τ≈τ₁ (⊢≈-sym Δ≈Δ₁)) (ctxeq-s-≈ (⊢≈-sym Γ≈Γ₁) (s-≈-conv τ≈ζ (⊢≈-sym Δ≈Δ₁)))) , 
    IHΓ , IHσ , IHζ′ , IHΔ

  where 
    IHζ′ : _ ⊨s _ ↝≈ _
    IHζ′ ↝σᵢ ⊢σᵢ 
      with σ≈σᵢ ← IHζ ↝σᵢ (ctxeq-s Γ≈Γ₁ ⊢σᵢ)
          = ctxeq-s-≈ (⊢≈-sym Γ≈Γ₁) σ≈σᵢ
        
⫢s-≈-conv : U.Γ′ ⫢s U.σ′ ≈ U.τ′ ∶ U.Δ′ →
            ⫢ U.Δ′ ≈ U.Ψ′ →
            ---------------------
            U.Γ′ ⫢s U.σ′ ≈ U.τ′ ∶ U.Ψ′
⫢s-≈-conv σ′≈τ′ Δ′≈Ψ′
  with Γ , Δ₁ , σ , τ , Γ↝ , Δ₁↝ , σ↝ , τ↝ , σ≈τ , IHΓ , IHσ , IHτ , IHΨ ← σ′≈τ′
     | Δ , Ψ , Δ↝ , Ψ↝ , Δ≈Ψ , IHΔ , IHΨ ← Δ′≈Ψ′
  with _ , _ , _ , ⊢Δ₁ ← presup-s-≈ σ≈τ
  with Δ≈Δ₁ ← IHΔ 0 Δ₁↝ ⊢Δ₁
  = -, -, -, -, Γ↝ , Ψ↝ , σ↝ , τ↝ , s-≈-conv σ≈τ (⊢≈-trans (⊢≈-sym Δ≈Δ₁) Δ≈Ψ) , IHΓ , IHσ , IHτ , IHΨ

mutual
  fundamental-⊢⇒⫢ : U.⊢ U.Γ →
                    --------------------
                    ⫢ U.Γ
  fundamental-⊢⇒⫢ ⊢[] = ⫢⊢[]
  fundamental-⊢⇒⫢ (⊢∷ ⊢Γ ⊢T) = ⫢⊢∷ (fundamental-⊢⇒⫢ ⊢Γ) (fundamental-⊢t⇒⫢t ⊢T)

  fundamental-⊢≈⇒⫢≈ : U.⊢ U.Γ ≈ U.Δ →
                      --------------------
                      ⫢ U.Γ ≈ U.Δ
  fundamental-⊢≈⇒⫢≈ []-≈ = ⫢[]-≈
  fundamental-⊢≈⇒⫢≈ (∷-cong Γ≈Δ ⊢S ⊢T Γ⊢S≈T Δ⊢S≈T) = ⫢∷-cong (fundamental-⊢≈⇒⫢≈ Γ≈Δ) (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t≈⇒⫢t≈ Γ⊢S≈T) (fundamental-⊢t≈⇒⫢t≈ Δ⊢S≈T)

  fundamental-⊢t⇒⫢t : U.Γ ⊢ U.t ∶ U.T →
                      --------------------
                      U.Γ ⫢ U.t ∶ U.T
  fundamental-⊢t⇒⫢t (N-wf ⊢Γ) = ⫢N-wf (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢t⇒⫢t (Se-wf i ⊢Γ) = ⫢Se-wf (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢t⇒⫢t (Liftt-wf n ⊢T) = ⫢Liftt-wf (fundamental-⊢t⇒⫢t ⊢T)
  fundamental-⊢t⇒⫢t (Π-wf ⊢S ⊢T i≡maxjk) = ⫢Π-wf (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) i≡maxjk
  fundamental-⊢t⇒⫢t (vlookup ⊢Γ x∈Γ) = ⫢vlookup (fundamental-⊢⇒⫢ ⊢Γ) x∈Γ
  fundamental-⊢t⇒⫢t (ze-I ⊢Γ) = ⫢ze-I (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢t⇒⫢t (su-I ⊢t) = ⫢su-I (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t⇒⫢t (N-E ⊢T ⊢s ⊢r ⊢t) = ⫢N-E (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢s) (fundamental-⊢t⇒⫢t ⊢r) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t⇒⫢t (Λ-I ⊢S ⊢t) = ⫢Λ-I (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t⇒⫢t (Λ-E ⊢S ⊢T ⊢r ⊢s) = ⫢Λ-E (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢r) (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t⇒⫢t (L-I j ⊢t) = ⫢L-I (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t⇒⫢t (L-E j ⊢T ⊢t) = ⫢L-E (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t⇒⫢t (t[σ] ⊢t ⊢σ) = ⫢t[σ] (fundamental-⊢t⇒⫢t ⊢t) (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢t⇒⫢t (conv ⊢t S≈T) = ⫢conv (fundamental-⊢t⇒⫢t ⊢t) (fundamental-⊢t≈⇒⫢t≈ S≈T)

  fundamental-⊢s⇒⫢s : U.Γ U.⊢s U.σ ∶ U.Δ →
                      --------------------
                      U.Γ ⫢s U.σ ∶ U.Δ
  fundamental-⊢s⇒⫢s (s-I ⊢Γ) = ⫢s-I (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢s⇒⫢s (s-wk ⊢S∷Γ) = ⫢s-wk (fundamental-⊢⇒⫢ ⊢S∷Γ)
  fundamental-⊢s⇒⫢s (s-∘ ⊢τ ⊢σ) = ⫢s-∘ (fundamental-⊢s⇒⫢s ⊢τ) (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢s⇒⫢s (s-, ⊢σ ⊢T ⊢t) = ⫢s-, (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢s⇒⫢s (s-conv ⊢σ Δ≈Ψ) = ⫢s-conv (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢≈⇒⫢≈ Δ≈Ψ)

  fundamental-⊢t≈⇒⫢t≈ : U.Γ ⊢ U.t ≈ U.s ∶ U.T →
                        --------------------
                        U.Γ ⫢ U.t ≈ U.s ∶ U.T
  fundamental-⊢t≈⇒⫢t≈ (N-[] ⊢σ) = ⫢N-[] (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢t≈⇒⫢t≈ (Se-[] i ⊢σ) = ⫢Se-[] (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢t≈⇒⫢t≈ (Liftt-[] n ⊢σ ⊢T) = ⫢Liftt-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T)
  fundamental-⊢t≈⇒⫢t≈ (Π-[] ⊢σ ⊢S ⊢T k≡maxij) = ⫢Π-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) k≡maxij
  fundamental-⊢t≈⇒⫢t≈ (Π-cong ⊢S S≈S′ T≈T′ k≡maxij) = ⫢Π-cong (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t≈⇒⫢t≈ S≈S′) (fundamental-⊢t≈⇒⫢t≈ T≈T′) k≡maxij
  fundamental-⊢t≈⇒⫢t≈ (Liftt-cong j T≈T′) = ⫢Liftt-cong (fundamental-⊢t≈⇒⫢t≈ T≈T′)
  fundamental-⊢t≈⇒⫢t≈ (v-≈ ⊢Γ x∈Γ) = ⫢v-≈ (fundamental-⊢⇒⫢ ⊢Γ) x∈Γ
  fundamental-⊢t≈⇒⫢t≈ (ze-≈ ⊢Γ) = ⫢ze-≈ (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢t≈⇒⫢t≈ (su-cong t≈t′) = ⫢su-cong (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢t≈⇒⫢t≈ (rec-cong ⊢T T≈T′ s≈s′ r≈r′ t≈t′) = ⫢rec-cong (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t≈⇒⫢t≈ T≈T′) (fundamental-⊢t≈⇒⫢t≈ s≈s′) (fundamental-⊢t≈⇒⫢t≈ r≈r′) (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢t≈⇒⫢t≈ (Λ-cong ⊢S S≈S′ t≈t′) = ⫢Λ-cong (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t≈⇒⫢t≈ S≈S′) (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢t≈⇒⫢t≈ ($-cong ⊢S ⊢T r≈r′ s≈s′) = ⫢$-cong (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t≈⇒⫢t≈ r≈r′) (fundamental-⊢t≈⇒⫢t≈ s≈s′)
  fundamental-⊢t≈⇒⫢t≈ (liftt-cong j t≈t′) = ⫢liftt-cong (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢t≈⇒⫢t≈ (unlift-cong n ⊢T t≈t′) = ⫢unliftt-cong (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢t≈⇒⫢t≈ ([]-cong t≈t′ σ≈σ′) = ⫢[]-cong (fundamental-⊢t≈⇒⫢t≈ t≈t′) (fundamental-⊢s≈⇒⫢s≈ σ≈σ′)
  fundamental-⊢t≈⇒⫢t≈ (ze-[] ⊢σ) = ⫢ze-[] (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢t≈⇒⫢t≈ (su-[] ⊢σ ⊢t) = ⫢su-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (rec-[] ⊢σ ⊢T ⊢s ⊢r ⊢t) = ⫢rec-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢s) (fundamental-⊢t⇒⫢t ⊢r) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (Λ-[] ⊢σ ⊢S ⊢t) = ⫢Λ-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ ($-[] ⊢S ⊢T ⊢σ ⊢r ⊢s) = ⫢$-[] (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢r) (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t≈⇒⫢t≈ (liftt-[] n ⊢σ ⊢T ⊢t) = ⫢liftt-[] (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (unlift-[] n ⊢T ⊢σ ⊢t) = ⫢unlift-[] (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (rec-β-ze ⊢T ⊢s ⊢r) = ⫢rec-β-ze (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢s) (fundamental-⊢t⇒⫢t ⊢r)
  fundamental-⊢t≈⇒⫢t≈ (rec-β-su ⊢T ⊢s ⊢r ⊢t) = ⫢rec-β-su (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢s) (fundamental-⊢t⇒⫢t ⊢r) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (Λ-β ⊢S ⊢T ⊢t ⊢s) = ⫢Λ-β (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t) (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t≈⇒⫢t≈ (Λ-η ⊢S ⊢T ⊢t) = ⫢Λ-η (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ (L-β j ⊢s) = ⫢L-β (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t≈⇒⫢t≈ (L-η n ⊢T ⊢t) = ⫢L-η (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ ([I] ⊢s) = ⫢[I] (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t≈⇒⫢t≈ ([wk] ⊢Γ ⊢S x∈Γ) = ⫢[wk] (fundamental-⊢⇒⫢ ⊢Γ) (fundamental-⊢t⇒⫢t ⊢S) x∈Γ
  fundamental-⊢t≈⇒⫢t≈ ([∘] ⊢τ ⊢σ ⊢t) = ⫢[∘] (fundamental-⊢s⇒⫢s ⊢τ) (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢t≈⇒⫢t≈ ([,]-v-ze ⊢σ ⊢S ⊢s) = ⫢[,]-v-ze (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢s)
  fundamental-⊢t≈⇒⫢t≈ ([,]-v-su ⊢σ ⊢S ⊢s x∈Γ) = ⫢[,]-v-su (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢S) (fundamental-⊢t⇒⫢t ⊢s)  x∈Γ
  fundamental-⊢t≈⇒⫢t≈ (≈-conv t≈s T≈S) = ⫢≈-conv (fundamental-⊢t≈⇒⫢t≈ t≈s) (fundamental-⊢t≈⇒⫢t≈ T≈S)
  fundamental-⊢t≈⇒⫢t≈ (≈-sym t≈s) = ⫢≈-sym (fundamental-⊢t≈⇒⫢t≈ t≈s)
  fundamental-⊢t≈⇒⫢t≈ (≈-trans t≈s s≈r) = ⫢≈-trans (fundamental-⊢t≈⇒⫢t≈ t≈s) (fundamental-⊢t≈⇒⫢t≈ s≈r)

  fundamental-⊢s≈⇒⫢s≈ : U.Γ U.⊢s U.σ ≈ U.τ ∶ U.Δ →
                        --------------------
                        U.Γ ⫢s U.σ ≈ U.τ ∶ U.Δ
  fundamental-⊢s≈⇒⫢s≈ (I-≈ ⊢Γ) = ⫢I-≈ (fundamental-⊢⇒⫢ ⊢Γ)
  fundamental-⊢s≈⇒⫢s≈ (wk-≈ ⊢T∷Γ) = ⫢wk-≈ (fundamental-⊢⇒⫢ ⊢T∷Γ)
  fundamental-⊢s≈⇒⫢s≈ (∘-cong σ≈σ′ τ≈τ′) = ⫢∘-cong (fundamental-⊢s≈⇒⫢s≈ σ≈σ′) (fundamental-⊢s≈⇒⫢s≈ τ≈τ′)
  fundamental-⊢s≈⇒⫢s≈ (,-cong σ≈τ ⊢T T≈T′ t≈t′) = ⫢,-cong (fundamental-⊢s≈⇒⫢s≈ σ≈τ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t≈⇒⫢t≈ T≈T′) (fundamental-⊢t≈⇒⫢t≈ t≈t′)
  fundamental-⊢s≈⇒⫢s≈ (I-∘ ⊢σ) = ⫢I-∘ (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢s≈⇒⫢s≈ (∘-I ⊢σ) = ⫢∘-I (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢s≈⇒⫢s≈ (∘-assoc ⊢σ ⊢τ ⊢γ) = ⫢∘-assoc (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢s⇒⫢s ⊢τ) (fundamental-⊢s⇒⫢s ⊢γ)
  fundamental-⊢s≈⇒⫢s≈ (,-∘ ⊢σ ⊢T ⊢t ⊢τ) = ⫢,-∘ (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t) (fundamental-⊢s⇒⫢s ⊢τ)
  fundamental-⊢s≈⇒⫢s≈ (p-, ⊢σ ⊢T ⊢t) = ⫢p-, (fundamental-⊢s⇒⫢s ⊢σ) (fundamental-⊢t⇒⫢t ⊢T) (fundamental-⊢t⇒⫢t ⊢t)
  fundamental-⊢s≈⇒⫢s≈ (,-ext ⊢σ) = ⫢,-ext (fundamental-⊢s⇒⫢s ⊢σ)
  fundamental-⊢s≈⇒⫢s≈ (s-≈-sym σ≈τ) = ⫢s-≈-sym (fundamental-⊢s≈⇒⫢s≈ σ≈τ)
  fundamental-⊢s≈⇒⫢s≈ (s-≈-trans σ≈τ τ≈γ) = ⫢s-≈-trans (fundamental-⊢s≈⇒⫢s≈ σ≈τ) (fundamental-⊢s≈⇒⫢s≈ τ≈γ)
  fundamental-⊢s≈⇒⫢s≈ (s-≈-conv σ≈τ Δ≈Ψ) = ⫢s-≈-conv (fundamental-⊢s≈⇒⫢s≈ σ≈τ) (fundamental-⊢≈⇒⫢≈ Δ≈Ψ)


U⇒A-⊢ : U.⊢ U.Γ′ → 
        -------
        ∃ λ Γ → Γ [↝] U.Γ′ × A.⊢ Γ
U⇒A-⊢ ⊢Γ′ 
  with _ , ⊢Γ , Γ↝ , _ ← fundamental-⊢⇒⫢ ⊢Γ′ 
  = -, ⊢Γ , Γ↝

U⇒A-⊢≈ : U.⊢ U.Γ′ ≈ U.Δ′ →
         ----------------------
         ∃₂ λ Γ Δ → Γ [↝] U.Γ′ × Δ [↝] U.Δ′ × A.⊢ Γ ≈ Δ
U⇒A-⊢≈ Γ′≈Δ′
  with _ , _ , Γ↝ , Δ↝ , Γ≈Δ , _ ← fundamental-⊢≈⇒⫢≈ Γ′≈Δ′ 
  = -, -, Γ↝ , Δ↝ , Γ≈Δ

U⇒A-tm : U.Γ′ U.⊢ U.t′ ∶ U.T′ →
         ---------------------------
         ∃₂ λ Γ t → ∃₂ λ i T → Γ [↝] U.Γ′ × t ↝ U.t′ × T ↝ U.T′ ×  Γ A.⊢ t ∶[ i ] T
U⇒A-tm ⊢t′
  with _ , _ , _ , _ , Γ↝ , t↝ , T↝ , ⊢t , _ ← fundamental-⊢t⇒⫢t ⊢t′
  = -, -, -, -, Γ↝ , t↝ , T↝ , ⊢t

U⇒A-≈ : U.Γ′ U.⊢ U.t′ ≈ U.s′ ∶ U.T′ →
         ---------------------------
         ∃₂ λ Γ t → ∃₂ λ s i → ∃ λ T → Γ [↝] U.Γ′ × t ↝ U.t′ × s ↝ U.s′ × T ↝ U.T′ ×  Γ A.⊢ t ≈ s ∶[ i ] T
U⇒A-≈ t′≈s′
  with _ , _ , _ , _ , _ , Γ↝ , t↝ , s↝ , T↝ , t≈s , _ ← fundamental-⊢t≈⇒⫢t≈ t′≈s′
  = -, -, -, -, -, Γ↝ , t↝ , s↝ , T↝ , t≈s

U⇒A-s : U.Γ′ U.⊢s U.σ′ ∶ U.Δ′ → 
        -------------------------
        ∃₂ λ Γ σ → ∃ λ Δ → Γ [↝] U.Γ′ × σ ↝s U.σ′ × Δ [↝] U.Δ′ × Γ A.⊢s σ ∶ Δ
U⇒A-s ⊢σ′ 
  with  _ , _ , _ , Γ↝ , Δ↝ , σ↝ , ⊢σ , _ ← fundamental-⊢s⇒⫢s ⊢σ′
  = -, -, -, Γ↝  , σ↝ , Δ↝ , ⊢σ

U⇒A-s≈ : U.Γ′ U.⊢s U.σ′ ≈ U.τ′ ∶ U.Δ′ → 
         -------------------------------------
         ∃₂ λ Γ σ → ∃₂ λ τ Δ → Γ [↝] U.Γ′ × σ ↝s U.σ′ × τ ↝s U.τ′ × Δ [↝] U.Δ′ × Γ A.⊢s σ ≈ τ ∶ Δ
U⇒A-s≈ σ′≈τ′
  with  _ , _ , _ , _ , Γ↝ , Δ↝ , σ↝ , τ↝ , σ≈τ , _ ← fundamental-⊢s≈⇒⫢s≈ σ′≈τ′
  = -, -, -, -, Γ↝ , σ↝ , τ↝ , Δ↝ , σ≈τ