魔术《4 Kings 折纸》的三重境界(二)——集合语言和数理逻辑

2023-10-21 18:28

本文主要是介绍魔术《4 Kings 折纸》的三重境界(二)——集合语言和数理逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

早点关注我,精彩不错过!

上回我们回顾了《4 Kings 折纸》这个魔术的内容和用小学的奇偶性原理解析了操作的过程,详情请戳:

魔术《4 Kings 折纸》的三重境界(一)——奇偶性原理

今天我们进入后第二境界,一探究竟。

先把魔术视频放这里。

视频1 4 Kings 折纸

魔术背景补充

在《魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述》中,我们曾介绍过这个魔术的出处。我自己脑子里是怎么撞击出来的已不可追溯,但可查的一个来源是罗宾老师的那本《扑克牌魔术》里一个叫《神奇的毯子》的作品。后来又经过我的台词和流程的打磨形成了这个作品。

另外,这个原理在魔术上有个名字,叫作mat principle。这个魔术的存在则是浑然天成的,因为原理只不过给出了一系列合理的折叠操作,而它们恰巧在给定起点终点和起点正反状态时,有最终相同的终点正反状态罢了。

在学会这个原理后,我仔细联想过,怎么才能想到King这个图案的,有没有通用方法。而真的要做到恰好是4张一样的Kings或者Aces,甚至更多张其他的占卜图案朝向一面的话,其起始图案要满足这样的特性:以所有奇偶数位置的牌正反也相反的矩阵排列开始,改变成需要的图案。要求改变的张数恰好是4才可以,因为只有这4张是真的需要改变;否则,要么有更多要改的,要么不够改的。我试过了A~9的图案,甚至J也要改5张,没有一个达到了浑然天成的效果;如果是三角形等背景图案倒是有办法,因为它可以给更多张,不过整体都没有K来得那么巧妙。

当然如果放开一个限制,即并不是每个位置都需要有牌,可以合理地把要改的部分去掉不改就好了,只要满足对称性和美感需求,那就可以从目标出发,去改掉目标线上的错误后,再去填充部分即可了。比如A就可以做到了,原本要改8张,限定在A的范围内恰好就4张了。不过分布有点对称,还是容易引起怀疑。当然因为我们没有对叠内位置建模,所以可以选多张再重叠,应该也能解决一部分问题,但都不如Kings这个原版来得给力了。

马丁加德纳老师对这个原理也有过阐述,叫作Paradox Paper。也有人把它直接和扑克牌强选原理结合以后做成的折纸道具来卖,是挺好的创意。因为拿扑克牌叠去折叠,怎么着还是模拟出来的,但是真的去折纸,不管是作预言还是巧合效果,都是更加贴合自然操作和能抹去数学痕迹的,殊不知这背后的逻辑早就被数学家们一网打尽了。有兴趣可以看以下的介绍:

https://www.angelfire.com/super/magicrobin/paradox.htm

而在这些表述中,最常用的解释方法,既不是上一篇简单过头但是繁琐的奇偶性原理,也不是下一境界要讲的抽象得过分的群论,而是恰到好处的基于集合论的数理逻辑。接下来,我们在《魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述》的基础上,回顾并更深入地讲透这个不分。

集合语言和数理逻辑

此乃第二境界:衣带渐宽终不悔,为伊消得人憔悴——中学水平:集合语言和数理逻辑。

我有长达10来年的时间,对这个魔术的理解水平一直停留在第一层境界。不是没想过,而是确实觉得比较交单明了,真的值得那么深究?不过,期间几次思考,还是觉得过这样的解释方式似乎缺了点什么,比如这个思路虽然是化归,但为啥这么麻烦?有没有更高档的数学工具能够更简单地描述清楚?

直到我在组织MatheMagician上《魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述》这个系列,需要用数学语言严谨地描述一番地时候才发现,原来用上集合地数学工具,加上一点数理逻辑语言,这层性质就会非常清楚。

我把公式列在这里,详情可以参考我之前的介绍文章:

K = {(i, j, c) | i, j in N, 0 <= i, j <= 3, c in {f, b}, (i + j) % 2 = 0 xor (c = f)}

我当时借着这篇文章讲到了集合语言,以及其中很重要的一个数理逻辑运算xor以及其性质,并总结为,翻转这一操作下,其xor性质具有不变性,还附带聊了聊xor本身的一些性质,如对称性等等。

这个说法看起来是比较清楚了,它比较完美地把我们的物理操作映射到了一个特定地数理逻辑运算中,并且用集合语言描述了出来。我一度以为,这个说法应该是这个魔术数学原理地最终解了。并且在多次公开分享中,我也是以这个解法作为蓝本来说的。

在今日我深入学习了真正的数理逻辑以后,发现这个概念其实还可以更精细。即数理逻辑是一套命题演算系统,一般包括命题符号A,算子符号omiga,转换规则Z和起始点I(也就是公理)。而一般比较著名和公认的数理逻辑命题演算系统有命题逻辑和谓词逻辑,这是0和1阶逻辑,几乎作为一切数学的基础,往上还有高阶逻辑等。而我们这里用到的,其实就是以自然数系统为基础的逻辑系统,建立在0和1阶逻辑基础上的ZFC集合论上,才有了以上这些逻辑算子和对应的集合表达。

所以啊,每个概念都是有出处和明确含义的,透彻理解的唯一方法就是把自己扔进去感受,随时害怕忘记,把自己的大脑作为要学习内容融为一体的载体,方能体会读书那又痛苦又快乐的享受。

可是接下来的发现告诉我,你只有足够地熟悉,熟练,肯重复,你猜有机会创新和创造。

我一度以为xor这以运算地存在,天衣无缝地适配到了我们的场景,已经是幸运中的幸运了。但是你要知道,每个数学概念地由来,只要肯思考,背后一定还有更加深刻的本质。这一本质,是我在雅礼中学给孩子们分享这个魔术,去想讲清楚,为啥要引入xor这个运算时候想到的。

别着急,下期就告诉你这个惊天大秘密。

b0bc5618dab19b674718d312b1850cfe.gif

我们是谁:

MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴赏等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!

d46b8ed06ddd88152dd9787124a296fe.gif

c987a1325c9022c5551ef2e6b400ac75.png

3bf399990557c12395d91b49bba59b04.jpeg

扫描二维码

关注更多精彩

魔术《4 Kings 折纸》的三重境界(一)——奇偶性原理

视错觉与魔术(二)——橡皮筋的奇迹

你真的懂分数吗?(五)——概率与期望

De Bruijin序列与魔术(四)——De Bruijin序列的拓展结果

这到底是怎么想到的!!!

9d96242626e9de66244991a9294cd85d.gif

点击阅读原文,往期精彩不错过!

这篇关于魔术《4 Kings 折纸》的三重境界(二)——集合语言和数理逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256143

相关文章

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元