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

open import Level
open import Axiom.Extensionality.Propositional

-- Going from the gluing model to the syntax
module NonCumulative.Ascribed.Soundness.ToSyntax (fext : ∀ {ℓ₁ ℓ₂} → Extensionality ℓ₁ ℓ₂) where

open import Lib

open import NonCumulative.Ascribed.Statics.Properties as Sta
open import NonCumulative.Ascribed.Semantics.Properties.PER fext
open import NonCumulative.Ascribed.Completeness.Fundamental fext
open import NonCumulative.Ascribed.Soundness.LogRel
open import NonCumulative.Ascribed.Soundness.Properties.LogRel fext
open import NonCumulative.Ascribed.Soundness.Properties.Substitutions fext


⊩⇒⊢-both : ∀ {i} → (⊩t : Γ ⊩ t ∶[ i ] T) →
           ----------------------
           Γ ⊢ T ∶[ 1 + i ] Se i × Γ ⊢ t ∶[ i ] T
⊩⇒⊢-both ⊩t
  with InitEnvs-related (fundamental-⊢Γ (⊩⇒⊢ (_⊩_∶[_]_.⊩Γ ⊩t)))
...  | _ , _ , ρ∈ , _ = ⊢T , conv ([I]-inv (®El⇒tm T∈𝕌 t∼⟦t⟧)) ([I] ⊢T)
  where
    open _⊩_∶[_]_ ⊩t
    open GluExp (krip (InitEnvs⇒s®I ⊩Γ ρ∈))
    ⊢T = [I]-inv (®El⇒ty T∈𝕌 t∼⟦t⟧)

⊩⇒⊢-tm : ∀ { i } →
         Γ ⊩ t ∶[ i ] T →
         ------------
         Γ ⊢ t ∶[ i ] T
⊩⇒⊢-tm ⊩t = proj₂ (⊩⇒⊢-both ⊩t)

⊩⇒⊢-ty : ∀ { i } →
        (⊩t : Γ ⊩ t ∶[ i ] T) →
         ------------
         Γ ⊢ T ∶[ 1 + i ] Se i
⊩⇒⊢-ty ⊩t = proj₁ (⊩⇒⊢-both ⊩t)

⊩s⇒⊢s : Γ ⊩s σ ∶ Δ →
        ------------
        Γ ⊢s σ ∶ Δ
⊩s⇒⊢s ⊩σ
  with InitEnvs-related (fundamental-⊢Γ (⊩⇒⊢ (_⊩s_∶_.⊩Γ ⊩σ)))
...  | _ , _ , ρ∈ , _ = ∘I-inv′ (s®⇒⊢s ⊩Γ′ τσ∼⟦τ⟧)
  where
    open _⊩s_∶_ ⊩σ
    open GluSubst (krip (InitEnvs⇒s®I ⊩Γ ρ∈))