今天分析一个古老的逻辑学问题:
有一个地方,有两扇门:一扇是生门;另一扇是死门。每个门前都有一个守卫:一个只说真话,另一个只说假话。你只能问其中任一个守卫只一个问题。
请问:如何找出生门?
这个问题曾在网上引起热议,不少学者和逻辑爱好者都给出过巧妙的解答。接下来我们从逻辑学来考虑这个问题。
在逻辑学中,一个命题要么真要么假,两者必居其一。若命题为真,则说真话的守卫会回答真,说假话的守卫会回答假;若命题为假,则说真话的守卫会回答假,说假话的守卫会回答真。
虽然守卫可以以论文的形式回答出你的问题,但由于结论亦真亦假,所以无论怎么问问题,能得到的信息只能二选一,于是问题转化为:问一个命题的真假,通过守卫的回答真或假来达到信息二选一的目的。
理解这一点非常关键,通俗来讲:“让守卫以任何方式来回答问题”与“以真假(或是否)来回答命题”本质一样,且你只能通过一次回答从命题真假两种可能中排除一个得到另一个。
举个例子来说清楚这一点。
比如对任意守卫指着任意门问:“1+1=2么?这个是生门么?”这个赖皮的提问看似精妙地解决了问题,能从四种可能中确定一种可能,其实不然,因为我们只能问一个问题,所以守卫不会像你想得那样,分步回答——“第一个问题判断真假守卫,第二个问题判断生死门”。
假设守卫回答:“是,是。”你仍无法判断这个门是什么。
因为若回答的是说真话的守卫,则说明这个门是生门;若回答你的是说假话的守卫且这个门是死门,面对同样的提问,说假话的守卫如果说真话应回答“是,否。”
但他不说真话,所以他说除了“是,否。”以外的话都算说假话,所以他选择回答“是,是。”也是可以的。
这就说明这个门既可以是生门又可以是死门,即问题并没有解决!
除此之外,为了解题,题目需要补充一些严谨性的说明:
题目中的两个守卫是全知或全智。全知可以理解为他们是上帝视角,对彼此非常的了解,全智是绝对聪明,即对一切命题都能按正确的逻辑推导并最终给出预设的结论。
先看第一种情况,假设两守卫是全智但不全知(可理解为两守卫互不认识)。
初步分析,不难得到结论一:在只能问一个问题的情况下,该问题必须是用来判断哪个门是生门而不是用来判断谁说真话。
诸如“你说真话么?”“对方说真话么?”这类问题应予摒弃;诸如“这个门是生门么?”“你背后的门是什么门?”这类问题应予考虑。
继续分析,在不知谁说真话的前提下,两个守卫地位对等,所以如果问题问出两个守卫回答不一致的话,则无法判断真假从而无法得到有用信息。
结论二:说真话和说假话的守卫回答问题的结论同真假。
诸如“这个门是生门么?”“你背后的门是什么门?”这类问题回答必是一真一假,应予摒弃;诸如“你说真话么?”“对方说真话么?”这类问题回答必是同真假,应予考虑。
这看上去就有矛盾了,至此很多人认为问题不可解。实际上,这个矛盾的想法是无法解题的根本原因,但这个想法只对了一半,对于一个简单命题来说,这个矛盾是存在的,但对于复合命题,这个矛盾则可以消除。
复合命题是简单命题通过联结词联结而成的命题。于是有必要先复习一下逻辑联结词。
非、合取(与、且)、析取(或)、异或、与非(顾名思义先与再非)、或非(先或再非)。
那么简单命题的真假也会影响到复合命题的真假,具体如下:
说真话,按照上表不会有歧义。对于简单命题,说假话很容易理解。那么复合命题说假话是什么意思呢?是通过正确的逻辑推理得出一个结论,最后一步说假话(取非),再告诉你。
这一点也符合我们前面的假设,守卫绝对聪明,逻辑清晰,只是说假话而已。明确这一点非常关键,说假话的守卫对复合命题本身是不说实话的,但对于其组成部分的简单命题和简单命题之间的运算都是按真实情况逻辑推理的。
有了曙光后,准备构建一个复合命题。
再回到之前的结论中,因为结论一,所以命题1必须包含“这个门是生门么?”注意到这是一个简单命题,所以两守卫对其真假判断一致;又因为结论二,所以需要让两个人回答一致,往前倒退一步,即两守卫对复合命题的真假必须相反。
现在看上表,已知命题1同真假,但要求复合命题真假互异,只能选“异或”,所以再倒退回命题2,必须保证两守卫的回答为一真一假,这里的一种选择(不唯一)是,命题2为“你说假话么?于是就得到了由两个简单命题异或联结成的复合命题。
不难验证,对任意守卫指着任意门问:“这个门是生门异或你说假话么?”若回答为真,则选该门;若回答为假,则选对门。
这里有同学发问了:“异或”这个词有点小众,守卫不知道怎么办?
(注释:如果把真记为1,假记为0,那么异或就是二进制下的加法运算。)
其实很好办,“异或”是可以拿前三个更为常见的联结词(非、与、或)组合替换的。
有逻辑恒等式:“命题1异或命题2”可替换为“(非命题1与命题2)或(非命题2与命题1)”。
于是等价解法——对任意守卫指着任意门问:“这个门是死门且你说假话,或者,这个门是生门且你说真话么?”若回答为真,则选该门;若回答为假,则选对门。
总结一下,这个解法的核心是:说假话的守卫在对复合命题中简单命题及简单命题间的运算是按真实情况逻辑推理的。
看第二种情况,假设两守卫是全知但不全智(可理解为两守卫只会回答简单命题)。
有了第一种情况的分析,我们知道仍需借助复合命题,但守卫只能回答简答命题,所以要在提问前事先设计好命题的逻辑运算。由于守卫说话一真一假,如果把他们的话进行合取运算,则联合的回答总是假的。一旦结论的真假可知,那么问题自然解决。于是只需在“这个门是生门么?”前面加上“对方守卫怎么回答”即可,这样结论一定是假,只需跟被问守卫的回答反着来选。
不难验证,对任意守卫指着任意门问:“对方守卫怎么回答‘这个门是生门么’?”若回答为真,则选对门;若回答为假,则选该门。
当然这种情况的解法也不唯一。
顺着上面“异或”解法的思路,还可以得到一种变式解法。
“这个门是生门异或你说假话么?”含有两个简单命题,前命题是为了确定生门,后命题是为了调整真假,于是考虑设计一种简单命题同时包含以上两个功能。
本问题包含两个客观信息,一个是生/死门,一个是说真/假话,则所有的可能有四种:生门前是说真话的守卫,生门前是说假话的守卫,死门前是说真话的守卫,死门前是说假话的守卫。
事实上,若守卫没有站在门前仍可以人为指定记为逻辑门前,即只需把两个守卫分别分配给两个门即可,当然这个信息需要同步给两个守卫(由假设中守卫的全知性,则这点是合理的)。这四种可能,第一种和第四种是同一种,同理,第二种和第三种是同一种。若不管是哪种守卫,回答为真时指向同一种,回答为假时指向另同一种,则问题可以解决。
于是只要任选这四种可能其一来提问即可,比如:“生门前的守卫说真话么?”
这个解法相对较难理解,具体分析一下。
首先该命题能确定客观信息,故可以确定生门。
其次这是一个简单命题,故说真话与说假话必然导致两个真假相反的回答,但在提问时,说真话与说假话站在相对的位置,“负负得正”,所以不管是哪种守卫,相同回答指向同一种。以上就同时满足了复合命题的两个功能。
再次,若回答为真,则只需选回答者所在门;若回答为假,则只需选回答者所在门的对门。
最后,逐一验证回答者所在门为生门或死门的两种情况,易知均能正确选择。
综上,对任意守卫问:“生门前的守卫说真话么?”若回答为真,则选回答者所在门;若回答为假,则选回答者所在门的对门。
总结一下,这个解法的核心是:利用两守卫对对方完全了解,通过只问“XX怎么回答/说XX”的简单命题来叠加某些可能从而达到复合命题的效果。
从上面的分析易知,若两守卫既不全知也不全智,则该问题无解。
至此,该问题被完美解决了。当然类似的问题还有很多,类似的解法也不少,不过,大多数是同构问题,解题思想基本一致。
最后给大家提供一道练习题,问题看起来很复杂,但利用好递归思想,则容易入手。
有一个地方,有两扇门:一扇是生门;另一扇是死门。
有三个守卫:一个只说真话,一个只说假话,还有一个时而说真话时而说假话,但不总是说真话或假话。你能问两个问题,每次只能问其中任一个守卫只一个问题!
请问:如何找出生门?(补充:三守卫全知全智)
▼
思路:利用递归思想,如果问完第一个问题可转化为双守卫问题则该问题解决。于是第一个问题的目标就是找出一个守卫使得该守卫只说真话或只说假话。
参考解法:对守卫编号为1、2、3。第一个问题对1问:“2是否比3说更多真话?”若回答为真,则选3;若回答为假,则选2。第二个问题对选出来的人问:“另外两个人里,立场坚定的那个人,怎么回答这个门是生门么?”若回答为真,则选对门;若回答为假,则选该门。