0%

[4068] 闲谈世上最难的逻辑问题

首先声明这并不是一篇标题党的文章,标题中的“世上最难”不是我说的,是 wikipedia 说的。故事的开始是苦逼的博士狗们一起赶作业,然后尘锐案突然就把这个东西搬了出来,然后大家瞬间两眼放光,纷纷抛弃了作业……当然主要的讨论都是由Y. Huang尘锐案进行的,我只是听懂并且理解了他们的做法,不过实在是很有意思,所以记录一下.

问题

世上存在三个神,分别是 True 神,False 神和 Random 神。其中

  • True 神只说真话
  • False 神只说假话
  • Random 神每次在听完问题后,抛一枚硬币来决定说真话还是说假话

它们现在就在你面前,但是你不知道哪个神是哪个神。你有三次机会来试探,每次机会你可以说出一个 statement,并找其中一位神来给出判断 (T/F)。 神总是能听懂你的语言,并给出按照它设定的回答,但是它会用自己的语言来回答,它会回答 X 或 Y 。你知道其中一个代表 T,另一个代表 F,但是并不知道哪个代表哪个。

问题来了:你能在用完三次机会后,判断出三位神各自的身份吗?

答案

答案是:可以。

甚至我们可以做到更强:每次都可以随机问一个神(特别的,可以做到每次都问同一个神,或者依次问完所有神)。事实上,我们有如下定理

Theorem 对于任意一个 statement $Q$,存在一个 statement $\mathrm{P}(Q)$,使得任意一位神对 $\mathrm{P}(Q)$ 给出的判断,在我们自己给定的翻译下,都是对 $Q$ 正确的判断。

而这个 $\mathrm{P}(Q)$ 的存在性,是我们反推出来的。当时的情况是:Y. Huang不知道从哪里知道了有这个定理,于是tayigeren把这个 $\mathrm{P}(Q)$ 推导了出来。事实上,考虑这样一个图:$Q\rightarrow \mathrm{P}(Q)\overset{\text{God}}{\rightarrow} \{\text{X,Y}\}\overset{\mathrm{I}}{\rightarrow} \{\text{T,F}\}$。这里,God 箭头表示神给出了判断,$\mathrm{I}$ 是我们自己对神的语言的解释,我们希望最后这个复合函数给出了 $Q$ 的判断,也就是说,我们希望如下的复合是一个恒等映射
$$\{\text{T,F}\}\overset{\mathrm{P}}{\rightarrow} \{\text{T,F}\}\overset{\text{God}}{\rightarrow} \{\text{X,Y}\}\overset{\mathrm{I}}{\rightarrow} \{\text{T,F}\}$$
所以我们有 $\mathrm{I}\circ \text{God }\circ \mathrm{P} =\mathrm{id}$,我们对 God 函数唯一知道的事情是:它是一个双射。也就是说,它一定会把 T 映射到 X,Y 中的一个,然后把 F 映射到另一个。所以我们可以写下如下等式:$\mathrm{P}=\text{God}^{-1}\circ \mathrm{I}^{-1}$

我们好像几乎做完了(因为找到了 $\mathrm{P}$ 的表达式),但是又好像什么都没做($\text{God}^{-1}$ 是个什么鬼!)

我们作如下观察:

  1. $\mathrm{I}$ 是我们自己选择的解释,所以我们可以给出自己的规定,比如:$\mathrm{I}(\text{X})=\text{F},\mathrm{I}(\text{Y})=\text{T}$。也就是说,God 说 X,我们就认为它说 F;God 说 Y,我们就认为它说 T。
  2. 假如 $\mathrm{I}\circ \text{God }\circ \mathrm{P}$ 把 T 映射到 T ,那么它已经是个恒等映射了。因为每一步都是双射,而一共只有两个元素,只要一个元素对,另一个元素就一定是正确的。

所以我们只需要 $\text{God}\circ \mathrm{P}(\text{T})=\mathrm{I}^{-1}(\text{T})=\text{Y}$,下面是睁大眼睛的时刻:

假如 $\mathrm{P}(\text{T})$ 是 true statement, 也即 $\mathrm{P}(\text{T})=\text{T}$,我们有如下等价
$$\mathrm{P}(\text{T})\Leftrightarrow \mathrm{P}(\text{T})=\text{T} \Leftrightarrow \text{God}(\mathrm{P}(\text{T}))=\text{God}(\text{T}) \Leftrightarrow \text{Y}=\text{God}(\text{T})$$
所以!$\mathrm{P}(\text{T})$ 这个 statement 就是在说 $\text{God}(\text{T})=\text{Y}$,翻译一下就是:你对 truth 的判断是 Y。

我们来考虑一下真值表,假设神的语言是 X 代表 T,Y 代表 F:

  • 假如是 True 神,那么对它来说: truth 的判断是 X。所以我们的 statement 是假的,从而它要说Y。经过我们的解释函数 $\mathrm{I}$,我们得到了回答 T。
  • 假如是 False 神,那么对它来说:truth 的判断是 Y。所以我们的 statement 是真的,从而它要说Y。经过我们的解释函数 $\mathrm{I}$,我们得到了回答 T。

现在我们可以把 T 换成我们想要的任何 statement $Q$ 了。比如,$Q$ = 你是 True 神。延续上面的语言设定(X for T,Y for F),那么我们问神的 statement 是:你对“你是 True 神”的判断是 Y,然后

  • 假如是 True 神,那么 $Q=\text{T}$,根据我们上面的分析,我们可以得到 T 的回答,注意这个 T 是针对 $Q$ 的判断,所以我们知道这个神就是 True 神
  • 假如是 False 神,那么 $Q=\text{F}$,所以它对 $Q$ 的判断是 X。再看我们的 statement,发现我们的 statement 也是假的,所以它要说反话,从而给出 X 的回答,而我们的翻译(注意这里是 $\mathrm{I}$ 函数而不是上面的语言设定)说 X 代表 F,所以这个不是 True 神
  • 假如是 Random 神,那么 $Q=\text{F}$。假如它选择说假话,那么和 False 神一样的推出它的回答是 X ;假如它选择说真话,那么它对 $Q$ 的判断是 Y,从而我们的 statement 是对的,所以它会说 X。但是解释函数告诉我们,这意味着 $Q$ 是假的,所以这个也不是 True 神!
    我们看到,只有 True 神会给出 T 的回答,其余都是 F,所以接下来我们只要一个个问就行了。
Remark 我们可以看到,我们的提问方式保证了不仅仅可以无视问的是哪位神(因为总是可以得到正确的回答),而且不依赖神的语言!即使说神互相之间的语言也可以是不一样的,比如 True 神对 T 说 X,Random 神对 F 说 X,而我们可能两个神都会问到,甚至用同一个解释函数 $\mathrm{I}$ 去解释它们的回答,我们仍然可以得到正确的答案!

推广问题

上述问题中,Random 神是在回答问题前,选择接受 True 神或者 False 神的设定,再作回答。可以看到我们的答案完全可以忽略 Random 神,因为当它抛完硬币后,它就被归到 True 神或者 False 神的情况里。所以呢,Random 神很不高兴,现在它要秀一下存在感:它决定通过抛硬币来决定它的回答(而不是回答方式)!也就是说,每次 Random 神给出的判断完全就是抛硬币的结果,而和你问什么完全没有关系。它完全不给出任何信息量。现在还是三次机会问三个神,请问:你还可以找到一个方法区分这三位神吗?

尝试解答

在 Random 神决定再也不当它们中的任何一个后,它就彻底不提供任何信息量了。那我们该怎么办呢?
注意:以下所有提问,均指用 $\mathrm{P}$ 函数包装过后再提问,就是当我们说提问 $Q$ 的时候,实际上我们在问 $\mathrm{P}(Q)$。

我们把三个神标注成 A、B、C,考虑问 A 神这样一个 statement:“B 是 Random 神”,会发生什么?

  • 假如 A 是 True/False 神,B 不是 Random 神,那么 A 会告诉你:F
  • 假如 A 是 True/False 神,B 是 Random 神,那么 A 会告诉你:T
  • 假如 A 是 Random 神,那么 A 会告诉你:F 或者 T

有人说,这有啥用啊?T 和 F 都会出现,你还是啥都不知道啊?且慢,让我们仔细分析一下。假如答案是 T,那么只可能是

  • A 是 Random 神
  • A 是 True/False 神,B 是 Random 神

无论哪种情况下,C 神都不是 Random 神!同理假如答案是 F,那么可以得出 B 神一定不是 Random 神!所以无论怎样,你都可以确定某一位不是 Random 神,接下来,只要对那位不是 Random 神的神问两问题:

  1. 谁是 Random 神
  2. 你是什么神

就可以了。具体怎么问,大家可以自己思考一下。

更变态的版本

我们看到,上面的解决方案依赖两点:

  • 你不能只问一个神
  • 你可以问同一个神两个问题

那就自然想到,能不能给这些东西加上限制:

首先想到的限制是:能不能只提问一个神?而这个限制显然是不可能的,因为运气不好可能正好抽到只提问 Random 神,那么无论你怎么发问都无法得出任何有效信息,此题无解。

那么第二个可能的限制是:能不能强制要求依次提问三个神(也即每次必须询问不同的神)?我们几个的 naive 想法是:不行,因为第一个问题只能确定 $0.5$ 个神的身份(也即是其中一个神不是 Random 神)。接下来我们必须利用这个神不是 Random 神这一点来拷问得到所有信息。假如必须依次提问,可能出现两种情况:

  1. 先问 Random 神,再问 True/False 神,最后问 False/True 神。
  2. 先问 True/False 神,再问 False/True 神,最后问到了 Random 神。

第一种情况自然皆大欢喜,你从一个本来不能获得任何信息的 Random 神那里获得了信息,所以绝对是可以完成任务的。但是第二种情况就有点无解了,最后一个问题没有办法给出更多的信息了。

一个具体的情形如:A 是 True 神,B 是 False 神,C 是 Random 神。我们先问了 A:B 是 Random 神吗?得到 F 回答,于是确定 B 不是 Random 神,接下来问 B:C 是 Random 神吗?(或者 A 是 Random 神吗?),得到回答可以让我们确定 C 是 Random 神,A 和 B 是 True/False 神。但是最后一个问题要问 C,而这种情况下我们是没有办法获得对 A 和 B 的信息的。

参考文献

  1. The Hardest Logic Puzzle Ever