open import Cubical.Foundations.Prelude hiding (Sub)
open import Cubical.Foundations.HLevels
open import Cubical.Data.Unit

module TT.Wild.TypeInterp (X : hSet ℓ-zero) (Y : X .fst  hSet ℓ-zero) where

open import TT.Wild.Syntax X Y

⟦_⟧ₛ : Sort  Type₁
⟦_⟧ :  {S}  EL S   S ⟧ₛ

 con ⟧ₛ = Type
 sub Δ Γ ⟧ₛ = Lift ( Δ    Γ )
 ty Γ ⟧ₛ =  Γ   Type
 tm Γ A ⟧ₛ = Lift ((γ :  Γ )   A  γ)

 γ  δ  .lower θ =  γ  .lower ( δ  .lower θ)
 assoc γ δ θ i  .lower ξ =  γ  .lower ( δ  .lower ( θ  .lower ξ))
 id  .lower γ = γ
 idr γ i  .lower δ =  γ  .lower δ
 idl γ i  .lower δ =  γ  .lower δ

 A [ γ ]ᵀ  δ =  A  ( γ  .lower δ)
 []ᵀ-∘ A γ δ i  θ =  A  ( γ  .lower ( δ  .lower θ))
 []ᵀ-id A i  γ =  A  γ
 a [ γ ]ᵗ  .lower δ =  a  .lower ( γ  .lower δ)
 []ᵗ-∘ a γ δ i  .lower θ =  a  .lower ( γ  .lower ( δ  .lower θ))
 []ᵗ-id a i  .lower γ =  a  .lower γ

   = Unit
 ε  .lower γ = tt
 ε-∘ γ i  .lower δ = tt
 ◇-η i  .lower tt = tt

 Γ  A  = Σ[ γ   Γ  ]  A  γ
 p  .lower (γ , a) = γ
 q  .lower (γ , a) = a
 γ   .lower (δ , a) =  γ  .lower δ , a
  a   .lower γ = γ ,  a  .lower γ
 ⟨⟩-∘ a γ i  .lower δ =  γ  .lower δ ,  a  .lower ( γ  .lower δ)
 ▹-η i  .lower (γ , a) = γ , a
 ⁺-∘ γ δ i  .lower (θ , a) =  γ  .lower ( δ  .lower θ) , a
 ⁺-id i  .lower (γ , a) = γ , a

 p-⁺ γ i  .lower (δ , a) =  γ  .lower δ
 []ᵀ-p-⁺ B γ i  (δ , a) =  B  ( γ  .lower δ)
 q-⁺ γ i  .lower (δ , a) = a
 p-⟨⟩ a i  .lower γ = γ
 []ᵀ-p-⟨⟩ B a i  γ =  B  γ
 q-⟨⟩ a i  .lower γ =  a  .lower γ

 U  γ = X .fst
 U-[] γ i  δ = X .fst
  [ γ ]ᵘ  .lower δ =    .lower ( γ  .lower δ)
 []ᵘ-filler  γ i  .lower δ =    .lower ( γ  .lower δ)
 El   γ = Y (   .lower γ) .fst
 El-[]  γ i  δ = Y (   .lower ( γ  .lower δ)) .fst

 Π A B  γ = (a :  A  γ)   B  (γ , a)
 Π-[] A B γ i  δ = (a :  A  ( γ  .lower δ))   B  ( γ  .lower δ , a)
 app f  .lower (γ , a) =  f  .lower γ a
 lam b  .lower γ a =  b  .lower (γ , a)
 lam-[] b γ i  .lower δ a =  b  .lower ( γ  .lower δ , a)
 Π-β b i  .lower (γ , a) =  b  .lower (γ , a)
 Π-η f i  .lower γ a =  f  .lower γ a

 in-X x  .lower tt = x
 in-Y y  .lower tt = y