Lambda calculus引论(六): 正规化与类型重建

256 阅读16分钟
原文链接: zhuanlan.zhihu.com

在上一节里介绍了简单带类型的λ-calculus的定义和基本性质, 这一节将介绍引入类型对λ-calculus系统的影响, 最重要的即是类型保证了系统的强正规性(strong normalization), 另外还将介绍类型检查与类型重建的方法(这一部分也是函数式编程应用里比较多关注的内容).



弱正规化定理(Weak normalization theorem)

定义: 类型\tau的度(degree)记作\partial(\tau), 定义如下:

\begin{align}
&\partial(\tau)=1\quad(\tau\ is\ a\ type\ variables)\\
&\partial(\tau\to\sigma)=\max\{\partial(\tau),\partial(\sigma)\}+1\\
\end{align}


定义: 可约式(redex)R的度(degree)记作\partial(R), 定义如下:

\begin{align}
&R=(\lambda x.M)N\quad(\Gamma\vdash\lambda x.M:\tau\to\sigma)\\
&\partial(R)=\partial(\tau\to\sigma)\\
\end{align}


定义: 表达式T的度(degree)记作d(T), 定义为其所包含的所有可约式(redex)的度的最大值. 若T为normal form, 则d(T)=0.



引理1: d(T[U/x])\leq \max\{d(T),d(U),\partial(\tau)\}, 其中\Gamma(x)=\tau(即x的类型为\tau).

证明: 对于T[U/x]中的所有可约式R有以下几种情况

  • RT中原有的可约式. R在替换中不变, 显然有\partial(R)\leq d(T).
  • RU中的可约式. r在替换中引入, 显然有\partial(R)\leq d(U).
  • R是在替换x后所产生的新可约式, 根据\partial(R)定义有\partial(R)=\partial(\tau).

那么对于可约式R\partial(R)\leq \max\{d(T),d(U),\partial(\tau)\}, 故根据表达式度的定义有d(T[U/x])\leq \max\{d(T),d(U),\partial(\tau)\}.

证毕.



引理2:M\;\triangleright_{\beta}\;N那么d(N)\leq d(M).

证明: M\;\triangleright_{\beta}\;NM中的某个可约式形如(\lambda x.T)U规约为T[U/x], 对于N中的所有可约式R有以下几种情况

  • R属于M在规约中不变, 显然R的度不发生改变, \partial(R)\leq d(M).
  • R来自于T[U/x]内部, 由引理1给出d(T[U/x])\leq \max\{d(T),d(U),\partial(\tau)\}(\taux的类型), 其中TU包含在M内, 那么有d(T)\leq d(M), d(U)\leq d(M). 并且根据定义有:\partial(\tau)\leq d((\lambda x.T)U)\leq d(M) ((\lambda x.T)UM中的一个可约式). 故\partial(R)\leq d(M).
  • R来自于将(\lambda x.T)U规约为T[U/x]后所产生的新可约式, 根据\partial(R)的定义有\partial(R)=\partial(\sigma)其中\lambda x.T的类型为\tau\to\sigma, U的类型为\tau. 又有\partial(\sigma)\leq d((\lambda x.T)U)\leq d(M), 故\partial(R)\leq d(M).

那么对于可约式R\partial(R)\leq d(M), 故根据表达式度的定义有d(N)\leq d(M).

证毕.



引理3: 若对于一个可约式R, 其内部包含的所有的可约式的度均小于d(R), 对R进行规约后得到的表达式Nd(N)<d(R).

证明: 可约式R形如R=(\lambda x.T)U\Gamma \vdash R:\tau\to\sigma, 那么N=T[U/x], 其中R内部包含的所有的可约式的度均小于d(R)=\partial(\tau\to\sigma), 即有d(T)<d(R)d(U)<d(R). 根据引理1有d(T[U/x])\leq \max\{d(T),d(U),\partial(\tau)\}<d(R)d(N)<d(R).

证毕.



定理1: 弱正规化定理(weak normalization theorem)

简单带类型的λ-calculus具有弱规范性(weak normalization). 即所有简单带类型的λ-calculus表达式均是弱规范化的, M\in \Lambda^{\to}\Rightarrow M\in WN_{\beta}.


证明:

d(M)做归纳.

归纳基础: 当d(M)=0时, M为normal form, 显然M\in WN_{\beta}.

归纳步骤: 归纳假设当d(M)\leq n时均有M\in WN_{\beta}.

d(M)=n+1时, 选取Md(R)=n+1的可约式R, 且R内部包含的所有的可约式的度均小于n+1(即满足度为n+1最右可约式). 由引理3得, 对R进行规约后M中度为n+1的可约式将会减少. 重复该操作直至规约至N, 其中N中不存在d(R)=n+1的可约式R, 此时d(N)=n. 由归纳假设得N\in WN_{\beta}, 且有M\;\triangleright_{\beta}^{*}\;N, 即M\in WN_{\beta}.

故由归纳法得M\in \Lambda^{\to}\Rightarrow M\in WN_{\beta}.


证毕.

由简单带类型λ-calculus具有弱规范性, 通过leftmost reduction可得到表达式的normal form(参见第四节定理leftmost reduction).



强正规化定理(Strong normalization theorem)

这里介绍简单带类型λ-calculus强正规性的两种证明, 第一种证明方式将带类型λ-calculus转化为带类型λI-calculus形式, 利用λI-calculus系统中弱规范性等价于强规范性的性质进行证明, 第二种证明方式由W.W. Tait在1967年提出, 主要是利用类型在表达式和正规化子集间建立逻辑关系(logical relation).


第一种证明较为初等, 第二种证明可以简单地拓展到Lambda cube(后文将会介绍)上证明其强规范性.



Proof by λI-calculus


定义: \iota为简单带类型λ-calculus至简单带类型λI-calculus映射


(λI-calculus的定义参见第四节)


\begin{align}
&\iota :\Lambda^{\to}\to\Lambda_{I}\\
&\iota(x)=x\\
&\iota(MN)=\iota(M)\iota(N)\\
&\iota(\lambda x_1:\sigma_1.\cdots \lambda x_n:\sigma_n.P)=\lambda x_1:\sigma_1.\cdots \lambda x_n:\sigma_n.\lambda y_1:\tau_1.\cdots \lambda y_m:\tau_m.\\
&\qquad k_{\rho,\sigma_1}(\cdots(k_{\rho,\sigma_n}(\iota(P)y_1\cdots y_m)x_n)\cdots)x_1\\
\end{align}

其中\Gamma, x_i:\sigma_i\vdash P:\tau_1\to\cdots\to\tau_m\to\rho, k_{\rho,\sigma_n}:\rho\to\sigma_i\to\rho.

注: λI-calculus为λ-calculus子集, 简单带类型λI-calculus性质与简单带类型λ-calculus相同.



定义: t为简单带类型λI-calculus至简单带类型λ-calculus映射


\begin{align}
&t:\Lambda^{I}\to\Lambda_{\to}\\
&t(M)=\iota(M)[\mathbf{K}_{\rho,\sigma}/k_{\rho,\sigma}]
\end{align}

其中\mathbf{K}_{\rho,\sigma}=\lambda x:\rho.\lambda y:\sigma.x, \vdash \mathbf{K}_{\rho,\sigma}:\rho\to\sigma_i\to\rho.


显然根据定义t(M)\;\triangleright_{\beta}^{*}\;M.



引理4: M\in \Lambda^{\to},\ \iota(M)\in SN_{\beta}.

证明: 由λI-calculus中SN_{\beta}\equiv WN_{\beta}(参见第四节定理(Church, Rosser))及定理1(弱正规化定理)得\iota(M)\in WN_{\beta}, 故\iota(M)\in SN_{\beta}.

证毕.



引理5: 对于M\;\triangleright_{\beta}\;N, 其中被规约的可约式形如(\lambda x:\sigma.P)Q, P:\rho, Q:\sigma(\rho为类型标识符), 则记该类规约为M\;\triangleright_{\beta1}\;N.

若有M_0\;\triangleright_{\beta1}\;M_1\;\triangleright_{\beta}\;M_2, 则存在M_3使得M_0\;\triangleright_{\beta}\;M_3\;\triangleright^{*}_{\beta1}\;M_2.

证明: 在M_0\;\triangleright_{\beta1}\;M_1\;\triangleright_{\beta}\;M_2中, 对于M_0\;\triangleright_{\beta1}\;M_1, 进行规约的可约式为R=(\lambda x:\sigma.P)Q, (\lambda x:\sigma.P)Q\;\triangleright_{\beta}\;P[Q/x]其中(\lambda x:\sigma.P):\sigma\to\rhoP[Q/x]:\rho, P[Q/x]的类型\rho表明P[Q/x]不为抽象(abstraction), 即非\lambda y:\tau.M形式. 故\triangleright_{\beta1}规约后不产生新的可约式. 故M_1\;\triangleright_{\beta}\;M_2中进行规约的可约式属于M_0, 可交换规约顺序, 即M_0\;\triangleright_{\beta}\;M_3\;\triangleright^{*}_{\beta1}\;M_2.

(在交换规约顺序后M_0\;\triangleright_{\beta}\;M_3规约中可能会复制出多个可约式R, 故交换后为M_3\;\triangleright^{*}_{\beta1}\;M_2)


证毕.



引理6: M\in \Lambda^{\to},\ t(M)\notin SN_{\beta}则存在无穷规约序列, 其中所有\mathbf{K}_{\rho,\sigma}项没被规约.


证明: 对于t(M)的无穷规约序列, t(M)=M_0\;\triangleright_{\beta}\;M_1\;\triangleright_{\beta}\;M_2\;\triangleright_{\beta}\;\cdots, 若其中出现M_i\;\triangleright_{\beta1}\;M_{i+1}\;\triangleright_{\beta}\;M_{i+2}则由引理5得, 可将\triangleright_{\beta1}规约交换后置, 即M_i\;\triangleright_{\beta}\;M^{'}_{i+1}\;\triangleright^{*}_{\beta1}\;M_{i+2}. 则对于任意有限长的前n项的子规约序列, 均不存在\triangleright_{\beta1}规约, 即存在无穷规约序列不包含\triangleright_{\beta1}规约.


在无穷规约序列M_0\;\triangleright_{\beta}\;M_1\;\triangleright_{\beta}\;M_2\;\triangleright_{\beta}\;\cdots中不存在\triangleright_{\beta1}规约, 若其中对\mathbf{K}_{\rho,\sigma}项进行规约\mathbf{K}_{\rho,\sigma}A\;\triangleright_{\beta}\;(\lambda y:\sigma.A), 其中A:\rho, 由于规约序列中不存在\triangleright_{\beta1}规约, 即(\lambda y:\sigma.A)在后续规约没有被规约, 故可对所有\mathbf{K}_{\rho,\sigma}项规约交换后置. 那么有存在无穷规约序列, 对于其任意有限长的前n项的子规约序列, 均不存在\mathbf{K}_{\rho,\sigma}项规约, 即存在无穷规约序列不包含\mathbf{K}_{\rho,\sigma}项规约.


证毕.



引理7: M\in \Lambda^{\to},\ t(M)\in SN_{\beta}.

证明: 若t(M)\notin SN_{\beta}, 由引理5得, 存在无穷规约序列t(M)=M_0\;\triangleright_{\beta}\;M_1\;\triangleright_{\beta}\;M_2\;\triangleright_{\beta}\;\cdots其中所有\mathbf{K}_{\rho,\sigma}项没有被规约, 那么表达式中的\mathbf{K}_{\rho,\sigma}项与标识符k_{\rho,\sigma_n}行为无异, 故可构造无穷规约序列M^{'}_0\;\triangleright_{\beta}\;M^{'}_1\;\triangleright_{\beta}\;M^{'}_2\;\triangleright_{\beta}\;\cdots其中M^{'}_i=t^{-1}(M_i) (t^{-1}为将表达式中所有\mathbf{K}_{\rho,\sigma}项替换为标识符k_{\rho,\sigma_n}), 故有\iota(M)=M^{'}_0\;\triangleright_{\beta}\;M^{'}_1\;\triangleright_{\beta}\;M^{'}_2\;\triangleright_{\beta}\;\cdots为无穷规约序列, 即\iota(M)\notin SN_{\beta}与引理4矛盾, 故t(M)\in SN_{\beta}.

证毕.



定理2.1: 强正规化定理(strong normalization theorem)


简单带类型的λ-calculus具有强规范性(strong normalization). 即所有简单带类型的λ-calculus表达式均是强规范化的, M\in \Lambda^{\to}\Rightarrow M\in SN_{\beta}.

证明: 若M\notin SN_{\beta}, 由t(M)\;\triangleright_{\beta}^{*}\;Mt(M)\notin SN_{\beta}, 与引理6矛盾. 故M\in SN_{\beta}.

证毕.



Proof by logical relation


定义: A,B\subseteq \Lambda^{-}, 表达式集合\left\{ F\in \Lambda^{-}\;|\;\forall a\;(a\in A\to F\;a\in B) \right\}记作A\to B.



定义: 对于类型\tau, 表达式集合[\![\tau]\!] \subseteq \Lambda^{-}为类型\tau的可计算(computable)集合, 定义如下:

\begin{align}
&\;[\![\tau]\!]=SN_{\beta}\\
&\;[\![\sigma\to\rho]\!]=[\![\sigma]\!]\to [\![\rho]\!]
\end{align}

定义: 强正规化集合的子集X\subseteq SN_{\beta}为饱和集合(saturated)当且仅当满足:

  • 对于n\geq 0, M_1,\dots M_n\in SN_{\beta}, 有xM_1\cdots M_n\in X
  • 对于n\geq 1, M_1,\dots M_n\in SN_{\beta}, 有M_0[M_1/x]M_2\cdots M_n\in X\Rightarrow (\lambda x.M_0)M_1M_2\cdots M_n\in X


定义: 所有饱和集合的集合记作为\mathbb{S}, 即X\ is\ saturated\Rightarrow X\in\mathbb{S}\mathbb{S}=\left\{ X\subseteq \Lambda^{-}\;|\;  X\ is\ saturated\right\}.



引理8: SN_{\beta}\in\mathbb{S}.

证明: 显然n\geq 0, M_1,\dots M_n\in SN_{\beta}, 有xM_1\cdots M_n\in SN_{\beta}. n\geq 1, 显然有(\lambda x.M_0)M_1M_2\cdots M_n\;\triangleright_{\beta}\;M_0[M_1/x]M_2\cdots M_n, 故M_0[M_1/x]M_2\cdots M_n\in SN_{\beta}\Rightarrow (\lambda x.M_0)M_1M_2\cdots M_n\in SN_{\beta}.

证毕.



引理9: A,B\in\mathbb{S}\Rightarrow A\to B\in\mathbb{S}.


证明:

F=xM_1\cdots M_n(其中n\geq 0, M_1,\dots M_n\in SN_{\beta}), 有A,B\in\mathbb{S}, 令P\in A\subseteq SN_{\beta}, 那么F\;P=xM_1\cdots M_nP, 其中P\in SN_{\beta}故由B\in\mathbb{S}定义得F\;P\in B, 因此F\in A\to B.


F=M_0[M_1/x]M_2\cdots M_n(其中n\geq 1, M_1,\dots M_n\in SN_{\beta})且F\in A\to B, 令F^{'}=(\lambda x.M_0)M_1M_2\cdots M_n, 由F\in A\to B得, 对于P\in A\subseteq SN_{\beta}F\;P\in B, 又有F^{'} P\;\triangleright_{\beta}\;F\; P, 即F^{'} P\in B, 故F^{'}\in A\to B.

证毕.



引理10: \sigma\in\Pi\Rightarrow [\![\sigma]\!]\in\mathbb{S}.

证明: 对\ [\![\sigma]\!]做结构归纳.

\sigma为类型标识符, 根据定义\ [\![\sigma]\!]=SN_{\beta}, 由引理8得\ [\![\sigma]\!]\in\mathbb{S}.

\sigma=\tau\to\rho, \ [\![\sigma]\!]=[\![\tau]\!]\to [\![\rho]\!], 由归纳假设得\ [\![\tau]\!],[\![\tau]\!]\in \mathbb{S}, 又由引理9得[\![\tau]\!]\to [\![\rho]\!]\in \mathbb{S}.


证毕.



定义: 求值(valuation)\rho为标识符到表达式上的映射\rho :S\to\Lambda^{-}.

部分替换记号\rho \left\{ x\!:= N\right\}为:

\rho \left\{ x\!:= N\right\} (y)=
\begin{cases}
N&(x\equiv y) \\
\rho(y)&(otherwise)
\end{cases}

定义: \rho为标识符上的求值, \ [\![M]\!]_{\rho}=M[\rho(x_1)/x_1,\cdots,\rho(x_n)/x_n]其中FV(M)=\left\{ x_1,\cdots,x_n \right\}.



定义: \rho为标识符上的求值, \rho\models M:\sigma当且仅当\;[\![M]\!]_{\rho}\in[\![\sigma]\!]; \rho\models \Gamma当且仅当\ \forall (x:\sigma)\in\Gamma\quad(\rho(x)\in[\![\sigma]\!]).



定义: \Gamma\models M:\sigma当且仅当\forall \rho\;(\rho\models \Gamma\;\Rightarrow\; \rho\models M:\sigma).



引理11: Soundness

\Gamma\vdash M:\sigma\;\Rightarrow \;\Gamma\models M:\sigma

证明: 对\Gamma \vdash M:\sigma的推导做结构归纳.

若推导为\frac{}{\Delta, x:\sigma\vdash x:\sigma}, 其中\Gamma =\Delta ,x:\sigma, M=x, x\notin dom(\Delta ). 若\rho\models \Gamma则有\;[\![x]\!]_{\rho}=\rho(x)\in[\![\sigma]\!], 即\rho\models x:\sigma, 故\Gamma\models x:\sigma.

若推导为\dfrac{\Gamma ,x:\tau_1\vdash N:\tau_2}{\Gamma \vdash (\lambda x.N):\tau_1\to\tau_2}, 其中x\notin dom(\Gamma ), \sigma=\tau_1 \to \tau_2, M=\lambda x.N. 不妨设x\notin dom(\Gamma^{'} ), 若\rho\models \Gamma, 令P\in [\![\tau_1]\!], 那么有\rho\left\{ x\!:=P \right\} \models \Gamma,x:\tau_1. 根据归纳假设有\Gamma ,x:\tau_1\models N:\tau_2那么有\rho\left\{ x\!:=P \right\} \models N:\tau_2\ [\![N]\!]_{\rho\{x\!:=P\}}\in [\![\tau_2]\!].

\begin{align}
\;[\![\lambda x.N]\!]_{\rho}P\;&\equiv\; (\lambda x.N)[\rho(x_1)/x_1,\cdots,\rho(x_n)/x_n]P\\
&\triangleright_{\beta}\;N[\rho(x_1)/x_1,\cdots,\rho(x_n)/x_n,P/x]\\
&\equiv \;[\![N]\!]_{\rho\{x\!:=P\}}
\end{align}

又有\;[\![N]\!]_{\rho\{x\!:=P\}}\in [\![\tau_2]\!]\in\mathbb{S}, 其中[\![\lambda x.N]\!]_{\rho}P\;\triangleright_{\beta}\;[\![N]\!]_{\rho\{x\!:=P\}}\ [\![\lambda x.N]\!]_{\rho}P\in[\![\tau_2]\!]. 又有P\in [\![\tau_1]\!], 因此可得\;[\![\lambda x.N]\!]_{\rho}\in[\![\tau_1\to\tau_2]\!], 即\rho\models (\lambda x.N):\tau_1\to\tau_2, 故\Gamma\models (\lambda x.N):\tau_1\to\tau_2.

若推导为\dfrac{\Gamma \vdash P:\tau_1\to\tau_2\quad\Gamma \vdash Q:\tau_1}{\Gamma \vdash PQ:\tau_2}, 其中M=PQ. 若\rho\models \Gamma, 根据归纳假设有\Gamma \models P:\tau_1\to\tau_2\Gamma \models Q:\tau_1\rho \models P:\tau_1\to\tau_2\rho \models Q:\tau_1, 那么有\;[\![P]\!]_{\rho}\in[\![\tau_1]\!]\to[\![\tau_2]\!]\;[\![Q]\!]_{\rho}\in[\![\tau_1]\!], 故\;[\![PQ]\!]_{\rho}=[\![P]\!]_{\rho}[\![Q]\!]_{\rho}\in[\![\tau_2]\!], 即\rho\models PQ:\tau_2, 故\Gamma\models PQ:\tau_2.

根据归纳法得\Gamma\vdash M:\sigma\;\Rightarrow \;\Gamma\models M:\sigma.


证毕.



定理2.2: 强正规化定理(strong normalization theorem)

简单带类型的λ-calculus具有强规范性(strong normalization). 即所有简单带类型的λ-calculus表达式均是强规范化的, M\in \Lambda^{\to}\Rightarrow M\in SN_{\beta}.

证明: 由引理11(Soundness)得, 由\Gamma\vdash M:\sigma\Gamma\models M:\sigma, 取求值\rho\ \forall (x:\sigma)\in\Gamma\quad(\rho(x)=x), 显然\rho(x)\in [\![\tau_2]\!]\in\mathbb{S}\rho\models \Gamma. 由\Gamma\models M:\sigma\;[\![M]\!]_{\rho}\in[\![\sigma]\!], 其中\ [\![M]\!]_{\rho}=M, \;[\![\sigma]\!]\subseteq SN_{\beta}, 故M\in SN_{\beta}.


证毕.



推论1: 所有在\lambda_{\to}中typable的表达式构成的集合为无类型λ-calculus表达式的真子集.

证明: \Omega =(\lambda x.x\;x)(\lambda x.x\;x)\lambda_{\to} à la Curry中非可类型化(untypable)

由定理2(强正规化定理)简单带类型的λ-calculus系统具有强规范性, \Omega显然不具有normal form. 若\Omega可类型化, 则\Omega具有一个normal form. 矛盾.

证毕.



推论2: 不动点组合子Y\lambda_{\to} à la Curry中非可类型化(untypable), 即在\lambda_{\to} à la Curry中无法构建不动点组合子.

证明: Y满足Yf\;\triangleright_{\beta}^{*}\;f(Yf)\quad(\forall f\in\Lambda ), 取f=\lambda x.x\ x. 显然f为可类型化的, 若Y为可类型化的, 而显然Yf不具有normal form, 类似证明推论1, 可得矛盾. 故Y\lambda_{\to}中非可类型化.

证毕.



对于不动点组合子Y在简单带类型λ-calculus无法构造, 直接的原因是在不动点组合子Y的构造中, 必然会遇到自我调用, 例如x\;x, 其类型推导为:

\dfrac{\Gamma \vdash x\!:\!t_{1}\to t_{2}\quad \Gamma \vdash x\!:\!t_{1}}{\Gamma \vdash x~x\!:\!t_{2}}

对于x的类型实质上是递归类型t_{1}=t_{1}\to t_{2}, 在简单带类型λ-calculus系统中不具有此种类型表达.


为了在带类型λ-calculus表达递归, 一个解决方式是将不动点组合子在表达式层面上引入.


定义: \mathbf{fix}表达式

  • β-规约规则: \mathbf{fix}\;f\;\triangleright_{\beta}\;f(\mathbf{fix}\;f).
  • 类型性规则(typability): \vdash \mathbf{fix}:(\alpha\to\alpha)\to\alpha.

注: 在将不动点组合子加入到简单带类型λ-calculus后, 其规范性将会被破坏. 更深层次的原因可以追溯至由递归类型引入的悖论, 参见Girard悖论.



类型检查与重建(Type checking and reconstruction)

定义: 在类型系统上的三类问题

  • 类型检查(type checking) 给定前提\Gamma, 表达式M与类型\tau, 确定\Gamma \vdash M:\tau是否成立.
  • 类型重建(type reconstruction)或类型推导(type inference) 给定前提\Gamma与表达式M, 确定是否存在类型\tau使得\Gamma \vdash M:\tau是否成立.
  • 类型居留(type inhabitation) 给定前提\Gamma与类型\tau, 确定是否存在表达式M, 使得\Gamma \vdash M:\tau是否成立. (这里对居留问题不做深入介绍)

注: 从直觉上来说类型检查会比类型重建更容易, 但在更为丰富的类型系统中, 类型检查并不比类型重建更容易, 反而类型重建可以问题可以规约成类型检查.

对于检查表达式M(其中FV(M)=\left\{ x_1,\cdots,x_n \right\}), 确定是否存在类型\tau\Gamma中使得\Gamma \vdash M:\tau是否成立可以规约为确定

x_0:\rho\vdash \mathbf{K}x_0(\lambda x_1.\dots\lambda x_n. M):\rho

是否成立(即类型检查).

对于简单带类型λ-calculus的类型检查与类型重建问题, 首先从一阶合一化(first-order unification)开始介绍.



First-order unification

定义: 一阶标署(first-order signatures) \sigma


其中A为全集, \sigma\sigma =\langle \left\{ c_i \right\},\left\{ R_i\right\},   \left\{ f_i \right\} \rangle

  • \left\{ c_i \right\}为常量符号集合, c_i \in A.
  • \left\{ R_i \right\}A上的k元关系, 即R_i \subseteq A^{k}.
  • \left\{ f_i \right\}k\;(k\geq 1)元函数, f_i:A^{k}\to A.

其中0元函数视作为常量. 若标署中不包含关系则称该标署为代数标署(algebraic signatures), 在合一问题里只考虑代数标署.



定义: 在一阶标署\sigma =\langle \mathcal{C},\mathcal{R},\mathcal{F} \rangle上的代数项(algebraic term)\Sigma

  • 常量c (c\in \mathcal{C}).
  • f(t_1,\dots,t_n), 其中f\in\mathcal{F}, t_1,\dots,t_n\in\Sigma.

\Sigma = \mathcal{C}\;|\;\mathcal{F}(\Sigma...) .



定义: 方程(equation)为一对代数项(t,u), 写作t=u. 方程组(system of equations)为方程的有限集合. 方程中的标识符称为未知元(unknowns).



定义: 替换(substitution)为从代数项至代数项的映射

\begin{align}
&S:\Sigma \to \Sigma \\
&S(c)=c\qquad(c\ is\ a\ constant)\\
&S(x)=\rho(x)\qquad(x\ is\ a\ variable)\\
&S(f(t_1,\dots,t_n))=f(S(f(t_1)),\dots,S(f(t_n)))\\
\end{align}

其中对于标识符, \rho :\Sigma \to\Sigma为对该标识符的求值(valuation).



定义: 方程的解(solution of an equation)为替换S, 其中求值\rho满足对于方程t=uS(t)\equiv S(u). 方程组的解为替换S均为方程组中每个方程的解.


方程的解的一个例子:

对于方程f(gxy)x=fz(fyy), 其解为

\begin{align}
&\rho(x)=fyy\\
&\rho(y)=y\\
&\rho(z)=g(fyy)y
\end{align}

定义: 对于方程组, 称其为已解(solved form)当且仅当

  • 所有方程均为x=t形式, 其中x为标识符.
  • 对于一个在方程左边的标识符, 其不出现在方程组中的任何其他位置.

对于没有出现在方程左边的标识符, 则称之为未定元(undefined).

对于一个已解的方程, 有解S:

\begin{align}
&\rho_{S}(x)=t\qquad(for\ x=t)\\
&\rho_{S}(y)=y\qquad(y\ is\ undefined)
\end{align}

其中显然有t=S(t).



定义: 对于方程组, 称其为不一致的(inconsistent)当且仅当存在以下几种形式的方程

  • f(t_1,\dots,t_n)=g(u_1,\dots,u_m), 其中f,g\in\mathcal{F},f\not\equiv g.
  • f(t_1,\dots,t_n)=cc=f(t_1,\dots,t_n), 其中f\in\mathcal{F},c\in\mathcal{C}.
  • c=d, 其中c,d\in\mathcal{C},c\not\equiv d.
  • x=f(t_1,\dots,t_n), 其中x出现在t_1,\dots,t_n中.

对于一个不一致的方程组, 显然其无解.



定义: 两个方程组EE^{'}为等价的(equivalent)当且仅当其解相同, 记作E\simeq E^{'}.



定义: 对于给定方程组E, 判定该方程组E是否存在等价方程组E\simeq E^{'}, E^{'}为已解的(solved form)或不一致的(inconsistent). 该类问题为一阶合一问题(first-order unification).



Robinson's algorithm

定义: 方程符号替换, E\{x\!:=t\}表示将方程中出现的标识符x替换为代数项t; 定义替换S其中\rho_{S}(x)=t, 即E\{x\!:=t\}=S(E).



定义: 对于方程组E的变换操作

\begin{align}
E\;\cup\;\{t=t\}\;&\Rightarrow \;E && && (\textrm{delete})\\
E\;\cup\;\{f(t_1,\dots,t_n)=f(u_1,\dots,u_n)\}\;&\Rightarrow \;E\;\cup\;\{t_1=u_1,\dots,t_n=u_n\} &&
 &&(\textrm{decompose})\\
E\;\cup\;\{f(t_1,\dots,t_n)=g(u_1,\dots,u_m)\}\;&\Rightarrow \;\bot &&if\ f\not\equiv g \ or\ n\ne m
 &&(\textrm{conflict})\\
E\;\cup\;\{f(t_1,\dots,t_n)=x\}\;&\Rightarrow \;E\;\cup\;\{x=f(t_1,\dots,t_n)\} &&
 &&(\textrm{swap})\\
E\;\cup\;\{x=t\}\;&\Rightarrow \;E\{x\!:=t\}\;\cup\;\{x=t\} &&if\ x\notin Vars(t)\ and\ x\in Vars(G)
 &&(\textrm{eliminate})\\
E\;\cup\;\{x=f(t_1,\dots,t_n)\}\;&\Rightarrow \;\bot &&
if\ x\in Vars(f(t_1,\dots,t_n)) &&(\textrm{check})\\
\end{align}

其中\bot表示方程组不一致.



引理12: 方程组E经过上述删除(delete)到检查(check)变换操作后得到方程组E^{'}, 有E\simeq E^{'}.

证明: 对于矛盾(conflict)和检查(check)变换, 显然原方程组和变换后方程组均不一致, 故等价即E\simeq E^{'}.

对于交换(swap)变换, 显然交换方程两边后方程解保持不变, 即E\simeq E^{'}.

对于删除(delete)变换, 方程t=t对于任意解均成立, 删去后方程解保持不变, 即E\simeq E^{'}.

对于分解(decompose)变换, 若S为方程组E^{'}=G\;\cup\;\{t_1=u_1,\dots,t_n=u_n\}的解, 即有S(t_1)\equiv S(u_1),\dots,S(t_n)\equiv S(u_n), 又由替换定义有S(f(t_1,\dots,t_n))=f(S(f(t_1)),\dots,S(f(t_n)))=f(S(f(u_1)),\dots,S(f(u_n)))=S(f(u_1,\dots,u_n)), 故S为方程f(t_1,\dots,t_n)=g(u_1,\dots,u_m)的解, 故S同样为方程组E=G\;\cup\;\{f(t_1,\dots,t_n)=f(u_1,\dots,u_n)\}的解, 反之亦然, 即E\simeq E^{'},

对于消除(eliminate)变换, 若S为方程组E^{'}=G\{x\!:=t\}\;\cup\;\{x=t\}的解, 即有S(x)=S(t), 另外对于方程组G\{x\!:=t\}, S为其解且S(x)=S(t), 根据替换的定义, 在方程中替换标识符和代数项xt解亦然成立(严格证明可由归纳给出), S为方程组G的解, 即S为方程组E=G\;\cup\;\{x=t\}的解, 反之亦然, 故E\simeq E^{'}.

证毕.



引理13: 对于任意方程组E, 只能应用有限次上述删除(delete)到检查(check)变换操作.

证明: 对于矛盾(conflict)和检查(check)变换, 显然进行一次变换后得到\bot, 无法继续进行变换.

对于剩余4种变换, 定义三元组(n_{var},n_{lhs},n_{eqn}), 其中n_{var}表示方程组中重复出现的标识符的数量, n_{lhs}表示在方程左边函数符号以及常量的数目,n_{eqn}表示方程组中方程的数目.

其中在三元组上定义字典序, 即三元组n=(n_{var},n_{lhs},n_{eqn})n^{'}=(n^{'}_{var},n^{'}_{lhs},n^{'}_{eqn}), n<n^{'}当且仅当n_{var}<n^{'}_{var}n_{var}=n^{'}_{var},\ n_{lhs}<n^{'}_{lhs}n_{var}=n^{'}_{var},\ n_{lhs}=n^{'}_{lhs},\ n_{eqn}<n^{'}_{eqn}; 若n_{var}=n^{'}_{var},\ n_{lhs}=n^{'}_{lhs},\ n_{eqn}=n^{'}_{eqn}则为n=n^{'}; 若非n<n^{'}n=n^{'}则为n>n^{'}. 显然三元组上的字典序是良基关系, 且是全序关系.

设变换前的三元组为n, 变换后的三元组为n^{'}.

对于进行交换(swap)变换, n_{var}n_{eqn}保持不变, n_{lhs}减小, 故n^{'}<n.


对于进行删除(delete)变换, n_{var}n_{lhs}不增加, n_{eqn}减小, 故n^{'}<n.

对于进行分解(decompose)变换, n_{var}保持不变, n_{lhs}减小, 故n^{'}<n.

对于进行消除(eliminate)变换, n_{var}减少(G\{x\!:=t\}中标识符x被替换, 变换后方程组中标识符x只出现一次, 在x=t中), 故n^{'}<n.


由上, 对方程组进行交换, 删除, 分解, 消除变换后均有n^{'}<n, 且三元组上定义字典序是良基的. 故对于任意的方程组均只能进行有限次变换.

证毕.



定理3: Robinson's algorithm

对于任意方程组E, 在通过有限次上述删除(delete)到检查(check)变换操作后得到等价方程组E^{'}, E^{'}为已解的(solved form)或不一致的(inconsistent).

证明: 对于方程组E, 若其为非已解的且非不一致的, 根据定义, 可对方程进行删除(delete)到检查(check)的变换操作, 由引理12与引理13得, 在有限次变换操作后(即算法必停机), 无法再继续进行变换, 得到的等价方程组E^{'}为已解的或不一致的.

证毕.



推论3: 一阶合一问题(first-order unification)是可判定的(decidable).

证明: 由Robinson's algorithm即得.

证毕.



定义: 替换P,R, 复合替换S=P\circ RS(t)=(P\circ R)(t)=P(R(t)). 其中称替换S为替换R的一个实例(instance). 定义偏序关系R\leq S当且仅当\exists P\;(S=P\circ R), 即SR的实例.



定义: 替换R为方程组E的解, R为主解(principal solution)则对于任意替换S为方程组E的解当且仅当R\leq S.

方程的主解的一个例子:

x=x

其主解为R(x)=x, 另外还有解S(x)=f(x), 其中有R\leq S.



引理14: 若方程组E存在解, 则其存在唯一主解(principal solution).

证明: 对于方程组E, 使用Robinson's algorithm, 得到等价已解方程组E^{'}, 方程组E^{'}中的方程均形如x=t. 令替换R中的求值\rho\rho_{R}(x)=t, 显然替换R为方程组的解, 有t=R(t).

若替换SR\leq S, 则S(x)=P(R(x))=P(\rho_{R}(x))=P(t)=P(R(t))=S(t), 故替换S为方程的解.

若替换S为方程的解, 有S(x)=S(t), 又有S(t)=S(R(t))=S(R(x))S(x)=S(R(x)), 故R\leq S. 因此有解R为方程的主解.

显然对于由Robinson's algorithm得到的替换R, 其为唯一的.


证毕.



Type checking and reconstruction algorithm


定义: 对于给定的λ-表达式M, 构造关于M的方程组E_{M}与类型\tau_{M}.

  • M=x(x\in S), 构造E_{M}=\left\{ \right\}, \tau_{M}\!:=\alpha_{x}其中\alpha_{x}为一个新的类型未定元.
  • M=PQ, 构造E_{M}=E_{P}\;\cup\;E_{Q}\;\cup\;\left\{ \tau_P=\tau_Q\to\alpha_M \right\}, \tau_{M}\!:=\alpha_{M}其中\alpha_{M}为一个新的类型未定元.
  • M=(\lambda x.P), 构造E_{M}=E_{P}, \tau_{M}=\alpha_{x}\to\tau_{P}.

注: 在此的一阶标署中的函数唯有二元函数\to, 将\to(\alpha, \beta)记作\alpha\to\beta.



定理4: 类型检查与重建(type checking and reconstruction)

  • \Gamma \vdash M:\sigma, 对于方程组E_{M}存在解S满足\sigma=S(\tau_M)\forall x\in FV(M)\quad(S(\alpha_{x})=\Gamma(x)).
  • 若替换S为方程组E_{M}的解且\forall x\in FV(M)\quad(S(\alpha_{x})=\Gamma(x)), 则有\Gamma \vdash M:S(\tau_M).

证明:

1. 对\Gamma \vdash M:\sigma推导做结构归纳.

若推导为\frac{}{\Delta, x:\sigma\vdash x:\sigma}, 其中\Gamma =\Delta ,x:\sigma, M=x, x\notin dom(\Delta ), 且E_{M}=\left\{ \right\}, \tau_{M}=\alpha_{x} 显然解S\rho(\alpha_x)=\sigma, 即\sigma=S(\tau_M).

若推导为\dfrac{\Gamma ,x:\tau_1\vdash P:\tau_2}{\Gamma \vdash (\lambda x.P):\tau_1\to\tau_2}, 其中x\notin dom(\Gamma ), \sigma=\tau_1 \to \tau_2, M=\lambda x.P, 且E_{M}=E_{P}, \tau_{M}=\alpha_{x}\to\tau_{P}. 不妨设x\notin dom(\Gamma^{'} ), 根据归纳假设有对于E_{P}有解S_{P}, 令替换S为:

\rho(\alpha_{M})=\begin{cases}
\tau_1 \to \tau_2 &(M=\lambda x.P)\\
\rho_{P}(\alpha_{M})&(otherwise)
\end{cases}

显然SE_M的解, 同时有S(\tau_{(\lambda x.M)})=\tau_1 \to \tau_2.

若推导为\dfrac{\Gamma \vdash P:\tau\to\sigma\quad\Gamma \vdash Q:\tau}{\Gamma \vdash PQ:\sigma}, 其中M=PQ, 且E_{M}=E_{P}\;\cup\;E_{Q}\;\cup\;\left\{ \tau_P=\tau_Q\to\alpha_M \right\}, \tau_{M}=\alpha_{M}. 根据归纳假设有对于E_{P}E_{Q}有解S_{P}S_{Q}, 其中S_{P}(\tau_{P})=\tau\to\sigmaS_{Q}(\tau_{Q})=\tau, 那么构造替换S为:

\rho(\alpha_{M})=\begin{cases}
\sigma &(M=PQ)\\
\rho_{P}(\alpha_{M})&(M\ is\ sub-expression\ of\ P)\\
\rho_{Q}(\alpha_{M})&(M\ is\ sub-expression\ of\ Q)
\end{cases}

显然SE_{P}E_{Q}的解;

对于\tau_P=\tau_Q\to\alpha_M, 有:

\begin{align}
&S(\tau_P)=S(\tau_Q\to\alpha_M)\\
\Rightarrow\ &S(\tau_P)=S(\tau_Q)\to S(\alpha_M)\\
\Rightarrow\  &S_P(\tau_P)=S_Q(\tau_Q)\to \sigma\\
\Rightarrow\  &(\tau\to\sigma)=(\tau\to \sigma)
\end{align}

S为方程\tau_P=\tau_Q\to\alpha_M的解, 即替换SE_M的解, 同时有\sigma=S(\tau_M).

故由归纳得原命题成立.



2. 对表达式M做结构归纳.

M=x, x为任意标识符, 那么有E_{M}=\left\{ \right\}, \tau_{M}=\alpha_{x}, 原命题显然成立;

M=PQ, 那么有E_{M}=E_{P}\;\cup\;E_{Q}\;\cup\;\left\{ \tau_P=\tau_Q\to\alpha_M \right\}, \tau_{M}=\alpha_{M}, 替换S为方程组E_{M}的解, 故S(\tau_P)=S(\tau_Q\to\alpha_M)=S(\tau_Q)\to S(\tau_M), 同时S亦为方程E_PE_Q的解, 根据归纳假设有\Gamma \vdash P:S(\tau_P)\Gamma \vdash P:S(\tau_Q)\to S(\tau_M)\Gamma \vdash Q:S(\tau_Q), 因此\Gamma \vdash PQ: S(\tau_M), 原命题成立;

M=\lambda x. P, 那么有E_{M}=E_{P}, \tau_{M}=\alpha_{x}\to\tau_{P}, 替换S为方程组E_{M}的解即E_{P}的解, 根据归纳假设有\Gamma,x:S(\alpha_{x}) \vdash P:S(\tau_P), 故有\Gamma \vdash \lambda x. P:S(\alpha_x)\to S(\tau_P), 即\Gamma \vdash \lambda x. P:S(\tau_M), 原命题成立;

故由归纳得原命题成立.

证毕.



推论4: Type checking and reconstruction algorithm

简单带类型λ-calculus的类型检查与重建是可判定的(decidable).

证明: 由定理4, 类型检查与重建可规约为一阶合一问题, 对于表达式M使用Robinson's algorithm求解方程组E_{M}. 由推论3得类型检查与重建是可判定的.


证毕.



定义: 若给定表达式M, 对于任何前提\Gamma与类型\sigma满足\Gamma \vdash M:\sigma均存在替换S使得\Gamma =S(\Gamma_{p})\sigma=S(\sigma_p), 且有\Gamma_p \vdash M:\sigma_p, 则类型\sigma_p称为主类型(principal type).

(S(\Gamma_{p})表示对于任意x均有(S(\Gamma))(x)=S(\Gamma(x)))

主类型的一个例子:


\begin{align}
&\vdash \lambda x.x:\sigma\to\sigma\\
&\vdash \lambda x.x:(\tau\to\tau)\to(\tau\to\tau)\\
\end{align}

其中\sigma\to\sigma\lambda x.x的主类型. 对于(\tau\to\tau)\to(\tau\to\tau)替换S(\sigma)=\tau\to\tau.



推论5: 若表达式M可类型化(typable), 则其存在唯一的主类型.


证明: 由定理4(类型检查与重建)与引理14得主类型唯一.


证毕.




一阶合一问题在计算机科学与逻辑中广泛出现, 简单带类型λ-calculus的类型检查与重建为其应用之一. 例如使用合一算法可以实现树形数据结构的匹配, 例如嵌套模式匹配等等. 更多的应用就等大家取慢慢发现啦.

这篇文章介绍了不少内容, 篇幅比较长, 感谢大家的耐心阅读啦喵~

最後感謝莎莎喵一直以來的支持