专栏文章

类型论 2025.1.6

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqkrpas
此快照首次捕获于
2025/12/04 06:24
3 个月前
此快照最后确认于
2025/12/04 06:24
3 个月前
查看原文
定义 A.1.1(λ\lambda-term):VV 是一个无穷集,或者说 "字" 集/符号集. 我们构造一个集合 LL ,其是由符号组成的词语/句子组成的集合. 其构造如下:
基本元素/符号准备: (1).(1). xV,xL\forall x \in V, x \in L . (2).(2). 假设 (V,)V( \notin V, ) \notin V (存在性见集合论有关内容) . 但 (L,)L( \in L,) \in L . (3).(3). 假设 λV\lambda \notin V , 但 λL\lambda \in L.
构造规则:
(1).(1). 如果 x,yVx,y \in V , 那么 x(y)Lx(y) \in L. (2).(2). 如果 xV,tLx \in V , t\in L , 那么 λxtL\lambda xt \in L .
此构造规则亦可看做某种输入输出的东西. 考虑到我们可以有好多不同的 λ\lambda, 可以视 λ\lambda 为某种对 xx 的操作,这个操作得到了某个 tt , 然后整个结果我们记为 λxt\lambda x t . 当然你可能会问,似乎 λxt1\lambda x t_1 , λxt2\lambda xt_2 等等都是合法的词啊,这会不会存在歧义?答案是不会,可以视这个过程为创造所有的我们 "能写出来" 的词 , 而那些是 "合法" 的,或者说是有意义的,可以再做规定. (因为我们还没有对 λ\lambda 有任何的规定性)
Example A.1.2: 我们可以写出很多在 LL 中的元素 , 比如 λxxL\lambda x x \in L , λx(t)L,λxλyx(y)L\lambda x(t) \in L , \lambda x \lambda y x(y) \in L 等等.
约定 A.1.3: t(u1(u2(...(uk))))t(u_1(u_2(...(u_k)))) 在无歧义时记为 tu1u2...uktu_1u_2...u_k . (实际上有可能会有歧义)
定义 A.1.4(Free occurence):xV,tLx \in V ,t \in L, 我们称 xxtt 中是自由的:
(1).(1). 如果 t=xt=x. (2).(2). 如果 t=u1(u2)t=u_1(u_2), 那么只有当 xxu1u_1 或者在 u2u_2 中是自由的 (3).(3). 如果 t=λyu,yxt= \lambda y u, y\neq x, 那么当 xxuu 中是自由的.
(4).(4). 如果 t=λxut = \lambda x u , 那么 xxtt不是自由的. (也就是说后面 uu 中无论有没有括号都没用了)
自由即意味着:“没有任何约束”,而这个定义即将 λ\lambda 视为对这些本来没有任何意义的符号带来一定的限制,此时其即不再是自由的. 而括号则具有某种 "划分区域" 的含义,即之前被 λ\lambda 污染过的 (bushi) 符号在括号的范围之外又焕然一新了!
如果 xxtt 中至少有一个自由位置,那么我们称 xx 是在 tt 中的自由变量(至少在一处自由) 如果 xx 出现在一个 λ\lambda 后面且被这个 λ\lambda 限制,那么我们称 xx 是在 tt 中被限制的(至少在一处被限制)
Example A.1.5:u1=x,u2=λxxu_1 =x, u_2 =\lambda x x, 那么在 u1(u2)=x(λxx)u_1(u_2) = x(\lambda xx) 中,只有第一个位置的 xx 是自由的,而在 λxλyx(y)\lambda x \lambda y x(y) 中没有自由的 xx .
定义 A.1.6(Subotitutia):t,t1,...,tkt,t_1,...,t_kLL 中的元素,x1,...,xkx_1,...,x_k 是在 VV 中的不同的元素, 我们定义 tt1/x1,...,tk/xkLt \langle t_1/x_1,...,t_k/x_k \rangle \in L .其有以下的规定性 (在这里的等于号更贴近某种替换的含义,或者理解为 "可替换为):
(1).(1). 如果 t=xit= x_i, 那么 tt1/x1,...,tk/xk=tit \langle t_1/x_1,...,t_k / x _k \rangle =t_i
(2).(2). 如果 tV{x1,...,xk}t \in V \setminus \{ x_1,...,x_k \} , 那么 tt1/x1,...,tk/xk=tt \langle t_1/x_1,...,t_k/x_k \rangle = t . (即后面这坨对 tt 没有意义) (3).(3). 如果 t=u1(u2)t= u_1(u_2), 那么 tt1/x1,...,tk/xk=u1t1/x1,...,tk/xk(u2t1/x1,...,tk/xk)t\langle t_1/x_1,...,t_k/x_k \rangle=u_1 \langle t_1/x_1,...,t_k/x_k \rangle (u_2 \langle t_1/x_1,...,t_k/x_k \rangle) (4).(4). 如果 t=λxiut= \lambda x_i u , 那么 tt1/x1,...,tk/xk=λxiut1/x1,...,ti1/xi1,ti+1/xi+1,...,tk/xkt \langle t_1/x_1,...,t_k/x_k \rangle = \lambda x_i u \langle t_1 / x_1 ,...,t_{i-1} / x_{i-1} , t_{i+1} / x_{i+1}, ..., t_k / x_k \rangle (5).(5). 如果 t=λxut= \lambda x u, x{x1,...,xk}x \notin \{ x_1,...,x_k \} . tt1/x1,...,tk/xk=λxut1/x1,...,tk/xkt \langle t_1 / x_1,...,t_k /x _k \rangle = \lambda x u \langle t_1 / x_1,...,t_k /x_k \rangle 表面上没做仍和操作,但是实际上我们接下来就考虑的是 ut1/x1,...,tk/xku \langle t_1/x_1,...,t_k/x_k \rangle 是否还能继续往下递归了.
Example A.1.7:t=λxx(y),t1=λxxt= \lambda x x(y), t_1 = \lambda x x . 那么:
tt1/y=λx x(y)t1/yt \langle t_1 /y \rangle = \lambda x \ x(y) \langle t_1 / y \rangle =λx xt1/y(yt1/y)=λx x(t1)= \lambda x \ x \langle t_1 / y \rangle (y \langle t_1 / y \rangle)= \lambda x \ x(t_1) =λx x(λxx)=\lambda x \ x (\lambda x x) t1t_1 中的 yy 可以视为某种局部变量,带完 yy 后输出回全局就是 λxx\lambda x x.
显然很多词的 "性状" 或者说本质都是相同的,我们考虑对其进行化约.
定义 A.1.8(α\alpha-Equivalence): 我们定义一个在 LL 上的二元关系 \equiv , 我们以递归的方式去定义:
(1).(1). 如果 tVt \in V , ttt \equiv t' 当且仅当 t=tt=t' . (回忆 VLV \subseteq LLL 的最基本的零件) (2).(2). 如果 t=u1(u2)t=u_1(u_2), ttt \equiv t' 当且仅当存在 u1,u2Lu'_1,u'_2 \in L, 使得 t=u1(u2)t'=u'_1 (u'_2)u1u1,u2u2u'_1 \equiv u_1,u'_2 \equiv u_2 . (3).(3). 如果 t=λxut= \lambda x u , ttt \equiv t' 当且仅当 tt' 是形如 t=λxut' = \lambda x' u' 的形式,且 uy/xuy/xu \langle y/x \rangle \equiv u' \langle y / x' \rangle . (For all but finitely many yVy \in V (what)).
关于 A.1.8(3)A.1.8(3) : 为什么这么定义的话,似乎是因为前面的 λx\lambda xλx\lambda x' 是不同的,而 y/x\langle y / x \rangley/x\langle y / x' \rangle 这一项可以加入到前面只有是 uu 的结尾可能有出现 xx 或者 xx',
Facts A.1.9: (1).(1). \equiv 是一个 LL 上的等价关系,(2).(2). 如果 ttt \equiv t' ,则其至少具有相同的自由变量 ( 自由变量可以视为全局变量,此断言由 A.1.8(1)A.1.8(1) 立见).
(3).(3). t,t,t1,t1,...,tk,tkt,t',t_1,t_1',...,t_k,t_k'LL 中的一些元素,x1,...,xkx_1,...,x_k 是不同的变量,如果 ttt \equiv t'i{1,...,k}  tit\forall i \in \{1,...,k\} \ \ t_i \equiv t' , 且在 t1,...,tkt_1,...,t_k 中的自由变量没有在被 t,tt,t' 中限制,或者说他们在 t,tt,t' 中仍然是自由的,那么: tt1/x1,...,tk/xktt1/x1,...,tk/xkt \langle t_1/ x_1,...,t_k / x_k \rangle \equiv t' \langle t'_1 / x_1 , ... ,t'_k / x_k \rangle 首先注意到自由变量在 \equiv 下保持不变,故而由 A.1.6(1)A.1.6(1) 可得,是唯一可能使得 t1,...,tkt_1,...,t_k "影响"到上述式子的的方式, 而此时 tit_i 中的元素会原封不动的加入到 tt 或者 tt' 的最后面,而此时他们如果还需要等价,就需要 tit_i 中元素的"自由"性没有被 t,tt,t' 影响.
(4).(4). \equivλ\lambda-Compatible, 即 : 如果 ttt \equiv t', 那么 λxtλxt\lambda x t \equiv \lambda x t'. (可能根据 A.1.8(3)A.1.8(3))
因此我们可以构造一个 :=L/\bigwedge := L / \equiv , 在上面可以过渡 LL 的很多性质: (a).(a). 对于任意 U1,U2U_1,U_2 \in \bigwedge , 取 u1u_1u2u_2 为他们的代表元,那么 U1(U2)U_1(U_2)u1(u2)u_1(u_2) 的等价类 (b).(b). xV,T\forall x \in V, T \in \bigwedge , ttTT 中的代表元,那么 λxT\lambda x Tλxt\lambda x t 的等价类.
(5).(5). 如果 yy 不在 tt 中出现,那么 λxtλyty/x\lambda x t \equiv \lambda y t \langle y / x \rangle . (既然 tt 中没有 yy , ty/xt \langle y / x \rangle 的结果中可能多出 xx, 而 x,yx,y 均不是自由元,故而可以在等价关系下替换?)
(6).(6). 对于 tL,x1,...,xkVt \in L , x_1,...,x_k \in V, 存在 tL,ttt' \in L, t' \equiv t, 满足 x1,...,xkx_1,...,x_k 均不是在 tt' 中被限制的元素(已经自由的全局变量不用换,局部变量可以换名字)
(7).(7). 对于 TT \in \bigwedge , 所有 TT 中的代表元具有相同的自由变量,故而可以良定的称呼为 TT 的自由变量.
定义 A.1.10:T,T1,...,TkT,T_1,...,T_k 都是 \bigwedge 中的元素,取 t,t1,...,tkt,t_1,...,t_k 为他们的代表元,且满足 t1,...,tkt_1,...,t_k 中都是自由的字在 tt 中都是自由的. 那么我们定义 : T[T1/x1,...,Tk/xk]:=the equivalance class of tt1/x1,...,tk/xkT [T_1/x_1,...,T_k/x_k] := \text{the equivalance class of }t \langle t_1/x_1,...,t_k /x_k\rangle
Fact A.1.11: (1).(1). 如果 x1x_1TT 中不是自由的,那么: T[T1/x1,...,Tk/xk]=T[T2/x2,...,Tk/xk]T[T_1/x_1,...,T_k/x_k] = T[T_2/x_2,...,T_k/x_k] 似乎是因为 A.1.6(4)A.1.6(4),若 x1x_1 不是自由的 ,其肯定就不在 λxu\lambda xu 中的 uu 中出现,此时可以省去一项. (2).(2).x1,...,xm,y1,...ynx_1,...,x_m,y_1,...y_n 满足 x1=y1,x2=y2,...,xk=ykx_1=y_1,x_2=y_2,...,x_k=y_k, 且 x1,...,xm,yk+1,...,ynx_1,...,x_m,y_{k+1},...,y_n 是两两不同的,T,T1,...,Tm,U1,...,UnT,T_1,...,T_m,U_1,...,U_n\bigwedge 中的元素, Ti=Ti[U1/y1,...,Un/yn]T_i'= T_i [U_1/y_1,...,U_n/y_n] , 那么: T[T1/x1,...,Tm/xm][U1/y1,...,Un/yn]=T[T1/x1,...,Tm/xm,Uk+1/xk+1,...,Un/yn]T[T_1/x_1,...,T_m/x_m][U_1/y_1,...,U_n/y_n]= T[T_1'/x_1,...,T'_m/x_m,U_{k+1}/x_{k+1},...,U_n/y_n] (3).(3). 如果 i{1,...,k}i \in \{ 1,..., k \} , 我们有 xi[T1/x1,...,Tk/xk]=Tix_i[T_1/x_1,...,T_k/x_k] = T_i . (和 A.1.6(1)A.1.6(1) 类似) (4).(4). 对于 xV{x1,...,xk}x \in V \setminus \{x_1,...,x_k \}, x[T1/x1,...,Tk/xk]=xx [T_1/x_1,...,T_k/x_k]=x. (和 A.1.6(2)A.1.6(2) 类似) (5).(5). 如果 T=λxUT = \lambda x U, 其中 xxT1,...,TkT_1,...,T_k 中不是自由的且 T[T1/x1,...,Tk/xk]=λxU[T1/x1,...,Tk/xk]T[T_1/x_1,...,T_k/x_k]= \lambda x U [T_1/x_1,...,T_k/x_k] (和 A.1.6(4)A.1.6(4) 类似) (6)(6) λxU(T)=λxU(T)U[T/x]=U[T/x]\lambda x U (T) = \lambda x' U' (T') \Rightarrow U[T/x] = U'[T'/x] . 这个也和 A.1.6(5)A.1.6(5) 类似.
这个过程不仅仅可以类比写代码的过程,同时也可以类比对数学公式或者形式的各种操作的过程,其是对此俩者的抽象.
定义 A.1.12(β\beta-conversion): 我们定义在 \bigwedge 上的二元关系 β0\beta_0, 其满足:
(1).(1). 如果 xVx \in V, 那么不存在相异的 TT' 使得 xβ0Tx \beta_0 T' . (2).(2). 如果 T=U1(U2)T = U_1(U_2), Tβ0TT \beta_0 T' 当且仅当满足以下条件之一:
(a).T=U1(U2),U2β0U2(a). T' = U_1 (U_2'), 且 U_2 \beta_0 U_2' (b).T=U1(U2),U1β0U1(b).T' = U_1' (U_2), 且 U_1 \beta_0 U_1' (c).U1=λxW,T=W[U2/x](c).U_1 =\lambda x W, 且 T' = W[U_2/x] 我们记 β\cong_\beta 是最小的包含 β0\beta_0 的等价关系.
其中 (c).(c). T=λxW(U2)T= \lambda x W (U_2) , 我们希望 T=W[U2/x]T' = W[U_2/x] 这样,似乎是比较弱的?
参考文献 : Jean-Leuis Krivine : Lambda-calculus , type and models

评论

0 条评论,欢迎与作者交流。

正在加载评论...