定义 A.1.1(λ-term): 设
V 是一个无穷集,或者说 "字" 集/符号集. 我们构造一个集合
L ,其是由符号组成的词语/句子组成的集合. 其构造如下:
基本元素/符号准备:
(1). ∀x∈V,x∈L .
(2). 假设
(∈/V,)∈/V (存在性见集合论有关内容) . 但
(∈L,)∈L .
(3). 假设
λ∈/V , 但
λ∈L.
构造规则:
(1). 如果
x,y∈V , 那么
x(y)∈L.
(2). 如果
x∈V,t∈L , 那么
λxt∈L .
此构造规则亦可看做某种输入输出的东西. 考虑到我们可以有好多不同的
λ, 可以视
λ 为某种对
x 的操作,这个操作得到了某个
t , 然后整个结果我们记为
λxt . 当然你可能会问,似乎
λxt1 ,
λxt2 等等都是合法的词啊,这会不会存在歧义?答案是不会,可以视这个过程为创造所有的我们 "能写出来" 的词 , 而那些是 "合法" 的,或者说是有意义的,可以再做规定. (因为我们还没有对
λ 有任何的规定性)
Example A.1.2: 我们可以写出很多在
L 中的元素 , 比如
λxx∈L ,
λx(t)∈L,λxλyx(y)∈L 等等.
约定 A.1.3: t(u1(u2(...(uk)))) 在无歧义时记为
tu1u2...uk . (实际上有可能会有歧义)
定义 A.1.4(Free occurence): 设
x∈V,t∈L, 我们称
x 在
t 中是自由的:
(1). 如果
t=x.
(2). 如果
t=u1(u2), 那么只有当
x 在
u1 或者在
u2 中是自由的
(3). 如果
t=λyu,y=x, 那么当
x 在
u 中是自由的.
(4). 如果
t=λxu , 那么
x 在
t 中
不是自由的. (也就是说后面
u 中无论有没有括号都没用了)
自由即意味着:“没有任何约束”,而这个定义即将
λ 视为对这些本来没有任何意义的符号带来一定的限制,此时其即不再是自由的. 而括号则具有某种 "划分区域" 的含义,即之前被
λ 污染过的 (bushi) 符号在括号的范围之外又焕然一新了!
如果
x 在
t 中至少有一个自由位置,那么我们称
x 是在
t 中的自由变量(至少在一处自由)
如果
x 出现在一个
λ 后面且被这个
λ 限制,那么我们称
x 是在
t 中被限制的(至少在一处被限制)
Example A.1.5: 设
u1=x,u2=λxx, 那么在
u1(u2)=x(λxx) 中,只有第一个位置的
x 是自由的,而在
λxλyx(y) 中没有自由的
x .
定义 A.1.6(Subotitutia): 设
t,t1,...,tk 是
L 中的元素,
x1,...,xk 是在
V 中的不同的元素, 我们定义
t⟨t1/x1,...,tk/xk⟩∈L .其有以下的规定性 (在这里的等于号更贴近某种替换的含义,或者理解为 "可替换为):
(1). 如果
t=xi, 那么
t⟨t1/x1,...,tk/xk⟩=ti
(2). 如果
t∈V∖{x1,...,xk} , 那么
t⟨t1/x1,...,tk/xk⟩=t . (即后面这坨对
t 没有意义)
(3). 如果
t=u1(u2), 那么
t⟨t1/x1,...,tk/xk⟩=u1⟨t1/x1,...,tk/xk⟩(u2⟨t1/x1,...,tk/xk⟩)
(4). 如果
t=λxiu , 那么
t⟨t1/x1,...,tk/xk⟩=λxiu⟨t1/x1,...,ti−1/xi−1,ti+1/xi+1,...,tk/xk⟩
(5). 如果
t=λxu,
x∈/{x1,...,xk} .
t⟨t1/x1,...,tk/xk⟩=λxu⟨t1/x1,...,tk/xk⟩
表面上没做仍和操作,但是实际上我们接下来就考虑的是
u⟨t1/x1,...,tk/xk⟩ 是否还能继续往下递归了.
Example A.1.7: 设
t=λxx(y),t1=λxx . 那么:
t⟨t1/y⟩=λx x(y)⟨t1/y⟩
=λx x⟨t1/y⟩(y⟨t1/y⟩)=λx x(t1)
=λx x(λxx)
t1 中的
y 可以视为某种局部变量,带完
y 后输出回全局就是
λxx.
显然很多词的 "性状" 或者说本质都是相同的,我们考虑对其进行化约.
定义 A.1.8(α-Equivalence): 我们定义一个在
L 上的二元关系
≡ , 我们以
递归的方式去定义:
(1). 如果
t∈V ,
t≡t′ 当且仅当
t=t′ . (回忆
V⊆L 是
L 的最基本的零件)
(2). 如果
t=u1(u2),
t≡t′ 当且仅当存在
u1′,u2′∈L, 使得
t′=u1′(u2′) 且
u1′≡u1,u2′≡u2 .
(3). 如果
t=λxu ,
t≡t′ 当且仅当
t′ 是形如
t′=λx′u′ 的形式,且
u⟨y/x⟩≡u′⟨y/x′⟩ . (For all but finitely many
y∈V (what)).
关于
A.1.8(3) :
为什么这么定义的话,似乎是因为前面的
λx 和
λx′ 是不同的,而
⟨y/x⟩ 或
⟨y/x′⟩ 这一项可以加入到前面只有是
u 的结尾可能有出现
x 或者
x′,
Facts A.1.9: (1). ≡ 是一个
L 上的等价关系,
(2). 如果
t≡t′ ,则其至少具有相同的自由变量 ( 自由变量可以视为全局变量,此断言由
A.1.8(1) 立见).
(3). t,t′,t1,t1′,...,tk,tk′ 是
L 中的一些元素,
x1,...,xk 是不同的变量,如果
t≡t′ 且
∀i∈{1,...,k} ti≡t′ , 且在
t1,...,tk 中的自由变量没有在被
t,t′ 中限制,或者说他们在
t,t′ 中仍然是自由的,那么:
t⟨t1/x1,...,tk/xk⟩≡t′⟨t1′/x1,...,tk′/xk⟩
首先注意到自由变量在
≡ 下保持不变,故而由
A.1.6(1) 可得,是唯一可能使得
t1,...,tk "影响"到上述式子的的方式, 而此时
ti 中的元素会原封不动的加入到
t 或者
t′ 的最后面,而此时他们如果还需要等价,就需要
ti 中元素的"自由"性没有被
t,t′ 影响.
(4). ≡ 是
λ-Compatible, 即 : 如果
t≡t′, 那么
λxt≡λxt′. (可能根据
A.1.8(3))
因此我们可以构造一个
⋀:=L/≡ , 在上面可以过渡
L 的很多性质:
(a). 对于任意
U1,U2∈⋀ , 取
u1 和
u2 为他们的代表元,那么
U1(U2) 是
u1(u2) 的等价类
(b). ∀x∈V,T∈⋀ ,
t 是
T 中的代表元,那么
λxT 是
λxt 的等价类.
(5). 如果
y 不在
t 中出现,那么
λxt≡λyt⟨y/x⟩ . (既然
t 中没有
y ,
t⟨y/x⟩ 的结果中可能多出
x, 而
x,y 均不是自由元,故而可以在等价关系下替换?)
(6). 对于
t∈L,x1,...,xk∈V, 存在
t′∈L,t′≡t, 满足
x1,...,xk 均不是在
t′ 中被限制的元素(已经自由的全局变量不用换,局部变量可以换名字)
(7). 对于
T∈⋀ , 所有
T 中的代表元具有相同的自由变量,故而可以良定的称呼为
T 的自由变量.
定义 A.1.10: 设
T,T1,...,Tk 都是
⋀ 中的元素,取
t,t1,...,tk 为他们的代表元,且满足
t1,...,tk 中都是自由的字在
t 中都是自由的. 那么我们定义 :
T[T1/x1,...,Tk/xk]:=the equivalance class of t⟨t1/x1,...,tk/xk⟩
Fact A.1.11: (1). 如果
x1 在
T 中不是自由的,那么:
T[T1/x1,...,Tk/xk]=T[T2/x2,...,Tk/xk]
似乎是因为
A.1.6(4),若
x1 不是自由的 ,其肯定就不在
λxu 中的
u 中出现,此时可以省去一项.
(2). 设
x1,...,xm,y1,...yn 满足
x1=y1,x2=y2,...,xk=yk, 且
x1,...,xm,yk+1,...,yn 是两两不同的,
T,T1,...,Tm,U1,...,Un 是
⋀ 中的元素,
Ti′=Ti[U1/y1,...,Un/yn] , 那么:
T[T1/x1,...,Tm/xm][U1/y1,...,Un/yn]=T[T1′/x1,...,Tm′/xm,Uk+1/xk+1,...,Un/yn]
(3). 如果
i∈{1,...,k} , 我们有
xi[T1/x1,...,Tk/xk]=Ti . (和
A.1.6(1) 类似)
(4). 对于
x∈V∖{x1,...,xk},
x[T1/x1,...,Tk/xk]=x. (和
A.1.6(2) 类似)
(5). 如果
T=λxU, 其中
x 在
T1,...,Tk 中不是自由的且
T[T1/x1,...,Tk/xk]=λxU[T1/x1,...,Tk/xk]
(和
A.1.6(4) 类似)
(6) λxU(T)=λx′U′(T′)⇒U[T/x]=U′[T′/x] . 这个也和
A.1.6(5) 类似.
这个过程不仅仅可以类比写代码的过程,同时也可以类比对数学公式或者形式的各种操作的过程,其是对此俩者的抽象.
定义 A.1.12(β-conversion): 我们定义在
⋀ 上的二元关系
β0, 其满足:
(1). 如果
x∈V, 那么不存在相异的
T′ 使得
xβ0T′ .
(2). 如果
T=U1(U2),
Tβ0T′ 当且仅当满足以下条件之一:
(a).T′=U1(U2′),且U2β0U2′
(b).T′=U1′(U2),且U1β0U1′
(c).U1=λxW,且T′=W[U2/x]
我们记
≅β 是最小的包含
β0 的等价关系.
其中
(c). T=λxW(U2) , 我们希望
T′=W[U2/x] 这样,似乎是比较弱的?
参考文献 : Jean-Leuis Krivine : Lambda-calculus , type and models