答案是,这取决于术语重写系统的含义。
在引入术语重写系统(TRSes)的概念时,它描述了现在称为一阶TRSes的形式,它只是一组形式的计算规则
升→ [R
其中和是形式的一阶项升[R
t := x ∣ f (吨1个,… ,tñ)
其中是变量,是取自任意但固定的集合的函数符号,称为签名,它也为每个固定多个参数。XFΣf∈Σ
规则有几个常见的限制,例如但我们无需在此赘述。Var(r)⊆Var(l)
根据这个定义,通常的演算,与规则:
不能被表达,如构造“ ” 结合的发生在(虽然应用程序很好)。一种可能的解决方案是将每个术语转换为另一种不涉及绑定的术语,并且该方法比重写系统本身的理论还要老。β
(λx.t) u→t[u/x]
λxtλ
一种方法是著名的组合器演算,它是带有签名的重写规则和
和
SKΣ={S, K,app}
app(app(K,x),y)→x
app(app(app(S,x),y),z)→app(app(x,z),app(y,z))
还有另一种更直观的编码,其中包含带有de Bruijn索引和显式替换的lambda项,但我在这里不再赘述。
尽管具有一阶编码,但很显然,通过将TRS的概念扩展为包括具有构造函数的构造函数,可以更好地解决演算的减少行为所带来的技术问题。通常用术语“ 高阶重写系统”来指代。现在采用以下形式的条款λ
t := x(t1,…,tn) ∣ f(x11…x1i1.t1,…,xn1…xnin.tn)
再次是,但现在每个都绑定在。签名需要指定每个参数绑定多少个变量。现在我们可以将表示为。只需做一些工作,就可以定义适当的替换概念。X 我Ĵ吨我一个b 小号(X 。吨)λ X 。Ťf∈Σxijtiabs(x.t)λx.t
在这里,关于什么构成重写规则尚无共识。一个问题是,我们希望重写是可确定的,因此,左手边是否与术语匹配就必须是可确定的。但这通常被认为是模数,据认为是可决定的,但是只有极其复杂和缓慢的算法(而是无法确定的!)。ββηβ
因此,左侧被限制在某些不错的子集中,通常是“密勒模式”。尽管有一些令人讨厌的惊喜,但针对一阶案例的许多结果是普遍的。
仅采用一阶系统,并将和应用程序添加到术语结构中,以及临时的和归约也很常见。这产生了相当合理的系统,但付出了(一定的)普遍性。β ηλ βη
当然,通常的演算可以直接在这些系统中编写。例如规则:βλβ
app(abs(x.y(x)),z)→y(z)
Nipkow和Prehofer 在此对定义和基本结果进行了相当不错的概述。