[逻辑学]意外绞刑悖论(Hangman paradox)(又称意外考试悖论)
绞刑
在审讯中一位囚徒被法官判处死刑。判决如下:“你下周将会被处决,但哪天处决对你来说是一个惊喜。”囚徒因此作出如下推理:“假如处决日是周日,那么在周六夜晚降临后,我将提前知道我周日会被处决,那样的话处决就不再是惊喜,所以周日我不会被处决。排除了周日之后,如果周五夜晚降临后我还没被处决,则我将提前知道我周六会被处决,所以我周六也不会被处决。以此类推。因此,处决是不会发生的。”
然而,这个囚徒的愉快心情保持到了星期二。他从美梦中醒来,被押往刑场——对他来说非常意外。
推广1
假设教师爱丽丝只说过考试会在下周,但没有说考试是惊喜。
午餐时她的学生瑞尼克路过教师办公室,听到老师对同事说,“下周我将给我们班上的同学考试,而考试日期对他们来说是一个惊喜”。老师并没有意识到瑞尼克在听她说话。根据关于考试日期的信息,瑞尼克能得出什么结论?
推广2
在推广一的情况下。事情变得更复杂了。因为午间休息之后,瑞尼克对老师说,“我听到你说下周考试的日期是一个惊喜”。老师确认了这一点。然而那天晚些时候,老师在停车处再次遇到了办公室的同事。老师告诉同事瑞尼克听到了他们之前的对话,并说到:“但是考试日期仍是惊喜!”很不幸,瑞尼克再次听到了这句话。现在关于考试日期的信息,瑞尼克能得出什么结论?
个人想法
个人感觉这个悖论与一般传统的悖论不同,有一些摸棱两可的文字游戏。
从推广一我们可以轻松得出结论,考试日期不会在周五(即最后一天,如果老师说的下周是工作日周一到周五的话)。
在推广一下的信息链如下:
- 老师对班上同学说:“下周将举行考试”。宣布了这个事实之后,班上所有同学知道下周要考试,老师也知道班上同学知道下周要考试。
- 老师对同事说:“考试日期是一个惊喜”。宣布了这个事实之后,瑞尼克可以推断出考试不在周五,而老师不知道瑞尼克知道这个事实。
- 由于没有新的宣告出现,也没有新的信息交流。双方掌握的事实到这里就结束了,瑞尼克只能知道考试不在周五。
在推广二的信息链中,新增信息如下:
- 瑞尼克对老师说:“我听到你说下周考试的日期是一个惊喜”。此时,老师知道了一个新的事实,即瑞尼克知道下周考试不是在周五。
- 老师对同事说:“但是考试日期仍是惊喜”。同推广一可知,瑞尼克可以通过此宣告推断出考试不在周四,而同样的老师不知道瑞尼克获得了这个新的信息。
- 由于没有新的宣告出现,也没有新的信息交流。双方掌握的事实到这里就结束了,瑞尼克只能知道考试不在周五和周四。
对比原版的题目,法官对囚徒直接作出宣布:“下周你将被处死,而处死日期对你来说是一个惊喜。”
从囚徒的视角中,他得出如下信息链:
- 法官宣布事实“囚徒下周会被处死”
- 法官宣布事实“处死日期是惊喜”
- 囚徒作出推断并获得新的事实“处死日期不会是下周最后一天即周日”
- 法官知道上述事实,即法官知道“囚徒知道处死日期不会是周日”
- 根据事实“处死日期是惊喜”
- 囚徒作出推断并获得新的事实“处死日期不会是周六”
- 法官知道上述事实,即法官知道“囚徒知道处死日期不会是周日和周六”
- ......
- 囚徒作出推断并获得新的事实“处死日期不会是下周的任何一天”
- 若该事实成立,则与最开始“囚徒下周会被处死”矛盾
在通常的理解中,上述蓝色的信息,法官是确实知道的,因为“处死日期是惊喜”是法官当面告诉囚徒的。所以囚徒当然会认为,所有的信息双方都是互相知道的。这样信息链才能成立。而关键就在于“处死日期”这四个字,当法官第一次宣布“处死日期时惊喜”时,此时的处死日期可能存在与周一到周日七天中的一天,但是在根据事实作出正确推断之后,处死日期只可能存在于周一到周六六天中的一天。第二行和第五行中的“处死日期”不是同一件事物,事物发生了改变,命题是否依然为真也就随即发生了改变。信息链就有可能不成立了。
有很多为了解决该悖论的论文,但并没有被完全认同的解决方案,以上只是个人看法。
[逻辑学]意外绞刑悖论(Hangman paradox)(又称意外考试悖论)的更多相关文章
- 意外断电数据库无法启动牵扯到异步IO的参数设置
一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了, 数据库起不来了-- 数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5 软件环境是Linux ...
- Birthday Paradox
Birthday Paradox Sometimes some mathematical results are hard to believe. One of the common problems ...
- MySQL redo log 与 binlog 的区别
MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...
- Android Service提高
我们从以下几个方面来了解Service IntentService的使用 Service与Thread的区别 Service生命周期 前台服务 服务资源被系统以外回收处理办法 不被销毁的服务 Inte ...
- 越狱Season 1-Episode 8: The Old Head
Season 1, Episode 8: The Old Head -Michael: 17 days from now they strap my brother to an electric ch ...
- 【转载】TCP保活(TCP keepalive)
下图是我遇到tcp keepalive的例子: 以下为转载: TCP保活的缘起 双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据 ...
- 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...
- apscheduler的使用
最近一个程序要用到后台定时任务,看了看python后台任务,一般2个选择,一个是apscheduler,一个celery.apscheduler比较直观简单一点,就选说说这个库吧.网上一搜索,晕死,好 ...
- ASP.NET Core 四种释放 IDisposable 对象的方法
本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...
随机推荐
- js-清空array数组
两种实现方式: 1.splice:删除元素并添加新元素,直接对数组进行修改,返回含有被删除元素的数组. arrayObject.splice(index,howmany,element1,....., ...
- 2019年京东 PHP工程师面试题
1. Apache与Nginx大访问下性能描述正确的是? A.Apache所采用的epoll网络I/O模型非常高效B.Nginx使用了最新的kqueue和select网络I/O模型C.Apache进程 ...
- linux 中将用户添加到组的 4 个方法
Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成 ...
- MongoDB 3.4 功能改进一览
MongoDB 3.4 已经发布,本文主要介绍 3.4 版本在功能特性上做的改进,内容翻译自 [https://docs.mongodb.com/manual/release-notes/3.4/?_ ...
- Linq找不到行或行已更改
1.发生这种情况第一时间是确认了database明明存在这条数据 2.然后确认了Linq查找的条件中是否有连接条件使得连续更新中发生变化 3.最后发现原来是Linq使用的表实际中有个field由not ...
- 使用webuploader实现大文件断点续传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- bzoj 3498
统计三元环 很多代码在bzoj都T诶 #include <iostream> #include <cstdio> #include <algorithm> #inc ...
- 【原创】go语言学习(十四)IO操作1
目录: 格式化输入 格式化输出 终端输入输出背后的原理理 bufio包的使用 命令行参数处理理和urfave/cli使用 格式化输入 1.从终端获取⽤用户的输入 格式化输入 fmt.Scan(a …i ...
- Python测试框架对比
如有任何学习问题,可以添加作者微信:lockingfree 更多学习资料请加QQ群: 822601020获取 unittest, pytest, nose, robot framework对比 什么是 ...
- Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
code: 将 Stu* pStu = malloc(sizeof(Stu)); 改为Stu* pStu = (Stu*)malloc(sizeof(Stu)); code #include < ...