我想分享一个我最近发现的令人惊讶的事实的简单证明:有一个通用算法,能够计算任何给定的函数!
等等,什么?我到底是什么意思?我们不能证明一些函数是不可计算的吗?是的,当然。
我的意思是,有一个通用算法,一个能够计算任何所需函数的图灵机程序,只要有人在正确的宇宙中运行该程序。有一个图灵机程序$p$,它的性质是,对于自然数上的任何函数$f:\newcommand\N{mathbb{N}}\N\to\N$,包括不可计算的函数,都有一个算术或集合论模型,其中$p$计算的函数与所有标准有限输入上的$f$完全一致。您必须在不同的环境中运行该程序,以便它能够计算所需的函数$f$。
$\newcommand\ZFC{\text{ZFC}}
\newcommand\PA{\text{PA}}
\newcommand\Con{\mathop{\text{Con}}}
\newcommand\provens{\vdash}
\新命令{\concat}{\mathbin{}^\smallnrow}}
\newcommand\restrict{\upharpoonright}
$
定理有一个图灵机程序$p$,它执行证明中描述的特定算法,因此对于任何函数$f:\N\to\N$,都有一个算法模型$M\models\PA$,或者确实有一个集合论模型$M\ models\ZFC$或更多(如果一致),这样,$M$中的程序$p$计算的函数与所有标准有限输入上的$f$完全一致。
![由fdecomite-时间隧道,CC By 2.0,https://commons.wikimedia.org/w/index.php?curid=3471137 时间隧道.jpg](https://upload.wikimedia.org/wikipedia/commons/2/2b/Tunnels_of_Time.jpg)
该证明是初等的,本质上只依赖于哥德尔·罗塞尔定理的经典证明的思想。简单回顾一下,对于任何扩展$\PA$的可计算公理化理论$T$,都有一个相应的句子$\rho$,称为罗斯这句话断言,“对于$T$中$\rho$的任何证明,都有一个较小的$\neg\rho$s证明。”也就是说,我的意思是证明的Gödel-code较小。一个人通过一个简单的哥德尔不动点引理的应用来构造句子$\rho$,就像一个人构造通常的哥德尔句子来断言它自己的不可证明性一样。关于Rosser句子的基本经典事实包括:
- 如果$T$是一致的,那么$T+\rho$和$T+\neg\rho也是一致的$
- $\PA+\Con(T)$证明$\rho$。
- 理论$T$、$T+rho$和$T+negrho$是等价一致的。
- 如果$T$是一致的,则$T+\rho$不能证明$\Con(T)$。
第一个陈述是哥德尔-罗瑟定理的基本断言,很容易证明:如果$T$是一致的,$T\provides\rho$,那么证明在元理论中是有限的,因此由于$T$必须证明$\neg\rho$有一个较小的证明,该证明在元理论中也是有限的,因此是一个实际的证明,与$T$的一致性相矛盾。类似地,如果$T\provides\neg\rho$,那么元理论中的证明将是有限的,因此$T$将能够验证$\rho$s是真的,而$T\rovides\rho$又与一致性相矛盾。通过将前面的参数内化到PA中,我们可以看到$\PA+\Con(T)$将证明$\rho$和$\neg\rho$$在$T$中都是不可证明的,这使得$\rho$在这种情况下是虚真的,并且还为第二和第三个语句建立了$\Con。特别是,$T+\Con(T)证明了\Con。
现在让我们继续证明这个定理。首先,我们构建我称之为玫瑰树根据c.e.理论$T$。也就是说,我们递归地为2^{{<}\omega}$中的每个有限二进制字符串$s\定义理论$R_s$,将初始理论$R{\emptyset}=T$放在根,然后在每个阶段递归地为理论$R_s$添加Rosser语句$\rho_s$或其否定$\neg\rho_s$,以形成树的下一级理论。
$$R_{s\concat 1}=R_s+\rho_s$$
$$R_{s\concat 0}=R_s+\neg\rho_s$$
因此,每个理论$R_s$都是$T$的一个有限扩展,即在$s$描述的模式中连续添加适当的Rosser句子或其否定。如果初始理论$T$是一致的,那么它通过使用哥德尔-罗瑟定理的归纳得出,Rosser树中的所有理论$R_s$都是一致的。将我们的符号扩展到通过树的分支,如果$f\in{}^\omega 2$是一个无限二进制序列,我们让$R_f=\bigcup_nR_{f\upharpoonrightn}$是沿着Rosser树的分支出现的理论的联合。通过这种方式,我们构建了一套完美的连续体——许多不同的一致性理论。
我现在将描述计算二进制函数的通用算法。考虑理论$T=\PA+\neg\Con(\PA)$上的Rosser树。这是一个一致的理论,恰好证明了它自己的不一致性。通过按顺序考虑Gödel-codes,该算法应该首先在初始理论$R{\emptyset}$中搜索Rosser语句$\rho{\embtyset}$或其否定的证明。如果找到了这样的证明,则该算法将分别在输入$0$上输出$0$或$1$,具体取决于首先找到的是Rosser语句还是其否定,并通过将相反的语句添加到当前理论中,转到Rosser树中的下一个理论。然后,它开始搜索Rosser语句的证据那个理论或其否定。在算法的每个阶段,都有一个当前的理论$R_s$,具体取决于找到了哪些先验证明,算法搜索$\rho_s$或$\neg\rho_s$的证明。如果找到,它会相应地输出$0$或$1$(在输入$n=|s|$上),并通过将相反的语句添加到当前理论中,转到Rosser树中的下一个理论。
如果$f:\N\to 2=\{0,1\}$是自然数上的任何二元函数,则设$R_f$是通过Rosser树的相应路径产生的理论,并设$M\models R_f$是该理论的模型。我声称,我刚才描述的通用算法将精确计算此模型中输入$n$的$f(n)$。需要注意的是,由于$\neg\Con(\PA)$是初始理论的一部分,模型$M$会认为Rosser树中的所有理论都不一致。因此,该模型将对Rosser树中的任何理论的每一个陈述及其否定都有大量的证明,特别是,由$p$在$M$中计算的函数将是一个总函数。问题是,在每个阶段,哪些证明将首先出现,从而影响函数的值。设$s=f\restrict n$,注意$R_s$在$M$中为true。假设归纳起来,$p$计算的函数在$M$中$n$以下正确运行,并考虑过程的阶段$n$。通过归纳,当前的理论正好是$R_s$,算法将搜索$\rho_s$或其在$R_s$中的否定的证明。请注意,如果$\rho_s$在$M$中为true,$f(n)=1$,并且由于$\rhoS$所断言的以及$M$认为它在$R_s$中是可证明的事实,因此必须有一个较小的$\neg\rho_s$证明。因此,在这种情况下,该算法将首先找到$\neg\rho_s$的证明,因此,根据该算法的精确指令,它将在输入$n$上输出$1$,并将$\rho_s$(相反的语句)添加到当前理论中,移动到Rosser树中的理论$R{s\concat1}$。类似地,如果$f(n)=0$,那么$\neg\rho_s$在$M$中将为真,因此算法将首先找到$\rho_s$的证明,给出输出$0$,并将$\neg \rho_s$添加到当前理论中,移动到$R_{s\concat 0}$。通过这种方式,算法以正确的方式找到了证明,从而使$R{f\限制n}$作为当前阶段$n$的理论,从而根据需要精确计算函数$f$。
基本上,理论$R_f$断言,证明将以正确的顺序找到,这样程序$p$将在所有标准有限输入上精确计算$f$。因此,每个二进制函数$f$都是由理论$R_f$的任何模型中的算法计算出来的。
现在,让我解释一下如何扩展结果以处理所有函数$g:\N\到\N$,而不是像上面那样只处理二进制函数。其思想是简单地修改二进制通用算法。任何函数$g:N\ to \N$都可以用二进制函数$f:N\至2$以规范的方式进行编码,例如,在$f$中有连续的块$1$s,用$0$s隔开,其中$N^{\rm-th}$块的大小为$g(N)$。假设$q$是运行上述二进制通用算法的算法,从而计算二进制序列,然后从该二进制序列中提取从$\N$到$\N$的相应函数(例如,如果二进制序列是有限的或只有有限多的$0$s,则这可能会失败)。然而,对于任何函数$g:\ N\ to \N$,都有一个二进制函数$f:\ N\to 2$,它以我们描述的方式对其进行编码,并且在任何模型$M\模型R_f$中,二进制通用算法都将计算$f$,从而使此适配算法根据需要精确计算所有标准有限输入上的$g$。
最后,让我描述一下如何将结果扩展到使用集合论模型,而不是算术模型。假设$\ZFC ^+$是ZFC的一致c.e.扩展;也许是ZFC本身,或者是ZFC加上一些大的基本公理。通过不完全性定理,让$T=\ZFC^++\neg\Con(\ZFC_+)$是一个略强的理论,这也是一致的。由于$T$解释了算术,所以应用了Rosser语句理论,因此我们可以在$T$上构建相应的Rosser树,也可以使用$T$作为初始理论进行二进制通用算法。如果$f:\N\to2$是任何二元函数,那么让$R_f$是通过Rosser树在相应分支上产生的理论,并假设$M\models R_f$。这是$\ZFC^+$的模型,它还认为$\ZFC ^+$不一致。因此,通用算法将在这个模型中找到大量的证明,和以前一样,它将以正确的顺序找到证明,即二进制通用算法将精确计算函数$f$。根据这个二进制通用算法,可以根据需要再次为所有函数$g:N\到N$设计通用算法。
人们还可以得到另一种普遍性。也就是说,有一个程序$r$,对于任何有限的$s\子集\N$,都有一个$\PA$的模型$M$(或$\ZFC$,等等),这样,在模型$M$s中,程序$r$s将枚举集合$s$,仅此而已。人们可以从定理的程序$p$中获得这样一个程序$r$:只需让$r$运行通用二进制程序$p$直至生成一个双$0$,然后将该有限二进制字符串解释为要输出的集合$s$。
现在我还要讨论另一种形式的普遍性。
推论
有一个程序$p$,对于任何模型$M\models\PA+\Con(\PA)$和任何可以在$M$中定义的函数$f:M\到M$,都有一个$M$到更高模型$N\models\ PA$的最终扩展,这样在$N$中,程序$p$s计算的函数与$f$在输入$M$时完全一致。
证明
我们简单地应用$M$中的主要定理。关键是,如果$M$认为$\Con(\PA)$,那么它可以构建它认为的Rosser扩展树,并且它会认为每个步骤都保持一致。因此,它构建的理论$T_f$在$M$中是一致的,因此有一个模型(Henkin模型)可以在$M$中定义,因此这将是$M$的最终扩展。
量化宽松政策
最后一个应用程序与最近由拉斯穆斯·布兰克(Rasmus Blank)和阿里·埃纳亚特(Ali Enayat)扩展的伍丁定理有着明显的相似性。请参阅Victoria Gitman关于这些定理的研讨会演讲的帖子:可计算过程可以在非标准模型中产生任意输出,延续.
替代性证明以下是基于Vadim Kosoy下面的评论对该定理的另一种优雅证明。让$T$是解释PA的任何一致的可计算公理化理论,比如PA本身或ZFC或其他什么。对于任何图灵机程序$e$,让$q(e)$是一个执行以下过程的程序:在输入$n$上,系统地搜索有限函数$h:X\to\mathbb{n}$,其中$X$是有限的,而$n\是X$中的,为了证明“程序$p$在$X$的所有输入上与$h$不一致”只使用函数$h$作为此断言的值列表。对于发现的第一个这样的函数和证明,如果有,请将值$h(n)$作为输出。
由于函数$e\mapsto q(e)$是可计算的,因此根据Kleene的递归定理,有一个程序$p$,其中$p$和$f(p)$计算相同的函数,并且$T$证明了这一点。因此,程序$p$正在搜索$p$本身没有以某种方式表现的证据,然后当找到这样的证据时,它就会以这种方式表现。
我声称,对于任何特定的有限函数$h:X\to\mathbb{N}$,理论$T$实际上并没有证明“程序$p$在$X$的输入上与$h$不一致”的任何语句。如果它确实证明了这样一个语句,那么对于最小的函数和证明,根据设计,$p$在$X$中的所有输入上的输出实际上是$h$。因此,也可以证明该程序做同意这个特殊的$h$,因此$T$将被证明是一个矛盾,与我们的假设相反,它是一致的。所以$T$实际上并没有证明这些说法。特别是,程序$p$在标准算术模型中计算空函数。但是,对于任何特定的有限函数$h:X\to\mathbb{N}$,我们都可以将断言“程序$p$在$X$的输入上与$h$一致”添加到$T$,因为$T$没有反驳这个断言。
对于任何函数$f:\mathbb{N}\到\mathbb2{N}$,让$T_f$是理论$T$,以及对于特定值$k=f(N)$,形式为“程序$p$在输入$N$上以$k$停止”的所有断言。我声称这个理论是一致的,因为如果不是,那么通过紧性,会有有限多的断言导致不一致,因此会有一个有限的函数$h:X\to\mathbb{N}$,其中$h=f\upharpoonrightX$,这样$T$就证明了程序$p$在$X$的输入上与$h$不一致。但在前一段中,我们证明了这种情况不会发生。因此,$T_f$理论是一致的。
最后,请注意,在任何$T_f$模型中,程序$p$在标准输入上计算函数$f$,因为这些断言都是在理论上做出的。量化宽松政策