关于囚犯的老题目和新题目

转自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人这个条件的。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值