把 a/b 画成平面上的一个点 (a,b),除零这件事立刻变得清楚:整条 b = 0 上都有值,全都是 ∞;唯一没有值的地方是原点。而原点缺的不是大小,是方向——一给方向,值就唯一了。
在画布上滑动或点击:原点伸出的每一条射线都是一个方向,射线上的商处处相等。这就是“0/0”的全部内容——它不是数,是这几条射线。
教科书说“不能除以零”,说得好像整条 b = 0 都有毒。可是把商读成射影比 [a:b] 就会发现:这条线上除了原点,每一点都光滑、都有值、都等于 ∞。
真正没有值的只有 (0,0) 一个点。它是一个洞,不是一条裂缝。这个区别决定了后面所有事情:一个点可以补,一条直线补不了。
为什么这条线上的值都相同?因为 [a:0] = [1:0] · a,与 a 无关——只要 a ≠ 0,它就落在同一个点 ∞ 上。
图 1 商作为平面上的函数。虚射线是“方向”,每条射线上的商恒定;橘线 b=0 例外地整条都等于 ∞。
如果只盯着原点看,会以为它是“无定义”。但退一步看原点周围,情况正好相反:从任何方向逼近原点,商都稳定地趋向一个值,只是不同方向趋向不同的值。
沿 (a,b) = (λt, t) 逼近,商恒为 λ;沿 (t, 0) 逼近,商恒为 ∞。把 λ 跑遍整个域,就把 P¹ 跑遍了——原点附近的聚值集合,恰好是整个射影直线。所以原点不是“没有值”,而是“值为全体”。
顺带就解释了那件让人不安的事:为什么不同的形式化方案可以给 1/0 指定完全不同的值(0⁻¹ = 1、0⁻¹ = 731)。那不是数学失效,而是方向没有被规定——方向有无数条,答案当然可以是任何东西。
几何里对“一个点上的方向爆炸”有标准手术,叫爆破(blow-up):把原点替换成一条射影直线,每个方向成为圆上的一个点。补完之后,除法在这个新空间里处处有值。
关键在于:补出来的值不是选的,是被逼的。方向 L 上的那条直线,它的商恒等于 L;要连续,就必须让补出来的那一点也等于 L。所以“0/0 在方向 L 上等于 L”是一条定理,不是一个约定。
这也把既有方案分了类:0⁻¹ = 0(对合 meadow)相当于把圆上的 ∞ 和 0 强行粘成一个点,方向被折叠了;爆破是把方向完整保留。两者都在“给值”,区别是给值的时候记不记得它从哪来。
图 2 爆破把“一个点”换成“一条射影直线”。圆上每一点就是一个方向,也就一个值。
下面每一对函数在 t = 0 处都是 0/0:分子分母同时为 0。但它们的商收敛到完全不同的值。选一对,拖动 t:看曲线怎么贴到那条虚线。
这些值来自同一台机器上的精确有理数计算(verify.mjs,无浮点)。数值列用于旁证收敛趋势,精确值由 Laurent 商的常数项给出。
令 r(a,b) = [a:b],定义在 F² ∖ {0} 上。则 r 良定义、满射,且限制到 b ≠ 0 上恰为通常的商 a/b。故对每个 a ≠ 0,a/0 = ∞ 有唯一值。
证明 F^× 的数乘作用是群作用,轨道划分给出等价关系,故 r 与代表无关;b ≠ 0 时 [a:b] = [a/b : 1],仿射读数为 a/b。域内部公理一条未动——改的只是除法的签名:值域从 F 换成 P¹(F)。
r 在 F² ∖ {0} 上光滑;在原点不存在任何连续延拓,且原点附近的聚值集恰为整个 P¹(F)。
证明 沿 (λt, t) 得 r ≡ λ,沿 (t,0) 得 r ≡ ∞,故聚值集含 F ∪ {∞} 即全部 P¹。若 R 连续延拓到 Hausdorff 空间,则沿 (1/n,0) 与 (1/n,1/n) 分别逼出 R(0,0) = ∞ 与 = 1,矛盾。此证明不用任何公理假设。
把原点换成 P¹ 得爆破空间 Bl,例外除子 E ≅ P¹。第二投影是 r 的延拓;并且任何在 Bl ∖ E 上等于 r ∘ π 的连续映射都必须满足 R(0,L) = L。
证明 固定方向 L,其在 Bl 中的闭包含 (0,L),而该曲线上 r ∘ π ≡ L 为常值。连续性迫使极限值等于该常值。所以“0/0 在方向 L 上等于 L”是被逼出来的,不是约定的。
设 f, g 是 0 处非零解析胚,ord 为最低次项次数,c(·) 为其系数。则 limt→0 f/g 在 ℂ ∪ {∞} 中总存在且唯一:
ord f = ord g ⟹ c(f)c(g) ord f > ord g ⟹ 0 ord f < ord g ⟹ ∞
证明 在 Laurent 域 K = F((t)) 中 g ≠ 0 有逆,商 q = f·g⁻¹ 唯一;ord q = ord f − ord g。阶为零时最低次项即常数项,等于首项系数之比;阶为正则商在 0 处为 0;阶为负则有极点。三种情形正好对应方向上的三种读数。
令 ev(f,g) = (f(0), g(0))。不存在映射 ρ 使胚商 r = ρ ∘ ev。也就是说,除法不可能是两个数的函数。
证明 取 (t,t) 与 (t,2t):两者求值都是 (0,0),但商分别是 1 与 1/2。若存在 ρ,则 1 = ρ(0,0) = 1/2,矛盾。推论:0·q = 1 无解,正是因为乘法律 ÷(a,b)·b = a 要求 ÷ 只依赖两个值,而真实的商依赖两个胚。
上述每一条都可在本机复算。程序 verify.mjs 只用 BigInt 精确有理数,不含浮点;对 t = 0 处的商做 Laurent 运算,并与浮点极限、首项系数比、齐次不变性交叉核对。
| 胚对(分子 / 分母) | 精确值 | 数值旁证 t=10⁻⁴ → 10⁻⁶ |
|---|---|---|
| t / t | 1 | 1.000000 → 1.000000 |
| t / 2t | 1/2 | 0.500000 → 0.500000 |
| t / 3t | 1/3 | 0.333333 → 0.333333 |
| t² / t | 0 | 0.000100 → 0.000001 |
| t / t² | ∞ | 1.0e+6 → ∞ |
| sin t / t | 1 | 1.000000 → 1.000000 |
| (1 − cos t) / t² | 1/2 | 0.500000 → 0.500000 |
| (t − sin t) / t³ | 1/6 | 0.166667 → 0.166667 |
| ln(1+t) / t | 1 | 0.999950 → 1.000000 |
| (√(1+t) − 1) / t | 1/2 | 0.499988 → 0.500000 |
| t(3+t) / 5t | 3/5 | 0.600020 → 0.600000 |
| sin t / sin t | 1 | 1.000000 → 1.000000 |
另外两项关键检验:等阶情形下“值 = 首项系数之比”在 10,416 处零不符;1/(1/x − 1/y) 沿三条路径逼近 (0,0) 分别给出 ∞、−1、0——同一个表达式、同一个极限点、三个答案,正是命题 2 的实例。
除零的全部困难,是一个点造成的。围绕它的每一条射线给出一个不同的答案;唯一能把这些答案统一起来的做法,是承认那个答案就是射线本身。落回数的时候,那条射线就是首项系数之比。
不是算术坏了,而是那个 0 已经不再携带任何方向信息,而商恰恰只由方向决定。要给出唯一的值,你只需要补一件东西:它是从哪个方向来的。
前五条是“给 0 的逆指定一个值”的既有方案,本页要说明的是它们为什么必须分成两类;后两条是本页两个关键构造的出处:爆破与条件化。