23. 数、直观与时空

在本章中我们首先讨论数的建构。 我们的讨论与公理化数学中的讨论不同:我们讨论的是,按照认知发生顺序,一个小孩究竟如何可以一步一步地理解各种数的建构,而不是在我们已经得到了很多结论后,去重新构建一个形式上更完美的体系。

相等倾向,给我们提供了“标准单元”,即在概念的世界中进行数学建构所需要的材料。 组合倾向以这些“标准单元”为基础,就可以开始建构自然数。 切分倾向和相等倾向(也可以是泛化倾向)指引我们在自然数的基础上进一步去建构正分数。 泛化倾向指引我们对自然数进行推广以消除运算的限制,我们就一步步地建构出了整数、有理数、实数和复数。 组合倾向同样指引我们把多个标量组合起来,得到向量、矩阵以至张量。

23.1. 直观及其重要性

虽然以公理为基础的现代数学,经常极力避免使用直观的方法,但是从认知发生顺序来看,如果没有直观,人们就无法建构数与形,数学也无从产生。 我们在概念中和直观中可以进行完全精确的、掌握所有细节的建构。 这正是数学得以有精确性的根本原因之一。

直观是一个内禀于人脑的“模拟器”。 它有三维空间和一维时间。 与在经验世界中不同,在直观中,我们可以对一个过程进行反复模拟,可以对时间进行反向模拟,甚至时间也不一定非要匀速流逝。 比如我们在直观两个小球碰撞时,可以把碰撞前和碰撞后的时间在直观中一掠而过,而把注意力放在它们具体碰撞的过程中,比如小球发生了什么样的形变、机械能是否有损耗、等等。

直观中时空与经验世界中的时空还有一点不同:不管物理学告诉我们什么样的关于经验世界中时空的知识,不管我们在经验世界中观察到了怎样的近大远小的现象,直观中的时空永远默认为欧氏的。 当然,我们可以在这个欧氏时空的基础上做改变来“模拟”其他的时空。

23.2. 自然数的建构、性质和运算

建构数的基础,是彼此之间除了时空坐标以外,所有要素都相等的“标准单元”。 这种彼此相等的“标准单元”只存在于概念的世界里:它们是相等倾向提供的。

23.2.1. “标准单元”的产生

我们首先要指出的是,“标准单元”的产生的根本原因,除了相等倾向之外,是事件化倾向而非对象化倾向。 作为动作的“数(shǔ)”先于作为概念的“数(shù)”:后者是前者的结果。

  • 我们认知“两个苹果”并不是因为那两个苹果真的一模一样,而是我们的大脑想象出两次相同的“数的动作”相同。 这个“数的动作”可以不是实在的动作,而只是对实在动作的想象或模拟,或者说抽象。 这种抽象的动作,就是可以用来建构数的,彼此相同的“标准单元”。 如果我们把“苹果”换成“东西”,这一点就体现得更加清楚:我们可以把一个苹果与一辆汽车数成“两件东西”:与其说这是因为苹果和汽车是相等的或者是相似的,不如说我们进行了两次数的动作。 虽然苹果和汽车也可以被抽象化为相等的“东西”,但因为对数的动作进行抽象化更为直接、形象和切题,所以我们认为它在数的认知上更为根本。 读者当然可以反驳说,两个量如果可以被相加,它们就必须要有相同的单位,因此在我们没有抽象出单位这个概念之前,讨论加法是没有意义的。 这种说法中的前提是没有问题的,但是结论是有问题的,因为加法不一定是对量的加法,也可以是对数的加法。 在本书的体系中,我们严格地区分数和量这两个不同的概念。 严格地来说,数可以不依赖于量而存在,但是量必须依赖数而存在。 虽然在语言中,我们把“个”、“只”、“张”、“次”这些词也称为量词(可数分类词),但是它们事实上与测量无关,与“米”、“千克”、“秒”这些与测量直接有关的量词(不可数分类词)是根本不同的。 在前一种情况中,如何界定一个“单元”,是对象化(事件化)倾向决定的,而在后一种情况中,则是由测量决定的。 即使在我们的语言直觉里,我们也会意识到“两千克大米”中的“两千克”是量,而“两只兔子”中的“两只”不是量而是数。 我们还可从量纲的角度来说明这个问题:对一个边长为四米的正方形来说,我们求其面积为“\(4\text{米}\times 4\text{米}=16\text{平方米}\)”,而我们在对一个\(4\times 4\)排列的一堆苹果进行计数时,却绝不是“\(4\text{个}\times 4\text{个}=16\text{平方个}\)”:“平方个”是荒谬的概念。我们虽然可以使用“\(4\text{个}\times 4\text{次}=16\text{个}\)”这种写法让数的乘法更“符合”量的规律,但其实这仍然不对,因为严格来说这个积的单位应该是“个次”,而这仍然是一个荒谬的概念。所以,“个”、“次”这些词,虽然在汉语中是量词,它们却不代表量,用它们修饰的数字仍然是一个纯数,或者说是“无量纲数”。

  • 数的动作先于对于数(shù)的情境化直观。 一个成年人在面对少数几个对象时,经常通过情境化直观而不需要具体进行数的动作,就可以知道对象的数目。 他之所以可以这么做,是因为他对对象之间一些特定的排列情境比较熟悉,比如直线排列和矩形排列。 但当对象的数目很大时,他就不得不做具体数的动作来确定对象的数目,虽然他可以使用一些技巧,比如两个两个地数,比如在矩形排列中只数行和列的数目并把它们相乘来得到总数目。 我们教小孩认识数的概念时,也是从数数这个动作开始的。

因此,“标准单元”就是“我们在数数时,每数一次所虚指的、彼此相等的抽象对象”。 从后验的角度看,这种抽象对象既可以来自对“对象”的抽象化,也可以来自对“事件”的抽象化。

23.2.2. 自然数的建构

我们首先讨论最基本的数的建构,即自然数的建构。 我们不采用通用的皮亚诺算术的方法,虽然我们的讨论在某些细节上类似皮亚诺算术。 这是因为,我们的目的是从认知发生的角度来研究一个对于没有任何其他数学知识的小孩或先民,自然数究竟是怎么被建构出来的,而不是在我们有了很多知识后,如何建构自然数比较方便和优雅。 因此,不同于皮亚诺算术,我们所说的自然数不包括0。 这是因为根据认知发生原则,0这个概念和其他的自然数相比,在认知发生的意义上不够基本:不管在小孩那里,还是在数学史上,它的产生都远远晚于其他自然数、正有理数、甚至可能晚于\(\sqrt{2}\)\(\pi\)这些无理数(虽然在约翰·海因里希·朗伯1761年的证明之前,人们不知道\(\pi\)是无理数)。 我们当然可以用“正整数”这个更明确的词,但我们在提到“正整数”时就意味着我们已经构造出了负数,而那则是在认知发生顺序中后来的事情了。

自然数的建构,从根本上来讲,是组合倾向作为于“标准单元”产生的结果。

  • 我们以下对自然数的建构,采用的设定为:我们把基本单元定义为“\(1\)”,基本操作定义为“把已有的数和\(1\)进行组合”,基本的操作顺序为“从左到右”。

  • 在最开始时,我们只有\(1\)这一个已有的数,也只能用它和\(1\)进行组合。这样,我们就产生了\(1+1\)。 从我们上面的讨论可知,\(1+1\)是一个(思维)事件,代表对两个单本单元的的一次组合操作。 然后,我们把\(1+1\)这个事件进行对象化,并给这个对象起了一个名字,即\(2\)。 亦即,这个对象的名字,或标签为\(2\),而其内容是\(1+1\)

  • 有了\(2\)这个新的数,我们就可以在其上进行“加\(1\)”的操作,产生\(2+1\)这个表达。 而因为\(2\)这个标签的内涵是\(1+1\),我们就产生了\((1+1)+1\)。 因为我们的操作顺序是从左到右的,所以这里的括号并没有改变任何运算顺序(括号的意义是明确告诉我们如何进行对象化), 于是我们得到了\(1+1+1\)并把这个事件整体对象化,定义为3。

  • 以上的过程可以被重复使用,来产生4、5、6……这些新的自然数。

  • 在我们做了几次类似的操作后,泛化倾向指引我们去把这个过程一般化,即从一个任何已经构造出的\(n\)通过“加\(1\)”这个操作构建出\(n+1\)。 这种泛化的方法在数学上就被称为数学归纳法。我们在这样定义时,同样定义出了自然数的序结构,即越后面构造出的数越大。

23.2.3. 自然数上的一般加法

算式\(a+b\)指得是,假设我们有两组对象,即有\(a\)个对象的\(A\)组和有\(b\)个对象的\(B\)组,两组对象数目的总和。 为了更精确地讨论其认知意义,我们定义如下几个符号和操作:

  • 我们把标准单元表示为\(I\),把标准单元的组合表示为\(\{I,I\}\)\(\{I,I,I\}\),……。 我们用抽象符号\(\mathcal{J}\)来表示一个组合。

  • 对象化操作\(S\)从一个组合映射到一个约定俗成的符号,比如\(S(\{I,I\})=2\)。 因为对于自然数来说,组合对象的标签就是组合中标准单元的数目,我们也可以把这里的对象化操作形象地称为计数操作。

  • 解对象化操作\(U\)从符号映射到它所指的组合,比如\(U(2)=\{I,I\}\)。 从定义可知,\(S\)\(U\)互逆。 因此,\(S(U(n))=n, U(S(\mathcal{J}))=\mathcal{J}\)

  • 组合操作\(C\)把两个已有的组合进行组合,比如\(C(\{I,I\},\{I,I,I\})=\{I,I,I,I,I\}\)。 注意这里的组合不是集合,组合操作也不是集合的并,虽然我们用了类似的表示方法。

因此,\(a+b\)的认知意义是\(S(C(U(a),U(b)))\)。 然而,我们通常意义上的加法,包含了两个隐含假设:

算术中的计数假设1

我们在数数时,不管我们怎么数,所有的标准单元都是不变的:它们既不凭空产生也不凭空消失。 因此标准单元的总数是恒定的。

算术中的计数假设2

我们在数数时,所有的标准单元都必须被数一次,而且只能被数一次。这是对计数函数\(S\)的要求。

因此,如果\(S_1\)\(S_2\)是使得不同算法的计数函数,即都满足算术中的计数假设2,则任取一个组合\(U\), 都有\(S_1(U)=S_2(U)\)

在这两个假设下,数数的结果和数数时具体使用的方法没有关系。

这与经验世界中的计数情况并不一定一致,因为算术中的两个计数假设有时在经验世界中并不被满足。 比如我们在酷暑中去数大量的冰块,一秒钟数一个和一分钟数一个就可能得到不同的结果,因为冰块会融化以至消失。

最后我们还要讨论一下等号的意义。 等号不代表左右两边在任何方面都完全相等,因为显然在“\(1+1=2\)”这个等式中,左边和右边表达式的形式并不相同。 因此,相等的意义只是说,左右两边表达式的值相等,即计数结果一致。

23.2.4. 自然数上的加法交换律与加法结合律

在算术中的两个计数假设下,对组合\(C(U(a),U(b))\)的计数,就天然地有两种方法:我们可以先数\(U(a)\)再数\(U(b)\), 也可以先数\(U(b)\)再数\(U(a)\)。用符号表示就是:

\(S(C(U(a),U(b)))=S(U(a))+S(U(b))=S(U(b))+S(U(a))\),即\(a+b=b+a\)

加法结合律则是考虑三个组\(\mathcal{J}_1\)\(\mathcal{J}_2\)\(\mathcal{J}_3\)。 我们用组合倾向和对象化倾向,可以把\(\mathcal{J}_1\)\(\mathcal{J}_2\)当成一个整体进行计数,然后对\(\mathcal{J}_3\)单独计数,最后汇总两个计数结果; 也可以对\(\mathcal{J}_1\)进行单独计数,然后把\(\mathcal{J}_2\)\(\mathcal{J}_3\)当成一个整体进行计数,最后汇总两个计数结果。 根据算术中的两个计数假设,两次计数的结果相同:这就是加法结合律。

23.2.5. 自然数上的进制

至此我们对自然数的讨论,还没有涉及到进制,或者说使用带有简化符号的一进制。 在一进制中,要表示\(n\)我们就把单位符号重复\(n\)次。 这种最古老、最简单的记数方法,在我们现代的文字和符号中仍有体现。 比如汉语中的一、二、三,以及罗马数字中的I、II、III:其中单位符号的方向不同,大概是对应了书写方向的不同。

有了算术中的两个计数假设,我们就可以使得不同的方法来计数和表示数字。 比如在十进制中,我们引入了比“一个”更大的计数单位:“十个”、“百个”、“千个”、“万个”等等。 而这正是组合倾向和对象化倾向的结果:每当我们数了十次\(1\),我们就可以把它们整体对象化成一个\(10\);每当我们数了十次\(10\),我们就可以把它们整体对象化成一个“百”,凡此种种。 这就是加法中的进制。 进制让我们更方便地表达大数。 比如“的士数“\(1729\)”就代表了如下对象的组合:\(1\)个容纳\(1000\)\(1\)的组合,\(7\)个容纳\(100\)\(1\)的组合,\(2\)个容纳\(10\)\(1\)的组合,以及\(9\)\(1\)。 因此从本质上说,非一进制中数的表示,比如十进制中\(1729\)这个符号,代表了一个“算法”,即从\(1729\)这个符号得出上述组合,然后由加法结合律和算术中的两个计数假设我们就可以知道,它与由\(1729\)\(I\)组成的组合等价。 只不过对于很大的数,我们难以使用后一种方法(自然数定义中的方法)而对符号更熟悉一些。 因此,习惯于谈论各种大数的现代人,经常会惊叹于一个看起来不大的数,一旦被用于修饰经验世界的宏观物体,形成的视觉效果是有多么的冲击。

23.2.6. 自然数上的减法

自然数减法的本质,是对作为整体的“加法事件”的操作顺序的否定。

我们讨论过,\(c=a+b\)在认知是的完整表示是\(c=S(C(U(a),U(b)))\)。 因为\(S\)\(U\)互逆,因此\(U(c)=C(U(a),U(b))\)。 我们在左右两边的组合都去掉\(U(b)\)这个组,即\(U(c)\setminus U(b)=C(U(a),U(b))\setminus U(b)=U(a)\), 其中的\(\setminus\)表示去除操作,与组合操作互逆。 然后我们就有了\(S(U(c)\setminus U(b))=S(U(a))\)。 我们把“去除操作”这个二元操作在数目上的影响,精确来讲是被去除组对原组数目的影响,定义成减法,就有了\(c-b=a\)

现在,我们回到加法和减法的操作次序问题上来。 加法在认知上的完整表示是\(c=S(C(U(a),U(b)))\),而减法在认知上的完整表示是\(a=S(U(c)\setminus U(b))\)

  • 减法的第一步,是把被减数\(c\)进行解对象化形成组\(U(c)\),而加法的最后一步是把合并得来的组\(U(c)\)进行对象化得到和数\(c\):它们是互逆的。

  • 减法的第二步,是在组\(U(c)\)中去除组\(U(b)\)得到组\(U(a)\),而加法的倒数第二步是组\(U(a)\)与组\(U(b)\)进行组合得到组\(U(c)\):它们是互逆的。

  • 减法的最后一步,是把组\(U(a)\)对象化成差数\(a\),而加法的第一步是把被加数\(a\)解对象化成组\(U(a)\):它们是互逆的。

23.2.7. 自然数上的乘除法

为了简洁,从本小节起,我们不再显式地区分数与组,因而也不再显式地使用对象化和解对象化这两个操作。

乘法\(a\times b\)是组合倾向在记数上的体现:即把\(a\)个标准单元对象化为一个整体,再以这个整体为单位进行计数。 我们可以把这个记数的过程解对象化为:我们把\(a\)个标准单元排成一列,然后在横向上重复把\(b\)次形成一个标准单元所组成的阵(标准单元阵),乘积就是阵中的总标准单元数。 如果我们以行为单位来数这个点阵中的总标准单元数,则得到了\(b\times a\)。 根据算术中的两个计数假设,这个阵中的总标准单元数与具体数的方法无关,因此\(a\times b=b\times a\),这就是乘法交换律

类似地,乘法结合律则是说,我们对一个标准单元所组成的立方,可以有不同的计数方法。 \((a\times b)\times c\)是把\((a\times b)\)对象化为一个标准单元阵,然后在正交方向上重复\(c\)次。 我们同样可以把\((b\times c)\)对象化为一个标准单元阵,然后在正交方向上重复\(a\)次。 根据算术中的两个计数假设,我们有\((a\times b)\times c=(b\times c)\times a\)。 再运用一次乘法交换律,我们就得了乘法结合律\((a\times b)\times c=a \times (b\times c)\)。 当然乘法结合律比运用交换律之前的式子更经常地被当作泛化的原型,但在自然数的运算中,它们是等价的。 至于泛化的问题,我们在后文再详述。

乘法分配律也同样体现了切分与组合倾向:\(c\times (a+b)\)表示一个每列有\(c\)个标准单元,一共有\((a+b)\)列的(整体)标准单元阵; 这个阵可以划分为两个(部分)标准单元阵:一个每列有\(c\)个标准单元、一共有\(a\)列的标准单元阵, 和一个每列有\(c\)个标准单元、一共有\(b\)列的标准单元阵。 根据算术中的两个计数假设,使用一个整体单元阵的方法来计数,与使用两个部分标准单元阵分别计数然后再汇总,我们得到相同的结果。 因此我们就有了乘法分配律\(c\times (a+b)=c\times a + c \times b\)

从自然数的乘法得到自然数除法的过程,同样是对操作次序的否定。在此不再赘述。 需要注意的是,不管是我们通过加法得到减法,还是通过乘法得到除法的过程,都是先假定存在一个加法或乘法的算式存在,然后再得到减法或除法的算式。 因此,不存在被减数比减数小的情况,也不存在除不尽的情况。 至于允许余数的除法,无非是从乘法与加法混合的式子构造而来,在本书中不展开讨论。

进一步的,使用类似的方法,我们可以用乘法来构造乘方,并构造它的逆运算开方。 对此我们也不展开讨论。

23.2.8. 自然数的应用:抽象概念的具象化

要把自然数的四则运算运用到经验世界中,我们首先就需要使用抽象对象,即概念。 正因为概念可以对应到经验世界中的不同对象,自然数运算才有意义。 因为如果对一个经验对象,比如一个具体的苹果来记数,那么\(1+1=2\)的意义就成了“这个苹果与它自己相加就等于两倍的自身”:这是荒谬的,也无论如何不是我们想表达的意思。 因此,要用到经验世界去,等式\(2+1=3\)中作为抽象概念的\(2\)\(1\)都必须被实体化,而且\(2\)绝不能两次指向相同的实体,\(1\)也必须得指向与那两个实体都不同的实体:事实上这正是算术中的两个计数假设的要求,因为\(2+1\)代表一次整体计数而不是两次独立计数。 相反,等式右面的\(3\)则代表对同样的实体进行一次独立的计数,而等式成立的条件就是它必须指向\(2\)\(1\)指向的所有实体,而且不能指向任何其他的实体。

我们在对抽象对象进行加法运算时,指的都应该是在相同抽象层次下的对象:比如“一只动物加一只动物等于两只动物”。 如果我们使用不同的抽象层次,意义就会变得别扭,比如,“一只猫加一只狗等于两只动物”,或者“一只猫加一只动物等于两只动物”。 这些当然也说得通,但是我们认为在这些陈述里,我们先是无意识地进行了隐式的抽象层次变换(把猫和狗首先进一步抽象化为动物),然后再在相同的抽象层次上进行运算(人有一种从各个角度对一句话寻找意义的倾向,这其他是对象化倾向的体现)。 因此,在研究自然数加法运算的实质时,我们只要考虑相同抽象层次下的对象即可。

23.3. 整数:对自然数减法的泛化

人们之所以要把自然数扩充到整数,最初的动机是要把减法运算泛化到任意自然数被减数和任意自然数减数之间。 为此,我们引入了零和负数。 我们最终的得到结果则是,我们可以在任意两个整数之间做减法:这完美地满足了泛化倾向。 在泛化的过程中,我们同时要尽量保留自然数四则运算的性质。

具体来说:

  • 首先我们需要使\(a-a\)这个运算有意义。因此我们引入了一个新的数0,并定义\(a-a=0\)\(a-0=a\)\(a+0=a\)

  • 然后为了使\(0\leq a\leq b\)\(a-b\)这个运算有意义,我们需要定义负号,即\(a-b=-(b-a)\)

    • 我们取\(a=b\)就得到了\(0=-0\)

    • 我们取\(0=a<b\)并定义\(-b=0-b=-(b-0)\),然后就可以遍历所有的自然数,把所有的负数定义出来。 这是所有的负数,因为任取\(a\)\(b\)\(b-a\)\(a-b\)必有一个大于等于0, 所以我们在计算\(a-b\)时,要么直接得到自然数结果或0,要么\(b-a\)是自然数,因此结果\(-(b-a)\)是我们定义的负数之一。

    • 至此,我们已经把所有的整数定义出来了。

  • 然后我们继续把\(a-b=-(b-a)\)泛化到任意整数\(a\)\(b\),即取消先前\(0\leq a\leq b\)的限制。

    • 我们取\(a>b=0\)就直接得到了\(a=-(-a)\),即负负得正。

  • 然后我们要把加法和乘法泛化到负数。具体来讲,我们要保留尽量多的泛化之前的性质。 后验地来讲,我们事实上可以保留我们讨论过的全部基本规律,即加法交换律和结合律,以及乘法的交换律、结合律和分配律。 在此基础上:

    • 我们引入了正号,并定义了作为一元操作符的正负号与作为二元操作符的加减号之间的运算关系。 具体来说,\(a+(+b)=a+b\)\(a+(-b)=a-b\)

    • 然后我们定义了整数的乘法。事实上我们只需定义\(-a=(-1) \times a\)。 取\(a=1\),我们就有了\((-1) \times 1=-1\)。 在\(a=-(-a)\)中我们取\(a=1\)就得到了\((-1)\times (-1)=1\)

    • 至此,所有加减乘运算都可以进行了,比如根据乘法交换律和结合律,我们可以得到:\((-a)\times (-b)=(-1 \times a)\times(-1 \times b)=a\times [(-1)\times (-1)]\times b=ab\); 比如根据乘法分配律,我们可以得到:\((-a)+ (-b)=-1 \times (a+b)\)

    • 除法作为乘法的逆运算也自然地被定义了。比如从\(a\times (-b)=-ab\)得到 \(\frac{-ab}{a}=-b\,\, (a\neq 0)\)

      • 在整数的范围内,要么我们坚持一个除法算式仅在对应一个整数乘法算式时才有意义,要么我们允许余数的存在。

      • 如果允许有余数,那么整数除法唯一的限制就是分母不能为0。因为考虑“一个非零整数\(a\)除以0等于整数\(b\)”并假设这个除法满足整数除法所有的性质,那么\(\frac{a}{0}=b\),可以直接推出\(a=0\):这与数\(a\)为非零整数相矛盾。因此,要么我们选择禁止这种除法,要么我们选择去掉整数运算的一些良好性质,而我们一般都选择前者。

当然,我们以上讨论的这个泛化过程只是多种可能中的一种。 泛化是一个探索的过程:人们非常可能需要很多次探索才得到我们想要有结果,虽然这些结果在今天看来是简单的。

23.4. 正分数:对整数除法的泛化

自然数的除法不够普遍,因为存在余数。 因此我们就有动力去泛化它,使得任意两个自然数之间都可以做不允许有余数的除法。 我们之所以对可以有余数的除法不满意,是因为当余数不为0时,除法就不是乘法的逆运算。 为了把这个关系泛化成“在任何情况下,除法都是乘法的逆运算”,我们就构造了正分数。

23.4.1. 正分数的构造

在这个过程中,我们使用的泛化原型是,在允许有余数的除法中,余数为0的除法。 在这种情况下,使用我们上面说明的对象化与解对象化的方法,\(\frac{a}{b}\)可以形象地理解为总共有\(a\)个标准单元,每次移走\(b\)个标准单元,多少次能移光。 如果我们把标准单元进行倍增,即用\(n\)个标准单元替换以前的一个标准单元,并\(nb\)\(nb\)个地数,我们就得到了,\(\frac{na}{nb}\)。 从另一个角度来看,我们也可以把\(n\)个标准单元看成一个新的标准单元,这样我们进行的除法运算与我们在倍增之前完全相同,即\(\frac{a}{b}\): 因此它与\(\frac{(na)}{(nb)}\)是在两个视角下的同一个操作。 因为商代表了操作中的子操作次数,而与具体操作的是什么没有关系,所以\(\frac{na}{nb}=\frac{a}{b}\),此即约分操作。

现在我们开始构造正分数。 我们首先把任意被除数自然数和任意自然数除数相除的结果定义为一个正分数,然后来定义哪些分数是等价的。 我们使用的等价关系是从余数为0的情况下(泛化原型)的约分泛化出来的:分子和分母同乘以任何一个自然数,得到的分数和原分数等价, 即在\(\frac{na}{nb}=\frac{a}{b}\)中去掉了“\(a\)\(b\)的倍数”的要求从而把它泛化成为一个一般的公式。 这样我们就规定了什么样的两个分数之间是等价的。 为了把等价关系从两个分数之间泛化到一个到多个分数之间,我们定义了等价关系的自反性、对称性和传递性,即两个等价于同一个分数的分数是等价的。 习惯上,我们把所有等价的分数里,互素的\(a\)\(b\)组成的分数\(\frac{a}{b}\)(存在性和唯一性易证)作为这个等价类的代表。

约分所定义的等价关系,让我们很容易地在正分数上定义序结构。 任取两个正分数\(\frac{a}{b}\)\(\frac{c}{d}\),我们可以通过比较与它们等价的\(\frac{ad}{bd}\)\(\frac{bc}{bd}\)的分子部分,来比较它们的大小。这也是从余数为0的情况(有明确直观意义)泛化到一般情况的结果。进一步地,我们很容易得知在\(a\)\(b\)互素的情况下,所有与分数\(\frac{a}{b}\)等价的分数都可以表示成\(\frac{na}{nb}\)的形式。假设分数\(\frac{c}{d}=\frac{a}{b}\),则\(ad=bc\),即\(ad\)\(b\)的倍数,而\(a\)\(b\)互素,因此\(d\)必为\(b\)的倍数。不失一般性,我们记\(d=nb\),那么从\(ad=bc\)就可推出\(c=na\)

23.4.2. 正分数的四则运算

构造好了分数,我们开始构造分数上的四则运算。在这种构造中,我们的一个目标是在把自然数运算泛化为分数运算之后,我们仍然能保留加法的交换律和结合律,以有乘法的交换律、结合律和分配律。

  • 同分母分数的加法公式\(\frac{a}{c}+\frac{a}{c}=\frac{a+b}{c}\)是从\(c\)能同时整除\(a\)\(b\)的原型情况下泛化出来的。 在原型情况下,先组合再\(c\)\(c\)个地数,与先\(c\)\(c\)个地数,再相加,最终得到的数的总次数是一样的。

  • 对于不同分母的分数之间的加法,约分定义的等价关系允许我们进行通分操作把它转化为同分母分数的加法,即\(\frac{a}{b}+\frac{c}{d}=\frac{ad}{bd}+\frac{bc}{bd}\)

有了正分数的加法,我们就可以比照自然数减法的构造,通过逆运算的方法来定义正分数的减法。至此,我们仍然需要被减数大于减数。

至于乘法,我们只需定义\(\frac{a}{b}=a\cdot\frac{1}{b}\)\(\frac{1}{a}\cdot\frac{1}{b}=\frac{1}{ab}\)这两个有直观意义的公式。 其他的性质都可以由乘法的交换律和结合律来获得,比如乘法公式:

\[\frac{a}{b}\cdot \frac{c}{d}=a\cdot\frac{1}{b}\cdot c\cdot\frac{1}{d} =a\cdot \left(\frac{1}{b}\cdot\frac{1}{d}\right)\cdot c =a\cdot \frac{1}{bd}\cdot c=(a\cdot c ) \cdot \frac{1}{bd}=\frac{ac}{bd}\]

有了乘法公式,除法公式\(\frac{\frac{a}{b}}{\frac{c}{d}}=\frac{ad}{bc}\)就是 \(\frac{a}{b}=\frac{ad}{bc}\cdot\frac{c}{d}\)直接取逆的结果。

23.5. 有理数:减法与除法泛化的结合

事实上,我们只要把从自然数减法泛化到整数减法的过程,应用到正分数上,我们就得到了有理数。 至此,除了除法中除数不能为0这个限制,四则运算都具有了普遍性。

当然我们可以进一步泛化解决这个限制,引入正无穷和负无穷,然而那样的话,我们又要定义包括无穷在内的四则运算:没有深入讨论极限的概念,简单地把有理数的运算法则推广到包括无穷的情况,就经常会引入矛盾。 比如,因为根据无穷的定义,无穷大\(\infty\)比任何数都大,所以不存在\(2\times\infty\),也就是\(\frac{1}{0}=\infty, \frac{2}{0}=\infty\),然而直接运用有理数运算法则来得到\(0=\infty-\infty=\frac{2}{0}-\frac{1}{0}=\frac{2-1}{0}=\infty\):这种结果是荒谬的。

因此,在初等算术的设定下,与其引入一个意义不明的无穷,我们还不如直接禁止把\(0\)作为除数。

23.6. 实数:对有理数性质的泛化

如果我们需要考虑四则运算之外的运算,比如开方,则我们又有了继续泛化的动力。 希帕索斯是记载中第一个发现无理数的人:他发现了对\(2\)开平方的结果不是有理数。 因此,人们开始意识到,即使对于正有理数来说,开方运算也并不封闭,于是泛化倾向进一步引导我们去引入新的数。 比开方运算更一般的,我们希望引入所有有理系数多项式的“有意义”的根:这里的有意义指的是在复数的视角里,虚部为\(0\)的根,而这样的数被称为(实)代数数。 而这类方程的求解一个复杂的工作:从婆罗摩笈多在七世纪第一个提出了一元二次方程的求根公式开始, 人类探索了一千多年才由伽罗瓦证明了五次及五次以上的方程不存在由有限次四则运算及开方组成的求根公式。 不仅如此,人们发现了在代数数之外还有超越数,比如刘维尔数、\(\pi\)\(e\)等等:人们对超越数有大体的认识是在18世纪, 而第一次构造出超越数——刘维尔数——却已经是在1844年。 因此,在这个复杂的泛化过程中,人们甚至不知道自己究竟泛化出了什么:人们泛化出了无数个数,又对这些数之间的结构不甚清楚。 毕达哥拉斯开始并不知道它的毕达哥拉斯定理中蕴含了无理数,最早在1585年使用小数表示的西蒙·斯蒂文也无从知道他定义的小数中包含有超越数。

从有理数到实数的泛化过程过于复杂,我们在此也无法详述。 事实上,人们对有理数进行泛化,其动机远远不只是要解决正数开方不够一般的问题。 我们要引入足够多的数来使得实数包括我们在分析操作中需要的所有数: 比如闭区间套在实数中要有收敛值,比如所有的戴德金分割都要在实数中对应一个值,比如所有的柯西列都要收敛于一个实数,等等。 而所有这些泛化,最终竟然得到了同一个数集,即实数。 这使得实数成为了最重要的数集之一。 从实数构造的历史中,我们不得不惊叹于许多代数学家所共有的强烈泛化倾向。

23.7. 复数:对开方运算的进一步泛化

在实数的范围内,我们仍然有负数不能开偶次方的限制。 为了消除这个限制,我们需要进一步泛化,进一步对实数集进行扩充。 首先,我们就把在实数范围内不能开偶次方的负数代表\(-1\)的平方根定义为虚数单位\(i\),引进到复数集里。 然后我们用\(1\)\(i\)的线性表示来构造复数集,并在尽量保持原有性质的基础上推广各种运算。 然而,在泛化的过程中,我们经常不得不舍弃一些性质,比如我们在把实数泛化到复数,就失去了序结构。

23.8. 向量:组合倾向的体现

向量是人们把一组标量进行有序的结合所产生的结果。 对于向量,最基本的操作是加法和数乘。 在进行加法时,我们对不同位置的标量分别做加加法:这在几何上可以被直观地表示为平行四边形法则或三角形法则。 在进行数乘时,我们只需把所有位置的标量都乘以这个数。

在泛化乘法运算时,我们有了很多的选择。

  • 在两个同维的向量之间做乘法,最简单的想法是把对应位置的标量相乘得到一个相同长度的向量。 如此定义的向量乘积叫做阿达玛乘积:它的应用并不广泛。 然而这种乘积却保留了乘法交换律、乘法结合律和乘法分配律。

  • 两个同维向量之间最常用的乘法是内积。 在这里,两个向量之间的乘积是一个标量。 内积之所以重要就是因为它连同这两个向量的范数共同决定了这两个向量之间的夹角。

  • 任意两个向量之间还可以定义张量积:它的结果是一个矩阵。

  • 任意两个向量之间可以定义克罗内克积。

  • 在特定维数下,我们可以定义具有更好性质的向量乘法。 比如两个三维向量之间可以做向量积。

23.9. 向量的进一步组合:矩阵和张量

向量是标量之间的一维组合,而矩阵则是标量之间的二维组合,或者说是行(列)向量在列(行)上的组合。

矩阵的加法和数乘的定义,与向量的情况相似。 而矩阵和向量的乘法规则,则是为了把线性方程组简便地表达成\(Ax=b\)的形式。 这样,矩阵就可以被理解为一种对向量的操作,比如旋转,比如在某些方向上的拉伸与收缩。 因此定义矩阵乘法时,我们最需要的性质是结合律\(A(Bx)=(AB)x\):左面代表依次做两次操作,而右面代表做一个整体的、等价的操作。 矩阵的乘法规则正是这个性质的推论。 这样定义的矩阵乘法不满足交换律,但因为上面讨论的原因,我们在这种情况下优先去泛化的是结合律而不是交换律。

当然,与向量的情况相似,我们也可以从其他的角度来泛化矩阵的乘法,比如采用上面提到过的阿达玛乘积、张量积、克罗内克积等。

我们可以对矩阵进行进一步的组合:即以矩阵当作“面”,在正交方向上叠加起来,得到一个“体”,就得到了(三阶)张量。

23.10. 数学精确性的来源

首先,我要明确地指出,数学和逻辑的规律之所以无误差,是因为它们是我们的思维建构:首先,我们可以精确地控制我们使用的建构材料,它们是完全相等的;其次,我们清楚其中所有的建构细节。 一个人之所以会同意另一个人的数学观点,是因为他可以按那个人说的建构方法自己重新建构一遍,或者说操作一遍。 比如\(7+5=12\)这个等式的合法性是由我们多次操作之间的等价性确立的,而完全不是康德所说的是先天综合判断:他说,从7和5怎么分析也分析不出12来。 实际上,我们定义好7、5、12,定义好加法,定义好等号,这个算术等式就是分析的结果。

23.11. 康德的时空和感觉的时空

康德那个“先验”的时空,就是上节我们构建出来的线性时空。 那个时空,也是经典物理学使用的时空。

首先,这个时空不是我们感觉中的时空。 在我们的视觉感知中,从来都是近大远小,更类似于绘画里的透视。 然而,我们闭上眼睛随便想一想任何对象,都会表现出平直的欧氏空间的样子。 试想,如果我们自然想到的是透视下的空间,我们甚至根本就不会认同欧氏几何里的平行公理,因为在透视下,两条平行线随着距离的增加,它们的距离越来越近。 当到了足够远的距离后,两条直线上相应的点,在视网膜上的像都对应同一个象素点。 那作一个从透视空间到欧氏空间上的变换,在我们前面成锐角的两条直线会不会是平行的呢? 我不打算讨论这个问题,因为显然,在我们设想欧氏空间的几何体时,绝不是在意识的层面下对透视下的图象做修正:那将是比那些几何入门内容复杂得多的问题。

所以,一个小学生在课堂上听到立方体,不管是书上画的,还是他脑子里想的,都是欧氏空间中的立方体。 我们看小孩画的画,也可以间接地认识小孩头脑里的世界。 小孩画的画,表现出一个他头脑中鲜明的对象化,而且各对象是在一个平直空间中罗列:它基本从来都不是透视的。 相反,透视这个在感官上“客观”的空间,我们却要在反思中认识:要画透视的画我们还要进行细致的观察和学习。

由此我们可以推断,意识下面必然有一个下属部门预先处理了这些信息,然后交给意识一个处理后的欧氏空间的结果。 这个下属部门比较复杂:它显然不仅有关当下的视觉。 要得出欧氏空间的那个结果,它需要动用记忆,把目前的视觉和以前记忆中的视觉印象相比较,它甚至还需要考虑位置和角度的变化,或者调用其他的感官。 比如我们面前有一个正方体。 我们在任何一个给定时刻只能得到它的一幅透视图。 为了知道它到底是什么样子的,我们会换个角度去看它,会用手变换角度地去触摸它。 最后,我们总结了所有这些信息,得出“这是一个正方体”的结论。 这里我们显然也用到了“相等倾向公理”,但在这里更重要的是,我们综合了不同时刻下的五感。 在这个过程中,意识本身只完成了一小部分工作:大部分工作都是意识之下的下属部门完成的。

事实上,正因为我们意识中的默认空间是欧氏的,所以我们才可以轻易地从感官世界拼凑出经验世界。 否则,用不同视点、不同视角的透视图来拼凑(视觉)经验世界,是一个非常复杂的工作。

至于时间,我们对它的线性直觉则弱很多。 这种直觉一般只有在短暂的时间范围内才比较明确,但如果有一个周期性事件作参照(比如钟摆的运动),这种线性直觉就会被增强。 从大尺度时间来说,我们对时间的线性感觉是我们对空间的线性感觉的泛化。 对时间更多的讨论见“时间”这一节。

这种“欧氏时空”在我们的大脑里是如此根深蒂固,以至于具有强烈逻辑倾向和否定倾向的理性思维,都会把它的性质当成公理。 这种公理体系对我们来说是如此的自然,以致于我们学习起欧氏几何就非常轻松:那里没有任何违反直觉的东西,我们甚至可以说它严格地表述了我们的直觉。 以前从来没有接触过几何学的康熙皇帝,也会对几何学产生强烈的兴趣。 在《美诺篇》中,苏格拉底甚至向我们展示,一个没学过几何学的奴隶小孩儿,在他的启发式的提问下,知道了一些几何知识。 由此,柏拉图认为这小孩儿本来就具有这些知识,只是忘记了,在苏格拉底的启发下又回忆起来了。 与此相反,换一种时空,我们理解起来就困难得多,即使它们在逻辑上的复杂度相似。 纵是一个理论基础很扎实的高中生,也不大可能在教授的启发下“回忆”起广义相对论所使用的黎曼几何。 事实上,即使是爱因斯坦,他虽然自发地强烈感觉他需要黎曼几何那样一种东西,也极力地想把它建立出来, 他还是不能“回忆”起这套数学理论:他不得不去请教希尔伯特之类的数学家。 我们学习非欧几何,能做的只是按照逻辑一步一步地去理解,然后小心翼翼地去建立直觉。 从“外在”的角度去研究,我们尚可把它放到更高维的欧氏时空里去理解;如果从“内在”的角度去研究,我们则连这样做也不可以,从而更难建立起对它的直觉。

所以,虽然从公理化数学的角度来看,欧氏时空并没有什么特别:它所使用的公理只是无数可能中的一种, 但对于人类而言,欧氏时空有着不可替代的特殊性。 这不仅仅表现为他符合人的直觉,学习起来比较容易,而且表现在,它本身就是人类构建数学的方式。 我们建构自然数、整数、有理数以及实数,本身使用的就是对欧氏空间的直觉。 所以自然地,我们处理欧氏空间也简单得多。 在现代系统理论里,线性系统要比非线性系统容易处理得多,不管在理论分析上还是在实际计算上。 究其根本,人类所有的基本运算都是定义在线性空间上的,对分析结果的直观认知一般也是在线性空间上的,所以人类处理线性问题比较简单,是理所当然的。 但是,“线性系统比非线性系统简单”这个事实只是指向人类“用数学方法构建出的物理模型世界”,而不是指向“真实的客观世界”。 我们很难说,在“真实的客观世界”里,非线性系统比线性系统更复杂:因为在那里,与其说是物体遵循计算结果,我更倾向认为,是物体的运动自动地符合了规律,而无需任何的分析和计算。 试想,如果真实的客观世界也是通过计算得来的,那么即使是实时模拟一个小小的原子,都需要多少计算资源呢? 要模拟整个世界,那需要一台比这个世界大多少倍的“计算机”呢? 要运行那台“计算机”又需要另一台比它还大多少倍的“计算机”呢? 如此循环下去,就产生了一个爆炸式、无穷嵌套的世界链。 我不否认任何可能性,但这种可能性在我看来是极低的。 从审美上来讲,这个嵌套模型显得非常“人为”而不自然。

所以,康德的“先验”时空虽然不符合现代物理学,但它却符合人脑的认知方式。 因此,它并不是错误的,而只是,它指向的是直观的和概念的世界,而非“客观世界”。 它应该能够和意识的某些下属部门对应起来。 所以,它确实是康德所说的“先验”的:它需要从经验里得到对象进而抽象出建构材料,但使用这些材料如何建筑,是由大脑本身的结构决定的。 这正类似于一台计算机,如果我们不给一台新计算机输入任何的指令(比如装操作系统),从功能上来看它就不会做任何有意义的事情(它在通电后内部状态显然会有变化,但那不属于计算机的功能),但是计算机里的硬件决定了它对指令会产生确定的反应。 从这个角度来说,人脑和计算机非常类似。 婴儿在接受任何外部刺激以前(虽然实际不可能,他在出生之前就会接受触觉和听觉等方面的刺激),他的脑子里就不会有任何实在的对象和概念:这正像一台计算机裸机。 从婴儿开始用五感来认识世界直到婴儿学会了说话、数数以及其他一些极为根本的东西,比如各种运动,这大概对应了给计算机装上成熟的操作系统的过程。 婴儿之所以可以自发地学习,也可以学会我们教给他的东西,归根结底,是因为他脑子里有决定他可以这样做的“硬件”。 这正好比,我们可以给计算机装上操作系统,而不可以给石头装上操作系统。 如果一个“软件”所使用的指令与实际硬件的指令集非常相配,那这台计算机运行这个软件就是很容易的:这类似于我们研究线性系统时的情况。 当然,它也不是不可以运行对于它来说特别“陌生”的软件指令(需要先编译成它可以识别的指令),它甚至可以模拟另一个完全不同的操作系统,只是效率会变得极为低下:这类似于我们研究非线性系统或非欧几何时的情况。