import Graded.Modality
open import Definition.Typed.Restrictions
open import Tools.Product
module Graded.Derived.Erased.Eta.Typed
{a} {M : Set a}
(open Graded.Modality M)
{𝕄 : Modality}
(R : Type-restrictions 𝕄)
where
open Modality 𝕄
open Type-restrictions R
open import Definition.Typed R
open import Definition.Typed.Consequences.Inversion R
open import Definition.Typed.Consequences.Syntactic R
open import Definition.Untyped M hiding (_[_])
import Graded.Derived.Erased.Eta.Typed.Primitive R as P
open import Graded.Derived.Erased.Eta.Untyped 𝕄
open import Graded.Derived.Erased.Untyped 𝕄 𝕤 hiding (erased)
open import Tools.Function
private variable
Γ : Con Term _
A B t u : Term _
Erased-β :
Erasedˢ-allowed →
Γ ⊢ t ∷ A →
Γ ⊢ erased [ t ] ≡ t ∷ A
Erased-β ok ⊢t = P.Erased-β ok ⊢A ⊢t
where
⊢A = syntacticTerm ⊢t
erasedⱼ : Γ ⊢ t ∷ Erased A → Γ ⊢ erased t ∷ A
erasedⱼ ⊢t =
case inversion-ΠΣ (syntacticTerm ⊢t) of λ {
(⊢A , ⊢Unit , Σ-ok) →
P.erasedⱼ (inversion-Unit ⊢Unit , Σ-ok) ⊢A ⊢t }
erased-cong : Γ ⊢ t ≡ u ∷ Erased A → Γ ⊢ erased t ≡ erased u ∷ A
erased-cong t≡u =
case inversion-ΠΣ (syntacticEqTerm t≡u .proj₁) of λ {
(⊢A , ⊢Unit , Σˢ-ok) →
P.erased-cong (inversion-Unit ⊢Unit , Σˢ-ok) ⊢A t≡u }
Erased-η-≡ :
Γ ⊢ t ∷ Erased A →
Γ ⊢ u ∷ Erased A →
Γ ⊢ erased t ≡ erased u ∷ A →
Γ ⊢ t ≡ u ∷ Erased A
Erased-η-≡ ⊢t =
case inversion-ΠΣ (syntacticTerm ⊢t) of λ {
(⊢A , ⊢Unit , Σˢ-ok) →
P.Erased-η-≡ (inversion-Unit ⊢Unit , Σˢ-ok) ⊢A ⊢t }
[erased] :
Γ ⊢ t ∷ Erased A →
Γ ⊢ [ erased t ] ≡ t ∷ Erased A
[erased] ⊢t =
case inversion-ΠΣ (syntacticTerm ⊢t) of λ {
(⊢A , ⊢Unit , Σˢ-ok) →
P.[erased] (inversion-Unit ⊢Unit , Σˢ-ok) ⊢A ⊢t }