世界最难的逻辑推理题之一 —— 真话精灵假话精灵和随机精灵
MIT(麻省理工 )哲学及逻辑学家George Boolos命制的推理题:
Three gods A, B, and C are called, in no particular order, True, False, and Random. True always speaks truly, False always speaks falsely, but whether Random speaks truly or falsely is a completely random matter. Your task is to determine the identities of A, B, and C by asking three yes-no questions; each question must be put to exactly one god. The gods understand English, but will answer all questions in their own language, in which the words for yes and no are da and ja, in some order. You do not know which word means which.
有A,B,C三个精灵,其中一个只说真话,一个只说假话,还有一个随机回答(自己决定何时说真话何时说假话)。你有三次机会,每次点一个精灵回答你一个问题。而你的任务是找出谁说真话谁说假话谁随机答话。精灵会以「Da」或「Ja」回答,但你并不知道它们的意思,只知道其中一个字代表「对」,另外一个字代表「错」。你应该问怎样的三个问题?
解题过程:
0. 前设
先给三个精灵起个名字. T(rue)真话精灵 F(alse)假话精灵 R(andom)随机精灵.
再给三个精灵排个队型, 三个位置为甲乙丙
1. 在不知道「Da」或「Ja」各自指代意思的情况下,如何知道得知提问结果.
设命题P即为你想提问的问题. P=1表示命题为真,P=0表示命题为假.
设命题D为: 「Da」表示yes的意思. 则D=1表示命是为真,D=0表示命题为假.
设命题 Q = !(P ^ D) 即 Q为 P和D命题的同或(异或的非,即两命题要么同为真,要么同为假).
则当 P=1 时, Q=D . 此时对于应该答"yes"的P命题, 当D=1 则Q=1 T会回答Da F 回答 Ja
当D=0 则Q=0 T会回答Da F 回答 Ja
则当 P=0 时, Q=!D . 此时对于应该答"no"的P命题, 当D=1 则Q=0 T会回答Ja F 回答 Da
当D=0 则Q=1 T会回答Ja F 回答 Da
可见,当把P命题转换为Q命题来提问后,回答「Da」表示对P命题的肯定,而回答 「Ja」表示对P命题的否定.
2. 由于有了1的基础,这里不再考虑「Da」或「Ja」的明确含义问题. 我们考虑下假话怎么转成真话.(永远说假话其实与说真话无异).
同样设命题P为你想提问的问题.P=1表示命题为真,P=0表示命题为假.
设命题S为: 你是真话精灵. 则 S=1表示被提问者是T,你会得到肯定的回答; S=0表示被提问者是F,你同样会得到肯定的回答(他骗了你)
设命题Q = !( P ^ S ) ,即 命题P ,你是真话精灵两个命题,要么同为真,要么同为假.
则当 P=1 时 ,Q=S. 此时对于应该答"yes"的P命题, 当S=1 则Q=1 被提问者为T,会肯定回答
当S=0 则Q=0 被提问者为F,也会肯定回答(Q为假,所以骗你为真)
则当 P=0 时 ,Q=!S. 此时对于应该答"no"的P命题, 当S=1 则Q=0 被提问者为T,会否定回答
当S=0 则Q=1 被提问者为F,也会否定回答(Q为真,所以骗你为假)
3. 通过1 和 2 两步,将问题转换一下,则可以对你关心的问题得到你想要的答案.
设P为你真正关心的简单命题.
设命题D为: 「Da」表示yes的意思. 则D=1表示命是为真,D=0表示命题为假.
设命题S为: 你是真话精灵. 则 S=1表示被提问者是T,你会得到肯定的回答; S=0表示被提问者是F,你同样会得到肯定的回答(他骗了你)
设命题Q1 = !( P ^ D ) ,即转换为第1步的命题.
设命题Q = ! ( Q1 ^ S ) ,即将1得到的命题进一步转换为2的命题.
合并简化为:
Q= ! (! ( P ^ D ) ^ S )
天,这个问题怎么描述? 不急,看下所有状态列表:
P D S : Q
0 0 0 : 0
0 0 1 : 1
0 1 0 : 1
0 1 1 : 0
1 0 0 : 1
1 0 1 : 0
1 1 0 : 0
1 1 1 : 1
即Q命题表达为: P D S 三个命题,要么同为真,要么只有一个真.
4. 知道怎么提问了,现在说下提问顺序.
先让三个精灵占好甲乙丙三个位.
问甲:丙是随机精灵,你是真话精灵,Da 表示 yes. 这三个命题,要么同为真,要么只有一个真. 请你回答.
答Da : 丙和甲都有可能是R,乙绝对不是.
答Ja : 甲和乙都有可能是R,丙绝对不是. 让乙丙两个精灵换下位置. 这样就保证了乙位置上一定不是R
问乙: 丙是随机精灵,你是真话精灵,Da 表示 yes. 这三个命题,要么同为真,要么只有一个真. 请你回答.
答Da :丙是R ,甲一定不是
答Ja :甲是R ,丙一定不是. 甲丙换下位置,保证丙位置一定是R.
问乙: 甲是假话精灵,你是真话精灵,Da 表示 yes. 这三个命题,要么同为真,要么只有一个真. 请你回答.
答Da :甲是F,乙是T,丙是R. 甲乙换下位置,形成 TFR队型.
答Ja :甲是T,乙是F,丙是R. 队型TFR已成.
问毕.