Skip to content

一切运算的根本 是 加法

这篇文章是关于"加法"这个概念本身的看法。

加法看起来太简单了——幼儿园就会。但恰恰因为它太简单,反而最容易被忽略。这里提出三个论证,重新审视加法到底是什么。

论证一:拆——一切算法、一切算术,都是加法

"无论多复杂的系统,底层拆开都是加法"——这句话听起来像夸张,但逐层拆解会发现确实如此。

算术层:拆四则运算

从最基础的算术开始,拆解每一个运算的底层:

  • 加法——原子操作,不可再分。1 + 1 = 2,运算的最小单位
  • 减法 = 加负数。ab=a+(b)。减去一个数,就是加上它的相反数。减法不是独立运算,它是加法在数轴反方向的延伸
  • 乘法 = 连加。3 × 5 = 3 + 3 + 3 + 3 + 3
  • 除法 = 乘倒数 = 连加的逆用。a÷b=a×1b。除以一个数,就是乘以它的倒数——而乘法本身又是连加,所以除法是两层加法的嵌套
  • 指数 = 连乘 = 加法的叠加。2³ = 2 × 2 × 2 = (2+2)+(2+2)
  • 多项式 = 乘积累加。ax2+bx+c 底层的计算单元:乘 → 加

四则运算在小学课本上是四个并列的概念,但拆开来看,减和乘是加法的变体,除法是加法的两层嵌套——真正独立的运算只有一个:加法。

线性代数层:拆矩阵运算

  • 矩阵乘法 C=ABcij=kaikbkj——对应元素相乘再求和
  • 向量点积ab=iaibi——乘积累
  • 所有线性变换,最终都是加权求和

深度学习层:拆神经网络

  • 一个神经元y=σ(iwixi+b)——加权法 + 激活
  • 全连接层 = 矩阵乘法 = 大量加法的集合
  • 卷积层 = 滑动窗口内的加权求和
  • Transformer AttentionAttention(Q,K,V)=softmax(QKT)V——不管中间的 softmax 多复杂,最后一步还是加权求和
  • 残差连接x+FFN(x)——最简单的
  • 梯度下降θt+1=θtηL——参数更新就是加法(加上负梯度)

从最简单的感知机到最大的 LLM,前向传播、反向传播、参数更新——每一层拆到底都是加法

分析层:拆微积分

  • 积分 = 无穷小量的无限累加
  • 傅里叶级数 = 正弦波的加权叠加
  • 泰勒展开 = 多项式的逐项累加
  • 全概率公式 = 条件概率的加权求和

东方数术层:拆推演

  • 奇门遁甲:排盘就是干支的叠加运算。值符随旬首飞转、值使随地支流转——每一步都是对一个静态符号加上一个偏移量。奇门排盘的本质,是对符号系统叠加时间偏移量的加法展开。
  • 八字:大运是月柱的步进叠加(阳男阴女顺推,阴男阳女逆推,每步加 10 天干或 12 地支)。流年是年柱的逐年加 1。命理推步的本质,是干支的周期加法。
  • 《周易》:太极生两仪,两仪生四象,四象生八卦…… 每一层叠加都是"二进制的加法展开":两仪(0/1)→ 四象(2 bit)→ 八卦(3 bit)→ 六十四卦(6 bit)。卦序的排列,就是布尔加法在圆圈上的遍历。
  • 五行生克:生 = 增益(加),克 = 减损(减)。五行本身是静态的标签(木火土金水),但生克关系一旦建立,就变成了一个运算系统——五行不是一个分类系统,它是一个加法群
  • 六十甲子:天干 × 地支 = LCM(10, 12) = 60。六十甲子本身就是乘加运算的产物——把两个度量周期"乘"在一起,获得一个更大的周期,然后在那个大周期里逐次 1 遍历。

论证一结论:拆到底,一切算法、一切算术、一切推演的底层原子操作,只有一个——加法。减法、乘法、除法、指数、矩阵、神经网络、积分、卦象展开,都是加法在不同尺度上的包装。


论证二:数与算——两个截然不同的概念

拆完之后,需要把两个经常被混为一谈的概念——"数"和"算"——分清楚。

什么是"数"?

,是静态的、记录的、存在的。在古代,数字不是一个抽象符号,它就是写在竹简或纸上的文字——甲、乙、子、丑、乾、坤、一、二、三。

  • 古代:干支文字、卦象文字、节气名、星宿名——这些都是"数"
  • 现代:数字、数据(data)、Tensor、参数、权重、内存中的 0 和 1

"数"的共同特征:放在那里,它不会自己变。 "甲"就是"甲",一万年不动还是"甲"。"子"不会自己变成"丑"。

什么是"算"?

,是动态的、计算的、变化的。

  • 古代:加法、推步、生克、纳甲——这些都是"算"
  • 现代:计算(computation)、前向传播、梯度更新、Attention、卷积

"算"的共同特征:它能改变"数"。一个数字加上另一个数字,就变了。"甲子"加上 1,"乙丑"就出来了。

归类:把数和算分开

很多人把静态的"数"和动态的"算"混在一起说,但两者完全不同:

(静态)(动态)
是什么记录的、存在的执行的、变化的
状态被操作的对象操作本身
古代干支、卦象、五行加法、推步、生克、纳甲
现代数据、Tensor、参数计算、前向传播、梯度更新
哲学阴(静)阳(动)
特性可以不动必须动才有意义

数没有"算",就是死的。算没有"数",就是空的。 两者缺一不可——只有放在一起,数才有意义,算法才能发生。

一段"甲子乙丑丙寅"的文字放在那里,不去推算、不去步进——它就是一串死字符,什么也读不出来。一个"加 1"的算法没有操作对象——它就是一个空转的指令,什么也产生不了。

数和算必须同时存在。数不管多精准,不算就是死的。算不管多复杂,不作用在数上就是空的。离开任何一个,两者都没有意义。

这种"两者相互依存、缺一不可"的关系,和阴阳有些相似——阴阳也是独则无意义,合则生万物。但我不确定是否等于阴阳,只是注意到有相似之处。这里不做过度类比,点到为止。

论证二结论:把"数"(静态数据)和"算"(动态运算)归为两个独立的概念。数是静态的库存,算是动态的加工。两者缺一不可,但必须分清楚。


论证三:时间与空间——算与数的物理对应

前两个论证分别说了"加法是最底层的原子运算"和"数(静态)与算(动态)的区别"。但还有一个更根本的问题:外在世界谁对应"数",谁对应"算"?

空间对应"数"——可以不动,没有定论

空间可以不动——一座山千年不动,一个坐标万年不变。空间和数据一样:

  • 可以静态:经纬度固定在那里,不随时间变化
  • 可以无限大:向外没有边界
  • 可以无限小:向内可以细分到无穷
  • 没有定论:空间是什么样的,取决于你怎么定义它——跟数据一样,同一个事物可以有不同的数值表示

空间和数据是同一类概念:它们都是容器,本身不产生变化。

时间对应"算"——只有加法,不可逆转

时间不一样。

  • 时间只有加法。每一秒都在加 1,你不需要给时间施力,它自己就在持续叠加。没有人见过时间静止,更没有人见过时间倒流。
  • 时间不可逆转。你可以把空间坐标减回去(往后退一步),但你无法把时间减回去(回不到上一秒)。

时间是宇宙级的加法器。在这个意义上:

时间就是最原初的加法。一切系统的加法,都是时间在底层的回响。

时间驱动力在算法中的体现

  • 深度学习:每一个训练步(step)就是时间的一个滴答。梯度更新是时间推动的加法:θt+1=θt+Δθ没有时间维度,就没有"学习"这个概念——学习本身就意味着参数随时间变化。
  • Transformer 位置编码:用三角函数给每个 token 加上它在序列中的位置——本质是把时间信息加到静态的词向量上。没有这个加法,模型分不清"我打你"和"你打我"。
  • LLM 自回归生成:每生成一个 token,就把这个 token 拼回序列,再进行下一步——每一步都在做"序列 + 新 token"的加法。生成就是时间在语言上的展开。
  • 奇门遁甲:时辰在变,值符值使在飞。每换一个时辰,就是时间加了一个单位,整个盘面随之流转。时间不动,奇门就是一盘死棋。
  • 八字推运:大运是月柱加倍数,流年是年柱逐年加 1。命理推演的本质,是把先天静态的八字放到时间轴上,看它每一步加出来什么结果。
  • 本站的罗盘:每一个罗盘都有一个 controlledTime。时间不动时,数据都在——六十甲子、二十八宿、节气——但都是静态的快照。只有时间持续加 1,罗盘才会活过来——星辰西移、斗柄转向、干支流转。你在罗盘上看到的一切"动态",底层都是时间在加法。
  • useLiveClock:每秒让 controlledTime 加 1 秒——这是时间加法最直接的代码化:setInterval(() => now.value = new Date(), 1000)一秒就是一次加法。

完整映射

物理世界概念对应特性
空间(数据)静态、可无限大、可无限小、无定论
时间(加法)只有向前、不可逆转、持续运行

论证三结论:时间是加法的物理化身,加法是时间的数学表达。空间是"数"的容器,时间是"算"的驱动力。


结语

三个论证,层层递进:

  1. :一切算法、一切算术,拆到底都是加法。加法是运算的原子单位。
  2. 归类:把"数"(静态数据)和"算"(动态计算)明确分开。两者性质完全不同,不能混为一谈。
  3. 映射:空间对应"数"——可以不动、可以无限。时间对应"算"——只有加法、只有向前。

数静,算动。时间驱动,空间承载。

时间只有不断地加,我没有发现时间可以倒退。空间和数据一样,可以静态,也可以无限大,也可以无限小,没有定论。

加法既不是道也不是器——它是道器之间的那一步。

道由天观 · 静观其变