在Agda中,可以使用PHOAS方便地表示λ项:
data Term (V : Set) : Set where
var : V → Term V
abs : (V → Term V) → Term V
app : Term V → Term V → Term V
如"Parametric Higher-Order Abstract Syntax for Mechanized
Semantics"中所述,该方法比Bruijn索引具有多个优势。据我所知,尽管有一个eval : ∀ {V} -> Term V -> Term V
函数,给定一个λ项,但不能返回其正常形式-毕竟,Agda是合计的,而λ微积分不是。但是我不知道是否可以为仿射λ项编写这样的eval
函数;即那些绑定变量最多出现一次的变量。这种语言显然是全部。