轉自http://www.iqstar.net
出處:http://www.oursci.org/bbs/oursci/showthread.php?s=&threadid=2494
有一個老題目說:
有100個囚犯關在一個牢裡,他們放風的地方有盞燈,還有個開關是控制燈的,拉一下燈開,再拉一下燈滅。
有一天典獄長把囚犯們集合起來宣布說:從現在起,每當我高興時,會挑選一個囚犯來放風,如果到某個時候,你們中有個人向我報告說,所有囚犯都已經被我這樣挑到放過風了,而且事實的確如此,那麼你們全部會被釋放。但是如果那個報告的人報告錯了,那麼你們通通都會被槍斃。
監獄長補充說,放風的地方的那盞燈和開關,除了囚犯以外,沒有任何人會去動,它們的品質也夠好。除此之外,就沒有什麼保證了。挑選放風的囚犯不一定是每個人的機會都均等,但是他可以保證,對任何一個囚犯來說,對於任意大的自然數n,只要時間足夠長,他都會被放出來n次。
囚犯們在回自己的單人牢房以前還有一些時候可以聚在一起討論,來確定一個絕對可靠的可以被放出去的方案。他們知道一旦這次回牢房以後,就沒有任何除了那盞燈以外的連絡方式了。他們不可能看見或聽見任何其他囚犯(當然也看不見典獄長),在牢房裡也不能看見放風的地方。糟糕的是他們甚至不知道現在那盞燈是亮著還是滅著。另外,典獄長喜怒無常,有時一天也許可以高興100次,有時也許好幾天也高興不起一次。典獄長也很聰明,精於觀察,你要是在放風的地方做些其他的記號,比方說放點什麼,畫點什麼之類,他很可能會偷偷地也放點或畫點類似的玩意,或者乾脆在那裡來個大掃除。所以最好不要自作聰明打除了那盞燈外的主意。
如果你是囚犯之一,如何在大家最後在一起的這個時候,給大家建議一個絕對可靠的方案?
=========================
下面這個題是我(這裡是指三思的老大冷飯先生)出的:
如果典獄長又說,再大家回自己的牢後,他會隨便挑一個人釋放掉,讓剩下的99人來玩這個遊戲(剩下的99人不知道到底誰被挑到了);而且他告訴大家說,現在那盞燈是滅的。那麼如果你認為這下就不存在一個絕對可靠的方案了,證明這個觀點;如果你認為仍存在一種絕對可靠的方案,提出這個方案。
下面的解答由三思論壇的path2math給出,並由冷飯整理的
==========================
一) 首先定義一下囚犯某一次放風時所處的狀態:如果此次燈的狀態和上次放風結束時一樣(都是滅的或者都是亮的),那麼這次囚犯的狀態就是“正常”(比方說如果上次囚犯放風時燈是亮的,而他把燈關了,那麼這次囚犯看見燈仍是滅的則正常,如果亮了則反常),否則就是“異常”。如果囚犯是第一次放風,因為沒有上次燈的狀態,所以按定義囚犯第一次放風的狀態總是“異常”(當然這點也可以作為囚犯狀態定義的一部分)。囚犯每次放風都有三種可能的操作:按按鈕改變燈的狀態,什麼都不做,或者報告所有人都出來過了(簡稱“報告”)。
下面的二)-五)把囚犯可能的策略正常化一下。
二) 因為囚犯除了每次放風時看見的燈的狀態,以及他每次放風的操作這些資訊,就沒有任何其他資訊了,所以囚犯在第n次被放出去的策略要求做的行動(按燈,不按,或者報告),只取決於前n-1次看見的燈的狀態以及他的操作。如果在囚犯的策略中,在第n次放風時即便發現燈“正常”的情況下,還是要去按了一下(或者報告),那麼典獄長完全可以在第n-1次放風后立刻讓囚犯再放一次。這樣,囚犯的策略等價於在第n-1次做和他原行為相反的行為——如果第n-1次原策略是要按燈,那就不按,反之就按(或者在第n-1次就報告,如果他原策略是要在第n次報告的話)。這樣我們就證明了,如果有一種策略能使囚犯獲得自由,那麼一定有一種無需“雖然看見燈‘正常’,但還是要按燈或報告”的策略,也同樣可以使囚犯獲得自由。
三) 同樣地,囚犯的策略中也不需區別連續碰到正常狀態的次數。在放風過程中,如果囚犯的策略是在第n次放風時發現異常,他就做某操作(按,不按或報告)——那麼對任何的k>=0,如果囚犯從第n次放風到第n+k次放風中都正常,而接下去第n+k+1次才異常,那麼他應該在第n+k+1次放風時做和上面第n次放風就發現異常時做同樣的操作。因為按照和二)中同樣的邏輯,典獄長完全可以讓此囚犯第n-1次放風后再連續放出來k+1次,使得囚犯的“第n次放風時發現異常”的策略沒有用武之地。
四) 按照上面的論述,囚犯的策略的描述就可以(粗略地)敘述為下面的形式:“第1次異常,做某操作;第2次異常,做某操作;第3次異常,做某操作;……”,完全沒有必要考慮某次放風會是正常狀態——首先按照二),正常狀態一定不幹任何事,其次按照三),兩次異常間有多少次正常並不重要。
五) 在四)中的說法有一個不確切的地方,就是第1次異常(就是每個人第一次被帶出來的時候)有可能有兩種情況,就是燈是開的或者燈是關的。以後那些異常中燈的狀態是由第1次異常決定的:如果第1次異常時燈開,那麼第2次燈滅,第3次燈開,第4次燈滅……;而如果第1次異常時燈滅,則是相反。所以正確地說,每個囚犯的策略有兩套:
初始開策略:一套是“如果第1次燈是開的,那麼做某操作;第2次異常,做某操作;第3次異常,做某操作;……”,這個策略我們稱為S1;
初始滅策略:另一套是“如果第1次燈是滅的,那麼做某操作;第2次異常,做某操作;第3次異常,做某操作;……”,這是S2策略。
當然,在具體使用中,每個囚犯只會用其中的一套,這由第一次放風時囚犯看見的燈的狀態決定。
接下去是path2math證明的核心。
六) 對於每個囚犯,假設他的S1中,對於前a個異常,採取的行動都是按開關,而對於第a+1個異常則不是(不按或者報告);而在S2中,對於前b個異常,採取的行動都是按開關,而對於第b+1個異常則不是;那麼稱這個囚犯的S1數為a,S2數為b。a,b可以是0,任意大於0的自然數,或者無窮大。決定了一個囚犯的S1數和S2數,實際上只決定了他的策略的(前面)一部分;但是下面將會看到,這一部分策略已經包含了全部的困難。也就是說,要麼典獄長不需要考慮這部分策略以外的部分,就可以讓囚犯們失敗;要麼只需這部分策略就可以使囚犯們成功。
七) 一個簡單有趣而重要的結論是:當一個囚犯採取S1策略時(也就是說第一次將他放出時燈是亮的),連續a次(a為他的S1數)異常後,如果下次異常他不決定報告(如果並非所有人都被放出去過,他一定不會決定報告),他就會有一次“不敏感時刻”,也就是說,下次放風時,無論燈亮或滅,他都會什麼都不幹,並認定燈此時的狀態為正常。對S2策略也有類似結論。
八) 每個囚犯屬於且僅屬於下面四種情形中的一種:
a) S1 > 0, S2 = 0;
b) S1 = 0, S2 > 0;
c) S1 > 0, S2 > 0;
d) S1 = 0, S2 = 0;
不可能所有的囚犯都有S2=0:那樣的話沒有任何一個人會在第一次放風時按鈕開燈,而且所有人放風一次後都會以為燈滅是正常的,於是永遠不會有人開燈。不可能所有的囚犯都有S1=0:按前面所言必須有一個人S2>0,典獄長先讓這個人出來開燈,此人以後認為燈亮為正常,而其他所有人沒有任何一個會在第一次放風時按鈕關燈,而且所有人放風一次後都會以為燈亮是正常的,於是永遠不會有人關燈。
我們要證明,可以將a)b)c)三種囚犯分成A、B兩組,使得下列條件滿足:(後面我們會看到,如果囚犯們希望有個成功的策略,d)情況的囚犯數必須為0)
1) 所有滿足a)的囚犯都在A中;
2) 所有滿足b)的囚犯都在B中;
3) 令AA={a1,a2,a3,……}為A組中各囚犯的S1數集合,BB={b1,b2,b3,……}為B組中各囚犯的S2數集合(注意到這些ai和bi都嚴格大於0),令|A|為A組中人數,|B|為B組中人數,Ha為AA中各數和(可能為無窮大),Hb為BB中各數和(可能為無窮大)。我們有 Ha>=|B|,且Hb>=|A|。
九) 假設八)中的分組不可能成立,但是因為Ha>=|A|,Hb>=|B|,所以3)中的兩個不等式不可能全都不成立。我們假設至少存在一個分組,使得“Ha>=|B|”成立(“至少存在一個分組,使得Hb>=|A|”的情況將與此類似)。這樣我們就可以取一個分組,使得“Ha>=|B|”成立,而且Hb-|A|最大(但據假設還是會小於0),現在就取這個分組。
“Hb-|A|<0”意味著,使用“從B帶出一人開燈,從A帶出一人關燈”這樣的步驟,把B中的每一個人都帶出來相應的bi次(bi是那個人的S2數),從A中每次都挑選一個不同的人,最終還是存在A中從未被帶出過的囚犯。此時所有B組中的囚犯都進入“不敏感時刻”(見七)的結論),而A組所有已經被帶出過的囚犯認為燈滅正常。現在在A中所有還未被帶出來過的人中,如果所有人都是S2=0,那麼所有的人(包括d)情況的囚犯)都會在下次放風時不做任何事情,而且認為燈滅正常,於是永遠沒有人會開燈。所以在A中所有還未被帶出來過的人中,一定會有一個人的S2>0(也就是屬於c)情況)。
考慮一個特殊情況:如果除了這個人外,所有A組的人都進入了“不敏感時刻”(也就是說他們的S1數都是1,而且都被帶出去過一次,見七)),那麼把這個人帶出去一次(他會進入S2策略並開燈),結果他會認為燈亮正常,而其他所有人(包括d)情況人)都在“不敏感時刻”,以後帶任何人出來放風,他都會處於正常狀態,這就陷入無窮迴圈。
所以A組中一定還有一個人,他的S1數“還未使用完”(或者他還未出去過,或者他的S1大於1)。把前面所說的A組中S2>0的這個人轉到B組去,我們發現不會影響Ha>=|B|這個不等式,因為前面已經放出去過的那些A組人的數目就已經等於原來的B中人數,就算B來了一個新的成員,還有上面講的那個A組中S1數未使用完的人的S1數足夠抵消|B|增加的1了。但是此時|A|少了1,而Hb增大了A組轉過來的那個人的S2數,這就和前面“Hb-|A|最大”矛盾。這意味著我們的假設“八)中的分組不可能成立矛盾”。所以我們一定可以找到一個滿足八)中條件1)2)3)的分組。
現在取定滿足八)中條件1)2)3)的分組A和B。
十) 如果Ha和Hb都是無窮大(就是說A中有一人M的S1數無窮,B中有一人N的S2數無窮),那麼先帶出N,再帶出M,此時燈滅,且N今後將用其S2策略,M今後將用其S1策略。再將所有囚犯都帶出來一遍(無人會在第一次報告),假設此時燈滅(燈亮的推理類似),然後就按照以下迴圈放風:所有認為燈滅為正常的囚犯,N,所有認為燈亮正常的囚犯,M,……。這個無窮過程中沒有人會報告。
十一) 所以我們只能假設Ha和Hb中至少有一個是有限的。假設Hb有限且Ha>=Hb(Ha有限且Hb>=Ha的情況推理類似,但有對十二)的結論不對稱,將在十三)中討論)。
這時Ha>=Hb>=|A|。這意味著典獄長通過類似於九)中交替地讓B和A中人員放風,可以做到:所有B中的人都被帶出去他們的S2數的次數,所有A中的人都被帶出去過至少一次,此時燈滅。我們注意到,如果d)情況的人數不等於0,那麼按照七)中的結論,B中的所有人都必須處於“不敏感時刻”,這時,任何人(包括d)中的囚犯)放出去後都會什麼事情都不幹而且認為燈滅為正常,從而陷入無限迴圈。
所以d)情況人數必定為0,而且B中一定有一個人,在下次遇見異常情況時,會作出“所有人都放出過”的報告。這個人我們稱其為“S2特權人物”。按照定義,這樣的S2特權人物的數目也許不一定只有一個,但是我們將證明他其實只能有一個。(類似地在我們假設Ha有限且Hb>=Ha的情況下,我們會發現A組中必須有一個“S1特權人物”)。
假設某個S2特權人物x的S2數為b,按Hb的定義就知道Ha>=Hb>=b,如果B組中有不同於x的其他人(他的S2數>0,於是Hb>b),那麼只要典獄長扣住此人,只輪流地放x和A組的囚犯出來,那麼因為此時Ha>b,就可以使B組還有人沒被放出時,x就遇到b+1個異常,從而報告,這是不可能的。所以B組中只能有一個囚犯,他的S2數等於Hb。
這就證明了在十一)開始的假設下,有且僅有一個S2特權人物tb,B組就由他組成。
十二) 假如除了S2特權人物tb外,還有一個在A中的囚犯y的S2數大於0。現在我們扣住y,將tb和A組其他人輪流帶出,使得A組除y外的其他人都進入“不敏感時刻”(由於y被扣,所以無人會在下次報告),此時燈滅,而且tb認為燈開正常。如果現在將y帶出,他將開啟燈(因為他的S2>0),現在無人會關燈,進入無限迴圈。
所以除了唯一的S2特權人物外,所有其他囚犯的S2數均為0。
十三) 我們現在假設Ha有限且Hb>=Ha。我們同樣可以證明,有且僅有一個S1特權人物ta,A組就由他組成。
假如除了S1特權人物ta外,還有一個在B中的囚犯z的S1數大於0。現在我們扣住z,將B組其他人和ta輪流帶出,使得B組除z外的其他人都進入“不敏感時刻”(由於z被扣,所以無人會在下次報告),但在最後一次“先帶B群組成員開燈,再帶ta關燈”的過程中,不將ta帶出,而是代之以z。此時燈滅,而且ta和z都認為燈滅正常。現在無人會開燈,進入無限迴圈。
要注意到上面用z來取代ta的行動只有當ta確實在以前被帶出過一次時才有效(此時我們才可以斷言“ta認為燈滅正常”)。如果B組除了z以外的其他人的S2數的和是1,那麼這個論證過程也就不能成立,這個情況會發生在B組中只有z和另一個囚犯w,而且w的S2數為1,這正是20100帖中舉的三個人的策略的情形。如果囚犯總數>=4,那麼B組中的人超過2個,這個論證總有效。
所以,當囚犯總數>=4時,除了唯一的S1特權人物外,所有其他囚犯的S1數均為0。
現在來看典獄長會挑一個人釋放的情況。
十四) 假設囚犯數目>4。那麼在釋放掉一個囚犯後,如果剩下的囚犯的策略能使他們獲得自由,十一)-十三)中的結論均必須成立,注意十一)中指出,S1和S2數均為0的囚犯不應該存在。
但是典獄長可以計算每個人的S1和S2數。如果只有一個囚犯的S1數不為0,那麼其他囚犯的S2數均不可為0,否則就有人屬“S1和S2數均為0”的情況,於是釋放掉這個S1數不為0的囚犯;如果只有一個囚犯的S2數不為0,那麼其他囚犯的S1數均不可為0,於是釋放掉這個S2數不為0的囚犯。這樣,剩下囚犯無論怎樣分A和B組,他們的策略都不可能滿足十一)-十三)中的結論。
新問題的解答 by path2math
關於新問題的證明
首先對於每個囚犯來說,定義燈的兩種狀態:“正常”和“異常”。就是說,如果上次放風回來之前燈是開著的,這次被叫出去放風時卻看到它是關的,則為“異常”,反之則“正常”。而如果上次放風回來之前燈是關著的,則這次出來看到它是開為異常,關為正常。
這樣可以把囚犯們分成兩類:認為燈開著是異常的為A組,認為燈關著是異常的為B組。由於囚犯們從一開始就知道燈最初是關著的,所以一開始所有人都屬於A組。
下面來討論,如果存在一個策略,讓囚犯可以免於被處死或永遠關下去,那麼它應該是什麼樣的。
可以認為監獄長知道囚犯們的方案,然後會儘可能地不讓他們被釋放掉。
假設監獄長採取這樣一種行為方式:每次決定帶一個人出來放風的時候,都是不停地把他帶出來,直到他什麼也不做為止。在囚犯的策略中可以排除掉這樣一種情況:即使看到燈一直是“正常”,仍然會時不時地按一下開關。因為假如某個囚犯在某些情形下會採用這個策略,如果當時有人沒有被帶出來過,監獄長顯然可以利用這個策略任意地操控燈的開關,讓別的囚犯錯誤地以為所有人都被帶出來過了;而如果在那個囚犯採取這個策略時其他人肯定已經被帶出來過,那麼他可以不必用這個策略而直接向監獄長提出釋放要求。所以,在這種策略出現的可能性被排除掉的情況下,監獄長可以採取上述的行為方式。
反之,如果有一種策略在監獄長的上述行為方式下獲得成功,那麼把它稍加改動則必然可以適應監獄長所有的行為方式:只要在第一時間就決定是將燈開啟或是關上,以後如果燈一直“正常”則什麼都不做即可。
所以完全不妨假定監獄長採取上述的行為方式行事。這樣,囚犯只要是被帶出來過,他看到“正常”的燈就不會做任何事情。以下的討論都遵從這一前提。
首先,必然存在一個人,通過帶出他來可以把燈開啟。否則的話所有人都得一直被關著。所以監獄長第一步先把這個人帶出來,把燈弄亮。這樣這個人變為B組。
接下來,監獄長扣住一個A組的人,暫時不考慮帶他出去。以下如無特別說明,這個人都在討論範圍之外。顯然,在這個人被帶出來之前,不可以有任何人向監獄長報告說所有人已經被帶出來過了。
考慮A組餘下的人。對每個人來說,如果把他帶出來,看到這個“異常”的燈,最終結果只有兩種:x。燈保持亮著,自己變成B組;y。把燈關掉,自己留在A組。帶出一個會採取策略y的囚犯(如果存在的話),燈被關掉了。在剩下的人中,如果仍然存在一個人,通過帶出他來可以把燈開啟的,則把他帶出來,又把燈弄亮。於是再次進行這段開頭的過程。
上面這個迴圈會在有限次結束,因為A組的人數每次減一。結果可能有兩種情況:1。A組都是採取策略x的人,燈是亮著的;2。燈是關的,A組不存在一個人,通過帶出他來可以把燈開啟。對於燈是關著的情形,討論B組的情況,每個B組的囚犯看到這個“異常”的燈,也可能有兩種策略:a。燈保持關著,自己變成A組;b。把燈開啟,自己留在B組。如果B組存在採取策略b的囚犯,則把他帶出來,把燈弄亮;如果A組仍然存在採取策略y的人,又把他帶出來,把燈關掉;如果B組還存在採取策略b的囚犯,又把他帶出來,把燈弄亮……如果A,B兩組都有一直採取策略y和一直採取策略b的人,則會一直迴圈下去;否則的話,最終情形要麼是:r1。A組都是採取策略x的人,燈是亮著的;要麼是:r2。燈是關的,A組不存在一個人,通過帶出他來可以把燈開啟,並且B組也都是採取策略a的囚犯。
對於迴圈的情形,監獄長可以利用這一點任意操控燈的開關,因此總有辦法讓囚犯做出錯誤的報告或一直關下去,所以這是不應該發生的。
關於r2的情形,一開始被扣住的那個人,如果帶出來也不會把燈開啟的話,囚犯們就只有被永遠關下去了。所以他會把燈開啟,自己變成B組,然後必須一直採用b策略,直到A組裡有一個人向監獄長報告說所有人都已經被帶出來過了。如果不是這樣,在他進入B組以後,一直把他帶出來,在A組的某個人向監獄長報告之前,他要麼變成a策略,這樣大家還是被永遠關住;要麼他向監獄長報告,但如果他是這樣的策略監獄長只要預先扣住B組另外一個人讓這個人代替他的位置,就可以在一個人被扣住沒有被帶出來的情況下讓他錯誤地報告。所以,在A組裡會有一個在一連串的y動作後向監獄長報告說所有人都已經被帶出來過的人,並且被扣住的那個人會用足夠的b動作迫使他用y動作做出反應直到他報告出來。如果A組裡還有其他的人,由上面的討論可知,這些人在燈滅的時候帶出來和不帶出來沒有任何區別,所以完全可以根本不帶他們出來就讓A組裡那個人做出錯誤的報告。因此,必須有且僅能有一個人,擁有向監獄長報告的特權。
對於r1的情形,如果這時在被扣住的人之外還有人沒有被帶出來過,那麼完全可以認為一開始扣住的就是那個人而把這個人放開,重複上面的過程。最後的可能性仍然是迴圈,r1或r2。對於迴圈和r2的情形已經討論過了,而如果是r1的情形,再把扣住的人放開不會有任何作用(因為已知他是採取策略x的),所以犯人會被永遠關下去。
而如果在r1時,在被扣住的人之外所有人都被帶出來過了,則這時的情形和r2相似,只不過AB兩組調換了位置。所以可以用同樣的方式來討論。
綜上所述,到了這一步活路只有一條:必須有且僅能有一個人,擁有向監獄長報告的特權。這樣的策略本來是有的,可是自從監獄長又頒布了新規定……
就沒活路了……
[三思冷飯先生的點評]
對我來說有些地方說得似乎不是太清楚,作點補充。最後的證明十分模糊,還需要加強。
關於新問題的證明
首先對於每個囚犯來說,定義燈的兩種狀態:“正常”和“異常”。就是說,如果上次放風回來之前燈是開著的,這次被叫出去放風時卻看到它是關的,則為“異常”,反之則“正常”。而如果上次放風回來之前燈是關著的,則這次出來看到它是開為異常,關為正常。
這樣可以把囚犯們分成兩類:認為燈開著是異常的為A組,認為燈關著是異常的為B組。由於囚犯們從一開始就知道燈最初是關著的,所以一開始所有人都屬於A組。
按照下面的討論來看,一個一次都還沒有被放出來的囚犯不應該屬於A組,因為他們雖然知道燈關是“正常”,但是在看見“正常”的燈時反而會去按一下。為嚴格起見,應該把他們的狀態歸為“初始”的特殊一組。下面我的推理都以有三個狀態為準。
下面來討論,如果存在一個策略,讓囚犯可以免於被處死或永遠關下去,那麼它應該是什麼樣的。
可以認為監獄長知道囚犯們的方案,然後會儘可能地不讓他們被釋放掉。
假設監獄長採取這樣一種行為方式:每次決定帶一個人隼捶歐緄氖焙潁際遣煌5匕閹隼矗鋇剿裁匆膊蛔鑫埂T誶舴傅牟唄災鋅梢耘懦粽庋恢智榭觶杭詞箍吹降埔恢筆恰罷!保勻換崾輩皇鋇匕匆幌驢亍R蛭偃縋掣鑾舴岡諛承┣樾蝸祿岵捎謎飧霾唄裕綣筆庇腥嗣揮斜淮隼垂嚶は勻豢梢嶽謎飧霾唄勻我獾夭倏氐頻目兀帽鸕那舴複砦蟮匾暈腥碩急淮隼垂耍歡綣諛歉鑾舴覆扇≌飧霾唄允逼淥絲隙ㄒ丫淮隼垂敲此梢圓槐賾謎飧霾唄遠苯酉蚣嚶ぬ岢鍪頭乓蟆K裕謖庵植唄猿魷值目贍苄員慌懦艫那榭魷攏嚶た梢圓扇∩鮮齙男形絞健7粗綣幸恢植唄栽詡嚶さ納鮮魴形絞較祿竦貿曬Γ敲窗閹約癰畝蟣厝豢梢允視嚶に械男形絞劍褐灰詰諞皇奔渚途齠ㄊ牆拼蚩蚴槍厴希院筧綣埔恢薄罷!痹蚴裁炊疾蛔黽純傘?/font>
上面的推理有一點漏洞,不過很容易補上。假設有個犯人只在燈是亮的而且是“正常”的狀態時,才會時不時按一下燈,那麼監獄長就無法用他來任意控制燈——最多能夠用他來任意關燈。
不過典獄長沒有必要非得能夠利用他任意控制燈才能使這樣的囚犯的策略失效,他只要簡單地使囚犯的策略失效就可以了。
不妨把推理寫成這個樣子:因為囚犯除了每次被放出去時燈的狀態,以及他每次的操作這些資訊,就沒有任何資訊了,所以囚犯在第n+1次被放出去的策略要求做的行動(按燈,不按,或者報告囚犯已經全部放過風(簡稱“報告”)),只取決於前n次看見的燈的狀態以及他的操作。如果在囚犯的策略中,在第n次放風時即便發現燈“正常”的情況下,還是要去按了一下(或者報告),那麼典獄長完全可以在第n-1次放風后立刻讓囚犯再放一次。這樣,囚犯的策略等價於在第n-1次做和他原行為相反的行為——如果第n-1次原策略是要按燈,那就不按,反之就按(或者在第n-1次就報告,如果他原策略是要在第n次報告的話)。這樣我們就可以證明,如果有一種策略能使囚犯獲得自由,那麼一定有一種無需“雖然看見燈‘正常’,但還是要按燈”的策略,也同樣可以使囚犯獲得自由。這裡我們看到區分“正常”和“初始”是必要的,對於“初始”狀態,沒有第n-1次,上面的推理無法進行。
於是犯人有兩類,認為燈開著是異常的或者是初始組的,此為A組,認為燈關著是異常的為B組。
所以完全不妨假定監獄長採取上述的行為方式行事。這樣,囚犯只要是被帶出來過,他看到“正常”的燈就不會做任何事情。以下的討論都遵從這一前提。
現在可以省略“囚犯只要是被帶出來過”這話,因為我們區分了“正常”和“初始”,當然,底下麻煩點,所以這樣的區分不一定簡化了敘述,但是可以使大家不要疑心是否會有推理的漏洞。
首先,必然存在一個人,通過帶出他來可以把燈開啟。否則的話所有人都得一直被關著。所以監獄長第一步先把這個人帶出來,把燈弄亮。這樣這個人變為B組。
接下來,監獄長扣住一個A組(初始組中)的人,暫時不考慮帶他出去。以下如無特別說明,這個人都在討論範圍之外。顯然,在這個人被帶出來之前,不可以有任何人向監獄長報告說所有人已經被帶出來過了。
考慮A組餘下的人。對每個人來說,如果把他帶出來,看到這個“異常”的燈,最終結果只有兩種:x。燈保持亮著,自己變成B組;y。把燈關掉,自己留在A組。帶出一個會採取策略y的囚犯(如果存在的話),燈被關掉了。在剩下的人中,如果仍然存在一個人,通過帶出他來可以把燈開啟的,則把他帶出來,又把燈弄亮。於是再次進行這段開頭的過程。
上面這個迴圈會在有限次結束,因為A組的人數每次減一。結果可能有兩種情況:1。A組都是採取策略x的人,燈是亮著的;2。燈是關的,A組不存在一個人,通過帶出他來可以把燈開啟。
我稍微改變一下敘述:
考慮A組餘下的人。對每個人來說,如果把他帶出來,看到這個“異常”的燈,他只有兩種可能的策略:x) 燈保持亮著,自己變成B組;y) 把燈關掉,自己留在A組。帶出一個會採取策略y的囚犯(如果存在的話),燈被關掉了。在A組剩下的人中,如果仍然存在一個人,通過帶出他來可以把燈開啟的,則把他帶出來,又把燈弄亮。於是再次進行這段開頭的過程。
上面這個迴圈會在有限次結束,因為A組的人數每次減一。結果可能有兩種情況:
1) 燈是亮的,但是A組中挑不出採取y策略來關燈的人了,也就是說,現在將A組裡的人都帶出來,他們都會保持燈亮的狀態,變到B組;
2) 燈是關的,但A組中挑不出開燈的,也就是說,現在將A組裡的人都帶出來,他們都會保持燈滅的狀態,留在A組。
這裡就要對於初始組就要補充點敘述:無論是1)還是2),我們接下去把剩下的A組裡初始組的人(除了被扣下的)都帶出來一次,如果是情況1),那麼這些人都不會動開關,自己變成B組的,如果是2),這些人也不會動開關,仍留在A組。這樣以後,仍舊還只能是1)或者2)的情況,但是初始組除了原先被扣的人外就沒有其他人了——所有其他人都被放出來過。
對於燈是關著的情形,討論B組的情況,每個B組的囚犯看到這個“異常”的燈,也可能有兩種策略:a。燈保持關著,自己變成A組;b。把燈開啟,自己留在B組。如果B組存在採取策略b的囚犯,則把他帶出來,把燈弄亮;如果A組仍然存在採取策略y的人,又把他帶出來,把燈關掉;如果B組還存在採取策略b的囚犯,又把他帶出來,把燈弄亮……如果A,B兩組都有一直採取策略y和一直採取策略b的人,則會一直迴圈下去;否則的話,最終情形要麼是:r1。A組都是採取策略x的人,燈是亮著的;要麼是:r2。燈是關的,A組不存在一個人,通過帶出他來可以把燈開啟,並且B組也都是採取策略a的囚犯。
對於迴圈的情形,監獄長可以利用這一點任意操控燈的開關,因此總有辦法讓囚犯做出錯誤的報告或一直關下去,所以這是不應該發生的。
關於r2的情形,一開始被扣住的那個人,如果帶出來也不會把燈開啟的話,囚犯們就只有被永遠關下去了。所以他會把燈開啟,自己變成B組,然後必須一直採用b策略,直到A組裡有一個人向監獄長報告說所有人都已經被帶出來過了。如果不是這樣,在他進入B組以後,一直把他帶出來,在A組的某個人向監獄長報告之前,他要麼變成a策略,這樣大家還是被永遠關住;要麼他向監獄長報告,但如果他是這樣的策略監獄長只要預先扣住B組另外一個人讓這個人代替他的位置,就可以在一個人被扣住沒有被帶出來的情況下讓他錯誤地報告。所以,在A組裡會有一個在一連串的y動作後向監獄長報告說所有人都已經被帶出來過的人,並且被扣住的那個人會用足夠的b動作迫使他用y動作做出反應直到他報告出來。如果A組裡還有其他的人,由上面的討論可知,這些人在燈滅的時候帶出來和不帶出來沒有任何區別,所以完全可以根本不帶他們出來就讓A組裡那個人做出錯誤的報告。因此,必須有且僅能有一個人,擁有向監獄長報告的特權。
對於r1的情形,如果這時在被扣住的人之外還有人沒有被帶出來過,那麼完全可以認為一開始扣住的就是那個人而把這個人放開,重複上面的過程。最後的可能性仍然是迴圈,r1或r2。對於迴圈和r2的情形已經討論過了,而如果是r1的情形,再把扣住的人放開不會有任何作用(因為已知他是採取策略x的),所以犯人會被永遠關下去。
而如果在r1時,在被扣住的人之外所有人都被帶出來過了,則這時的情形和r2相似,只不過AB兩組調換了位置。所以可以用同樣的方式來討論。
綜上所述,到了這一步活路只有一條:必須有且僅能有一個人,擁有向監獄長報告的特權。這樣的策略本來是有的,可是自從監獄長又頒布了新規定……
就沒活路了……
這段話過於模糊。首先好像只論證了前面2)的情況,沒有論證1)“燈是亮的”。另外“對於迴圈的情形,監獄長可以利用這一點任意操控燈的開關,因此總有辦法讓囚犯做出錯誤的報告或一直關下去,所以這是不應該發生的。”也十分模糊。
要注意到的是,如果開始一共是4人(然後放掉一個留下3人)的情況,是存在絕對可靠的策略的,所以論證中必定會用到人數多於3人這個條件的。