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

2023-10-21 12:15

本文主要是介绍魔术《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/254324

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推