2025-03-03 数学中的类型

计算机基础课中,我们都学过类型转换,在没有显式声明要进行类型转换的语句时,计算机会帮我们强制类型转换。类型匹配是重要的。

数学中,要定义一个映射f,标准的格式是

f:X\to Y\\
x\mapsto x^2

其中第一行是映射的类型,第二行是映射的实现。

与之遥相呼应的是C语言中的函数:

double f(int a)

{   a=100;

return (double)a/8; }

不难见到,在以上的情形下,映射/函数的类型是由其输入和输出的数据类型决定的。但这并不绝对。

——————————————————————————————————————————————————

数学与计算机中,两个“函数”概念不同点在于,数学中的函数,是从自变量索引到函数值的一个工具,一个数学变量a,被f了一下之后毫发无损,a还可以被g作用,因为f和g都只是向a问路的,a告诉f:去找f(a)吧!你要找的f(a)值是8;a又告诉g:去找g(a)吧!你要的g(a)它的值等于9。而无论被f了还是被g了,a本身都还是那个a。而计算机科学中,出于计算机在物理层面实现的限制,内存世界就有了部分物理世界的实在性,函数是施加于内存世界的一系列动作,它可以真正改变这个世界中变量的状态,如上段C语言语句,f完之后a就变了,变成100。

根本差异在于,数学中,所有数学变量是可以同时存在的,R可以被同时copy无穷份放在那里,放在虚空中的理念世界中,我们可以认为a在函数下改变或不改变都无所谓,因为即使它改变,我们也能再copy出一份f作用前的a出来。数学世界是无需物理实现的,因而数学对象的存在形式是多重态的。我们甚至可以说,数学世界里只有关系,没有动作。因为凡谈论动作,必然涉及着状态到状态的改变,而数学对象作为理念存在,可以被无穷份复制,改变后的东西和改变前的东西可以同时存在。这就使得它不必引入动作。而计算机则不然,计算机首先被物理地设计出来,内存的有限性使得同时存在的变量只能有有限个,每个变量又只能取一个值,这种物理世界导致的有限性,使得计算机变量不像数学变量那样同时以无穷份copy的形式存在,而是以一种遵循实在性、类似费米子(同一时空点不能出现两个相同的)的姿势存在着。

我知道肯定有学过计算机系统或编译原理的人要喷我了,说变量未曾真正存在过,只是栈或什么东西上的数据写入/擦除,说我思而不学则殆。我想说你别急,你懂很多实现层面的东西,但我所说的事情并不依赖于具体实现,我想说的是,如果从今天开始所有计算机全部被天降神雷击碎,那么我们仍然可以设想一个 内存有限、变量只能取单值 的理想计算机内存世界,恰似你们没有人亲手做一个图灵机,却可以思考它在某些任务上是否停机一样——我们并不需要物理实现也可以思考某些东西。进一步地,以下这段代码,即便世界上不存在计算机这个物理对象,我们仍然是可以思考其含义的。我们只需把物理地实现内存世界的方法全部抛弃、直接用内存世界的抽象属性规定出一个世界,即可开始讨论这段代码的含义。

double f(int a)

{   a=100;

return (double)a/8; }

内存世界归根结底是物理世界的模拟,最为重要的是模拟了物质存在形式的费米性,因而计算机的函数实际上是一系列动作;数学世界不是物理世界的模拟,其对象的存在形式是同时存在无穷多份,因而数学的函数可以说是一种索引关系,或者你非要说是动作也可以——只不过动作前后的数学世界完全相同。(我指的是把所有可能存在的数学对象及其无穷份copy都收集在一起的最大的数学世界)

——————————————————————————————————————————————

例子1,范畴作为带类型的群

例子2,庞加莱对偶隐藏强制类型转换

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容