import Syntax.Simple.Signature as S import Syntax.BiTyped.Signature as B module Theory.Pre.TypingErasure {SD : S.SigD} (BD : B.SigD SD) where open import Prelude open import Syntax.Simple SD open import Syntax.Context SD open B SD open import Syntax.BiTyped.Functor SD import Syntax.BiTyped.Pre.Functor SD as P open import Theory.Erasure open import Syntax.BiTyped.Term BD open import Syntax.BiTyped.Pre.Term BD open import Syntax.Typed.Raw (erase BD) private variable Ξ : ℕ Γ : Cxt 0 r : Raw _ d : Mode A : Ty mutual typingErasure : Γ ⊢ r [ d ] A → Pre d r typingErasure (var i {j} _) = ` j typingErasure (A ∋ t) = A ∋ typingErasure t typingErasure (t ↑ _) = (typingErasure t) ↑ typingErasure (op ts) = op (typingErasureᶜ (BD .ar _) ts) typingErasureᶜ : (D : OpD) {rs : R.⟦ eraseᶜ D ⟧ᶜ Raw (length Γ)} → ⟦ D ⟧ᶜ Raw _⊢_[_]_ Γ rs d A → P.⟦ D ⟧ᶜ Raw Pre d rs typingErasureᶜ (ι _ _ Ds) (deq , _ , _ , ts) = deq , typingErasureᵃˢ Ds ts typingErasureᵃˢ : (Ds : ArgsD Ξ) {rs : R.⟦ eraseᵃˢ Ds ⟧ᵃˢ Raw (length Γ)} {σ : TSub Ξ 0} → ⟦ Ds ⟧ᵃˢ Raw _⊢_[_]_ σ Γ rs → P.⟦ Ds ⟧ᵃˢ Raw Pre rs typingErasureᵃˢ [] _ = tt typingErasureᵃˢ ((Δ ⊢[ _ ] _) ∷ Ds) (t , ts) = typingErasureᵃ Δ t , typingErasureᵃˢ Ds ts typingErasureᵃ : (Δ : TExps Ξ) {r : R.⟦ Δ ⟧ᵃ Raw (length Γ)} {σ : TSub Ξ 0} → ⟦ Δ ⟧ᵃ Raw (λ Γ' r' → Γ' ⊢ r' [ d ] A) σ Γ r → P.⟦ Δ ⟧ᵃ Raw Pre d r typingErasureᵃ [] t = typingErasure t typingErasureᵃ (_ ∷ Δ) t = typingErasureᵃ Δ t