语法和语义的博弈:数系是如何扩张和分化的?
修改历史
- 加入最后一节 Fibonacci 数列
自然数和零
计数语义
自然数 1, 2, 3… 可能是人类最早发明的数系。它的意义根植于“一只羊、两条鱼、三个人”这样的物理世界的计数活动。
书写时,自然数有非常明确的规则,尤其是早期用手指或划竖线来表示,构造下一个数的语法规则就是继续展开一根手指或者在右侧添加一条竖线。
因此,这里语义和语法几乎重合:数数既是物理动作,也是符号规则。你很难说清楚,究竟是因为现实中有三个苹果,所以我们定义了“3”;还是因为能划 3 条竖线才能理解“三个苹果”。
另外,自然数的累加性质使得天然的有一种大小关系,这种大小关系直接来自执行累加时的时间先后关系,自然数可以排在一条线上,左侧的更小,右侧的更大,计数活动在时间上也是是从左到右。
这种符号和外部世界意义的紧密关系使得当用一个新的符号如 ? 或 0 来表示没有苹果时,人们会感到非常的不适。
既然三个苹果是三根竖线 ||| ,两个苹果是两根竖线 ||, 一个苹果是 |, 那么没有苹果不就是 吗?
物体的空缺对应的不应该是指代它的符号的空缺吗?
既然什么都没有,为什么又有一个符号来表示呢? 用“有”来表示“无”,不是矛盾吗?
(请在本文中暂时克制进入“有”和“无”是矛盾统一的辩证法或 "空即是色,色即是空" 的佛法轨道)
构词法和 0
0 出现的动机,主要来自方便表示大数时的编码规则,尤其是十进制这种用空间表示权重的记法。
十进制并不只是用到了 0 到 9 十个符号,更重要的是每个符号的值由其所在的“位”决定。
1211 并不是解释为 1+2+1+1=4 (这是罗马数字的解释规则), 其中的 2 首先有空间占位符的功能——表明“百位”这一权重位置被占用了,尽管任何数字放在这个位置都体现“百”,但你必须有一个符号存在以维持位值结构。
在此基础上再将它解读为 2 个,因此 1211 里的 2 是有 2 个 100, 在这种构造数字的规则下, 0 的出现是自然的,因为需要表达某个位所代表的权重的缺失,1011 中 0 先根据所在位置解释成“百位”(也可以用空格来表示 0 但这会导致无法区分前缀和后缀的空格,也很难数出连续有多少个空格),然后 0 被解释成“没有”,最终得到的完整意义是“百位的缺失”。
与之相对的是罗马数字:它用 I、II、III、IV、V 等符号累加表示数值,不需要占位符,因为每个符号直接贡献自身的值,没有额外的对语法结构的解释。罗马人完全理解“什么都没有”这个概念,但他们没有它创造一个数字符号,因为记数系统语法上不要求一个“空位”参与运算。
为什么人们接受了这种十进制进位计数法,而非罗马计数法?
因为好用,它可以用很短的字符串表示生活中用到的足够大的数字,更重要的是,可以基于这种编码方式发展出相对方便的加法和乘法的规则,比如竖式计算法等。
对 0 的接受告诉我们:一个数字在更大的语法结构中,会被赋予额外的意义,它的语义不单单是指代外部世界,还可以描述结构的属性,二者结合才能获得完整的解释。一个在语义上“不存在”的东西,也可以用符号来表示,单独的 0 并不是什么都不指代,而是指代了“个位”的缺失,这是一种对符号结构自身的描述。
整数
异常
如果说 0 的引入是构造最基础的语法对象 – token 时,构词规则的内在要求;那么负数,则是语法对象在按照运算规则转变时,为了满足流畅和好用性(或称为封闭性)而主动向语法规则妥协的产物。
计算加法的时候,一切都很自然:3+10=13,10+13=23,13+23=36……这也自然引出了减法——从 36 只羊里选出 13 只,那么剩下 23 只。但当遇到“3 减去 5”时,问题出现了:你无法从 3 只羊中取出 5 只。
人们可以说“减去比自己大的数是不合法的”,也就是直接在这里抛出异常、中止计算。就像罗马数字系统那样,干脆不让这种运算出现。
延迟和升维
但假设我们有这样一个等式: 5 + 5 = 7 + 3 。它可能表示某种收支平衡:左边是“先买 5 元又买 5 元”,右边是“先买 7 元又买 3 元”,结果总支出一样。现在,我想在等式两边同时“减去 5”(比如取消一笔 5 元的购买),得到: 5 = 7 + 3 - 5 。
如果是计算 7+5-3, 先算 5-3 是合理的,我们希望这种合理性在更多场景下进行扩展。
于是尝试先去算 5 = 7 + 3 - 5 右边的 "3-5",问题就来了:3 - 5 是什么?如果直接定义“减法只能大减小”,那么这一步就被卡住了——尽管最终整个表达式(7+3-5)会等于 5,但中间步骤的“非法”却让推演无法进行。
因此 3 - 5 单独拎出来确实可以说它是没意义的,但放在已有规则构建的更大背景下,它“渴望”某种意义,而不是异常。
这正是负数诞生的动机:我们希望在代数推演中不被打断。符号在成为最终答案之前,需要经过各种变形、移项、合并,如果每遇到一个“不够减”就宣布非法,那么整个代数语言就会变得支离破碎,很不好用。
我们可以把每个减法都延迟计算,暂时结晶,比如把 3-5 或 2-3 就看作一个数。如果延续前文中自然数的图形解释,这种延迟计算后得到的静态对象类似于在单方向自然数轴上增加了一个离散维度,如图:
可见,对减法规则的语法扩展,有一种突破现有维度的倾向。
这个延迟对象 a-b 并不是铁板一块,根据定义,当遇到加 b 的时候,它会回到 a 。
而如果不是加 b, 它也可以进行局部的消融,比如 (3-5)+3, 可以先计算 3+3 然后减去 5 得到 1
额外的,如果遇到 3-5 再减去 5 的情况,从语义上可以解释成 3-10, 即连续减法等于减去累计值,这在一般自然数里是合理的,比如 10-3-3 等于 10-6。
总结起来就是,我们在新的减法延迟对象 a-b 上定义两个“吸收”规则:如果遇到加 c 操作,那么 a-b 的左侧对象可以吸收掉 c 变成 (a+c)-b, 如果遇到减 c,那么 a-b 的右侧对象可以吸收掉 c 变成 a-(b+c), 最终仍然是延迟对象形式,这非常棒,表明减法延迟对象的形式足够通用,参与现有的加法和减法不会额外催生新的语法对象。
降维和负数
把目前不合法的运算变成合法的升维后的静态词项,这又是一种构词法的扩展,我们把带有运算结构的对象丢给未来处理,以使得推演可以流畅进行下去,即便最后无法回到自然数,最终也能得到 a-b 形式的数,从而避开了“异常”。
但如果我们任由“运算规则可以被静态化变成构词法”的思想传播,会有一些不必要的麻烦。
比如 5-3 也可以被看作一个独立的数对象,甚至 2+3, 4+1 也都看作词法对象,扩展出一个加法延迟维度:
然而我们知道,加法并不需要这样升维,因为它们最终会回到自然数中: 2+3, 4+1 都对应了更为简单的具有代表性的自然数表征: 5 。类似的, 5-3 也可以“降维”到 2 。
应该考虑把 3-5 也规约到一个更典型词汇上,这最终促使了我们现在所看到的负数。因为所有 a-b 形式的自然数对都可以等价到 0-c 或 c-0 形式的延迟对象上:
- 如果 a>b, 那么自然数 c 就等于 a 减去 b 对应的自然数结果
- 如果 a<b, c 就等于 b 减去 a 对应的自然数结果。
这是如何做到的呢?是因为我们对“相等关系”进行了扩展。
0-2 和 3-5 之所以相等,是因为它们加上 3 回到同一个自然数 1,或者说它们在目前它们能参与的任何运算使用中,最终效果是等价的,这还是来自于操作行为的有用性,称为替换的等价性或替换的透明性,即如果 x 和 y 在各种使用场景相互替换都不影响结果,那么 x 和 y 就是相等的,我们不需要知道 x,y 是什么,而只看它们的表现。
将其推广到所有减法对象,如果 a-b 等于 c-d 那么两边都同时加上 b+d 应该仍然相等,也就是 a+d = b+c 。
在这个定义下,a-b 才能规约到 0-c 或 c-0 。
而 0-c 和 c-0 体现的是自然数和 0 的关系,因此我们可以把 0 作为默认基准来划分这两种数,省略构词法中的 0 后:
- 0-c 可以用 -c 表示,称为负数
- c-0 则用 c 表示,称为正数
- 0-0 可以朝着任意方向规约,因此 0 和 -0 是相等的,一般记为 0.
这种等价意味着,那些悬浮在二维空间里的数对,如 3-5, 7-9 最终能在一条线上找到其典型代表 -2,所以我们只需要一个维度就够了,这是负数能降维的原因:语法所扩充出的更高维度在语义上是冗余的。
0 在整数中的新语义
反映在图上,这两种数是被 0 所区隔的,因此可以把自然数根据 0 对称映射出负数,不再需要把 3-5,2-3 看作静态的增维的对象:
注意我们也可以用斜的或垂直的负轴来摆放负数,但如果把自然数的大小关系扩展到负数,“大和小”可以对应到图中的”右和左“,因此摆放在一条线上是对序关系的自然扩充。
所以,负数的诞生与 0 的引入模式很相似——都是为了扩张语法而驱动的,然后语义修剪,语义就是使用中的“有用性”,即它和其他现有规则的兼容性(其他规则的建立也基于有用性),0 是为了“构词”(位值表达),负数是为了“造句”(运算连续)。
在有了负数之后,连同 0 以及自然数组成了更大的整数数系, 可以用它对世界上许多其他事物找到更好的解释,而其中 0 本身的意义也扩充了,比如温度(零上与零下)、方向(东与西)、债务(资产与负债)、时间(公元前与公元后)。这些看似不同的概念,在负数的框架下被统一为同一种语言:以 0 为对称中心的数轴,0 成了一个约定的基准,而不是什么都没有。
这是语法反向对语义的扩充。
有理数
汲取语义和异常
除法可以理解为乘法的逆过程:如果 \(3 \times 2 = 6\),那么定义新的符号规则 \(6 \div 3 = 2\),\(6 \div 2 = 3\)。除法本身也有独立的、自然的语义解释:均分。比如,6 个人分 3 个苹果,每人得到 2 个。
但如果 3 个人分 2 个苹果呢? 整数里也不存在一个数乘以 2 等于 3 。 要么非精确地丢掉一个苹果,每人只分一个,要么将其定义为“非法”或“中止计算”。
但通过创造负数,我们已经解决了减法中的异常;类似的,我们也可以通过创造新的数,来解决除法中“除不尽”或“不整除”的困境。
延迟,升维和降维
我们直接保留 3/2 结构,将它看作一个临时的除法“运算结晶”,称为有理数(更准确的是比例数,即 p/q 形式)。它不急于被算成某个“完整的数”,而是以“尚未执行的除法”的形态存在。当未来乘以 2 时,它又可以回到 3 ,在图解释中,仍然是升维:
整数中通过给自然数添加单个比特的“负号”就可以把两个数的表征转变成另一个自然数以及它和 0 的大小关系,获得更紧凑的轻量表达式,也有更直观的和自然数在一条线上的解释,有理数是否可行呢?
答案是要分开来考虑:
与减法延迟对象 3-5 等价转换到 -2 类似,要对有理数词法进行简化,首先需要定义有理数之间的“等于”关系: \( \frac{a}{b} = \frac{c}{d} \) 等价于 ad = bc 在这个定义下,任何分数都可以化为最简形式(分子分母互质)。但除法的结果并不像减法那样可以简单地归约为“自然数+方向”——3/2 无法用整数加上一个符号来表达,它需要保持这种数对的形式。
为什么呢?按照减法的规约思路,如果 a/b 能够写成自然数 c 和某个常数 D 之间的关系,那么它必须能规约为 c/D 或者 D/c, 在这种约定下,就可以省略 D, 写成 c 或者 ~c 。但经过运算验证发现这种期望无法实现,a/b 最多能写成最简形式,即没有公约数,比如 a/1 规约到已有的整数 a 上, a/a 规约到 1,但不能完全把某个数约分掉。
因此有理数不能通过“附加标记”来扩充语法,而是引入了分数线、分子分母。其形式仍然体现了“对除法的延迟执行”,只不过使用中常把其中公共的因子根据语义等价性质给约分掉。而如果用十进制,则需要引入无限长度的小数,这会在后文中讨论。
- 但从“序”或者说大小关系的角度,有理数仍然可以被降维,它不需要游离在整数数轴之上,和其他整数的关系可以只规约到“大”和”小“上(当然还有相等),这是因为整数中是有间隔的,这些间隔可以被整数等分,然后通过选择足够多的等分来表示有理数。之所以要 a/b 两个整数来定位有理数(而不是像负数那样只需要 -a) ,是因为这种定位需要先用 b 来确定等分的粒度,然后用 a 去积累这些等分数。
对语法扩张的否决
当扩充出 a/b 延迟对象后,根据它的扩充规则,我们自然得到一个计算规则,即 (a/b)*b=a ,这是它的“定义性”规则——它告诉我们,这个延迟除法在被乘以分母时,可以“释放”回被除数。而化简规则来自于等于关系的定义,比如 2a/2b 可以写成 a/b 。
但为了让这种新的词汇能够融入整数,它需要 能适应已有的加减乘的规则,如交换律、结合律和分配律。这会引出对无理数更细的一些导出规则,比如为了保证分配律和与整数的兼容,我们必须规定:
\[ \frac{a}{b}+\frac{c}{d} = \frac{ad+bc}{bd} \]
然而,在各种语义的检查下,我们会发现一个无法处理的“异常”:除以零。
为什么不能像处理“不够减”或“不整除”那样,也为 a/0 创造一个符号?
可以尝试,比如把 1/0 看作一个延迟符号,那么问题来了: (1/0)x0 应该等于多少呢?
如果要满足交换律和刚建立的 a/a=1 的有理数等价性化简规则,那么 (1/0)x0 根据交换律等于 (0/0)x1 = 1 , 类似的,有 (2/0)x0=2, (a/0)x0=a 。
但由于 0 的乘法规则是 0 乘以任何数都是 0 (这非常符合语义,即再多个空还是空;且和 (a-a)*b 分配率的语法规则保持一致),那么有 0x1=0x2
两边除以 0 得到 0x(1/0)=0x(2/0) ,执行交换律得到 (0/0)x1=(0/0)x2 ,在把 0/0 化简成 1 得到 1=2 ,这和我们对自然数的定义矛盾了。
如果定义它为其他结果也会导致类似的矛盾,所以 1/0 是可以看作一个符号,但这个符号无法参与到交换律等其他有理数共同遵循的游戏规则中,
你可以生硬的保留 0x(1/0)=0x(2/0), 只有未来乘以 0 时又回到 0x1=0x2, 这意味着要放弃交换律、分配律等熟悉的规则,这样的系统在日常推理和物理应用中几乎不被使用,它牺牲了太多我们习以为常的运算直觉(语义)。
你也可以创造一个数系,其中 1=2 或者所有数都相等,那么它就相当于只有一个数 0, 这样的数系是可以存在的,除以 0 也是允许的,但它在语义层面没什么用,就等于一个 0。
所以, 1/0 或 a/0 可以看作延迟符号,但它只能以一种“冻结”的状态存在:它左右两侧的运算都被“结晶”,只能等待未来乘以 0 来“解开”——而一旦解开,要么回到原状( 0×(1/0)×0=0),要么陷入矛盾。这种“延迟”没有带来新的运算能力,只是把矛盾推到了未来。
所以,在语法扩张中,语义发挥的功能不一定是对扩张后的对象进行聚类从而降维,还可以直接否定某些扩张细节:只有当新对象引入后,原有规则仍保持一致,且推演不出现逻辑矛盾时,扩展才是合法的。
代数数
在自然数和 0 基础上,我们通过“加法逆”得到了负数和整数,通过“乘法逆”得到了有理数。那么,下一个自然的扩展方向是什么?
乘方的逆
有理数的自然数乘方
自然数上的乘方如 \( 2^3 \) = 8, \( 3^2 \) = 9 有明确的数学上的语义:乘法的重复: \( a^n \) 就是把 a 自乘 n 次。只要 a 和 n 都是自然数,结果也总是自然数。乘方在自然数中畅通无阻,没有产生任何“异常”。
乘方也有直观的外部的几何语义——比如面积的定义,另外,勾股定理告诉我们直角三角形的边满足 \( a^2+b^2=c^2 \),这直接催生了“平方”的广泛应用。
当将底数从自然数扩展到有理数,重复乘法的语义仍然得到延续,\( (2/3)^2 = 4/9 \), \( (1/2)^3 = 1/8 \) , 这是因为有理数对乘法封闭,重复地乘以有理数得到的还是有理数,我们似乎可以在有理数这个类型里随意计算自然数次幂的乘方。
有理数的 0 和 整数乘方
但当指数从自然数扩展到 0 时,我们遇到了“语法扩展”中第一个阻力,也就是和语义的博弈点。根据前文 a/0 的经验,有可能语义会占据主导,声称 \( a^0 \) 不合法,但又根据 0 的发明的经验,有可能语法会占上风,给它赋予新的语义甚至创造出新的符号。
按照“重复乘法”的语义,\( a^0 \) 没有直接的定义,但为了让指数法则 \( a^{m+n} = a^m \cdot a^n \) 在 m = 0 时仍然成立,我们需要规定 \( a^0 = 1 \)(\( a \neq 0 \))。这是典型的“语法驱动”定义:不是从语义中直接得出,而是为了保持规则的一致性而人为添加。
类似地,当指数扩展到负整数时,例如 \( a^{-n} \),我们同样希望指数法则继续成立。从 \( a^{n} \cdot a^{-n} = a^{0} = 1 \) 可以延展出 \( a^{-n} = \frac{1}{a^n} \)。这又是一个为了维持规则一致性而做的语法扩展。
这些定义并非直接来自“重复乘法”的语义,因为重复 1/3 次并没有一个合理的解释,它是为了让乘方的代数规则(即指数法则)在更广的指数范围内保持自洽。这类似于我们为了减法封闭而引入负数——都是语法层面的“修补”。
经过这样的扩展,有理数的整数次幂仍然是有理数:\( 2^{-3} = \frac{1}{8} \),\( \left(\frac{3}{4}\right)^{-2} = \frac{16}{9} \)。
新的“异常”: 0^0 和 0/0
在定义 \(a^0 = 1\) 时,我们特别附加了条件 \(a \neq 0\)。那么 \(0^0\) 呢?
我们尝试通过不同现有语法规则去填补它:
- 如果坚持“任何非 0 数的 0 次幂等于 1”的规则,那么可以得到 \(0^0 = 1\)。
- 如果从 “0 的正数次幂等于 0” 出发,即 \(0^1 = 0\),\(0^2 = 0\),……那么 \(0^0\) 应该等于 0。
- 如果按照指数法则 \(0^{0} = 0^{1-1} = 0^1 \cdot 0^{-1}\),而 \(0^{-1} = 1/0\) 是未定义的。
多种已有语法规则的延伸相互冲突,甚至有一种会导向未定义,这时候用哪一个,就成了一个语义选择问题。
我们必须借助数学之外的意义来裁决,例如在组合数学的记数场景中,几乎不会遇到 \( x^{-1} \) 这样的运算, 而由于二项式定理是该领域的核心公式: \[ (x + y)^n = \sum_{k=0}^{n} \binom{n}{k} x^k y^{n-k} \]
为了在边界保持公式的合理性 – 如 \( (1+0)^0 \) = \( \binom{0}{0}1^{0}0^0 \) 时 – 就需要将 \( \binom{0}{0} \) 和 \( 0^0 \) 都定义为 1 。 这是在特定场景下由语法结构驱动的选择。
类似的,之前讨论过,对于 a/0,任何有实用价值的数学中赋予它意义的尝试都会导致逻辑矛盾(如从 \(0 \times 1 = 0 \times 2\) 推出 \(1=2\)),因此它被永久排除在算术系统之外。和 \( 0^0 \) 类似,我们还需要单独去检查 0/0 的情况:如果按照 0 除以任何数为 0, 其结果或许应该是 0, 但按照任何数除以 0 为定义,它又不应该定义,它处于一种合法和非法的叠加态上。
等到后文实数和极限概念建立之后会看到,这类式子在不同场景下可以有不同的取值, 这种由语法冲突带来的多样性,反而丰富了对 0 的理解,就像整数出现后, 0 不再是纯粹指代 "没有", 而是作为一种相对的基准。
这种处理方式也带来了一种新的认识:语法扩展的边界,取决于冲突的严重程度。如果冲突是绝对的、不可调和的(如 \(a/0\)),数学就选择永久禁止;如果冲突是局部的、且可以通过上下文约定来化解(如 \(0^0\)),数学就保留一定的灵活性,允许在不同场景下赋予不同的约定。
延迟和升维
现在考虑 \( a^{b} \) 的例子,a 和 b 都是非 0 的有理数,根据语法扩展,直接就能得到一个新的类型的数:
这是纯形式上的扩展,我们先假设这些数能够参与已有的加减乘除和乘方,也就是说,它们是诸如 \( 2x^3-x^2+1=10 \) 整数系数多项式方程的解,因为这类多项式中 x 能参与的所有操作就是乘方和加减乘除。
当然这些数中很可能出现类似 1/0 的会导致矛盾的数,而且有些数可能和有理数轴上的数等价,因此维度会塌缩,数学上要对它们进行严格的语义检查。
本节先给这些经过检查的数统称为代数数,表示它们是整数系数的多项式代数方程的解。这类数包括 \( \sqrt{2}, \sqrt{-1}, \frac{1+\sqrt{3}}{2\sqrt{-1}} \) 等,注意有些数的组合有可能会超出上图所描述的二维空间,比如 \( 1+\sqrt{2}+\sqrt{3}+\sqrt{5} \) 也许并不能写成 \( a^b \) 的形式,所以能否放在图中,目前还不得而知,但后文把代数数细化为实数和复数并分析之后,会知道它完全塌缩到一维,而整个代数数不会超过二维。
本节先从定义等于关系入手来细化对某些代数数性质理解。
我们想判断 \(\sqrt[n]{a}\) 和 \(\sqrt[m]{b}\) 是否相等。根据指数法则,如果它们相等,那么它们的 \(nm\) 次幂也应该相等: \[ (\sqrt[n]{a})^{nm} = a^m, \quad (\sqrt[m]{b})^{nm} = b^n \] 因此,一个自然的定义是: \( \sqrt[n]{a} = \sqrt[m]{b} \) 等价于 \( a^m = b^n \)
但之后的检查比这要复杂,因为乘方的逆不止一个数,比如 \( x^2=4 \) 中 x 可以是 -2 或 2 。
即便我们定义 \( \sqrt[n]{a} \) 是其中正的那个数,和 a/b 无法都规约到整数类似, \( \sqrt[n]{a} \) 也无法都规约到有理数。
接着尝试用序的关系来把这些数放到有理数数轴上,就像有理数塞到整数之间一样,但这件事情从直觉上看是比较困难的,因为任意两个有理数 a,b 之间,都会有一个新的有理数,比如 (a+b)/2, 似乎整个数轴塞满了。
但从逻辑上,任意有理数之间存在有理数并不能说明任意有理数之间不能还有其他数,人类发现的第一个不是有理数的数大概是 \( \sqrt{2} \), 通过勾股定理可知,它的是单位正方形斜边的长度。
假设 \( \sqrt{2} \) 是有理数,即可以写成最简分数 \(\frac{p}{q}\)(p, q 为互质的正整数)。那么: \[ \left(\frac{p}{q}\right)^2 = 2 \quad \Rightarrow \quad p^2 = 2q^2 \] 这说明 \(p^2\) 是偶数,因此 p 也是偶数,设 p = 2k,代入得: \[ 4k^2 = 2q^2 \quad \Rightarrow \quad q^2 = 2k^2 \] 于是 \(q^2\) 也是偶数,q 也是偶数。这与 p, q 互质矛盾。因此 \( \sqrt{2} \) 不能写成两个整数的比——它不在有理数中。
但 \( \sqrt{2} \) 能和其他数比较大小,因为任何有理数,可以通过 \( r^2 \) 和 2 的关系来反推 r 和 \( \sqrt{2} \) 的大小关系,这是对序在自然数性质的延续,比如自然数上,如果 \( 3^2>2^2 \) 那么 3>2 ,而我们约定 \( \sqrt{2} \) 是 \( x^2=2 \) 中解中大于 0 的部分。
因此这说明,乘方的逆所得到的数有一部分是可以扩充有理数,并且可以和有理数比较大小的。
另一种很值得怀疑的形式是图中淡红色背景的 \( \sqrt{-1} \), 我们知道任何数的平方都是非负的,什么对象的的平方会是 -1, 这个对象真的能运算吗? 它会不会像 1/0 那样,一旦引入就破坏整个系统?我们将在复数一节中展开讨论。
实数
几何语义和十进制小数
前文证明 \( \sqrt{2} \) 不是一个能够写成两个整数相除 p/q 形式的有理数,而我们又能根据 \( (\frac{p}{q})^2 \) 和 2 的关系,去比较一个有理数和 \( \sqrt{2} \) 的大小,而且能不断构造出一个 p/q 使得它的平方和 2 尽可能接近,因此虽然 \( \sqrt{2} \) 不是有理数,但它的左右两边可以被有理数无限接近。
这种直觉非常符合几何上直线上点的关系:数轴上的每一个点,都应该可以被有理数无限逼近。那么,一个自然的想法是:把所有这些“可以被有理数无限逼近的点”都纳入数系,把数轴上的“缝隙”全部填满。这就是实数的由来。
最容易从数层面理解这种直觉的视角是十进制小数,自然数一节中提到过,十进制是一种对数的表征方式,但这种表征本身会赋予数一些新的视角,比如 1011 中的 0 不是指代外部对象不存在,而是计算中应该跳过计算百位权重的指令。类似地,十进制小数里各个数字排列的语法规律也提供了对实数的新的视角:
每一个有理数都可以写成无限的循环小数。比如:
- \(1/2 = 0.5000\ldots = 0.5\overline{0} = 0.4\overline{9}\)(循环 9 是另一种表示)
- \(1/3 = 0.333\ldots = 0.\overline{3}\)
- \(2/7 = 0.285714285714\ldots = 0.\overline{285714}\)
而任何循环的小数,只要给出了循环模式,就能够写成 p/q 形式,这意味着,如果 \( \sqrt{2} \) 不是有理数但又能够表示成十进制和有理数比较大小,那么它的十进制形式的小数模式是不循环的
从十进制小数的视角看,实数就是所有可能的无限小数(包括循环和不循环)。每一个无限小数对应数轴上的一个点,而有理数只是其中的一个子集(循环小数)。这样一来,数轴上的所有“缝隙”都被填满了:因为任何无限小数都定义了一个确定的位置,而任何位置也都可以用一个无限小数来描述。
但我们还需要严格说清楚什么是“填满”,以免重蹈“将任意有理数之间存在有理数误认为是填满“的覆辙。
超越数和极限
当我们在实际中用尺子量单位正方形的对时,我们总是先用整数刻度(比如 1.4 米),然后发现还有剩余,再用更细的刻度(1.41 米),再发现还有剩余……理论上,这个过程可以无限进行下去,直到我们得到任意精确的近似。
因此从测量活动中通过想象可以解锁“无限逼近”的概念。在这个视角下,实数就是那些可以被有理数序列无限逼近的“极限点”。而 \( \sqrt{2} \) 正是这样一个极限点:它虽然不能写成有限小数或循环小数,但它可以被有理数序列 1.4,1.41,1.414,… 无限逼近,或者被 1+0.4+0.01+0.004.. 这个无限个有理数的序列的和(称为级数)所表达。
前文我们是从减法、除法和乘方来获取整数、有理数以及代数数的。这些数系都有明确的超越之前数系的运算特点:
- 整数:可以谈论正负(方向),加法有了逆元。
- 有理数:可以谈论“比例”,乘法有了逆元(除零外),可以等分整数间隔。
- 代数数:可以谈论“n 次根”,可以求解整系数多项式方程。
但实数呢?它包含了代数数,所以自然可以谈论 n 次根、解多项式方程。但并非所有实数都是代数数——比如 \(\pi\) 和 e,它们不能作为任何整系数多项式方程的解,被称为超越数。
那么,超越数有什么运算特征?它们不是通过某个具体的代数逆运算(如开方)自然得到的。那它们是怎么来的?
这就还是回到极限的语义:
- \(\pi\) 是圆周长与直径之比,可以通过割圆术的极限过程逼近,也可以写成无穷级数 \(\pi = 4(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \cdots)\)。 这里级数的每个有限前缀和会得到一个有理数,而不断增加前缀长度求和,会得到越来越接近 \( \pi \) 性质的有理数(当然要技术上验证这个值最终稳定),因此无穷级数的前缀和组成了无限有理数序列
- e 是自然对数的底,可以写成 \(e = 1 + \frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + \cdots\),也可以作为 \((1 + \frac{1}{n})^n\) 当 \(n \to \infty\) 时的极限。 同样,每个 n 得到一个有理数,无限个 n 就得到无限个有理数组成的序列。
所以,实数的核心运算特征不是逆运算,而是极限。
升维,筛选和降维
要从逻辑上谈论极限以及其性质,并不是一件容易的事情。我们无法从十进制小数的特点——“无限不循环”——去直接定义实数,因为:
- “无限不循环”是一个否定性描述,它告诉我们实数不是什么(不是循环小数),但没有告诉我们它是什么。
- 无法验证:给定一个无限小数,我们永远无法在有限时间内判断它是否循环(因为这需要检查无限多位)。
- 无法运算:两个无限不循环小数相加,我们无法通过有限步骤写出结果的小数展开。
因此,十进制虽然能帮助我们直观地理解“无限逼近”,但要从逻辑上严谨地定义实数,还需更抽象的工具,这些工具不依赖进制,不依赖无限小数的具体写法,而是和之前扩充数系一样,从对有理数的扩充出发。
从自然数到整数、从整数到有理数、从有理数到代数数都是通过对某个二元运算求逆来实现的:
- 加法求逆 -> 负数(一维,加方向)
- 乘法求逆 -> 分数(二维数对,但仍可嵌入一维数轴)
- 乘方求逆 -> 根号(二维数对,部分可嵌入一维数轴)
每一次,我们都是在“升维”之后,通过等价关系“降维”回来。
实数也是类似,但它的扩展不是对某个有限运算求逆,而是对“无限逼近”这个过程本身的延迟结晶。
这一次要先系好安全带,因为要直接升到无穷维,把无限长的有理数序列本身作为新的数对象。比如 [1,2,3,…] 序列就是一个延迟后的对象,这完成了最初步的语法扩张。
并非所有序列都是合法的数,就像延迟除法后 1/0 不是合法的有理数一样,实践中的需求表明,那些趋于稳定的序列才能被看作实数,即这些序列中数在越往后,它们之间的距离应该越小,稳定在某个值附近,这样的序列被称为柯西序列。为了描述最终稳定,以及最终趋近的概念,需要使用到 \( \epsilon, N \) 等词汇。
比如 [1,1/2,1/3….] 可以简写成 1/n 序列,它就是柯西序列,因为给定任意一个正数 \( \epsilon>0 \) (我们期望它任意小,但在逻辑语言表达里,只能用 "所有" 这个更宽泛的描述,它覆盖了足够大的数,也覆盖了任意小的数),存在一个 N (我们期望的是足够大的 N),使得当 i,j 比 N 还大的时候,元素值 1/i 和 1/j 之间距离小于 \( \epsilon \) ,可以用 0<1/i<1/N 以及 0<1/j<1/N 性质证明出这种稳定性是成立的。 因此它是柯西序列。
经过这层语义筛选的序列被当作实数,接着在这些序列(实数)上定义等于关系:
两个序列 a[] 和 b[] 是相等的,意味着对任意 \( \epsilon>0 \), 都能找到一个 N 使得,元素 a[N] 和 b[N] 的距离小于 \( \epsilon \) , 即 |a[N]-b[N]|<\( \epsilon \) 。从这个定义可以知道 1/n 和全 0 序列是相等的。
还要检查它们融入有理数加减乘除,乘方等操作时可能出现的问题并最终使得它完全能覆盖有理数的所有运算。由于这种稳定性语义限制以及融入有理数的设计(以及最初的直线的语义设想),即便是扩展到无穷维,最终所有实数也都能被降到一维上,最终填满整根直线。
在这种无限维度的定义下,实数系的完备性指的是任何实数的柯西序列仍然收敛到某个实数,对应到几何上,数轴的“缝隙”指的是不能用有理数表达的数,比如 \( \sqrt{2} \), 我们能用无限多有理数不断在它周围震荡接近它,并且和他比较大小,但在有理数上却找不到,而实数中,任何无限震荡的序列最终震荡的结果还是实数,因此我们说它把间隙填满了。
这个性质,正是实数区别于有理数的根本特征。
发掘满足序列收敛完备性质的数系的核心驱动,来自于实数所支撑的更大的结构–函数– 的性质,因为我们需要在函数层面谈论极限,导数,积分,以严格构建出微积分,而这是理解现实中变化,运动的核心。
比如计算函数 \(f(x)=x^2\) 在 \(x=3\) 处的导数要用到极限:
\[ \lim_{h\to 0} \frac{(3+h)^2 - 9}{h} \]
而这里的极限是一个 0/0 形式的,由于极限可以看作无限序列向后不断取值操作的延迟,那么我们不急于把 0 直接算出来从而导向无定义,比如先取 h 为 0.001, 记为 \( \epsilon \):
\[ \frac{(3+\varepsilon)^2 - 9}{\varepsilon} = \frac{9 + 6\varepsilon + \varepsilon^2 - 9}{\varepsilon} = \frac{6\epsilon + \epsilon^2}{\epsilon} \]
由于在对 h 取值的时候,它是永远趋近于 0 但不是 0, 所以这里 \( \epsilon \) 无论是什么值,它都是正数,可以被约分掉,得到 \( 6+\epsilon \) 此时可以直接取极限到底,结果为 6.
特定代数数的降维
完备性是相对抽象的论述,但回到之前提到的一个问题 \( 1+\sqrt{2}+\sqrt{3}+\sqrt{5} \) 为什么是实数呢? 或者,带有某种嵌套或递归结构的代数数如 \( \sqrt{1+\sqrt{2+\sqrt{3}}} \) 为什么是实数呢?
这里用借用这两个例子来说明实数构建中的一些细节。
首先 \( 1+\sqrt{2}+\sqrt{3}+\sqrt{5} \) 之所以是实数,因为 \( \sqrt{2} \) 可以根据具体算法如牛顿法去用有理数逼近,因此从构造上就可以看出它是实数,同样 \( \sqrt{3}, \sqrt{5} \) 也都可以写出具体的有理数序列,而我们可以证明实数加法是封闭的,即实数加上实数还是实数,这里证明利用的是收敛序列是柯西序列,而柯西序列相加还是柯西序列的性质(细节可以参考 如何捕捉实数 ),因此最终它们的和还是实数。
\( \sqrt{1+\sqrt{2+\sqrt{3}}} \) 之所以也是实数,则可以用递归方式,可以对 \( \sqrt{3} \) 写出一个逼近它的序列,然后取序列中一个有理数 p/q,代计算 \( \sqrt{2+\frac{p}{q}} \), 又可以用牛顿法去逼近这个有理数的平方根得到一个序列,取一个有理数 r/s, 这变成计算 \( \sqrt{\frac{r}{s}} \), 但还是可以用牛顿法去得到序列,而为了得到更接近目标的数,则在每一步都取一个精度更高的有理数,因此我们可以得到一个不断逼近其真实值的有理数序列。(尽管计算上很麻烦)
复数
虚数和增维
由前文实数性质可知,下图中在竖线右侧的因语法扩充而进入“高维”数都被语义拉回到了实数线上,但问题是左侧的数呢?
我们对比 \(\sqrt{2}\) 和 \(\sqrt{-1}\)。前者可以被降维——即嵌入实数轴——是因为即便我们没有一个事先约定的计算平方根的规则,仍然可以通过尝试计算某些数的乘方来逼近它。
比如,想判断某个分数 \(p/q\) 与 \(\sqrt{2}\) 的大小关系,不需要知道 \(\sqrt{2}\) 的具体值,只需要比较 \((p/q)^2\) 与 \(2\) 的大小:
- 如果 \((p/q)^2 < 2\),那么 \(p/q < \sqrt{2}\)
- 如果 \((p/q)^2 > 2\),那么 \(p/q > \sqrt{2}\)
例如:
- \((3/2)^2 = 9/4 = 2.25 > 2\),所以 \(3/2 > \sqrt{2}\)
- \((7/5)^2 = 49/25 = 1.96 < 2\),所以 \(7/5 < \sqrt{2}\)
- \((17/12)^2 = 289/144 \approx 2.0069 > 2\),所以 \(17/12 > \sqrt{2}\)
通过这种比较平方的方法可以用分数从两侧无限逼近 \(\sqrt{2}\) ,即便不去严格谈论柯西序列或者极限,我们也能感觉到,有某个数就在这些有理数左右,它的平方等于 \( \sqrt{2} \), 这个数和有理数非常接近,甚至无限接近,因此就在有理数轴上。
但对于 \(\sqrt{-1}\),情况完全不同。我们无法通过类似的“平方比较”来逼近它,因为任何有理数(包括和有理数无限接近的实数)的平方都是正数,永远大于 \(-1\) ,这无法给我们任何关于逼近的信息,我们感觉到的是,这种数似乎并不存在,它似乎除了语法扩充就没有任何别的意义,我们甚至也不需要去验证它是否能融入实数或有理数,直接忽视它即可。
抛物线的几何语义
甚至从几何意义上看,虚数似乎更没有存在的必要。比如,任何一元二次方程 \(ax^2 + bx + c = 0\),它的解对应着抛物线 \(y = ax^2 + bx + c\) 与 x 轴的交点。当判别式 \(\Delta = b^2 - 4ac > 0\) 时,抛物线与 x 轴有两个交点,对应两个实数解;当 \(\Delta = 0\) 时,有一个交点(相切),对应一个重根;当 \(\Delta < 0\) 时,抛物线完全在 x 轴上方或下方,没有交点——这时我们说“没有实数解”。
在这个几何图景里,负数的平方根就应该是不存在的,这种思路和为什么要用一个具体的符号 0 去指代“没有”一样,既然外部语义是不存在的,为什么符号上要存在,我们可以通过宣称它非法而直接中止计算或描述活动来,用行动的沉默来宣誓虚无。
在这里,语义强烈地束缚住了语法的扩展。
有用的语法扩张和另一种增维
然而,当三次方程的求根公式被发现之后,情况发生了根本性的变化。
一元三次方程由于最高项是立方,因此其在区域正无穷和负无穷的函数值一定是符号相反的,这意味着它至少会有一个根,有些根可以通过猜测来得到,比如方程 \(x^3 - 15x - 4 = 0\) 有一个根是 \(4\):
但按照求根公式(从更基础的规则中推导出的语法变换规则)会给出: \[ x = \sqrt[3]{2 + \sqrt{-121}} + \sqrt[3]{2 - \sqrt{-121}} \] 这个表达式里出现了 \( \sqrt{-121} \)——一个在当时看来“不可能”的数。
但如果强行把它当作一个普通的数,可以进行局部分解 \( \sqrt{-1*121}=11\sqrt{-1} \), 然后假设 \( a+b\sqrt{-1} \) 是 \( \sqrt[3]{2+11\sqrt{-1}} \) 的解,可以得到 结果是 \( 2+\sqrt{-1} \), 同理 \( \sqrt[3]{2-11\sqrt{-1}}=2-\sqrt{-1} \), 二者相加就是 4.
这个过程中,负数的平方根内部是可以进行分解,只是 -1 的平方根需要保留,但它保留之后可以参与加减乘除,乘方,词根等所有实数可以参与的操作,最终得到一个正确的结果。
这意味着,我们要处理的关键仅仅是 \( \sqrt{-1} \) ,它不是实数,但可以作为语法转换的中间工具,帮助我们发现实数之间的关系。就像 p/q 可以看作一种延迟计算的符号,之后遇到乘以 q 又能回到整数一样(只不过 p/q 能找到更多现实中直接的意义)。
我们把 \( \sqrt{-1} \) 简写为符号 i, 它的特点在于,只要它参与一般的代数运算,最终永远能写成 a+bi 形式,其中 a,b 都是实数,比如以上看似复杂的 \( \sqrt[3]{2-11\sqrt{-1}} \) 最终能写成简洁的 \( 2-i \) 。
这个特点和前文中提到的 \( 1+\sqrt{2}+\sqrt{3}+\sqrt{5} \) 和 \( \sqrt{1+\sqrt{2+\sqrt{3}}} \) 都是实数是类似的,对 a+bi 形式进行任何嵌套的基本代数运算,它的维度都不会增加,总是回到 a+bi 形式(将在后文中证明),我们将这种形式的数称为复数,它是到目前为止语法扩张中尝试的各种升维中唯一真正升维成功的二元数组,即它真的在二维平面不会塌缩(与之对比的是,实数在无穷维还是能被语义约束回到一维),它仍然可以看作是对乘方逆运算的延迟形式,但它延迟的是 \( \sqrt{-1} \), 当遇到平方时可以回到整数的 -1 。
如上图所示,左下角红色背景的椭圆中是 \( -1^{\frac{1}{2}} \) 仍然在乘方求逆而扩充出的维度空间中,此时纵轴表示的是指数的幂,系数是 1/2。
但发现 \( \sqrt{-1} \) 的性质之后,可以得到一个更加稳定维度,用它来进行增维,图中黄色的两个数分别是 i 和 3+4i, 这里新的维度不再是乘方的幂,而是虚数 i 。
找到一种几何解释:复平面和旋转
我们跟随代数运算中语法的扩充,发现了创造出一个 x^2=-1 的延迟计算对象 i 至少在计算上是有用的,但目前来看我们压根不应该讨论 i 是否存在,它本身是逻辑运算规则中的一个形式占位符,但当向量的观念发展起来之后,如果把上图中 3+4i 看作一个带方向的向量 <3,4>, 并且能谈论它的长度和角度,那么 i 就不再只是一个形式符号,而又获得了新的几何语义。
具体来说:
- 复数的加法对应向量的加法:\(\langle a, b \rangle + \langle c, d \rangle = \langle a+c, b+d \rangle\)。
- 只需要把 (a+bi)(c+di) 的结果和它们各自在向量形式下的长度和角度对比,通过三角函数变换就会发现复数的乘法对应向量的旋转与缩放。
在这个几何框架下,i 不再是只有语法功能的悬空符号,而是平面上的一个具体操作:旋转 90 度。\(i^2 = -1\) 对应旋转 180 度,\(i^3 = -i\) 对应旋转 270 度,\( i^4 = 1 \) 对应旋转 360 度——这些都有了直观的几何意义。
物理语义和欧拉公式
前文提到,如果执着于 \( x^2+1=0 \) 的几何意义,也就抛物线和 x 轴的交点,那么虚数完全不应该存在。 是一元三次方程求根的纯符号运算规则以及它的几何语义联合拯救了虚数。
类似的,欧拉方程则是一元二阶微分方程(或称为一阶常系数 ODE)和它的物理意义合作的产物。
切换到物理中弹簧运动的最基本场景:质量 m=1 的方块放在光滑地面上,其左侧水平地连接在弹性系数 k=1 的弹簧上,初始时刻在弹簧的平衡位置,把物体向右拉一段距离后放手,物体会来回震荡,如何计算出物体精确的轨迹?
取向右为正方向,那么根据 F=ma 有 -kx=ma, 这里负号是因为力的方向总和位移偏离方向相反,即力总是把物体往平衡点 x=0 处拉(或推)。
由于 k=m=1, 有 -x=a, a 是 x 的二阶导数,于是有 \( \ddot{x}(t)=x \) 即 \( \frac{d^2x}{dt^2}+x(t)=0 \)
这时候有两种解法,一种是基于语义的猜测:
可以在物理上观察物体的运动轨迹并且将其绘制成图形,这是一个非常接近 sin 函数的图形,可以将其写成 sin(ax+b), 或者根据变换公式写成 \( x(t) = A \cos(\omega t) + B \sin(\omega t) \) 将公式代入:
一阶导数: \( \dot{x}(t) = -A\omega \sin(\omega t) + B\omega \cos(\omega t) \) 二阶导数: \( \ddot{x}(t) = -A\omega^2 \cos(\omega t) - B\omega^2 \sin(\omega t) = -\omega^2 x(t) \)
可以导出 \( \omega = 1 \), 因此震动方程是 \( x(t) = A \cos(t) + B \sin(t) \)
另一种是从代数规则形式上去猜测:我们需要寻找一个函数,它求两次导数后等于自身的负值,而最擅长“求导后保持形状不变”的函数是指数函数 \( e^{rt} \) ,假设 \( x(t) = Ce^{rt} \),代入方程:
\( \frac{d^2}{dt^2}(Ce^{rt}) + Ce^{rt} = 0 \implies r^2 Ce^{rt} + Ce^{rt} = 0 \)
消去 \( Ce^{rt} \)(因为物体是在运动而不是静止的,所以这个解不会是 0),得到方程: \( r^2+1 = 0 \)
好在此时我们已经接受了虚数 i 的存在,那么解就是 \( Ce^{i t} \) (也可以选 -i ,之后验证过程类似),i 的定义并没有直接蕴含它能作为指数的幂的合法性,但此时物理语义层面有 \( A \cos(t) + B \sin(t) \), 而代数层面有 \( Ce^{it} \) , 二者相等本身就是对 i 作为幂的运算的一种新的解释,或者说为 \( e^{it} \) 进行合理性说明。
两个函数要相等的话,任何时刻都相同,把 t=0 代入得到 A=C, 而求导后把 t=0 代入则得到 B=iC 。
最终有欧拉公式: \( e^{it}=cos(t) + i \sin(t) \) 。
总结以上论述:
- 人类先从物理机制层面总结出了 kx=ma 这个方程,它在大量实验上是成立的。该方程并不等于自然规律本身,它最多是对物理机制的近似的数学描述(比如弹簧系数 k 可能在不同长度下是不同的)。
- 自然界遵从物理规律给出了运动现象层的模式:波动,它对应的数学描述是正弦类函数;而数学从代数规律给出了能够解 kx=ma 的指数函数。
- 物理现象几乎无法质疑,能质疑的是 \( e^{it} \) 是否合理,因为它是人造的,在幂是实数的时候它的性质是不容质疑的(因为是人为定义的),但复数是在负数求根中出现的,还没有人把它放到指数的幂中,因此复指数的语法形式在物理语义和语法规则变换上目前都没有定义。但在弹簧场景中,大自然通过人类总结的物理规律层面为填补了复指数的语义空缺
这种方法的一个不严谨之处是, x''=-x 的微分方程的解有可能不只一个函数,但即便如此我们也可以进行这种定义,然后再检查是否会导致矛盾,就像定义 \( 0^0 =1 \) 一样,何况在更严格的数学中,会有 Licard–Lindelöf (皮卡-林德洛夫定理)说明解是唯一的。
如果这种通过物理直觉的方式还无法完全让你同意这种“数学协议”,下节则从级数角度推导欧拉公式。
回归语法:级数和欧拉公式
复平面和向量的几何解释,使得我们可以直接用长度和角度来表示复数 a+bi 为 \( (r ,\theta) \) 的极坐标形式, 其中 r 是 \( \sqrt{a^2+b^2} \), \( \theta = \arctan(\frac{b}{a}) \),
这意味着,当执行加法的时候,可以在 a+bi 形式下,执行乘除法的时候,则可以用极坐标 \( (r,\theta) \) 形式。
极坐标下两个复数相乘后形式是 \( (r_1r_2, \theta_1+\theta_2) \)
这种乘法运算中一个数相乘、另一个数相加的语法模式和指数 \( ra^{\theta} \) 完全一样,其中 a 是任意一个常数,但它不能是实数,因为这样的话 \( ra^{\theta} \) 就是实数而不是复数。
可以尝试把复数写成 \( ri^{\theta} \) 形式, 这样有 \[ (r_1 i^{\theta_1})(r_2 i^{\theta_2}) = r_1 r_2 i^{\theta_1 + \theta_2} \] 在乘法上是一致的,但这里和 i 的一般语义不太匹配,由于乘以 \( i^{1} \) 是旋转 \( \frac{\pi}{2} \), 那么 \( i^{\theta} \) 应该是旋转 \( \frac{\pi}{2} \theta \)
所以更准确的定义是 \( ri^{\frac{2}{\pi} \theta} \)
这种语法和复平面上的乘法旋转语义是强绑定的,换句话说,它的解释范围很窄,有点类似一元二次方程的抛物线解释里 i 完全是不必存在的一样。
当我们想把它和实数中其他操作融合的时候,会遇到很多不统一之处,但它的核心是复数能够用一个指数形式来表示。而任何实数底函数 \( a^x \) 都可以写成 \( e^{x\ln a} \) 。
因此如果复数本身要能融入实数的指数运算,它也最好能写成自然数底 e 来表示。
对它换底写成 \( r e^{\frac{2}{\pi}\theta \ln i} \), 现在问题转变为 ln(i) 是多少,它是 \( e^{x}=i \) 的解。 这里你可能怀疑 ln(i) 是否会是复数,是否会扩充出新的数系,但指数函数有级数的性质: \[ e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots \] 即它可以写成无穷个 x 的乘方的和,而复数 a+bi 的平方还是 c+di 形式,因此任意整数乘方都是 a+bi 形式,所以 e^x 还是 a+bi 形式,这里的问题是 \( e^x \) 在 x 是复数情况下是否会收敛,但由于 \( e^x \) 的泰勒展开在任何实数上都收敛,根据语法扩张原则,我们期望 x 是任意复数的时候也收敛:由于级数中每个项还是 \( \frac{a+bi}{n!} \) 形式,且 a 和 b 的最高阶乘不会超过 n,因此它的实部是收敛的,虚部是收敛的,最终收敛到 c+di 形式。(这里核心是基于复数乘法封闭性质)
接着由于 \( e^x=i \) 右侧是一个纯虚数,我们猜测 x 也应该是纯虚数,如果不是,那么可以写成 \( e^{a}e^{ib} \) 形式只把 \( e^{ib} \) 进行泰勒展开。 因此无论如何,为了让虚数在指数运算上像实数一样保持顺滑不卡顿,都要展开 \( e^{ib} \) 形式,它是:
\[ e^{ib} = 1 + ib + \frac{(ib)^2}{2!} + \frac{(ib)^3}{3!} + \cdots \] 利用 \(i^2 = -1, i^3 = -i, i^4 = 1\),将实部和虚部分开: \[ e^{ib} = \left(1 - \frac{b^2}{2!} + \frac{b^4}{4!} - \cdots\right) + i\left(b - \frac{b^3}{3!} + \frac{b^5}{5!} - \cdots\right) \]
括号里的两个级数正是 \(\cos b\) 和 \(\sin b\) 的泰勒展开(这是通过级数定义的,不需要预先知道三角函数的几何意义)。因此: \[ e^{ib} = \cos b + i\sin b \]
现在令 \(e^{ib} = i\),即: \[ \cos b + i\sin b = i \] 所以 \(\cos b = 0\),\(\sin b = 1\)。解得 \(b = \frac{\pi}{2} + 2k\pi\)(\(k\) 为整数)。于是: \[ \ln i = i\left(\frac{\pi}{2} + 2k\pi\right) \] 取主值 \(k=0\) 得 \(\ln i = i\frac{\pi}{2}\)。把它代入到 \( re^{\frac{2}{\pi}\theta \ln i} \) 中就得到 \( re^{i\theta} \) 形式。
这里欧拉公式以及复数的指数形式都是为了保持乘法语义的同时把指数函数,三角函数的语法扩展到复数上而相对自然得到的,这中间并没有遇到严重的类似扩展出 1/0 时的矛盾。我们还可以进一步扩展 \( re^{ix} \) 对 x 的求导和积分规则。
指数和维度隔离的应用
如果复数只参与求导、积分以及与实数进行相乘,那么实数维度和虚数维度不会混合,而且这种场景用指数非常容易计算——\( e^{ix} \) 的导数是 \( i e^{ix} \),和实数中的指数法则完全兼容。而指数形式又通过虚数 i 自然地分隔出了 \(\cos x\) 和 \(\sin x\),使得三角函数与指数运算融为一体。
这种结构在电路和信号处理中体现得尤为深刻。当遇到正弦信号时,比如 \( A\cos(\omega t + \phi) \),可以将其表示为复指数 \( A e^{i(\omega t + \phi)} \) 的实部。这样做带来了很多好处,比如
- 微分变乘法:在电路中,电容、电感的微分关系(\( i = C\frac{dv}{dt} \),\( v = L\frac{di}{dt} \))在复数域中转化为代数关系——阻抗 \( Z = \frac{1}{i\omega C} \) 和 \( Z = i\omega L \)。于是,整个电路的微分方程变成了复数代数方程,可以直接用欧姆定律 \( V = IZ \) 求解。
- 通过傅里叶变换,任何信号可以分解为不同频率的复指数 \( e^{i\omega t} \) 的叠加。每个频率分量独立地通过线性系统,系统响应等于输入乘以频率响应 \( H(\omega) \)(一个复数)。把时域卷积转化为频域乘法,大大简化了分析。
注意这些应用并没有用复平面里复数相乘是旋转的语义,它完全来自于虚数维度和实数在线性系统下是完全独立的性质,以及指数表示的代数便捷性。
三元数的失败
从复数出发,人们很自然地会想:既然实数(一维)可以扩展为复数(二维),那么能否继续扩展为“三元数”(三维)?即在三维空间中定义一种新的数,使得加法、乘法封闭,且非零元可逆?
这是一个纯粹的代数扩张,除了用逻辑语义来检验过滤以及从复平面启发出抽象的高维几何空间直觉,几乎没有任何外部物理上的语义,这也标志着数学开始往纯代数结构方向“狂奔”。复数的过于成功刺激了这种冲动——人们意识到,纯粹语法扩张和逻辑一致性限制,有时就能造出有用的对象,而且未来甚至可能会有与现实相关的模型来提供语义(比如非欧几何先出现,而相对论在后来给它提供了物理解释)。
三元数的想法在历史上曾吸引了许多数学家,包括哈密顿。但他经过多年尝试,最终发现:在三维空间中,无法同时满足乘法的结合律、分配律以及非零元可逆。无论怎样定义乘法,要么产生零因子,要么无法保持模长性质,要么必须放弃交换律——而这些都会破坏“数系”最基本的运算直觉。
最终,他放弃了三元数的追求,转而发明了四元数——四维空间中的数系。它在逻辑上保持了结合律、分配律,且非零元可逆,但代价是失去了乘法的交换性。四元数后来在三维旋转、计算机图形学中找到了重要应用,而三元数则被证明是不可能的。
三元数的失败,是语法扩展中一个重要的“禁区”。它告诉我们:并非所有维度都能承载一个满足基本算术律的代数系统。语法扩张的自由度,终究受制于逻辑与代数结构的硬边界。
Fibonacci 数列:一次语法的闪电扩充
我们最后用斐波那契数列(Fibonacci)的例子来展现,一个原本只和自然数有关的问题如果能一次性“呼唤”各个新维度的增援(包括向量、矩阵、整数、有理数、以及无理数 \( \sqrt{5} \)),那么可以得到非常高效的解决问题的方法。
Fibonacci 数列原本定义在自然数上:\(F_0=0,F_1=1,F_{n+2}=F_{n+1}+F_n\)。
从它问题本身出发,似乎我们只能一步一步去递推,如果有了计算机,那么写一个 for 循环不断往上计算即可。
但如果我们把自然数升维成自然数对 \(\mathbf{v}_n = \begin{pmatrix} F_{n+1} \\ F_n \end{pmatrix}\),把递推关系编码成矩阵 \( A=\begin{pmatrix}1 & 1 \\ 1 & 0\end{pmatrix} \) ,那么就得到 \(\mathbf{v}_{n+1} = \begin{pmatrix}1 & 1 \\ 1 & 0\end{pmatrix} \mathbf{v}_n\)。
\(\mathbf{v}_{n} = \begin{pmatrix}1 & 1 \\ 1 & 0\end{pmatrix}^n \mathbf{v}_0\)。
而计算矩阵 A 的 n 次方可以通过对角化来快速计算,其特征多项式为 \( r^2-r - 1=0 \) ,得到:
\[ \lambda_1=\frac{1+\sqrt{5}}{2},\quad \lambda_2=\frac{1-\sqrt{5}}{2}. \] 粉笔计算出特征向量:\(\mathbf{u}_1=(\lambda_1,1)^\top,\ \mathbf{u}_2=(\lambda_2,1)^\top\)。
构造 \(S=[\mathbf{u}_1\ \mathbf{u}_2]=\begin{pmatrix}\lambda_1&\lambda_2\\1&1\end{pmatrix}\),则 \[ S^{-1}=\frac{1}{\lambda_1-\lambda_2}\begin{pmatrix}1&-\lambda_2\\-1&\lambda_1\end{pmatrix},\quad \lambda_1-\lambda_2=\sqrt{5}. \] 对角化:\(A=S\Lambda S^{-1},\ \Lambda=\begin{pmatrix}\lambda_1&0\\0&\lambda_2\end{pmatrix}\)。于是 \[ A^n = S\Lambda^n S^{-1} = \frac{1}{\sqrt{5}} \begin{pmatrix}\lambda_1^{n+1}-\lambda_2^{n+1} & \lambda_1^{n}-\lambda_2^{n}\\ \lambda_1^{n}-\lambda_2^{n} & \lambda_1^{n-1}-\lambda_2^{n-1}\end{pmatrix}. \] 初始向量 \(\mathbf{v}_0=(F_1,F_0)^\top=(1,0)^\top\),则 \[ \mathbf{v}_n = A^n\mathbf{v}_0 = \begin{pmatrix}F_{n+1}\\F_n\end{pmatrix} =\frac{1}{\sqrt{5}}\begin{pmatrix}\lambda_1^{n+1}-\lambda_2^{n+1}\\ \lambda_1^{n}-\lambda_2^{n}\end{pmatrix}. \] 所以我们得到了 \( F_n = \frac{\lambda_1^n - \lambda_2^n}{\sqrt{5}} \)。
根据 Fibonacci 序列的定义,\( F_n \) 必然是自然数。而我们看到,一个纯粹在自然数中定义的对象,通过引入向量与矩阵、整数(减法)、有理数(除法)以及无理数 \(\sqrt{5}\),最终构造出一个形式上复杂但可直接计算的表达式,其结果却依然回归到自然数。
这里不需要完整地引入实数,只需要在有理数上添加一个新的 \( \sqrt{5} \) 维度(这是真正的维度,因为没有完整实数,该维度无法规约有理数轴上),它类比于实数轴上引入独立的虚数 \( \sqrt{-1} \) 维度。
它甚至比 \(\sqrt{-1}\) 的引入更令人惊叹,因为在这么复杂的变换下对任意 n , \( F_n \) 都回到自然数。
这或许也表明那些在低维视角下看似只有单一路径或无解的问题,或许通过“升维”就能开辟出新的出路。