大家好,我是 Senko。 本文将解读“库里悖论”。
准备“若这句话为真,则圣诞老人真实存在”这样一句话。仅凭这点材料,就能在形式上导出“圣诞老人真实存在”这个结论。而且结论部分换成什么都行。与说谎者悖论不同,它完全不用否定——这正是这个问题可怕的地方。
一句话证明圣诞老人存在
先准备下面这句话,把它叫作 C。
C:若这句话为真,则圣诞老人真实存在。
乍看之下,它像是什么也没主张的空话,只是带了个条件,并没有说圣诞老人存在。
只是,这句话里所指的“这句话”,说的是 C 自己。也就是说,C 的内容是“若 C 为真,则圣诞老人存在”。
它是谈论自身的句子,意义要定下来得先绕一圈。我们来追一追从这里能推出什么。
把证明追一遍
一步一步来。
先假设 C 为真。
C 为真,就意味着 C 的内容成立。而 C 的内容是“若 C 为真,则圣诞老人存在”。
眼下按假设 C 是真的,这个条件句的前件因此被满足,于是得出结论:圣诞老人真实存在。
到这里所证明的是“假设 C 为真,则圣诞老人存在”。
机关的核心就在这里。刚刚证明的这段内容,与C 自己所说的完全相同。也就是说我们已经证明了 C 的内容,那么 C 就是真的。不带假设,C 的真理到手了。
最后一手。C 是真的,而 C 说的是“若 C 为真,则圣诞老人存在”。前件既已满足,结论就出来了。
圣诞老人真实存在。证毕。
一次否定也没用
奇怪的是,这套推理看上去哪里都没有勉强。
用到的只有两条:条件句的前件成立则后件也成立;以及由假设推出的东西可以改写成条件句。两条都是逻辑学最基本的工具。
而值得注意的是,否定这个概念一次也没出现过。
说谎者悖论是“这句话是假的”这种形状,否定在其中起着本质作用。正因如此,才有人想出“承认既非真也非假的第三个值就好”之类的对策。
这一招对库里悖论行不通。既然没有否定,那么怎么摆弄否定的处理方式都解决不了问题。
更严重的是,结论部分可以换成任何东西。“1 等于 2”也好,“我长生不老”也好,都能用完全相同的步骤证出来。一个体系若能证明一切主张,那它就彻底没有意义了。
发现者哈斯凯尔·库里
在1942年的论文里指出这个悖论的,是美国逻辑学家哈斯凯尔·库里。
他当时正在做“显示某些形式体系含有矛盾”的研究,在此过程中把这个结构提取了出来。几乎相同的内容,数学家马丁·勒布也独立处理过,因此它有时也被叫作勒布悖论。
顺带一提,库里这个名字学过编程的人也许很熟悉。把函数改造成一次接一个参数的柯里化技法,以及函数式语言 Haskell 的名字,都是取自他。
该舍掉哪条规则
既然出了矛盾,就必须舍掉某处前提。候选主要有三个。
其一是禁止自指的方针:给语言分层,让句子指不到自己。这与塔斯基在定义真理时所走的路是同一个想法。
其二是限制真值谓词的用法:能在“C 是真的”与“C 的内容”之间自由来回,正是矛盾的材料,那就给这种来回加上条件。
而第三个,对逻辑学家来说是最刺激的选项:舍掉收缩规则。
所谓收缩规则,是指出现“若 A 则若 A 则 B”这种形状时,可以把它并成“若 A 则 B”。在上面的证明里,C 被用了两次,正是这条规则在起作用。
“同一个前提用多少次都跟用一次一样”,这条看着实在理所当然的规则,其实也能造出不承认它的逻辑体系。线性逻辑与相干逻辑就是这样,它们把前提当作资源来点数。库里悖论,正是这类子结构逻辑被认真研究的一大动因。
把前提当资源来点数的逻辑
舍掉收缩规则这个选择,起初看着离谱,后来却从完全另一个方向获得了支持。
各体系的处理差别
| 逻辑体系 | 收缩规则 | 前提的处理 | 库里的矛盾 |
|---|---|---|---|
| 古典逻辑 | 承认 | 可以反复取用 | 会发生 |
| 直觉主义逻辑 | 承认 | 可以反复取用 | 会发生 |
| 线性逻辑 | 不承认 | 用一次就被消耗 | 不发生 |
| 相干逻辑 | 加以限制 | 与结论无关就不能用 | 不发生 |
1987年让-伊夫·吉拉尔提出的线性逻辑,把前提当作资源而非信息来处理。
想想自动售货机就很好懂。有一枚硬币就能买一瓶饮料,可不能拿同一枚硬币买两瓶,因为硬币用掉就没了。
古典逻辑把前提当成可以随意复制的信息,所以表达不了这条再自然不过的约束。
一路影响到今天的语言设计
这个想法如今已被写进编程语言的设计里。
- “线性类型”:用类型约束值只能用一次,防止资源被重复使用
- “Rust 的所有权”:某个值的主人始终只有一个,交出去的一方就用不了了
- “并发的安全性”:在编译期保证同一份资源不会被多方同时碰到
文件关掉之后又去写入这类错误之所以能在设计阶段掐掉,靠的正是这套想法。
为了拦住圣诞老人而提议删掉的一条规则,四十年后成了内存安全的工具——这个走向实在不好预料。
集合论里也会出同样的事
这个结构不止于语言的话题。
朴素集合论认为,只要写下条件,满足该条件者的全体就构成一个集合。那么就来考虑满足“若以自身为元素,则圣诞老人存在”这个条件者的集合。
于是在考察这个集合是否包含自身的过程中,完全相同的推理就启动了,圣诞老人的存在被导了出来。
这与罗素悖论并列,成了显示朴素造集合之法很危险的例子。我知道这个问题时,对真凶竟是那条理所当然到根本没被当作怀疑对象的规则这个走向,着实吃了一惊。
为何说它比说谎者更麻烦
最后把这个问题对逻辑学家而言为何严重,整理一下。
- “不用否定”:增加真值之类围着否定打转的对策统统失效
- “结论可以随便挑”:任何主张都能证明,体系彻底失去意义
- “用到的规则很少”:只靠条件句的处理就成立,几乎没有可削的部分
- “直觉主义逻辑里也会出”:舍掉排中律也躲不掉
第三条尤其难办。若是说谎者悖论,还能用“承认既非真也非假的值”这一手;可库里这边压根就没在谈真假,那条退路打一开始就不存在。
剩下的选项只有三个:禁止自指、限制真值谓词、舍掉收缩规则。选哪个都要失去点什么。
它逼着人去动逻辑学工具箱里最不容易被怀疑的那条规则——就这一点而言,这一句话的破坏力实在突出。
与自指有关的悖论
一想谈论自身,意义就定不下来——下面是与此相关的悖论。
结语
本文解读了“库里悖论”。
不用否定,仅凭一句话就能证明一切主张。它的射程比说谎者悖论更广,而且把讨论一路推到了让人去怀疑“同一前提用几次都一样”这条规则的地步。
越是觉得无从怀疑的东西,其实越是一次都没被检查过。想到逻辑学的地基上也有这样的地方,就觉得这个问题相当有味道。
想返回悖论列表的读者请点击下方链接。
我们下一篇文章见。
📚 系列:世界经典悖论(26/81)
读者也常看这些



