集智百科:递归定理|张江

· 2026-10-28 14:30 · 25 阅读

原创 集智百科团队 2026-10-28 14:30 日本

Stephen Cole Kleene提出的递归函数论,即可计算性理论中的一组基本定理

导语

“集智百科精选”是一个长期专栏,持续为大家推送复杂性科学相关的基本概念和资源信息。作为集智俱乐部的开源科学项目,集智百科希望打造复杂性科学领域最全面的百科全书,欢迎对复杂性科学感兴趣、热爱知识整理和分享的朋友加入,文末可以扫码报名加入百科志愿者!

↑↑↑扫码直达百科词条

图片

张江 | 作者

作者简介

图片

目录

1. 总览:两个定理各说了什么

2. 预备知识:读懂本词条所需的全部概念

2.1 “可计算”与“部分函数”

2.2 通用程序(解释器)

2.3 s-m-n 定理(柯里化 / 参数特化)

2.4 递归可枚举集(r.e. set)

2.5 “不动点”的两种含义

3. 历史背景

3.1 起源:一篇研究"序数记号"的 6 页短文

3.2 命名史

3.3 一个值得铭记的教训

4. 第一递归定理(FRT)

4.1 从“递归定义的函数”说起

4.2 定理表述

4.3 意义:递归定义的"存在性定理"

4.4 与第二递归定理的关系

5. 第二递归定理(SRT)

5.1 三种等价表述

5.2 证明

5.2.1 一行对角线

5.2.2 列表法(Cutland 1980):把"对角线"画成一张表

5.3 直观图景:程序如何"谈论"自己的代码

5.4 其它形式的第二递归定理

5.4.1 Uniform 形式

5.4.2 Smullyan双递归定理

5.4.3 算子递归定理(ORT)

5.5 推论:SRT 衍生出的若干重要结果

5.5.1 Rogers 同构定理(1958)

5.5.2 Arslanov 完全性判据(1981)

5.6 与其它不动点定理的关系

5.6.1 Gödel 不动点引理(对角引理)

5.6.2 Lawvere不动点定理

5.6.2.1 定理陈述

5.6.2.2 直观解释

5.6.2.3 与SRT的对应

5.6.3 与Y组合子的关系

5.7 SRT与自指

5.7.1 康托尔对角线论证(1891)

5.7.2 罗素悖论(1901)

5.7.3 图灵停机问题(1936)

5.7.4 哥德尔不完备定理(1931)

5.7.5 冯诺伊曼的自复制自动机(1948)

5.7.6 Quine(自打印程序)

5.7.7 自省程序与自省式自改进程序

5.7.8 统一性总结

5.8 SRT的其它应用

5.8.1 通用序数记号系统ω_1^CK

5.8.2 构造序数 = 递归序数

5.8.3 超算术层级与 Spector 唯一性定理

5.8.4 超算术集与有效描述集合论

5.8.5 r.e. 索引集理论:Rice、Rice-Shapiro 与 Myhill

5.8.5.1 Rice定理(1951)

5.8.5.2 Myhill定理:创造集 = 完备集

5.8.6 有效运算的连续性:Myhill–Shepherdson 与 KLS–Čeĭnin 定理

5.8.7 Solovay 可证性逻辑

5.8.8 应用地图一览

5.9 其它扩展研究

5.9.1 SRT 与计算复杂性理论

5.9.2 存在性与可构造性的分野

5.9.3 KRT 可以被分级

6. 评注与影响

递归定理(recursion theorem)是递归函数论,即可计算性理论(computability theory)中的一组基本定理,由Stephen Cole Kleene提出,合称 Kleene 递归定理,包括两条:第一递归定理: 任何用递归方式定义的函数方程都有可计算的(最小)解——机械式的递归定义永远合法、永远有解;第二递归定理: 对任何可计算的全函数 f,总存在一个程序编号(即源代码)c,使得执行c与执行编号(源代码)为f(c)的计算效果完全相同,因此程序可以合法地引用自己的代码。两条之中,第二递归定理尤为重要,它是数学中对自指(self-reference)现象最简洁、最有力的统一陈述:它只有一步对角线证明 `c=S(e,e)`(S 是"把程序的部分输入写死、生成新程序"的柯里化操作(Currying),详见2.3小节),却统一了从罗素悖论(1901)、哥德尔不完备定理(1931)、图灵停机问题(1936)、冯诺伊曼自复制自动机(1948)到今天的Quine程序(1960s)等全部自指现象——它们本质上是同一种对角线/自指结构的不同化身(详见5.7小节)。

图1:六个经典自指现象——康托尔对角线(1891)、罗素悖论(1901)、哥德尔不完备定理(1931)、图灵停机问题(1936)、冯诺伊曼自复制(1948)、Quine(自打印程序,1960s)和自省程序(以及自省式自修改程序,2026)——都源于同一种对角线/自指原理;Kleene 第二递归定理是这一原理最一般的陈述。

第二递归定理可以用公式表达为:

这里的ϕ代表通用函数,ϕc代表通用函数在模拟代码为c的程序计算,≃代表左右两个函数功能等价,即它们在所有的输入数据上要么计算结果相等,要么无定义。

1. 总览:两个定理各说了什么

Kleene 递归定理是关于自指(self-reference,即一个系统"谈论"自身)不动点(fixed point,即变换后保持不变的点)两个基本定理的合称。先用日常语言各说一遍,再给出精确表述。

第一递归定理(日常语言版):任何递归定义的函数——即把一个函数在某处的值,写成它自己在其他输入上的值(比如阶乘 fac(n)=n⋅fac(n−1))——都必然有解 ,而且其中"最小"的那个解一定能被机器算出。换句话说,机械式的递归定义永远合法、永远有解[1]。

第二递归定理(日常语言版):对任何可计算的全函数 f(一个对任何输入都停机的"程序变换"),总存在一个源程序 c,使得执行 c 的效果,等同于执行 f(c)——即 f 拿着 c 自己的源代码算出来结果(通常结果都是一个自然数或字符串,对应为一个程序的编号或源代码)的那个程序。用符号写就是:ϕc≃ϕf(c)[1].

两个定理的对照表(其中涉及的符号会在下一节逐一解释,此处可先跳过细节):

第二递归定理被 Moschovakis 称为 "令人惊叹的"(amazing)定理——他的综述标题就叫 Kleene's Amazing Second Recursion Theorem[3];计算机科学家 Neil Jones 称之"可计算性的瑞士军刀"(A Swiss Pocket Knife for Computability)〔转引自 Kiselyov[5], §1〕。它的一行证明看似只是个小技巧,却支撑了从 哥德尔不完备定理到序数理论、从程序自复制到有效描述集合论的庞大理论大厦(详见第5)。

图2:两个定理的"不动点"含义截然不同——左:函数 φ经变换Ψ 后变回 φ(函数层面);右:程序 n 经变换 f 后变成另一个程序 f(n)(通常f(n)≠n),但ϕn=ϕf(n)(代码变了,行为不变)。§2.5 对此有详细辨析。

2. 预备知识:读懂本词条所需的全部概念

本节用程序员熟悉的语言解释文中会反复出现的五个概念。已经熟悉的读者可以跳过。

2.1 “可计算”与“部分函数”

可计算的(computable / effective / recursive):一个函数是"可计算的",意思是存在一套固定的、有穷的指令(程序),使得对任何输入,只要机械地按指令执行有穷多步,就能得到输出。"可计算的"(computable)、"有效的"(effective)、"递归的"(recursive)在本文中是同义词——这是历史造成的术语冗余,三个词来自 Church、Turing、Gödel–Kleene 三条等价的技术路线[4]。

部分函数(partial function):一台机器在某些输入上可能永远不停机(死循环),这时它在这些输入上没有输出。我们把"在部分输入上有定义、在其余输入上无定义"的函数称为部分函数;在所有输入上都有定义的称为全函数(total function)。程序天然对应部分函数,而不是数学课本里那种"处处有值"的函数——这是可计算性理论与普通数学的第一个思维差异。

记号 ϕe:把全体程序(的所有可计算部分函数)排成一个序列,用自然数 0, 1, 2, … 编号,ϕe 表示"编号为 e 的程序所计算的那个部分函数"。这个编号也叫哥德尔配数(Gödel number):关键思想是"程序本身也是一个有限符号串,可以编码成一个自然数",于是程序即数据——程序可以作为另一个程序的输入被处理。ϕe(x) 表示"编号 e 的程序在输入 x 上的输出"(可能无定义)。本文中 p↓ 表示"程序 p 停机(有输出)",p↑ 表示"不停机(无输出)"。

2.2 通用程序(解释器)

存在一台"通用机器":给它输入 (e,x),它就模拟编号 e 的程序在输入 x 上的运行。这就是今天的解释器 / 虚拟机思想,Turing 1936 年的通用图灵机是它的首个化身。用记号写就是:存在程序i 使得 ϕi(e,x)=ϕe(x)[1]。

2.3 s-m-n 定理(柯里化 / 参数特化)

s-m-n 定理说:给定一个双输入程序和它的第一个输入,可以机械地生成一个"把第一个输入写死在程序里"的新单输入程序。用程序员的话说,就是柯里化(currying)或部分应用(partial application)总是可以机械完成的:存在可计算的全函数 S,使得

即"程序 S(e,y)"在输入 x 上的行为 = "程序 e"在输入 (y,x) 上的行为。Kleene 1938 年论文中的 S 函数就是这个工具[4]。第二递归定理的证明只需要这一个工具,此外什么都不需要——这是它惊人简单的原因。

2.4 递归可枚举集(r.e. set)

一个自然数集合称为递归可枚举的(recursively enumerable, 简写为r.e.),如果存在一台机器能把它的元素一个一个地全部列出来(允许重复、允许乱序;不在集合里的元素永远不会被列出)。等价地,r.e. 集就是某个程序有定义的输入的集合(即 ϕe 的定义域),记作 We。典型例子:"所有会停机的 (程序,输入) 对"构成的集合(停机问题集合 K)是 r.e. 的,但它的补集不是——这正是"停机问题不可判定"的现代表述。

2.5 “不动点”的两种含义

"不动点"在本文中出现于两个截然不同的层面,混淆它们是最常见的理解障碍:

  • 函数层面的不动点(第一递归定理):变换规则 Ψ 把函数 ϕ 变成新函数 Ψ(ϕ);若 Ψ(ϕ)=ϕ(作为函数处处相等),ϕ 就是 Ψ 的不动点。这与分析学中"f(x)=x 的解"同类。

  • 代码层面的不动点(第二递归定理):变换规则 f 把程序编号 n 变成新编号 f(n);注意 f(n)≠n 通常成立——程序代码确实变了;但神奇的是,新程序 f(n) 和旧程序 n计算的函数相同:ϕn=ϕf(n)。所以"不动"的不是代码,而是代码的行为。Rogers 为此特意造了"不动点值(fixed-point value)"一词,强调它不是数值不动点[1]。

3. 历史背景

3.1 起源:一篇研究“序数记号”的 6 页短文

第二递归定理诞生于 Kleene 1938 年发表于《符号逻辑杂志》(The Journal of Symbolic Logic)的一篇仅 6 页的短文《论序数的记号》(On Notation for Ordinal Numbers)[4]。这篇论文的主题表面上与"递归定理"毫不相干:

背景知识——序数(ordinal number):序数是"无限队列的长度"的数学化。数完 0, 1, 2, 3, …(全体自然数)之后,数学上允许继续数:第一个"超过所有自然数"的序数记作 ω,然后还有 ω+1, ω+2, …, ω⋅2, …, ω2, …, ωω, …,可以无限延伸。所有"能用可数步骤达到"的序数称为可数序数,它们的总体(第二数类)是不可数的。

Church 与 Kleene 在 1930 年代问了一个构造性问题:能不能给每个可数序数起一个"机械可读的代号"(自然数编码),使得仅凭代号就能机械地判断:这个序数是 0、是某个序数的后继(+1)、还是某个递增序列的极限?并且在后两种情况下能机械地取出前驱代号或序列代号? 满足这些条件的编码方案称为一个序数记号系统(Kleene 称之为 r-system)[4]。

Kleene 在论文的 §2 中建立了可计算函数的基本技术(编号、通用函数、§2.3的S函数),然后在 §2 的最后顺手陈述并证明了一个当时没有名字的定理[4]:

  • 若 ψ(z,x) 是任意可计算的部分函数,则存在一个数 f,使得 ϕf(x)=ψ(f,x) 对所有 x 成立(等号含义:两边同时无定义,或同时有定义且相等)。

  • 证明:设 e 是函数 ψ(S(y,y),x) 的编号,取 f=S(e,e) 即可。

——这就是第二递归定理的原始形态。Moschovakis说连Kleene自己都没有意识到,他发掘出的,是一颗珍贵的"小宝石"(little gem)[3];Kiselyov 则以"函数式珍珠(A Functional Pearl)"为题向函数式编程社区重新发掘了它[5]。

这颗"小宝石"随即在论文[4]的 §3 被用于证明该文的主要结果:存在一个"通用"序数记号系统 S1——任何其他合法记号系统能命名的序数,S1 都能命名,且翻译过程本身是可计算的[4]。这是"沿着序数逐层向上做递归定义"(后来称为有效超限递归,effective transfinite recursion)这一方法的首次应用。Kleene 由此构造出著名的记号系统 O(Kleene's O),并证明存在最小的一个"不可命名"的序数——Church–Kleene 序数 ,即image.png,它是可数序数中第一个无法被任何机械记号系统触及的序数[4][1]。

3.2 命名史

Kleene 本人始终只叫它 "the recursion theorem"(递归定理)——即使在他 1952 年的《元数学导论》(Introduction to Metamathematics)中两个定理同时出现时,也未加区分[3]。

Rogers (1967)在其经典教材第 11 章首次建议:在两个定理同台的语境中,把关于"函数变换规则的不动点"的定理称为第一递归定理(Rogers 书中 Theorems XI、XII),把 Kleene 1938 的定理称为第二递归定理(Rogers 书中 Theorem IV,Second Recursion Theorem,后文简称SRT,)[1]。Moschovakis 明确表示支持:"在允许投票的场合,我投票采纳 Rogers 的命名"[3]。

有学生曾问 Kleene,这个"短得可疑、巧得离谱"的两行证明从何而来(指Kleene 第二递归定理的证明,见SRT的证明)?Kleene(也许是开玩笑地)回答说他只是"拿着 s-m-n 的性质瞎鼓捣"("fiddled around with (b)")就给出了这个证明[3]。Moschovakis 评论说,这种"鼓捣"很可能受到 lambda演算(Church 与 Kleene 此前共同发展的形式系统)中类似对角线构造的启发。

3.3 一个值得铭记的教训

1944 年,Kleene 曾错误地宣称他构造的记号集 O 具有较低的逻辑复杂度(属于 image.png 类,即由全称和存在量词构成的命题所定义的集合),因为他把第二递归定理给出的某一个不动点,误当作了归纳定义所要求的最小不动点。事实上 O 的复杂度要高得多(它是image.png-完备),Kleene 直到 1955 年才纠正这个错误[3]。这个故事最生动地说明了:第二递归定理只保证"给你一个不动点",不保证给你"最小/最特殊的那个"——这正是它区别于第一递归定理的关键(见 4.4 与 5.8.6)。

4. 第一递归定理(FRT)

4.1 从“递归定义的函数”说起

编程中最自然的定义方式是递归:定义阶乘时写 `fac(n) = n * fac(n-1)`,等号右边出现了正在定义的函数自己。抽象地看,这类定义都在解一个"函数方程":

α=Ψ(α)

其中 Ψ 是一个"函数变换规则"(输入一个函数 α,输出一个新函数 Ψ(α);术语叫算子,operator)。例如阶乘定义对应的 Ψ 是:给定任意函数 α,输出新函数 α′,其中 α′(0)=1,

α′(n)=n⋅α(n−1)。

第一递归定理问的是:什么样的 Ψ 能保证方程 α=Ψ(α) 有解,而且解是可计算的?

4.2 定理表述

定义(可计算的变换规则):如果变换 Ψ 满足下面两条,就称它是递归算子(recursive operator):

1. 单调性:α⊆β(即 β 在 α 有定义的地方都有定义且取值相同)蕴含 Ψ(α)⊆Ψ(β);

2. 有限性/连续性:Ψ(α) 的每个输出只依赖 α 在有限个输入上的值。

直觉地说,第二条就是"机器在任何时刻只能查看有限多的已有计算结果"——这是"机械可执行"的数学化表达。阶乘、斐波那契数列、以及绝大多数程序语言中的递归定义都满足这两条[1]。

第一递归定理:设 Ψ 是递归算子,则存在函数 α 使得:

1. Ψ(α)=α(α 是方程的解,即 Ψ 的不动点);

2. 最小性:任何其他解 β 都满足 α⊆β(α 是"信息最少"的解);

3. 可计算性:α 是可计算的部分函数。

证明思路:从"处处无定义的空函数"出发,反复应用 Ψ:α0=∅,α1=Ψ(α0),α2=Ψ(α1),……。单调性保证这个序列不断"变长"(每次迭代只增不减);有限性保证最终收敛到一个函数 α,且 Ψ(α)=α;"每一步都是机械操作"保证 α 整体可计算。取所有 αn的并就是答案[1]。

例子:方程组 α(1)=2,α(2x)=2α(x) 对应一个递归算子,其最小不动点是:α(x)=x(当 x 是 2 的幂),其余输入无定义。注意"最小性"自动处理了定义不完整的分支——机器在"非 2 的幂"上自然发散[1]。

4.3 意义:递归定义的“存在性定理”

第一递归定理的角色,类似于分析学中用不动点定理(如 Banach压缩映射原理)证明微分方程解的存在性:它一劳永逸地保证"机械式递归定义必有可计算的解",从此定理出发定义递归函数时,我们无需逐个证明合法性。Rogers 指出,"递归定理"这个名字正来源于此——它是"解递归方程"的定理,类比集合论中沿序数递归定义函数的原理[1]。Kleene 本人甚至把第一递归定理视为支持 Church–Turing论题("可计算 = 递归/图灵可计算"这一哲学论题)的最强证据之一:它表明"可计算函数"这个类恰好封闭于最一般的机械递归定义方式之下,不多也不少[3]。

数学血统上,它是 Knaster–Tarski 不动点定理(序理论中"完备格上的单调映射必有不动点")在"可计算"约束下的有效化版本[1]。

4.4 与第二递归定理的关系

Rogers 证明了:第二递归定理(强)蕴含第一递归定理(弱)——存在统一的机械方法,把"函数层面的不动点问题"翻译成"代码层面的不动点问题",并且翻译后得到的不动点恰好是最小的[1]。反过来不成立:第五节中第二递归定理的应用几乎都无法由第一递归定理得到。因此两者中第二递归定理更基本、更强大[1]。

Moschovakis 还给出了一个统一形式:把"变换规则"同时允许依赖于"函数的编号"和"函数的值",所得不动点定理在两种极端情形下分别退化为第二递归定理(不依赖函数值)和第一递归定理(不依赖编号)[3]。

5. 第二递归定理(SRT)

5.1 三种等价表述

表述 A(Kleene 原始形式,1938):对任意可计算的部分函数 ψ(z,x),存在编号 f 使得对所有 x:

ϕf(x)=ψ(f,x)  (表述A)

即:存在一个程序 f,它在输入 x 上的行为,恰好等于"把 f 自己的编号当作第一个参数喂给 ψ"的行为。 程序 f 在某种意义上"知道自己的代码"[4]。

表述 B(Rogers 不动点形式,1967):对任意可计算的全函数 f(程序变换规则),存在编号 n 使得:

ϕn≃ϕf(n)  (表述B)

这里,符号≃表示的是函数的等价,即当左右两侧的函数在输入x上有定义时,则左右两边的函数值相等;当没有定义时,则左右两侧都没有定义函数值。Rogers 是这样解释该表述的:"Let f be any recursive function; then there exists an n such that ϕn=ϕf(n)."[1],意思是:f 拿着程序 n 的源代码算出一个新程序 f(n),而新程序与旧程序计算的是同一个函数[1]。

表述 C(带参数的强化形式):A、B 只断言不动点"存在",表述C 进一步保证:不动点能被程序机械地找出来,并且能随参数连续变化。设想变换规则额外带一个参数 y——用一个三元函数 ψ(e,y,x) 表示"编号为 e 的程序在参数 y 下的行为"。那么存在一个可计算的全函数 z:你输入 y,它就输出针对这个参数的不动点编号 z(y),使得:

ϕz(y)(x)=ψ(z(y),y,x)(表述C)

对所有 x 成立。此外还能要求:①不动点不止一个,而是无穷多个;②不同参数 y 给出不同的编号(z 是单射,即不同的输入对应不同的输出)[1][3]。

5.2 证明

这里列举两种本质上相同的证明方法。

5.2.1 一行对角线

以表述A 为例,全部证明如下:

首先,根据s-m-n定理,对于任意的编号为a的二元输入可计算函数,以及任意的自然数y,这个二元函数都等价于一个一元可计算函数:

ϕS(a,y)≃ϕa(y,⋅)

其中,S(a,y)为这个对应的一元函数的编码,它在任意输入x上的计算效果等价于编号为a的二元函数在输入y,x上的计算效果(当无定义的时候,两边同时无定义)。

其次,不难知道函数 ψ(S(y,y),x) 是可计算的(它只是把 §2.3 的柯里化操作 S 和 ψ 复合起来),所以它有编号,设为 e。令 f=S(e,e),则对任何输入 x:

ϕf(x)=ϕS(e,e)(x)=ϕe(e,x)=ψ(S(e,e),x)=ψ(f,x)∎

第一步是 f 的定义;第二步是s-m-n定理,即柯里化的应用(S(e,e) 就是"把 e 的第一个输入写死为 e");第三步是 e 的定义;第四步再回到 f 的定义。唯一实质操作是第三步前那个自应用 S(e,e):让程序 e 作用于自己的编号。 这就是对角线方法,也就是构造自指的方法——它与 Cantor 证明实数不可数、Gödel 构造"本句不可证"、Turing 证明停机问题不可解是同一种技术[4][1]。

图3:第二递归定理证明的三步拆解与对角线自应用的视觉化——核心动作就是让程序 e 在 S(e,e) 里"看见自己",从而闭合循环。

5.2.2 列表法(Cutland 1980):把"对角线"画成一张表

上面的一行证明把对角线方法压缩到了极致——好处是直接,坏处是看不出"对角线"长什么样。Cutland 在《Computability》[6] §2.3 (Theorem 2.3)中给出过一种更直观的列表法证明,用一张"行 = 枚举、列 = 位置"的二维表,把"对角线"和"沿对角线的循环"都画在纸面上。

这一方法分三步走。

  • 1. 把"所有可计算函数的枚举"摆成一张表

按 §2.2,每个可计算部分函数都有一个编号;所有这种编号的全体记作 {ϕk}。对任意"枚举函数" E(把一列编号映射成一列可计算函数),E 的第 n 项就是 ϕE(n),即"编号为 E(n) 的程序"。现在考虑所有"可计算函数的枚举"——它们每一个都是某个可计算函数 h。Cutland 把它们自身也排成一张表:用编号为 k 的程序 ϕk 自己去枚举,得到

——双重编号image.png。把 E0、E1、E2、… 并排写下来就是一张二维表(图 6 的上半部):每行 Ek 是一个枚举、每列 n 是"该行第 n 个值"、每格是某个具体的可计算函数。这张表把"枚举可计算函数的所有方式"完整地、不重不漏地列了出来。

  • 2. 对角线枚举D

把这张表沿主对角线的格子圈出来——它们正是

D 仍然是一个可计算的枚举:由 h(x)=ϕx(x) 给出(图 6 黄底一行的"沿主对角线")。它满足一个关键性质:

——因为 Ek 的第 (k+1) 项 = image.png,而 D 的第 (k+1) 项 = image.png,两者恰好对得上(图 6 右侧红字注释)。

  • 3. 沿 D 把 f 套进去,得到 f 的不动点

设 f 是任意全可计算函数。沿 D 的每一项先用 f 得到新的程序编号(源代码),再去取对应的可计算函数,得到另一个枚举:

D∗ 也可计算(由 f(h(x)) 给出)——既然 D∗ 本身也是"枚举可计算函数"的一种方式,它必然是表里某一行 Em。这正是循环闭合的地方:套用 f 之后,必然撞回表内。

取 k=m:D∗=Em,所以D∗的第(m+1)项 =Em的第(m+1)项 =image.png。而D∗的第(m+1)项由定义也是image.png

Cutland 用 Lemma 2.1 把"第 m 行"调整成全的(即 ϕm 是全函数),所以 ϕm(m) 是一个良定的自然数 n。设 n=ϕm(m),则:

n 就是 f 的不动点 ∎[6].

与"一行证明"的关系:§5.2.1 的证明把表上 D∗=Em 的循环直接写成 ψ(S(e,e),x) 的柯里化形式——h(x)=ϕx(x) 对应"e= 编号(ψ(S(y,y),x))",S(e,e) 就是用自应用把表上的对角线点亮;列表法只是把这一行在表格里完整地展开。两者本质相同:列表法暴露了"为什么沿对角线循环必会撞回表里"——每行 Ek 都被对角线穿一格,循环天然闭合。

图6:Cutland (1980) 列表法证明的视觉化。上半:四行四列的"枚举之枚举"表 E0,E1,E2,⋯,Ek,每格填 image.png;主对角线(红圈)上的格子构成对角枚举 D。黄底 D 行:把对角线上的格子抽出,得到 image.png。D∗ 行:把 f 套到 D 上得到image.png——可计算 ⇒ 必是某行 Em。绿框:取 k=m 撞上 Em,得 image.png,再设 n=ϕm(m) 即得 ϕn≃ϕf(n)——f 的不动点。

5.3 直观图景:程序如何"谈论"自己的代码

递归函数即可计算函数。然而,我们接触到的大部分程序都是使用字符串来编码,而并非使用自然数。这就使得初学者会对函数或程序的编码非常困惑,而第二递归定理(SRT)本身就是建立在两套编码对应的函数功能等价的基础之上的,因此造成很多的理解困惑。

实际上,一个递归函数,或可计算的图灵机程序,既可以被编码为自然数,又可以被编码为字符串,也就是源程序代码,二者本质上等价。要建立这种等价关系,我们只需要按照字典序为所有可能的字符串做自然数编码就可以了,于是任何一个字符串都对应了一个自然数,反之自然数也可以对应回字符串。这样,所有关于SRT的结论都自然能够平移到我们熟悉的以字符串对应函数编码的程序世界里。

程序世界里SRT的一个最简单的对应物就是Quine程序,即“打印自己源代码”的程序。

例 1(Quine,Python 版)〔示例取自 Wikipedia "Quine (computing)"[7];与 SRT 的关系见 Kiselyov[5], §2〕:所谓 quine 就是"打印出自己源代码的程序"。第二递归定理断言:这样的程序必然存在。下面这个 Python 程序就是教科书级的 quine——运行它,会原样打印出它自己的源码:

它的机制很简洁:字符串 `c` 本身是一个"打印模板"——`%r` 会带上引号打印出 c 自己的内容,`%%` 是格式化转义符(输出为单个 `%`)。于是 `print(c % c)` 打印出的结果,恰好就是这个程序的全部源码。程序把自己的源码当作数据、再把它打印出来——这正是第二递归定理"程序合法地引用自己的代码"在程序语言里的最小实现[7][5]。

把 Print 换成任意可计算操作 f:quine 是 SRT 在 f = Print 上的特例。上面那个 quine 里的 `print(c % c)` 可以立刻换成任意可计算操作。看下面这个程序——它不再"打印自己",而是"先把自己的源码施加一个变换 f、再打印结果"(这里 f = "给每一行加上行号"):

`c % c` 仍然是"自己的源码",但最后一行不再是 `print(c % c)`,而是 `print(f(src % src))`——也就是先调用 f 处理自己的源码、再打印结果。这个程序满足:c 的行为 = "对 c 的源码施加 f、再打印"的行为。

——用公式写就是 ϕc=ϕf(c)(ϕc 是程序 c 当作可计算函数看时的整体行为)。把上面那个 f 换成别的——比如"统计字符数"、"对源码求 SHA-256(一种密码学中的哈希函数)"、"把字符串大写"、"把源码上传到某服务器"、"什么都不做只返回自己"——只要 f 是可计算的全函数,满足 ϕc=ϕf(c) 的不动点程序 c 就必然存在。这正是 SRT 所承诺的内容:quine 是 SRT 在 f= "Print" 这一个特例上的推论,SRT 则是 quine 在 f= "任意全可计算函数"上的推广。Kiselyov 在分阶段 λ 演算里把这一观察形式化为"quine = f = id 的不动点、twine(两程序互相打印对方)= f = 另一程序编号映射的不动点、trade 谜题 = f = 投影函数对的不动点"[5]。

SRT 的证明,本身就是一个 Quine 构造——而且方向和 quine 完全相同。再回看 §5.2.1 那一行证明——给定 f,构造 ψ(x)=ϕS(x,x)(其中 S 把 f 与"自应用"组合起来),取 e 满足 ϕe=ψ,再对 ψ 套 SRT 取不动点——会发现它和 quine 是同一种构造,差别只在目的(执行层面 vs 输出层面)。两边共用同一种"自指核心动作"——让程序合法地把"自己的表示"当作输入:

也就是说,SRT 证明与 quine 不是"互逆",而是同构——两者都是"先有一个具体的全可计算函数 f、再造一个不动点程序 c 满足 ϕc=ϕf(c)"。SRT 真正比 quine 强的地方只有一点:它证明了"先有 f、再造 c"这种构造对所有全可计算 f 都成立,而 quine 只演示了 f= Print 一个特例;SRT 给的不是"一个程序",而是"对每个 f 都有一个程序(f 的不动点 c)"这样的普遍性陈述。这也解释了为何 SRT 在可计算性文献中被称为"second recursion theorem"——它把"quine 这种特例的构造手法"摆到了"自指可计算函数的普遍刻画"这一位置,把 quine 从"程序员的奇技"升格为"任何合理程序系统都封不住自指"的元定理。

例 2(自我命名的集合)[1]:是否存在程序 n,它所列出的集合恰好是单点集 {n}——一个枚举出自己编号的程序?直觉上这像是编号系统的"巧合",但取变换规则 f 使得"程序 f(x) 恰好输出单点集 {x}"(这样的 f 显然可构造),应用表述B 即得 ϕn=ϕf(n),即 Wn={n}。而且这个结论对任何合理的程序编号系统都成立——它不是编号的巧合,而是编号的必然。

自指的机制(Rogers 的精辟分析)[1]:不动点程序 n 作为一段指令,并不包含它自身的全文(这不可能,句子不能比自身还长),而是包含一份"如何重建自身"的配方——"先算出我的代码,再执行它"。这与 Gödel 在证明不完备定理时发明的"替换函数"(substitution function,把一个公式的编号代入公式自身)是同一种机制。自然语言中的对应物是这个短语:

    "the result of substituting 'the result of substituting "x" in "x"' in 'the result of substituting "x" in "x"'"  
    (把 "把 x 代入 x 的结果" 代入 "把 x 代入 x 的结果" 所得到的结果)

    ——按规则展开后,这个短语恰好指称它自己[1][3]。

    5.4 其它形式的第二递归定理

    5.4.1 Uniform 形式

    Uniform 不动点定理:存在一个全可计算函数r(在标准编号下甚至可以取原始递归的),使得对每一个编号e:

    四个需要解释的点:

    • 该定理的输入e是在第二递归定理的表述A中ψ本身的编号。在SRT的所有表述中,ψ 都是“给定的”:表述A对给定的 ψ 断言不动点存在;表述C 让不动点随参数 y 一致变化。Uniform 版的方向不同——它让不动点随 ψ 的描述(编号) 一致变化:r 是一个“自指编译器”,你喂给它任何一个二元程序的编号,它返回那个让 ϕe(·,·) 自我指涉的程序编号。

    • 为什么称该定理为Uniform的?数学中,一个性质或定理的表述可以看作是某一个参数的函数,就称为Uniform的(一致的)。第二递归定理的表述A显然是一种非Uniform的形式,因为它孤立地依赖于函数ψ。而Uniform形式的递归定理则将定理所表述的性质看作是编号e的函数,所以是Uniform的。

    • 无条件的全称命题。注意陈述里没有“若 ϕe 可计算”之类的前提——对一切 e 都成立。e号程序在 (r(e),x) 上不停机时,两边同时无定义,等式照样成立。这跟“不动点自由的函数必须是不可计算的”(Arslanov 判据)是一体两面:r 是全的,所以没有可计算函数能躲开它。

    • 该定理的证明如何构造?把 §5.2 展开版证明逐步查一遍——第 0 步用 s-m-n 造 a 的编号(原始递归操作),第 2 步 f=S(e,e)(S为原始递归的)——每一步都是编号上的原始递归运算。所以复合了f出来的 e 就是这里的 r,原始递归。这也是为什么说 Kleene 1938/1952 的原始证明“实际上已经是 uniform 的”:证明即算法。

    不难理解,表述B也可以改写为Uniform的形式:

    • 存在全可计算函数r,使得对任意的自然数n,如果ϕn全可计算,则:

    不难看出,这里的n就是表述B中的f的编号。这样表述B就可以自然变成上式的形式。

    5.4.2 Smullyan双递归定理

    SRT 的联立推广:对任意两个可计算函数 g, h(不一定要求是全函数),存在两个程序的编码 m,n 使得

    ——两个程序可以互相引用对方的代码,其中⟨m,n⟩代表将两个自然数编码为一个自然数的编码方式。

    由于这个Smullyan双递归定理是 SRT 的"二元推广",因此我们可直接由 SRT 的证明套用:

    1. 根据带参数的 SRT 造"第二号程序":把"程序算 h(⟨z,u⟩,x)"看成带两个参数 z,u 的偏可计算函数,先由 s-m-n(§2.3)把 z 写死,再套 SRT,得到一个全可计算函数 n0,对每个 z 都满足image.png;

    2. 再由 s-m-n 造"第一号程序":令 f(z) 为"算 g(⟨z,n0(z)⟩,x) 的那个程序"——由于 n0 全且可计算,f 也是全可计算的;

    3. 对 f 套普通 SRT:得到不动点 m,令 n=n0(m)。于是 ϕm(x)=g(⟨m,n⟩,x)(SRT 的直接结论),且 ϕn(x)=h(⟨m,n0(m)⟩,x)=h(⟨m,n⟩,x)(n0 的定义)。

    注意 g,h 的"全性"从头到尾没有被用到——需要全函数的只是辅助构造 n0 与 f,而它们的全性由 s-m-n 定理和 SRT 保证。这正是定理对偏函数照样成立的原因。

    该定理也可推广到 k 元情况:对任意 k 个全可计算函数 g1, …, gk,存在 k 个程序 m1, …, mk 使得 image.png。

    双递归定理是后续许多重要构造的核心:① §5.8.3 介绍的"两层超算术构造"里,Spector定理需要同时构造两个互相缠绕的函数;② Myhill-Shepherdson定理(§5.8.6 简述)描述"如何用 r.e. 集作为其它 r.e. 集的有效操作"时也需要联立不动点;③ 某些停机问题的"相对化"证明也走双递归路线[8][1].

    另外,值得一提的是,这个双递归定理以及对应的n递归定理的推广形式,实际上可以看成是多个部分互相指涉,互相依赖的形式,由此自指构造可以走向分布式构造。

    5.4.3 算子递归定理(ORT)

    算子递归定理(operator recursion theorem,简称 ORT)是第二递归定理的"无穷化"推广,由Case在研究自复制自动机时提出[9]。它把自指的对象从一个程序升级为一整个可计算的程序族。

    算子递归定理:设 Θ 是一个可计算算子(即由图灵机实现的、把(部分)函数映为(部分)函数的映射:算子通过函数图像的有限片段与被作用函数交互,因此也能作用于不可计算的函数),则存在一个全可计算、严格单调递增的函数 e(p),使得对所有 p:

    与第二递归定理(表述A)对比,有两处关键升级:

    1. 从一个不动点到一个互引家族。e(p) 的每个成员 e(0),e(1),e(2),… 都在"照镜子"——但镜子里不仅有它自己,还有整个家族。单调递增性进一步保证这些编号两两不同。

    2. 直接工作在函数层而非源代码层。表述B 的对象是"程序变换"(对源代码的机械改写),而 ORT 的对象是可计算算子——它可以利用被作用函数的任何可计算信息,即便这个函数本身不可计算。这使 ORT 能表达"程序知道一个不可计算对象的可计算近似"这类构造。

    ORT 可以由第二递归定理推出,因此二者在经典可计算性理论中等价;但 ORT 的表达形式在归纳推断(algorithmic learning theory,Gold 风格的可学习性理论)中远为顺手——从 Blum, L. 与Blum, M. 1975 年的奠基工作起[10],学习理论中需要自指构造的证明几乎都以 ORT 为标准引用形式[9][11]。Case 本人后来写了一篇教学性综述,用"程序先制造自身的静默副本再运行给定的使用方案"的意象讲解无穷自指的用法[11]。

    5.5 推论:SRT 衍生出的若干重要结果

    SRT 不是孤岛,但也不能把整片大陆都记在它名下。本节收录两条真正以 SRT 为证明枢纽的结果——它们的证明都必经 SRT,称"推论"名副其实:

    • Rogers 同构定理——SRT 的"编号独立性"推论:任意两个通用程序枚举之间必有保结构的可计算同构;

    • Arslanov 完全性判据——相对化 SRT 的"刻画性"等价定理:一个 r.e. 集何时是 r.e.-完备的。

    5.5.1 Rogers 同构定理(1958)

    任意两个通用程序枚举(即枚举出所有可计算函数的程序编号系统,详见 §2.2;下称 ϕ 系统与 ψ 系统)之间,必然存在一个可计算同构image.png——一部双向都可计算的"翻译词典",把 ϕ 系统里的每个程序号 e 送到 ψ 系统里的程序号 ρ(e),并且 保 ϕ 等价、保 W 等价。这两个"保…等价"是说:这部词典不改变任何行为事实。逐个拆开看:

    • ϕ 等价:同一编号系统内,若两个程序 e1、e2 计算的是同一个(部分)函数(image.png,§2.1),就说它们 ϕ等价——编号只是程序的外衣,算出的函数才是实质。

    • 保 ϕ 等价:要求对每个程序号 e 成立 ϕe≃ψρ(e):e 在 ϕ 系统里算什么函数,ρ(e) 在 ψ 系统里就算同一个函数。于是"算同一函数"的程序对,翻译后依然是"算同一函数"的对。

    • W 等价 / 保 W 等价:We 是程序 e 的定义域——会让它停机的输入集合(§2.4)。两个程序 W 等价指image.png(接受的输入一模一样);保 W 等价指翻译也不破坏这层对应。由于词条约定 We=dom(ϕe),"保 ϕ"已自动带出"保 W";Rogers 原版把两层并列,是因为他的框架允许"函数枚举"与"r.e. 集枚举"彼此独立(§5.8.5 索引集的image.png用的正是独立于 ϕ 的 W 层)。

    直觉上:两个不同的程序编号系统乍看像不同的语言(一个把 quine 编号成 42,另一个编号成 100),但实质上说的是同一类对象;Rogers 定理说它们之间必有可计算的"翻译词典",且词典严格保结构。

    证明思路:把"取 f(c) = 在另一编号系统下对应于 c 的程序编号"作为变换规则,对它套 SRT 得到不动点 c——c 就是翻译词典的种子;之后逐条验证它保 ϕ、W 等价性。Rogers 同构定理常被引用作"程序编号系统的选择不影响可计算性理论"的根据——你可以挑任何合理的编号方式,得出的可计算性结论都一样[1]。

    5.5.2 Arslanov 完全性判据(1981)

    SRT 的相对化版本所给出的等价刻画:r.e. 集合 C 称为 r.e.-完全,当且仅当满足下面这一性质:

    • 对每个 r.e. 集合 W,存在一个可计算函数 fW 使得 W≤TC 通过 fW这里一下子出现了三个新名字,先逐个解释:

    • r.e. 集合:见 §2.4。本词条统一用缩写 r.e.(recursively enumerable,递归可枚举)。

    • r.e.-完全:r.e. 集合这个"复杂度类别"里"最硬核"的一档——任何别的 r.e. 集合 W都能机械地归约到 C,判定"W 含 x"等价于"问 C"。

    • Turing 归约 / W≤TC 通过 fW:A能Turing 归约到B(记A≤TB),意思是"只要允许把B当神谕(oracle,下一条解释)——可以向它提任意多个 yes/no 问题并瞬时得到回答——A就能被判定"。不等式W≤TC通过fW即"编排提问方式的过程由可计算函数fW给出,它把x改写成若干个向C 的查询并综合出答案"。

    直觉上:Arslanov 判据说"装得下所有 r.e. 集合"等价于"对每个 r.e. 集合都有机械的相对化方式"——这和 SRT 中"对每个全可计算 f 都给出一个不动点"的相对化版本(relativized SRT)说的是同一件事:SRT 的相对化是说"对每个以 C 为神谕(oracle)可计算的 f,存在不动点 c";Arslanov 判据说"对每个 W,存在以 C 为神谕可计算的归约"。

    Arslanov 判据在递归论里是教科书级工具:①用于证明 Gödel 不完备定理的算术陈述("PA不一致"这种陈述)的相对可计算性与停机问题同构;② 用于证明某些 r.e. 集"不可能被简化"[12][13] 。

    5.6 与其它不动点定理的关系

    SRT 衍生出许多重要推论(见 §5.5),但还有些定理与 SRT 的关系更微妙——它们与 SRT 同源(都基于对角线 / 自指),却走的是独立证明路线,或者处于更高层的范畴论概括下,或者是在lambda演算的框架下。这里集中讨论两个最重要的"不动点定理":Gödel 的不动点引理与 Lawvere 的范畴论的不动点定理,以及lambda演算中的Y组合子,重点说明 SRT 与它们的精确定位关系。

    5.6.1 Gödel 不动点引理(对角引理)

    对任何包含足够算术的递归可公理化理论 T,对 T 中任何公式 ϕ(x),都存在一个"不动点句子"ψ,使得 T 可证 ψ⟺ϕ(⌜ψ⌝)。它的证明手法(对角线替换)与 SRT 同源,但 Gödel 早在 1931 年就独立给出了完整论证。但值得指出的是,SRT 推不出 Gödel 自身的不完备定理。有关 Gödel 不完备定理的全部内容(一致性、ω-一致性、不可判定性三层)见 §5.7.4 的详述。

    注:Gödel 不动点引理本身是 SRT 最干净、最纯粹的推论(既可以把 SRT 当证明工具来证它,也可以两边都用"自指 + 对角线"的同源手法独立证明)。它和 SRT 的关系是"同源、互为推论";但 Gödel 不完备定理 与 SRT 的关系则另当别论,见 §5.7.4 的"双重身份"分析。

    5.6.2 Lawvere不动点定理

    Lawvere不动点定理(也称为Lawvere对角线定理,1969年提出[14])是范畴论中统一刻画对角线自指与不动点现象的基础定理。它表明,只要一个笛卡尔闭范畴中存在对函数族的通用编码机制,那么输出对象上的所有自变换都必然存在不动点。

    5.6.2.1 定理陈述

    设 C 为任意笛卡尔闭范畴(Cartesian closed category, CCC),A 和 Y 是 C 中的任意对象。 如果存在弱点满射态射:

    (即对每一个态射 f:A→Y,都存在点 x:1→A,使得 x 与 g 的复合恰好是 f 对应的指数对象点 ⌜f⌝:1→YA,这里YA为指数对象,包含了所有从A到Y的态射), 则对象 Y 具有不动点性质:对任意自态射 t:Y→Y,都存在点 y:1→Y,满足:

    t(y)=y

    其逆否命题等价于:若 Y 上存在没有不动点的自态射,则不存在从 A 到 YA 的弱点满射。

    5.6.2.2 直观解释

    笛卡尔闭范畴的核心特征是函数空间本身可以作为范畴内的对象被处理,这使得“用论域元素给函数编码”的自指结构可以被形式化。 定理的核心洞察是:只要论域 A 足以编码所有从 A 到 Y 的函数,那么 Y 上的任何全局变换都无法避免不动点。这种结构是跨领域通用的:可计算性理论、数理逻辑、集合论中的所有经典对角线结果,都是这一抽象定理的具体实例。

    5.6.2.3 与SRT的对应

    第二递归定理(Second Recursion Theorem, SRT)是Lawvere不动点定理在部分递归函数范畴中的具体实现。二者的对应关系如下表所示:

    Lawvere定理与SRT的对应

    关系定性:

    • Lawvere 不动点定理不是 SRT 的"推论"(该定理没有反推 SRT,而是反过来把 SRT 概括出来);

    • Lawvere 也不仅是 SRT 的"更高层次表述"(它是数学基础层面的定理,把 SRT、Gödel 不动点引理、图灵停机问题的不可判定性、罗素悖论、康托尔对角线全部统一为这一个抽象结构的不同侧面);

    • 因此应避免两种过度描述:①"Lawvere 推翻了 SRT 的独立性"(错,它们不在一个抽象层);②"SRT 是 Lawvere 的特例,所以 SRT 的定理就是 Lawvere 给出来的"(错,Lawvere 是更高层的解释,不是 SRT 证明的工具;SRT 证明仍然是 §5.2 的对角线论证)。

    对读者的现实意义:如果你做的是程序语义、形式化验证、自指系统、AI反思架构等领域,理解 Lawvere 框架能让你看清为什么"自指"在这些领域无处不在——而不是递归论特有的怪癖。但若你只想用 SRT 构造自指程序做现实计算,§5.2 的对角线证明就是你所需要的——Lawvere 对那条一行的构造不增加任何可计算内容。

    5.6.3 与Y组合子的关系

    lambda演算(Church 1930 年代发明的、Lisp 等函数式语言的祖先)中有一个著名对象 Y 组合子:对任何函数 F,YF=F(YF),即 Y 直接生产出 F 的不动点,纯函数式地实现递归——它让匿名函数也能"引用自己"。

    Kiselyov 在分阶段 λ 演算(staged lambda-calculus,区分"代码"与"值"两个阶段的现代元编程框架)中重构了第二递归定理,得出一个漂亮的结论:第二递归定理就是 Y 组合子的"带代码"推广——Y组合子给出函数层面的不动点,SRT 给出"程序 + 自身代码"层面的不动点;当把"代码"取为平凡编码(程序即自身)时,SRT 的构造精确退化为 Y 组合子[5]。

    这一视角澄清了 SRT 对计算机科学的意义:它陈述的是"任何合理的程序系统对自指构造封闭",是把高阶操作(程序变换)降阶到数据层面(编号)的不动点原理——部分求值(partial evaluation)、编译器自举(bootstrapping)、宏系统的理论基础。

    5.7 SRT与自指

    第二递归定理最直接、也最让人着迷的威力,是它一劳永逸地解释了"自指"现象为什么合法。但要先澄清一个容易混淆的关键点:这些里程碑可以从两个正交的维度来理解——

    • 结论的性质:是"否定性"(证否某物不存在:Cantor、Russell、Turing、Gödel),还是"肯定性"(证实自指对象存在:自复制、quine、SRT 本身);

    • 结论适用的领域:纯集合论(SRT不适用),还是程序 / 可计算世界(可以用SRT)。

    两个维度交叉,得到下表:

    由此看清每个现象的双重身份:图灵停机问题、哥德尔不完备定理在"风格"上是否定性自指(与 康托尔不可数问题、罗素悖论同类),但它们活在程序世界,所以又能被 SRT 事后统一推出;康托尔不可数问题、罗素悖论位于纯集合论世界,SRT 造不出"实数"或"集合",只能算同源但独立。下面逐个讲清楚。

    5.7.1 康托尔对角线论证(1891)

    现象:实数集不可数。假设每个实数都被编号 0,1,2,…;定义一个新实数,令它的第 n 位小数与"编号 n 的实数"的第 n 位小数都不同。这个新实数不在原表里——矛盾[15]。

    与 SRT 的关系:同源,但独立。两者做了同一件事——取"第 i 个对象在第 i 个位置上的值"(对角线):康托尔取"第 i 个实数的第 i 位小数",SRT 取"第 e 个程序在输入 e 上的值"ϕe(e)(即证明里的 S(e,e))。但方向相反:康托尔取对角线后改动它,制造一个"不在表里"的对象,从而证明实数不可数;SRT 取对角线后固定它,得到一个"引用自己编号"的程序,从而证明自指程序存在。注意,SRT 推不出 康托尔定理——SRT 的结论都活在"程序 / 可计算"的世界里,给不出"实数不可数"这种纯集合论命题;两者只是共享了同一个技巧[15][3]。

    5.7.2 罗素悖论(1901)

    现象:考虑image.png(所有"不属于自己"的集合组成的集合)。问 R∈R 是否成立?若 R∈R,则按定义image.png;若image.png,则按定义 R∈R。两边都矛盾,这个悖论动摇了朴素集合论[16]。

    与 SRT 的关系:同源,但独立。罗素悖论也是"把谓词'不属于自身'同时用于所有集合"的对角线操作,和 SRT 共享同一个技巧,但 SRT 同样推不出它——它是朴素集合论内部的问题,不涉及程序。真正值得注意的,是 Rogers 指出的一个类比:把"集合"换成"可枚举的集合 We"、把"∈"换成"e∈We",就得到image.png——K 可枚举、其补集不可枚举。而"K 的补集不可枚举"恰好等价于停机问题不可判定(见 5.7.3),后者才是 SRT 真正推得出来的。换言之,"停机问题不可判定"可以看作"递归论版的罗素悖论",但罗素悖论本身与SRT只是同源关系[16][1]。

    5.7.3 图灵停机问题(1936)

    现象:不存在算法 H 能判定"任意程序 e 在任意输入 x 上是否会停机"。这是可计算性理论第一个、也是最著名的"不可判定"结果[17].

    双重身份:停机不可判定在结论性质上是否定性的(证明"判定器不存在"),与康托尔、罗素问题同类;但因为它活在"程序"世界,又能被 SRT 推出。下面展示完整的"套用"过程——这是所有例子里最干净的一个,最能看清 SRT 到底在哪里发力。

    套用 SRT 造否定性自指程序的完整演示:

    1. 假设存在判定器 H(H(e,x)=1 表示"程序 e 在输入 x 停机",=0 表示不停机)。

    2. 写出"想要的行为",把"自己"写成参数 z:我们要一个与 H 唱反调的捣乱程序——"如果 H 说程序 z(在输入 z 上)会停机,我就死循环;如果 H 说不停机,我就立即停机"。写成可计算规则:ψ(z,x)=若H(z,z)=1,则发散(死循环);若H(z,z)=0,则输出0(立即停机)。

    3. 套 SRT:存在编号 f,使 ϕf(x)=ψ(f,x)。SRT 在这一步把参数 z 换成了 f 自己,循环闭合:ϕ

    4. 代入 x=f 制造矛盾:若 H(f,f)=1(H说"f在输入f停机"),但此时ϕf(f)发散——H判错;若H(f,f)=0(H说不停机),但此时ϕf(f)=0停机——H又判错。于是H无论如何都错→H 不存在。∎

    关键就在第 3 步:ψ 里用的是参数 z(可以正常定义),SRT 把它换成 f 自己——没有 SRT,"ϕf 的行为取决于 H 对 f 的判决"就是非法循环定义,写不出来。SRT 的全部威力,就是把这种循环合法化:你只管把"自己"写成参数,存在性交给定理[3][1]。

    4.7.4 哥德尔不完备定理(1931)

    哥德尔不完备定理(简称哥德尔定理)指出:任何"足够强"的一致可公理化理论 T(例如 Peano 算术,简写为PA)都不完备:存在一个句子 σ,使 T 既证不出 σ、也证不出 ¬σ[18]。

    • 术语解读:皮亚诺算术(PA)与 罗宾孙算术(Q):

    • PA是 Peano 算术(Peano Arithmetic)的缩写,是一阶算术的标准公理系统,用于形式化刻画自然数(0,1,2,…)及其加法、乘法。它由意大利数学家皮亚诺(G. Peano(1889))的公理发展而来,包含:①常元 0;②后继运算 

    S(每个数有唯一后继,0 不是任何数的后继,后继相同则原数相同);③加法、乘法的递归定义;④归纳公理模式(induction schema:对任何一阶公式 ϕ,若 ϕ(0) 成立、且 ϕ(n)⇒ϕ(n+1),则 ϕ 对一切自然数成立)。PA 是哥德尔不完备定理的典型对象——它足够强(能在内部编码所有初等数论),又是可公理化的一致理论。

    • Q(罗宾孙算术)是皮亚诺算术的一个弱化:保留①—③、去掉归纳公理模式,只留极有限的几条公理,是"足以推出不完备定理的最弱理论"之一(后文 Myhill定理即用它)。

    与SRT的关系:与停机问题一样,哥德尔不完备定理在结论上是否定性的(证明"完备一致的理论不存在");哥德尔在1931的原证明走的是康托尔/罗素的否定性对角线老路、并不依赖 SRT。但因为它属于"形式系统可证性"这一可计算的世界,因此人们事后也能从 SRT 干净地推出它。这一推导的核心是不动点引理(Fixed Point Lemma),它是 SRT 最纯粹形式的直接推论:

    • 不动点引理:设 T 是任何足够强的可公理化理论,则对任何含一个自由变量的公式 θ(v),都存在句子 σ,使 T 可证 "σ⟺θ(⌜σ⌝)"(⌜σ⌝ 是 σ 的哥德尔配数)。即:任何性质 θ,都存在一个句子 σ,在 T 可证的意义下恰好谈论"自己是否具有 θ"[3]。

    • 证明:取 θ(v)= "v不可证",由不动点引理得σ⟺"σ不可证"。若σ可证,则它说的是真话(我不可证),矛盾;若¬σ可证,则"σ可证",又矛盾。于是σ与¬σ都不可证——不完备定理成立。把θ换成Rosser的精巧变体,还能去掉"ω-一致性"这个额外假设,得到Rosser 强化[18][3]。

    • Myhill定理(1955):罗宾逊算术 Q 的任何一致、可公理化扩张 T,其定理集都是创造集(见 §5.8.5.2),从而是 r.e.-完备的[3].

    合起来我们可以得到一个惊人结论:所有足够强的一致公理化理论(皮亚诺算术、ZFC公理系统……)都自动满足不动点引理的条件,因而都不完备、不可判定;而且任意两个这样的理论,其定理集在递归同构意义下完全相同[3]。

    Rogers 还讨论过一个反向的自指:可以构造一个公理系统,其中包含断言自身一致性的句子(对任何公理集 Wp,存在 n 使 Wn=Wp∪{⌜Wn 一致⌝})。但 Gödel 第二不完备定理说明:若 Wp 已含皮亚诺算术,这个"自信"的系统反而不可能一致[1]。

    5.7.5 冯诺伊曼的自复制自动机(1948)

    图4:自复制机的闭合回路——机器 M 的蓝图描述了 M 的全部部件(构造器 A、拷贝器 B、控制器 C);启动后 A 读蓝图 →造出 M 的新副本、B 复制蓝图、C 把它们组装起来。SRT 保证存在这样的蓝图,让有限指令即可闭合循环(驳斥了"蓝图之蓝图无穷倒退"的谬误)。

    早在20世纪40年代,冯诺伊曼就开始思考一个问题,是否能在物理上构建一台自复制的自动机器。为了回答这个问题,冯诺伊曼采纳了其好友——数学家乌拉姆(Stan Ulam)的建议,开始在一个具有29个状态的二维元胞自动机上构建这样的虚拟机器,这就是冯诺伊曼的自复制自动机。这台机器的设计方案含四部分:通用构造器 A(读入一段指令,构造出该指令描述的任何机器)、通用拷贝器 B(复制指令)、控制器 C(指挥 A 与 B 协同运作、并把指令传给新机器)、以及一段描述 A、B、C 三者如何组合的蓝图(即指令带);机器 M=⟨ A, B, C, 蓝图⟩ 启动后能造出 M 自己的副本[19][20]。

    SRT 如何推出它:

    • 定理(自复制图灵机):存在一台图灵机,从空白纸带出发,停机时纸带上恰好写着它自己的完整描述(转移表)[3]。

    • 证明思路是 SRT 的典型用法:定义 ψ(z) = "把编号 z 的机器的描述打印出来"——这是一个完全机械、与"谁被打印"无关的变换,因此可以套用SRT。SRT 给出不动点 f:程序 f 的行为 = 打印 f 自己的描述。循环凭空闭合。

    Rogers 给出更一般的框架:只要存在一台"通用建造机"(即 von Neumann 的 A 的抽象——给蓝图就造机器),就必存在一台机器,无论输入什么都造出自己的副本[1]。这直接驳倒了"自复制不可能"的谬误论证("复制需要蓝图,蓝图又需要蓝图的蓝图,无穷倒退"):SRT 表明系统能用有限指令闭合这个回环[1]。

    5.7.6 Quine(自打印程序)

    现象:一个不接受任何输入、只打印出自己源代码副本的程序[7]。它的约束很苛刻——不能读自己的源码(靠读文件输出自己、如 `cat $0`,被视为"作弊",不算 quine),只能靠"代码部分 + 代表代码文本的数据部分"来构造性地打印自己;§5.3 例 1 的 Python 程序就是一个标准 quine。"quine" 一词由 Hofstadter 在《哥德尔、艾舍尔、巴赫》中普及(借自哲学家 W. V. O. Quine 的名字,他构造过自指的句子)[21]。

    SRT 如何推出它:把 SRT 里的变换规则 f 直接定义:"打印"程序——f(c)= "打印出 c 的源码的那个程序"。套用 SRT(ϕc=ϕf(c))得到不动点 c:

    也就是说,程序 c 的行为 = 打印出 c 自己——这正是 quine。所以 quine 就是"取 f= Print 程序、再套 SRT"的一行产物。Kiselyov 在分阶段 λ 演算里形式化地证明,quine、twine(两个程序互相打印对方)、trade谜题都是 SRT 的不动点[5].

    5.7.7 自省程序与自省式自改进程序

    自省程序(introspective program):比 quine 强得多的自指——它能在运行"看到"自身(或自身的有界近似),并据此修改、调整自己的行为。Lisp 的 `eval`、Python 的 `inspect`/反射、调试器、动态语言的元对象协议都是它的化身。

    这一思想最早是 Cutland 在 Computability: An Introduction to Recursive Function Theory(1980)§1.9 中以 ψ-内省/全ψ-内省 之名给出严格定义,并证明其存在性的(定理 1.9)[6]。他关于 ψ-分析与全ψ-内省的原话是:

    假设给定一个全可计算函数 ψ和一个程序P。所谓P(x)计算的ψ-分析(ψ-analysis),是指P(x)计算到ψ(x)步的那段计算的代码。称程序P在x上是ψ-自省的(ψ-introspective atx),若P(x)收敛并把它自己的ψ-分析作为输出;若P在所有x上都是ψ-自省的,则称为完全 ψ-自省的(totallyψ-introspective)。

    • 定理 1.9:存在一个程序 P 是完全 ψ-自省的。

    • 证明:直接对可计算函数 f(e,x)=σ∗(e,x,ψ(x)) 应用推论 1.4(SRT 在 Cutland 体系里的等价形式,ϕc=ϕf(c) 的不动点形式),得到一个不动点 n 使得:ϕn(x)=f(n,x)=Pn(x) 的 ψ-分析。□

    其中 σ(e,x,y)是 Cutland 引入的有界通用函数——输出"程序e在输入x上运行至多y步后停下的那段计算的代码(y步内不停则发散)。所以f(n,x)=σ(n,x,ψ(x))直译过来就是"把Pn(x)跑ψ(x)步后的整段计算的代码吐出来"。这里的ψ是任意的全可计算步数函数——既可取常数("只看自身一固定切片")也可随x变化。完全 ψ-自省在ψ 取常数情形即"输出自身代码的一个有界近似",恰是现代"自省(introspection)"这一概念的形式化原型。

    SRT 的现代等价说法:与 quine 同构,只把 f 换成有界自模拟器 fT——fT(c) = "模拟程序 c 运行 T 步的那个程序"(T 是固定步数上界,因此 fT 是可计算的全函数)。套 SRT(ϕc=ϕf(c))得到不动点 c:

    即程序 c 的行为 = 在 T 步内模拟自己——它"看到"了自己的有界近似。自省程序的存在性因此是 SRT 的直接推论;这一节的脉络是:Cutland 1980 的定理 1.9 是原始定义/证明,fT 这套叙事是更易理解的现代等价说法,而 Zhang、Yuan & Zhang (2026) 把它延伸到"自省式自改进程序"[6][22]:

    自省式自改进程序(introspective self-improving program):在自省基础上再进一步——程序不仅模拟自己,还基于自模拟结果来修改、改进自己。Zhang、Yuan & Zhang (2026) 用这一构造论证:存在能自我模拟、自我改进的程序,并把 von Neumann 的"复杂度阈值"重新诠释为大型语言模型递归自我改进所需的自省阈值(introspection threshold)——系统必须在自身描述中编码足够多的关于自身的信息,才能维持非退化的递归自我改进,否则会陷入熵退化或模型坍缩[22]。

    5.7.8 统一性总结

    上述现象共享同一个"对角线 / 自指"技巧,从结论性质(否定/肯定)和所在世界(集合论/可计算)两个维度看,完整谱系是:

    其中图灵停机问题、哥德尔不完备定理拥有双重身份:结论是否定性的(与康托尔、罗素问题同类),历史原证也走否定性对角线老路、不依赖 SRT;但因活在程序世界,又能被 SRT 事后更简洁地推出(§5.7.3 展示了停机问题的完整套用过程)。它们共同构成 SRT 的"自指"一面;SRT 还有另一面——"沿序数逐层构造"——见5.8节。

    5.8 SRT的其它应用

    上一节(§5.7)的那些现象都是"自指"本身的例子——程序或句子直接谈论自己。但 SRT 的威力远不止此:它同样是构造不直接涉及自指的复杂数学对象的基本工具。Moschovakis (2010) 以"回顾展"方式列举了 18 个 SRT 发挥关键作用的数学成果[3],其中最重要的一类是 Kleene 本人最钟爱的沿序数逐层构造(有效超限递归)——把递归定义从自然数推广到序数,从而定义出越来越复杂的对象。本节即以它开篇(前4个例子);此后转入其余主题——注意第5个板块中的 Rice 家族与 SRT 是“同源,但独立”的关系(并非 SRT 应用),详见该节导言。逻辑学家 Leo Harrington 用一句最为传神的话概括 SRT 所展示的威力:

      "You need a number z? You got it!"(你需要一个这样的数 z?给你!)[3]

      5.8.1 通用序数记号系统ω_1^CK

      这是 SRT 最初的应用(见 3.1)。回顾§3.1 的背景:序数记号系统给可数序数指派自然数代号,使得 0 / 后继 / 极限这三种构建可以被机械地(可计算的)判定,前驱与基本序列都可被机械地(计算地)取出。在进入定理之前,我们先把本节反复用到的几个概念交代清楚("序数"本身的背景见 §3.1 的背景框):

      • 代号与所指:记号系统里的每个自然数 a 都是一个代号,它所指的序数记作 |a|。一个序数 α 的后继(successor)就是 α+1(0 的后继是 1,ω 的后继是 ω+1)。极限序数(limit ordinal,下文统记作 λ)则是既非 0 也非任何序数之后继的序数——它不能靠"+1"走到,只能被一列递增的序数"逼近",最典型的例子是 ω(0,1,2,3,… 无限数完之后的那一步:任何自然数都不是它的"前一个")。

      • 前驱与基本序列:后继代号 x的前驱(predecessor)记 P(x)——指序数x被"+1"之前那个序数的代号。极限代号 x 的基本序列(fundamental sequence)是一条可机械取出的递增代号列 x0, x1,x2,…,所指序数 |x0|<|x1|<… 逐渐逼近 |x|。

      • S1的语法(S1是下文定理要构造的那个"通用"序数记号系统,Kleene 1938 为它设计的编码方案;后文的记号系统 O 沿用同一语法):0 的代号固定为 1;代号 a的后继的代号写成 2a;极限序数的代号写成 3⋅5e,并约定 |3⋅5e|=lim|ϕe(n)|(程序 e 逐个吐出逼近该极限的记号列,ϕₑ 是编号为 e 的程序,见 §2.2)。取这三种质因数形态(1、2 的幂、3×5 的幂)纯属编码技巧:对代号做质因数分解,就能机械判定它是 0 的代号、后继代号还是极限代号。

      定理(Kleene 1938):存在一个通用序数记号系统 S1:对任何其他合法的序数记号系统S("合法"即满足 §3.1 说的条件——0 / 后继 / 极限这三部分都可被机械判定,并且前驱与基本序列可被机械取出),存在可计算函数把 S 的代号保序地翻译为 S1 的代号("保序":若 |x|<|y|,则翻译后所指的序数仍保持这一大小关系——翻译不打乱任何两个序数的先后顺序)[4][1]。

      证明的思路(这是"有效超限递归"的范式,值得细看):想要的翻译函数 ψ 应该满足

      第三行的 e值得拆开细看——ψ 的定义需要用到 ψ,循环正藏在 e 的代码里。设λ是S能命名的某个极限序数(就是上文说的那种"既非 0 也非后继、只能被逼近"的序数,例如ω),x是它在S中的代号;S是合法记号系统,故x自带一条可计算的基本序列x0,x1,x2,…——一列递增的代号,所指序数逐渐逼近λ。按上面交代的语法,极限序数的代号必须写成3⋅5e的形态,所以ψ(x)必须形如3⋅5e,其中e 是这样一个程序的编号:

        ("逐点翻译基本序列"说的就是它。)这里有两个层面的循环,性质完全不同:

        • 值的层面(无害):ψ(x)=3⋅5e 是一个完整的数,e 只是其中 5 的指数;程序 e 的输出是 ψ(x0), ψ(x1),…——x下面各项的翻译——它从不计算 ψ(x) 自己(极限值由记号的形态约定,不是程序算出来的)。所以不存在"ψ(x) 的值里嵌着 ψ(x) 的值"这种直接自指。

        • 代码的层面(真正的循环):程序 e 要对 xn 运行 ψ,就必须在自己的代码里写死 ψ 的程序编号——而 ψ 此刻还在定义中。也就是说,想定义 ψ,得先造出一个"代码里引用了 ψ 的编号"的程序。这正是"右边出现了正在定义的 ψ 自己(及其编号)"的所指;这类循环在普通数学里非法。

        SRT 恰好合法化它:先用 s-m-n 定理(§2.3)造一个可计算函数q(x,d)——给定ψ的编号d,机械地吐出"读n、取xn、运行程序d"那个程序的编号。于是想求的ψ满足:ψ(x)=3⋅5e,其中e=q(x,d),而d正是ψ自己的编号。把右边整体看作d的函数、套 SRT 取不动点c,令ψ=ϕc,循环即闭合;再沿序数归纳验证ψ确实是全函数("全":对每个输入代号都有输出,见§2.1)且保序[4]。

        顺带分辨两行的差异:第二行 ψ(x)=2ψ(P(x)) 是值依赖值的循环,且 P(x) 指向更小的序数,本质上是良基的("良基":不存在无穷下降链,所以"沿序数从小到大做归纳"是合法的);第三行则是编号依赖编号的循环(e 的代码里嵌着 ψ 的编号),这时候良基性不能保证它的存在性——我们必须使用 SRT。

        图5:Kleene 记号系统 O 的树状结构示意。每个自然数都是某个序数的代号——规则:∣1∣=0(最底层);∣2x∣=∣x∣+1(后继,沿着"2 的幂"链向上);image.png(极限——记号里携带基本序列程序的编号 e,这正是 SRT 大显身手的地方)。所有构造序数都在这棵树上生长;树顶是image.png(无法被任何机械记号触及的边界)。

        在 S1 的基础上,Kleene 进一步构造了带树状偏序关系的序数记号系统 O(Kleene's O)——"偏序"(partial order)指只在部分代号对之间定义的"小于"关系(O 中记作 <O,反映所指序数的大小)。O 是通用且极大的:每个可被任何合法记号系统命名的序数(称为构造序数,constructive ordinal)在 O 中都有代号。全体构造序数的上确界(supremum:不小于它们中任何一个的最小序数)

        是逻辑学中最基本的"普适常数"之一:它是"机械命名能力"在序数世界中的绝对边界[4][1]。Rogers 用同样的 SRT 技术证明:O 上的"序数加法"可由一个可计算函数实现[1]。

        Kiselyov 以现代眼光补充了这段历史的思想动机:Kleene 放弃用 λ 项(他与 Church 两年前的方案)做序数代号,正是因为 λ 项作为函数无法被机械地比较大小;极限序数的代号必须携带程序的编号而非函数本身——"只有编号(有穷对象)才能被直接给出,这是有穷主义立场的要求"[4][5]。

        5.8.2 构造序数 = 递归序数

        可数序数有两种自然刻画:"构造序数"(能被某个机械记号系统命名,见 5.8.1)与"递归序数"( 存在某个程序可判定的排队规则,把全体自然数排成长度恰为该序数的良序队伍)。

        • Markwald–Spector 定理(1954/1955):两种刻画恰好等价——构造序数 ⟺ 递归序数[1][3]。

        这是经典集合论事实"第二数类的两种刻画等价"的可计算版本;两个方向的证明都以 SRT 为归纳枢纽[3]。

        5.8.3 超算术层级与 Spector 唯一性定理

        需要先铺垫三个概念。

        神谕(oracle):给程序外接一块只读"数据库"——集合 A。程序运行中可随时查询"数 n 是否属于 A"并立即得到正确答案。这样的 A 称为神谕;"以 A 为神谕可计算"衡量的是:若把 A 白送给你,你还能多算出什么。

        图灵跳(Turing jump):对任何集合 A,把"哪些以 A 为神谕的程序会停机"这一问题本身收集成一个集合,记作 A′(读作"A 撇")。可以证明:A′ 以 A 为神谕仍不可计算——每跳一次,都得到一个严格更难的"相对版停机问题"。特别地,从空集 ∅ 出发跳一次得到的 ∅′,正是通常意义下的停机问题(5.7.3)。

        沿构造序数"盖楼":现在从 H0=∅ 出发,沿构造序数(见5.8.1)逐层往上盖:

        Hα+1= (Hα)′ (后继层:再跳一次,复杂度升一级)

        image.png(极限层:把下面各层沿一条可计算上升的序列 λ0<λ1<λ2<… 并起来——沿哪条序列取并由 λ 的代号给出,5.8.1 里"记号携带程序编号"的约定在此派上用场)

        在某一层 Hα 中可计算的集合,称为超算术的(hyperarithmetical, HYP)。这栋楼的前几层串起熟悉的图景:只盖有穷多层,得到的恰好是通常的算术层级——穷尽一阶算术(量词只作用于自然数)可定义的全部集合;盖到第 ω 层(ω 即 5.8.1 中最小的无穷序数),得到的集合已足以一举判定皮亚诺公理体系的全部真语句——包括所有皮亚诺公理体系证明不了的真命题(对照 5.7.4 的不完备性);而楼并不停在这里,它沿构造序数一直盖到image.png为止。HYP 因此是真正高于算术层级的层级——至于它究竟高到哪一步(恰好等价于一个"二阶量词"的定义能力),正是 5.8.4 的主题[3]。

        问题来了:同一序数 α 在系统中有无穷多个代号,用不同代号构造出的 Hα 会不会不同?

        • Spector 唯一性定理(1955):不会。Hα 的可计算度只依赖序数 α 本身,与代号选择无关;而且不同代号之间的翻译是一致可计算的[23][3]。

        证明需要同时构造两个互相缠绕的函数(互相引用对方编号),由双递归定理(见 §5.5 的 Smullyan 版本)合法化——这是有效超限递归技术的高峰之一。Kleene 对这个学生的工作推崇备至,他常讲自己如何"行为不端"地接受它作为博士论文、又作为期刊编辑指定自己为审稿人并立即录用——"这非常不合规矩,但我认为这最终有利于逻辑学!"[3]。

        5.8.4 超算术集与有效描述集合论

        背景:在自然数的集合(数学分析的对象)上,可以用"二阶量词"分层:image.png集是"存在一个实数使得某个可计算性质成立"的集合(由存在量词构成的命题定义的集合),image.png是其对偶(由二阶的全称量词构成的命题定义的集合),image.png是"两面都可定义"的集合——可类比为分析学中"既可开逼近又可闭逼近"的集合。

        • Kleene 定理(1955):自然数的集合 A 是image.png的,当且仅当 A 是超算术的(HYP)[24][3]。

        这把可计算性理论(HYP,由机器和序数定义)与描述集合论(image.png,由投影/量化定义)两大传统焊接在一起,是 Kleene 获 1983 年 AMS Steele奖的核心成果之一。证明的两个引理(Kleene's O 是image.png集、且是image.png中"最复杂"的完备集)都靠 SRT 沿良基树作有效超限递归建立[3].

        在此基础上,SRT 向实数空间(Baire 空间,即自然数无穷序列的空间)推广后,成为有效描述集合论的引擎,三个代表性结果:

        1. Suslin–Kleene定理:Borel 集(从开集出发经可数次并、交、补生成的集合)与image.png集之间可以可计算地互译。它同时蕴含经典 Suslin定理(image.png=Borel)和上述 Kleene 定理,是两大传统的汇合点[3];

        2. 赋范归纳定理(Moschovakis 1974):对带有良好"秩函数"结构的归纳定义,其最小/最大不动点保持在相应的可定义层级内。它的证明使用"关系版 SRT"(不动点代码 ε* 使自己的每个后继元组都由自己的前段定义)。这可视为对 Kleene 1944 年错误(见 3.3)的"正确打开方式":SRT 只给某个不动点,要拿到最小不动点需要额外的秩结构[3];

        3. 编码引理(Moschovakis 1970):在 ZF+DC+AD(确定性公理,一个与大基数理论相关的集合论假设)下,若连续统可满射到基数 κ,则可满射到 κ 的幂集。证明通过带参数的 SRT作有效超限递归——SRT 由此进入基数算术这一纯集合论领域;它还是 Jackson 定理(1989:在 AD 下,三型存在量词的 Kleene 序数恰好等于最小的弱不可达基数)的基本工具——这是连接高类型递归论与大基数理论的最惊人结果之一[3]。

        此外,Kleene 1940 年代为直觉主义数学(拒绝排中律的构造性数学)构造的可实现性(realizability)中,bar递归定义、bar归纳与连续性原理的验证也本质地使用 SRT 的各种形式[3]。

        5.8.5 r.e. 索引集理论:Rice、Rice-Shapiro 与 Myhill

        本板块把"程序行为性质"当作一个独立的研究对象。核心概念是索引集(index set):给定某类程序行为,把"行为落在这类里"的全部程序编号收集起来,就得到image.png的一个子集。若用程序 e 的定义域 We(§2.4)来编码行为、用image.png表示某类 r.e. 集,则写法是

        可判定、可枚举这类词只能作用于自然数集合,索引集正是那道翻译层——它把"程序行为问题"转写成 image.png 的子集,之后才能问"这个性质能判定吗、能枚举吗"。两个要点:其一,此类性质必须只看行为、不看代码(同一函数的两个不同编号在 A 中必须同真同假),否则退化为平凡的代码分析。

        与 SRT 的关系必须先分清:下面三个结果中,只有 Myhill 定理是 SRT 的应用(其证明核心是"程序 z 引用 z 自己的编号",见 5.8.5.2)。

        5.8.5.1 Rice定理(1951)

        莱斯(Rice)定理:程序行为的任何非平凡性质都不可判定。精确地说:设 image.png 是某类部分可计算函数,既非空也非全体,则它的索引集 A={e:ϕe∈A} 不是可计算集(更不是递归集)。

        证明思路(停机归约——教科书标准路线,不依赖 SRT):

        1. 取一个"见证"函数 ϕa∈image.png。若处处无定义的函数恰好也在image.png 中,就对"补性质"(行为不在image.png 中)重做一遍论证——两类情况完全对称,故以下不妨设"恒发散",即image.png;

        2. 对每个 x,用 s-m-n 定理(§2.3)机械地造一个程序 h(x):它先模拟"程序 x 在输入 x 上"的运行——这一步是对角线(让 x 面对自己的行为);一旦该模拟停机,h(x) 就转而执行程序 a;若模拟永不停机,h(x) 也永不停机;

        3. 于是 x 停在自己的输入上 ⟺ h(x) 计算的是 ϕa(∈A)⟺ h(x)∈A。若 A 可计算,就能机械判定"x 是否停在 x 上",停机问题被解决——矛盾(§5.7.3)。

        • 直觉:任何非平凡的"行为分类"都把停机问题吸收为自己内部的一个子问题——你若想机械地给每个程序的行为贴标签,就不得不先回答"程序 x 停在自己身上吗",而那正是不可判定的对角线问题[25].

        注(SRT 捷径,非本质):Rice 定理也可用 SRT 三行证完:设A可计算,取变换规则f(x)="x∈A时给一个image.pngA的编号,否则给一个∈A的编号"(A 非空非全,顺序搜索即可机械实现),SRT 给出不动点m使ϕm=ϕf(m)。若m∈A,则f(m)image.pngA,同一函数ϕm=ϕf(m)却一个在 A 内、一个在 A 外(索引集只看行为),矛盾;mimage.pngA同理。这条证明虽短,却是事后捷径——它没有揭示 Rice 定理与停机问题的血缘,而后者(上面的归约)才是定理的标准证明与本质机制[1]。

        5.8.5.2 Myhill定理:创造集 = 完备集

        背景:停机问题集合 K={e:程序e在输入e上停机} 是 r.e. 集中"最不可判定"的——任何 r.e. 集都能通过可计算的翻译归约到它(称为 递归可枚举完备)。另有一个看似完全不同的概念:一个 r.e. 集 A 称为创造集(creative set),如果它的补集是"能系统地生产反例"的——存在一个可计算程序,你给它任何与 A 不交的 r.e. 集,它都能吐出一个既不在 A 里也不在那个集合里的元素。创造性是 Post在1944 年为刻画"不可判定的源泉"而引入的概念。

        • Myhill定理(Myhill 1955):每个创造集都是 r.e.-完备的;两个概念重合

        [26][1][3].

        证明中用到了 SRT 的关键一步:想把任意 r.e. 集 B 归约到创造集 A,需要构造一个程序 z,使得"若 x∈B,则 z 枚举出{u(z)};否则 z 枚举空集"——z 的定义里用到了 z 自己的编号(u(z) 是生产反例的程序作用于 z)。这正是 SRT 合法化的自指;没有这个自指,证明无法闭合。由此 Rogers 还得到推论:所有创造集在"可计算的重新命名"意义下完全相同(两两递归同构)——从可计算性角度看它们"长得一模一样"[1]。

        5.8.6 有效运算的连续性:Myhill–Shepherdson 与 KLS–Čeĭnin 定理

        背景:一个"程序变换"Φ 把函数 ϕ 变成新函数 Φ(ϕ)。有两种实现方式:按代码操作(给 Φ 输入 ϕ 的程序编号,让它随便分析代码——类似"按名调用")与按值操作(Φ 只能查询 ϕ 在具体输入上的输出,像黑盒——类似"按值调用")。直觉上按代码操作更强大(能读源代码),但:

        Myhill–Shepherdson定理(1955):对可计算变换而言,两种方式恰好等价——任何"按代码"的可计算变换都能改写成"按值"的图灵机计算,反之亦然[26][3].

        证明的两个关键引理(变换必然是单调的、必然是连续的)都依赖 SRT:构造一个"监视 Φ 是否已输出、在此之前模仿函数 ϕ1、之后变为模拟函数 ϕ2"的程序 z,其中 z 的行为取决于 z 自己(经 Φ 处理后)的表现,由 SRT 提供,再用"同一函数的不同编号必须得到同一结果"逼出矛盾[3]。

        Kreisel–Lacombe–Shoenfield–Čeĭnin定理(1957/1962):作用在全函数上的可计算变换必然是连续的——输出在任何点的值只依赖输入函数的有限个值;而且可用确定性图灵机实现[3]。

        Čeĭnin 的版本——"构造度量空间之间的每个可计算算子都是有效连续的"——是俄罗斯构造性分析学派(用可计算性重新奠基数学分析)的中心结果之一[3]。证明中 SRT 出现两次,用法与上述如出一辙。

        此外,Rogers 用 SRT 证明了 Blum定理:任意两个"通用部分函数"(即解释器)都只差一个可计算的重新编号(递归同构)——编号系统在"重新命名"意义下本质唯一[1].

        5.8.7 Solovay 可证性逻辑

        背景:可证性逻辑(provability logic)研究"可证"这个概念的抽象规律,把 "⌜ϕ⌝ 在皮亚诺公理体系中可证" 抽象为模态算子 □ϕ。模态逻辑系统 GL(Gödel-Löb 逻辑)是候选公理系统。

        Solovay定理(1976):一个模态公式在皮亚诺公理体系中的所有解释下都可证,当且仅当它是 GL 的定理。即 GL 恰好完全刻画了皮亚诺公理体系的可证性逻辑[27][3]。

        Solovay 的证明漫长精巧,其关键引理需要构造一个自指的函数 h,其中 h 的定义中引用 h 自己的编号。Solovay 本人用一句话带过:"表面上的循环用递归定理以通常方式处理"[3]。Moschovakis 评论到:无法想象不借助 SRT 如何凭空想出这个构造——在此意义上 SRT 是可证性逻辑这块基石中不可或缺的成分[3]。

        应用地图一览

        (表中"§"编号均指 Moschovakis 2010[3] 的章节。)

        5.9 其它扩展研究

        5.9.1 SRT 与计算复杂性理论

        在复杂性理论中,递归定理主要扮演证明工具的角色。复杂性类的许多分离与结构定理采用"带时钟的对角化":让机器检查并躲开自己(或更早的机器)的行为;当这种自躲藏需要程序援引自己的代码时,严格化的抓手正是 SRT。这类证明有一个内禀的时序难题:对角化机器要躲开的对象可能就是它自己(或自己的更早版本),而它必须在对方"提交行为"之后才能可靠地反着做——处理这一难题的技术称为延迟对角化(delayed diagonalization)。这一思想的源头可以追溯到 Breidbart 的"分裂递归集"构造显式调用递归定理[28],后来被 Schmidt 统一为"复杂性类的递归论结构"定理,推论包括:除非 NP = P,NP 不等于 P 与 NP 完全类之并这类"可递归呈现类"的非平凡并[29]。延迟对角化由此成为分离复杂性类的标准武器——本质上,它是"带时钟的对角线"对自引用时序的形式化处理。

        在Blum的机器无关复杂性理论中,SRT 与对角化结合产生了一批"存在性"结果。代表性的一例:Helm 与 Young 回答了 Blum 的一个问题——存在这样的可计算函数,任何为它"换上更快的程序"的尝试都要付出程序尺寸爆炸的代价,且刻画这一代价的增长函数快于任何递归函数[30]。"加速与简洁不可兼得"由此成为定理而非格言。

        更微妙的是,我们能否把 SRT 本身复杂性化?如果把编号限制到多项式时间的程序族上,SRT 还成立吗?困难出在证明的两个枢纽操作上:通用模拟在 P-时间世界里没有多项式时间版本(万能解释器本身要超线性时间),s-m-n 实例化(把参数写死)也会放大运行时间。因此对一般的多项式时间编号,带时间界的 SRT 不成立;不过 Kleene 1938 年的直接证明不经过通用程序,所以某些没有通用程序的子递归系统仍保有递归定理。一句话主旋律:自指免费,高效自指则昂贵——不动点的"存在"有保证,"节省地存在"则没有。

        5.9.2 存在性与可构造性的分野

        把上一小节的主旋律展开:存在性原封不动地活着——不动点存在且可计算,这一保证不附带任何资源代价;可构造性一旦要求资源有界,就会在子递归系统中部分失效。而有意思的是,这片"失效地带"并非荒芜之地——为了刻画它,递归论与复杂性理论交叉出两种新工具,并在工程侧催生了一个终点形态。

        工具一:Kolmogorov复杂性与DNR度。相对化之后 SRT 何时失效,有一个精确刻画:A 能算 DNR 函数当且仅当 A 是 autocomplex 的[31]。换个角度看,这条定理把"自指是否可用"从一个全有全无的定性事实,变成了一个由环境(oracle)标定的可测量、可分级、可缺失的复杂性量——DNR 度的层级就是"自指损坏程度"的标尺。

        工具二(工程终点):哥德尔机。Schmidhuber 把"资源有界的自引用"推到了最雄心勃勃的形式[32]:机器的初始代码包含自身硬件、环境、效用函数乃至整个初始软件的公理化描述,一个基于 Levin通用搜索的偏置最优证明搜索器(BIOPS)持续寻找证明——一旦证明某个对自身代码的改写能提升未来效用,就立即改写(包括改写证明搜索器本身)。由于改写前必须证明"继续搜索其他改写不值当",每次自改进都是全局最优的,没有局部极值。它的边界同样是哥德尔式的:只能改写"在形式系统内可证明有用"的部分,超出可证明范围的好处再大也拿不到。这条工程谱系与上文的自省程序一脉相承:自省程序"知道自己的有界执行轨迹",哥德尔机则"能证明地改写自己的任何部分"——自指从存在性工具,最终长成了资源有界的自改进机制[22]。

        5.9.3 KRT 可以被分级

        该词条表述的 SRT 默认在一个可接受编号(acceptable numbering,即同时满足通用性与s-m-n定理的编号系统)中工作;在此类编号之间,Rogers同构保证了彼此可计算互译。一个自然的追问是:换掉编号,递归定理还剩多少?

        答案分两层。其一,Rogers 不动点形式(表述B)对一切可接受编号成立;但在一般的可计算编号(同样是全部一元偏可计算函数的一致枚举、却不满足可接受性的编号)中,Kleene 形式(表述A,文献中称 KRT)可以失效。其二,失效与否不是全有全无的:Case、Jain 与 Stephan 借用归纳推断的收敛标准,把"在编号 ψ 中找到不动点"分成了由强到弱的四档——FinKrt(有限步内机械给出不动点)、ExKrt(极限收敛地找到)、VacKrt(摇摆式收敛)、BcKrt(行为正确地收敛),并系统研究了哪些编号落在哪一档[33]。

        这带来一个概念上的反转:自指不再是"图灵等价世界"里的免费午餐,而是编号系统的一种资源。与上一小节的 DNR 刻画合观,结论是对称的:环境(oracle)与编码(编号)两个维度中任何一个被放宽,自指都可能失效,而失效的程度都可以被测量与分级。该文还证明了两个结构性事实:①一个编号"找不动点的能力"与它"作为学习最优假设空间的能力"相互独立;②若编号既对解释性学习最优、又在 Ex 意义下满足 KRT,则它还能在 Ex 意义下翻译其他编号的指标。这与正文 §5.1 的"表述C"形成呼应——uniform 性与可构造性本身,就是递归定理中最脆弱也最值钱的部分。

        6. 评注和影响

        1. 简单性与普适性的反差。SRT 的全部证明只有一行对角线,应用却横跨逻辑学几乎所有分支。Moschovakis 指出:其广泛适用性恰恰源于这种简单——它极易被翻译到自然数以外的语境(实数空间、任意 Polish空间、高类型对象、模态逻辑),在每个语境中重新化身[3]。

        2. 两个递归定理的分工。第一递归定理保证递归定义有最小解(函数层面、序理论的不动点);第二递归定理保证自指定义合法(代码层面的不动点)。前者回答"这个函数方程有解吗",后者回答"我能在定义中引用被定义者自己的代码吗"。强定理蕴含弱定理,反之不然(见 4.4)。

        3. 自指的数学化。从 Gödel 的替换函数、通用图灵机、冯诺伊曼的自复制自动机,到 quine、计算机病毒、编译器自举,乃至人工智能中"系统改进自身"的设想,"系统谈论自身"的可行性边界都由同一种对角线结构划定。Kleene 递归定理是这一结构最干净、最一般的陈述。

        4. 历史反讽。Kleene 1938 年发明 SRT 是为了构造序数记号,而 1944 年他恰恰因为"拿到一个不动点却误以为拿到最小不动点"而犯下著名错误,直到 1955 年才纠正(见 3.3)——这个故事最恰当地说明了理解两个递归定理区别的重要性。

        5. Rogers 的总评:递归定理是"一个基本的研究工具、一个深刻的结果"(a basic research tool ... a deep result),它的深刻在于"以优雅和智识上的经济性,处理那些需要繁复构造的问题"[1];虽然它的直接效果常是产生各种"病态"结构(自我枚举的集合、自我打印的程序),但它在 Myhill 定理等结果中起到了"在此前独立定义的概念之间建立正则联系"的作用[1]。

        参考文献

                1.  Rogers, H., Jr. (1967). Theory of Recursive Functions and Effective Computability. McGraw-Hill. 第 11 章 The Recursion Theorem, pp. 179–222.【教科书标准表述;第一/第二递归定理的命名来源】

                2.  Kleene, S. C. (1952). Introduction to Metamathematics. D. Van Nostrand.【第一递归定理的明确表述】

                3.  Moschovakis, Y. N. (2010). Kleene's amazing second recursion theorem. The Bulletin of Symbolic Logic, 16(2), 189–239.【18 个应用的权威综述;本文应用部分的章节编号均指此文】

                4.  Kleene, S. C. (1938). On notation for ordinal numbers. The Journal of Symbolic Logic, 3(4), 150–155.【第二递归定理的原始出处,定理与证明见 p.153】

                5.  Kiselyov, O. Kleene Second Recursion Theorem: A Functional Pearl.【演算/函数式编程视角;quine、twine、性能分析;Unix `cat` 例子出处】

                6.  Cutland, N. J. (1980). Computability: An Introduction to Recursive Function Theory. Cambridge University Press.【§1.9 定理 1.9 给出 totally-introspective 程序的原始定义与存在性证明——"自省程序"概念的最早明确出处(§5.7.7);§2.3 定理 2.3 给出 SRT 的"列表法"证明(§5.2.2)】

                7.  Wikipedia. Quine (computing). <https://en.wikipedia.org/wiki/Quine_(computing)>. 【quine的准确定义:不接受输入、只输出自身源码、且不得读取自身源码】【§5.7.6】

                8.  Smullyan, R. M. (1961). Theory of Formal Systems. Princeton University Press.【双递归定理的提出者;§5.4.3】

                9.  Case, J. (1974). Periodicity in generations of automata. Mathematical Systems Theory 8: 15–32. doi:10.1007/BF01761704.【算子递归定理(ORT)的原始出处;Kleene 第二递归定理的无穷化推广,由自复制自动机的世代周期性问题引出】

                10.  Blum, L.; Blum, M. (1975). Toward a mathematical theory of inductive inference. Information and Control 28(2): 125–155.【归纳推断(极限识别)的奠基工作之一;递归定理在学习理论中的主要应用场景】

                11.  Case, J. (1994). Infinitary self-reference in learning theory. Journal of Experimental and Theoretical Artificial Intelligence 6(1): 3–16.【ORT 在学习理论中用法的教学性综述】

                12.  Arslanov, R. R. (1981). On a class of recursively enumerable sets. Algebra and Logic, 20, 324–328.【Arslanov 完全性判据】【§5.5.3】

                13.  Soare, R. I. (1987). Recursively Enumerable Sets and Degrees: A Study of Computable Functions and Computably Generated Sets. Berlin: Springer-Verlag.【r.e. 集与图灵度的标准教科书;Arslanov 完备性判据(§5.5.3)与 Rice–Shapiro 等索引集定理(§5.8.5)的教科书出处】

                14.  Lawvere, F. W. (1969). Diagonal arguments and cartesian closed categories. In Category Theory, Homology Theory and their Applications III, Lecture Notes in Mathematics, vol. 92, Springer.【Lawvere 不动点定理,把 SRT、Gödel 不完备、Turing 停机统一为范畴论特例】【§5.6.2】

                15.  Cantor, G. (1891). Über eine elementare Frage der Mannigfaltigkeitslehre. Jahresbericht der Deutschen Mathematiker-Vereinigung, 1, 75–78.【对角线论证的源头】

                16.  Russell, B. (1908). Mathematical logic as based on the theory of types. American Journal of Mathematics, 30, 222–262.【罗素悖论的现代陈述】

                17.  Turing, A. M. (1936). On computable numbers, with an application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, 42, 230–265.【停机问题不可判定】

                18.  Gödel, K. (1931). Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I. Monatshefte für Mathematik und Physik, 38, 173–198.【Gödel 不完备定理(Gödel 不动点引理是其核心证明工具,见 §5.6.1)】【§5.7.4】

                19.  von Neumann, J. (1966). Theory of Self-Reproducing Automata (A. W. Burks 编). University of Illinois Press.【自复制自动机的奠基性设计(原稿始于 1948)】【§5.7.5】

                20.  Lee, C. Y. (1963). A Turing machine which prints its own tape. Mathematical Tables and Other Aids to Computation, 17, 403–406.【Rogers 1967 §11.4 第三图示的直接启发】

                21.  Hofstadter, D. R. (1979). Gödel, Escher, Bach: An Eternal Golden Braid. Basic Books.【"quine" 一词的普及来源】

                22.  Zhang, J., Yuan, B., & Zhang, Q. (2026). Self-Referential Introspection in Large Language Models: The Critical Threshold for Recursive Self-Improvement. Entropy, 28(9), 951.【自省程序(f=有界自模拟)与自省式自改进程序的定义;SRT 在 LLM 递归自我改进中的应用】【§5.7.7】

                23.  Spector, C. (1955). Recursive wellorderings. The Journal of Symbolic Logic, 20, 151–163.

                24.  Kleene, S. C. (1955). On the forms of the predicates in the theory of constructive ordinals (second paper). American Journal of Mathematics, 77, 405–428.【= 超算术集合(HYP)的原始定理出处(§5.8.4)】

                25.  Rice, H. G. (1953). Classes of recursively enumerable sets and their decision problems. Transactions of the AMS, 74, 358–366.【Rice 定理原始论文】【§5.8.5.1】

                26.  Myhill, J., & Shepherdson, J. C. (1955). Effective operations on partial recursive functions. Zeitschrift für mathematische Logik und Grundlagen der Mathematik, 1, 310–317.

                27.  Solovay, R. M. (1976). Provability interpretations of modal logic. Israel Journal of Mathematics, 25, 287–304.

                28.  Breidbart, S. (1978). On splitting recursive sets. Journal of Computer and System Sciences 17: 56–64.【复杂性类对角化中显式使用递归定理的"延迟构造"源头】

                29.  Schmidt, D. (1985). The recursion-theoretic structure of complexity classes. Theoretical Computer Science 38: 143–156. doi:10.1016/0304-3975(85)90217-8.【复杂性类对角化定理的递归论统一;推论:除非 NP=P,NP ≠ P ∪ {NP完全类}】

                30.  Helm, J.; Young, P. (1971). On size vs. efficiency for programs admitting speed-ups. Journal of Symbolic Logic 36.【回答 Blum 的问题:加速必然伴随尺寸爆炸,代价函数增长快于任何递归函数】

                31.  Kjos-Hanssen, B.; Merkle, W.; Stephan, F. (2011). Kolmogorov complexity and the recursion theorem. Transactions of the American Mathematical Society 363(10): 5465–5480. doi:10.1090/S0002-9947-2011-05306-7.【SRT 相对化失效的刻画:A 能计算 DNR 函数 ⟺ A autocomplex;会议版为 STACS 2006, LNCS 3884, 149–161】

                32.  Schmidhuber, J. (2003). Gödel machines: self-referential universal problem solvers making provably optimal self-improvements. arXiv:cs/0309048【正式版本见 LNCS 3394 (2005), 1–23 及 Springer《Artificial General Intelligence》(2006);IDSIA 技术报告 IDSIA-19-03】

                33.  Case, J.; Jain, S.; Stephan, F. (2018). Effectivity questions for Kleene's recursion theorem. Theoretical Computer Science 733: 55–70. doi:10.1016/j.tcs.2018.04.036.【KRT 对编号系统的依赖性:FinKrt/ExKrt/VacKrt/BcKrt 分级;KRT 找不动点能力与学习最优性独立】

                  参考文献可上下滑动查看

                  本词条由集智俱乐部众包生产,难免存在纰漏和问题,欢迎大家留言反馈,一经采纳,可以获得对应的积分奖励噢!

                  加入我们

                  亲爱的社区伙伴与知识探索者:

                  我们诚挚邀请热爱知识分享的您,加入集智百科词条编写志愿团队!无论您是领域专家,还是对特定主题充满热忱的学习者,这里都有您的舞台。通过编写百科词条,您将为全球读者传递权威知识,同时获得专家指导与个人能力跃升的双重成长。

                  📝 志愿者职责

                  • 创作新词条:覆盖复杂系统、人工智能等前沿领域

                  • 迭代经典内容:更新现有词条,守护知识的准确性与时效性

                  • 质量守护者:参与内容校对审核,共建精品知识库

                  🌟 我们期待您

                  • 集智读书会成员(需完成一期字幕任务)

                  • 拥有清晰表达复杂概念的写作能力

                  • 对特定领域有深度研究或强烈兴趣

                  • 具备信息检索与整合素养

                  • 怀揣责任感与协作精神,愿为知识共享赋能

                  🎁 您将收获

                  • 百科积分(支持兑换集智俱乐部周边:文化衫、复杂科学知识卡以及提现)

                  • 集智俱乐部创始人张江教授亲自指导写作

                  • 科研志愿者晋升通道:表现优异者可加入张江教授科研团队从事科研志愿者

                  你的百科贡献之路,从一字一句开始!

                  第一步,从成为一名字幕志愿者开始!

                  只需完成一期读书会讲座字幕任务,这不仅是贡献,更是一次深度的学习。字幕任务过关后,您将升级为“百科志愿者”,开启编辑词条、整理术语的进阶旅程。

                  从字幕到百科,这是一条清晰的成长路径。立即行动,从第一个任务开始你的升级吧!

                  图片

                  扫码加入

                  因果涌现第七季——从理论到应用

                  在神经系统中意识的生成、城市交通的拥堵演化、全球产业系统的协同与失稳之中,始终潜藏着一条贯穿微观与宏观的因果脉络:个体行为本身或许简单,却能在尺度跃迁中孕育出高度组织化、难以还原的整体结构。复杂现象并非微观规则的线性叠加,而是源于多尺度动力学作用下逐步形成的因果组织。正是在这一背景下,因果涌现理论被提出,并在因果涌现 2.0、工程化涌现以及多尺度因果抽象等工作中推进,逐渐发展出一套融合动力学分析、信息论度量以及谱方法与人工智能工具的研究框架,从而将研究重心从“复杂性本身”转向“因果结构如何出现、如何被度量并在现实系统中发挥作用”。

                  为系统梳理因果涌现领域的最新进展,北京师范大学系统科学学院教授、集智俱乐部创始人张江老师领衔发起「因果涌现第七季」读书会,组织对该主题感兴趣的研究者与探索者共同研读前沿文献、交流研究思路。读书会将于2026年2月22日起每周日上午(创建读书会暂定时间为10:00-22:00)线上开展,持续约10周,包含主讲分享与讨论交流,并提供会后视频回放,诚邀相关领域研究者及跨学科兴趣者参与。

                  推荐阅读

                  1. 张江:大语言模型中的自指——递归式自我改进的内省阈值|集智科学研究中心

                  2. 从种子AI到奇点——人工智能的递归式自我改进

                  3. arXiv:哥德尔智能体-具有递归自进化能力的agent框架

                  4. 9900分可兑换“涌现”文化衫,报名任意读书会送299积分!

                  5. 集智学园精品课程免费开放,解锁系统科学与 AI 新世界

                  6. 高考分数只是张入场券,你的科研冒险在这里启航!

                  7. 加入集智字幕组:成为复杂科学知识社区的“织网人”

                  #原创

                  点击“阅读原文”,报名读书

                  阅读原文

                  跳转微信打开

                  本文转载自微信公众号「集智俱乐部」,查看原文。版权归原作者所有,如有侵权请联系删除。