魔术《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语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

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

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

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

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

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

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

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

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