{-# OPTIONS --without-K --safe #-}
open import Definition.Typed.EqualityRelation
module Definition.LogicalRelation.Substitution.Escape {{eqrel : EqRelSet}} where
open EqRelSet {{...}}
open import Definition.Untyped
open import Definition.Untyped.Properties
open import Definition.Typed
open import Definition.LogicalRelation
open import Definition.LogicalRelation.Irrelevance
open import Definition.LogicalRelation.Properties
open import Definition.LogicalRelation.Substitution
open import Definition.LogicalRelation.Substitution.Properties
open import Tools.Product
escapeᵛ : ∀ {A l Γ} ([Γ] : ⊩ᵛ Γ) → Γ ⊩ᵛ⟨ l ⟩ A / [Γ] → Γ ⊢ A
escapeᵛ [Γ] [A] =
let ⊢Γ = soundContext [Γ]
idSubst = idSubstS [Γ]
in escape (irrelevance′ (subst-id _) (proj₁ ([A] ⊢Γ idSubst)))
escapeEqᵛ : ∀ {A B l Γ} ([Γ] : ⊩ᵛ Γ) ([A] : Γ ⊩ᵛ⟨ l ⟩ A / [Γ])
→ Γ ⊩ᵛ⟨ l ⟩ A ≡ B / [Γ] / [A] → Γ ⊢ A ≅ B
escapeEqᵛ [Γ] [A] [A≡B] =
let ⊢Γ = soundContext [Γ]
idSubst = idSubstS [Γ]
[idA] = proj₁ ([A] ⊢Γ idSubst)
[idA]′ = irrelevance′ (subst-id _) [idA]
in escapeEq [idA]′ (irrelevanceEq″ (subst-id _) (subst-id _)
[idA] [idA]′ ([A≡B] ⊢Γ idSubst))
escapeTermᵛ : ∀ {t A l Γ} ([Γ] : ⊩ᵛ Γ) ([A] : Γ ⊩ᵛ⟨ l ⟩ A / [Γ])
→ Γ ⊩ᵛ⟨ l ⟩ t ∷ A / [Γ] / [A] → Γ ⊢ t ∷ A
escapeTermᵛ [Γ] [A] [t] =
let ⊢Γ = soundContext [Γ]
idSubst = idSubstS [Γ]
[idA] = proj₁ ([A] ⊢Γ idSubst)
[idA]′ = irrelevance′ (subst-id _) (proj₁ ([A] ⊢Γ idSubst))
in escapeTerm [idA]′
(irrelevanceTerm″ (subst-id _) (subst-id _)
[idA] [idA]′ (proj₁ ([t] ⊢Γ idSubst)))
escapeEqTermᵛ : ∀ {t u A l Γ} ([Γ] : ⊩ᵛ Γ) ([A] : Γ ⊩ᵛ⟨ l ⟩ A / [Γ])
→ Γ ⊩ᵛ⟨ l ⟩ t ≡ u ∷ A / [Γ] / [A] → Γ ⊢ t ≅ u ∷ A
escapeEqTermᵛ [Γ] [A] [t≡u] =
let ⊢Γ = soundContext [Γ]
idSubst = idSubstS [Γ]
[idA] = proj₁ ([A] ⊢Γ idSubst)
[idA]′ = irrelevance′ (subst-id _) (proj₁ ([A] ⊢Γ idSubst))
in escapeTermEq [idA]′
(irrelevanceEqTerm″ (subst-id _) (subst-id _)
(subst-id _)
[idA] [idA]′ ([t≡u] ⊢Γ idSubst))