更改

添加126字节 、 2026年9月12日 (星期六)
第15行: 第15行:  
'''Kleene 递归定理'''是关于'''[[自指]](self-reference,即一个系统"谈论"自身)'''[[不动点]](fixed point,即变换后保持不变的点)两个基本定理的合称。先用日常语言各说一遍,再给出精确表述。
 
'''Kleene 递归定理'''是关于'''[[自指]](self-reference,即一个系统"谈论"自身)'''[[不动点]](fixed point,即变换后保持不变的点)两个基本定理的合称。先用日常语言各说一遍,再给出精确表述。
   −
'''第一递归定理(日常语言版)''':任何递归定义——即把一个函数在某处的值,写成它自己在其他输入上的值(比如阶乘 <math>fac(n) = n\cdot fac(n−1)</math>)——都必然有解 ,而且其中"最小"的那个解一定能被机器算出。换句话说,'''机械式的递归定义永远合法、永远有解'''<ref name="rogers1967" />。
+
'''第一递归定理(日常语言版)''':任何递归定义的函数——即把一个函数在某处的值,写成它自己在其他输入上的值(比如阶乘 <math>fac(n) = n\cdot fac(n−1)</math>)——都必然有解 ,而且其中"最小"的那个解一定能被机器算出。换句话说,'''机械式的递归定义永远合法、永远有解'''<ref name="rogers1967" />。
   −
'''第二递归定理(日常语言版)''':对任何可计算的全函数 <math>f</math>(一个对任何输入都停机的"程序变换"),总存在一个源程序 <math>c</math>,使得执行 <math>c</math> 的效果,等同于执行 <math>f(c)</math>——即 <math>f</math> 拿着 <math>c</math> 自己的源代码算出来的那个程序。用符号写就是:<math>\phi_c \simeq \phi_{f(c)}</math><ref name="rogers1967">'''Rogers, H., Jr. (1967).''' ''Theory of Recursive Functions and Effective Computability''. McGraw-Hill. 第 11 章 The Recursion Theorem, pp. 179–222.【教科书标准表述;第一/第二递归定理的命名来源】</ref>.
+
'''第二递归定理(日常语言版)''':对任何可计算的全函数 <math>f</math>(一个对任何输入都停机的"程序变换"),总存在一个源程序 <math>c</math>,使得执行 <math>c</math> 的效果,等同于执行 <math>f(c)</math>——即 <math>f</math> 拿着 <math>c</math> 自己的源代码算出来结果(通常结果都是一个自然数或字符串,对应为一个程序的编号或源代码)的那个程序。用符号写就是:<math>\phi_c \simeq \phi_{f(c)}</math><ref name="rogers1967">'''Rogers, H., Jr. (1967).''' ''Theory of Recursive Functions and Effective Computability''. McGraw-Hill. 第 11 章 The Recursion Theorem, pp. 179–222.【教科书标准表述;第一/第二递归定理的命名来源】</ref>.
    
两个定理的对照表(其中涉及的符号会在[[#预备知识:读懂本词条所需的全部概念|下一节]]逐一解释,此处可先跳过细节):
 
两个定理的对照表(其中涉及的符号会在[[#预备知识:读懂本词条所需的全部概念|下一节]]逐一解释,此处可先跳过细节):
第32行: 第32行:  
|-
 
|-
 
| '''结论'''
 
| '''结论'''
−
| 任何可计算的函数变换规则 <math>\Psi</math> 都有最小[[不动点]] <math>\phi</math>,且 <math>\phi</math> 是可计算的:<math>\Psi(\phi) = \phi</math>
+
| 任何可计算的函数变换规则 <math>\Psi</math> 都有最小[[不动点]] <math>\alpha</math>,且 <math>\alpha</math> 是可计算的:<math>\Psi(\alpha) = \alpha</math>
 
| 任何可计算的程序变换规则 <math>f</math> 都有不动点 <math>n</math>:程序 <math>n</math> 与程序 <math>f(n)</math> 计算同一个函数,记作 <math>\phi_n = \phi_{f(n)}</math>
 
| 任何可计算的程序变换规则 <math>f</math> 都有不动点 <math>n</math>:程序 <math>n</math> 与程序 <math>f(n)</math> 计算同一个函数,记作 <math>\phi_n = \phi_{f(n)}</math>
 
|-
 
|-
第49行: 第49行:  
[[文件:两种“不动点”.png|替代=两种“不动点”|缩略图|图2:两个定理的"不动点"含义截然不同——左:函数 <math>\phi</math>经变换<math>\Psi</math> 后变回 <math>\phi</math>(函数层面);右:程序 <math>n</math> 经变换 <math>f</math> 后变成另一个程序 <math>f(n)</math>(通常<math> f(n) \neq n</math>),但<math>\phi_n = \phi_{f(n)}</math>('''代码变了,行为不变''')。§2.5 对此有详细辨析。]]
 
[[文件:两种“不动点”.png|替代=两种“不动点”|缩略图|图2:两个定理的"不动点"含义截然不同——左:函数 <math>\phi</math>经变换<math>\Psi</math> 后变回 <math>\phi</math>(函数层面);右:程序 <math>n</math> 经变换 <math>f</math> 后变成另一个程序 <math>f(n)</math>(通常<math> f(n) \neq n</math>),但<math>\phi_n = \phi_{f(n)}</math>('''代码变了,行为不变''')。§2.5 对此有详细辨析。]]
   −
第二递归定理被 [[Yiannis N. Moschovakis|Moschovakis]] 称为 '''"令人惊叹的"(amazing)'''——他的综述标题就叫 ''Kleene's Amazing Second Recursion Theorem''<ref name="moschovakis2010" />;计算机科学家 Neil Jones 称之'''"可计算性的瑞士军刀"(A Swiss Pocket Knife for Computability)'''〔转引自 Kiselyov<ref name="kiselyov">'''Kiselyov, O.''' ''Kleene Second Recursion Theorem: A Functional Pearl''.【<math>\lambda</math> 演算/函数式编程视角;quine、twine、性能分析;Unix `cat` 例子出处】</ref>, §1〕。它的一行证明看似只是个小技巧,却支撑了从 [[哥德尔|Gödel]] 不完备定理到[[序数]]理论、从程序自复制到有效[[描述集合论]]的庞大理论大厦(详见第[[第二递归定理(SRT)|5]])。
+
第二递归定理被 [[Yiannis N. Moschovakis|Moschovakis]] 称为 '''"令人惊叹的"(amazing)'''定理——他的综述标题就叫 ''Kleene's Amazing Second Recursion Theorem''<ref name="moschovakis2010" />;计算机科学家 Neil Jones 称之'''"可计算性的瑞士军刀"(A Swiss Pocket Knife for Computability)'''〔转引自 Kiselyov<ref name="kiselyov">'''Kiselyov, O.''' ''Kleene Second Recursion Theorem: A Functional Pearl''.【<math>\lambda</math> 演算/函数式编程视角;quine、twine、性能分析;Unix `cat` 例子出处】</ref>, §1〕。它的一行证明看似只是个小技巧,却支撑了从 [[哥德尔|Gödel]] 不完备定理到[[序数]]理论、从程序自复制到有效[[描述集合论]]的庞大理论大厦(详见第[[#第二递归定理(SRT)|5]])。
    
== 预备知识:读懂本词条所需的全部概念 ==
 
== 预备知识:读懂本词条所需的全部概念 ==