updating DeBruijn for PHOAS
This commit is contained in:
parent
657feddf46
commit
178c0f8dc4
1 changed files with 23 additions and 0 deletions
|
@ -51,6 +51,29 @@ env ε = ⊤
|
||||||
env (Γ , A) = env Γ × type A
|
env (Γ , A) = env Γ × type A
|
||||||
\end{code}
|
\end{code}
|
||||||
|
|
||||||
|
|
||||||
|
# PH representation
|
||||||
|
|
||||||
|
\begin{code}
|
||||||
|
data PH (V : Type → Set) : Type → Set where
|
||||||
|
var : ∀ {A : Type} → V A → PH V A
|
||||||
|
abs : ∀ {A B : Type} → (V A → PH V B) → PH V (A ⇒ B)
|
||||||
|
app : ∀ {A B : Type} → PH V (A ⇒ B) → PH V A → PH V B
|
||||||
|
|
||||||
|
data Extends : (Γ : Env) → (Δ : Env) → Set where
|
||||||
|
Z : ∀ {Γ : Env} → Extends Γ Γ
|
||||||
|
S : ∀ {A : Type} {Γ Δ : Env} → Extends Γ Δ → Extends Γ (Δ , A)
|
||||||
|
|
||||||
|
extract : ∀ {A : Type} {Γ Δ : Env} → Extends (Γ , A) Δ → Var Δ A
|
||||||
|
extract Z = Z
|
||||||
|
extract (S k) = S (extract k)
|
||||||
|
|
||||||
|
toDB : ∀ {A : Type} → (Γ : Env) → PH (λ (B : Type) → (Δ : Env) → Extends (Γ , B) Δ) A → Exp Γ A
|
||||||
|
toDB Γ (var x) = var (extract (x Γ))
|
||||||
|
toDB {A ⇒ B} Γ (abs N) = abs {!toDB (Γ , A) (N ?) !}
|
||||||
|
toDB Γ (app L M) = app (toDB Γ L) (toDB Γ M)
|
||||||
|
\end{code}
|
||||||
|
|
||||||
# Test code
|
# Test code
|
||||||
|
|
||||||
\begin{code}
|
\begin{code}
|
||||||
|
|
Loading…
Reference in a new issue