算经之祖
在算法重新成为数学哲学核心对象的今天,一部成书于先秦至东汉之间、以"今有"二字反复发问的数学文本,理应获得远比"古籍整理"更为严肃的对待。《九章算术》之所以被后世推尊为算经之祖,并非因为它年代久远,亦非因为它保存了多少失传的公式;它的奠基性在于它确立了一套可重复、可检验、可传承的问题处置程序,以及与之配套的文本形态。这一奠基工作一旦完成,后世任何一本讨论"如何用数算解决问题"的算术书,都无法绕开它所设定的基本框架。
本章处理三个相互关联的问题。第一,《九章》在先秦至唐的中国算学谱系中居于何种位置,"祖"之尊称是否仅仅出于历史积淀,还是具备文本结构层面的依据。第二,《九章》的非个人著述性质,对当代解读意味着什么:佚名为我们关上了作者中心论的门,但也打开了考察文本程序结构本身的窗。第三,本书将以何种方法展开对《九章》及后世算经的考察,本章将就此提出"三层"框架与"三段式"单元,并交待全书章节的逻辑承接。
一、《九章》在中国算学谱系中的奠基地位与"祖"之不可移
讨论中国古典数学的文本谱系,首先需要承认一个尴尬的事实:先秦两汉的算学知识主要以问题与术的形式在官方机构与私学之间流传,这些知识在被汇编为定型文本之前,往往已经以口耳相传、师徒授受的方式存在了数个世纪。《九章》正是这一漫长积淀过程的第一个可见终端。这种"先有知识、后有文本"的特殊生产方式,决定了《九章》在整个唐前数学史中占据一种不可替代的位置。
将《九章》与其同时代或稍晚的算学文本并置,便能看清其独特地位。
《周髀算经》是常被并列的另一部早期算学文本,但其性质与《九章》根本不同。《周髀》的核心问题不是"如何用数算解决一个具体问题",而是"天文与历法的宇宙图式如何用数算来刻画"。其方法虽包含勾股测量与分数运算,但终极指向是宇宙论,而非可操作的程序库。唐代将其列为"算经"之首,更多出于对天文传统的尊重,而非对算学方法论的认可,这是一种礼制层面的优先,而非方法论层面的优先。
《孙子算经》与《张丘建算经》是唐前算学史中两部重要的中段文本。前者下卷以"物不知其数"问题闻名后世,是一次同余方程组(中国剩余定理的早期形态)的精炼表述;后者以"百鸡问题"展示了不定方程的精巧处理。但二者都明确承袭《九章》的章目设置与术文格式,自身的独创集中于具体算法的精细化,而非问题域的开辟。《海岛算经》为刘徽自《九章》"勾股"章中抽出独立成书,专论测望之术;其文本独立性虽强,所论方法(重差术)则在《九章》中已有雏形。《缉古算经》为王孝通所撰,体例虽仿《九章》,核心对象已转入立体体积的工程计算,与《九章》"商功"章同源而分流。
由此序列可见,唐以前所谓"十部算经"(《周髀》《九章》《孙子》《张丘建》《夏侯阳》《缉古》《五经》《缀术》《海岛》《五纪》),其内部并非平等的并列关系。《九章》处于一种母本位置:其他文本要么以它为方法论起点(《海岛》之于"勾股"),要么以它为体例模板(《孙子》《张丘建》之于章目与术文格式),要么以它为问题索引(《缉古》之于"商功")。即便以宇宙论为旨归的《周髀》,其算学操作部分也仍在《九章》所确立的分数与勾股语汇之内运行,没有发展出独立的算学符号系统。
这种母本地位在数学史中并非孤例。欧几里得《几何原本》在希腊数学中的位置与此类似,但二者有一个关键区别:《几何原本》以公理、定理、证明的演绎体系为骨干,其文本的奠基性来自结构而非内容;《九章》以问题、术、答的程序集合为骨干,其文本的奠基性来自程序而非命题。这意味着后世的解读路径也必须相应调整。
具体来看,《九章》文本本身有几个无法绕开的奠基性特征。
在问题集合的覆盖面方面,全书二百四十六问分置于九章之中:方田(面积)、粟米(比例换算)、衰分(按比例分配)、少广(开方与约分)、商功(体积)、均输(按距离加权分配)、盈不足(线性插值)、方程(线性方程组)、勾股(直角三角形关系)。这九个问题域不仅覆盖了汉代日常行政、仓廪、工程的几乎所有计算需求,更确立了一种以问题域而非以方法为纲的分类原则。后世算经即便扩充问题,也从未突破这一基本框架。即便是宋元时期发展出的天元术、四元术,本质上仍是在《九章》所列问题域内的方法升级,而非新问题域的开拓。
在术文格式的标准化方面,每问之末必有"术曰"领起的操作程序,长则数十步,短则数行,但其语法结构高度一致:先列已知数,次列运算次序,终列所求。这种格式使术文本身具备可剥离性。同一术文可套用于不同问题,事实上《九章》中确实存在同一术服务多问之例。这与欧几里得命题必须依附于特定几何图形的情况截然相反。术文的可剥离性,意味着《九章》不仅给出了答案,更给出了一套可以被独立提取、单独学习、横向迁移的操作工具集。
在答案与术文的并置方面,《九章》每问必给出具体数值答案("答曰"),这并非单纯的实用性考虑,而是为了使术文获得可检验性。任何一位读者都可以依据术文重新演算、验证答案;这种可重复性,正是后世算法概念得以从中抽出的形式基础。没有这种可重复性,《九章》就仅仅是一本"算例集",而无法成为"算学方法的范本"。
具备这三个特征的文本,在《九章》之前的数学史中没有先例,在其之后的整个唐前数学史中也未出现真正的竞争者。这便是"祖"之不可移的含义:它不是后人约定俗成的尊称,而是文本自身确立的程序范式无人能够替换。后世算经无论在某个具体问题上的推进有多大,终究是在这一范式之内运作。
二、佚名文本的解读方法论:从作者中心转向问题、术、答的程序结构
《九章》的另一个特殊性,也是解读上最大的方法论挑战,来自其作者问题。文本卷首虽常附"汉魏夏侯阳"或"张苍删补"之类的署名,但现代学界已大致形成共识:这些署名均出于后人追认,并不反映真实的文本生产过程。比较审慎的说法是,《九章》的主体内容在先秦已经形成,秦汉之际由官方整理者(如张苍、耿寿昌)做过一次或多次系统化编纂,但其内含的算法知识则远早于任何可能的编纂者。
这一佚名性质带来的直接后果,是传统作者、意图、文本三者构成的解读三角无法建立。我们既不能从作者意图推论术文的合理性,也不能从作者意图推论某条术文的真伪。我们所能面对的,只有文本本身,具体而言,是二百四十六个问题、二百余条术文,以及问答之间的对应关系。
这种限制往往被低估。许多古典数学史的写作会不自觉地滑入"集体作者拟人化"的解读:仿佛《九章》背后站着一位或几位富有创造力的古代数学家,他设计了整套体系。这类写法看似无害,实则严重误导。它把一个复杂的、跨越数个世纪的集体知识生产过程,简化为一个可被讲述的英雄故事。结果便是把《九章》中那些在结构上彼此并不连贯、在算法上彼此并不等价、在术语上彼此并不统一的复杂性,平滑掉,统一归到一个虚构的"设计者"名下。
放弃作者中心论,并不意味着放弃解读工作。恰恰相反,它要求一种新的解读方法论的自觉。这种方法论的起点,是对文本形态本身的关注:当作者不可考时,文本的物理结构就成了考察的最可靠对象。具体到《九章》,这种结构表现为一种高度稳定的三段式:问段以"今有"领起,陈述具体问题情境,列出已知,提出所求;答段以"答曰"领起,给出具体数值结果;术段以"术曰"领起,给出从已知到所求的运算程序。这一三段式在二百四十六问中保持高度一致,成为全书最稳定的解读单元。
三段式中的每一段都承担不同的解释负担。问段呈现的是问题的现象形态,即问题在何种情境下被提出、数据如何设定;答段呈现的是问题的目标态,即对解题者的最终要求;术段则是连接两者的机制。对于佚名文本而言,术段是最具解读价值的部分,因为它既是可重复操作的程序,又是术语与算法关系的凝固地。
举一具体例以明之。《方田》章关于圭田面积的一问:"今有圭田广十二步,正纵二十四步。问为田几何。答曰:一百四十四步。术曰:半广以乘正纵。"此问之田为圭田,即等腰三角形。"广"在此并非广义的"宽度",而是"底边之半","正纵"则为高。术文两步:先取广之半,再以半广乘正纵。读这一术文,读者无需知道谁是作者、作者意图为何;只需依术文之指令行事,便可独立得出
$$\frac{1}{2} \times 12 \times 24 = 144$$
这一结果。这种术文可独立运行的性质,正是《九章》作为算法文本的根本特征,也是作者中心论解读与之不相容的原因。
佚名性的另一层意义在于:它迫使我们关注文本内部的非一致性。《九章》二百四十六问并非出自一时一人之手,因此其术语系统、术文风格、问题难度都呈现出明显的内部差异。同一术语在不同章中可能含义略有出入,如"方程"既指线性方程组,又指其系数矩阵;同一类问题在不同章中可能给出不同的术文,如比例问题既出现在"粟米",又出现在"衰分"与"均输";同一算法的不同抽象程度,类似于"少广"章的开方术与"方程"章的线性方程组解法,在抽象程度上有明显差距。这些内部不一致,恰恰反映了《九章》作为集体知识结晶的真实面貌。它不是一个被设计出来的体系,而是一个被汇集、整理、增补的过程的产物。
解读这样的文本,应当采用的正确姿态是考古学式的:识别不同层次、不同时期、不同来源的成分,理解它们如何在文本中并存,而不是将它们统一归到一个虚构作者名下。这一姿态要求解读工作回到三段式的具体形态,回到术文的字面意义,回到术语的语境性指称,而不能退回到任何一种总体的、设计意图层面的解释。
三、三层考察法:文本层、算法层、精神层
基于上述分析,本书提出三层考察法作为全书的解读公约。这一框架并非唯一可能的框架,但它具备几个具体的优势:它能够容纳佚名文本的非一致性,能够区分不同类型的解读问题,能够与具体文本形态(问、答、术三段式)形成直接对应。
所谓三层,是指文本层、算法层与精神层。
文本层关注的是文本的物质形态与语言形态。具体包括:术语的指称范围、术语间的语义关系、章句的语法结构、术文的句法模板、问题与术文的对应关系、答数的数值特征(如是否为整数、是否为分数、是否化简)。文本层的考察以校勘学与术语学为基本工具,其目的是使文本本身变得透明,使读者能够准确理解每一句术文、每一术语、每一数据。这一层的考察看似基础,实则经常被数学史写作所忽视。许多关于《九章》的论述,在"术曰"之上直接展开抽象讨论,却从未认真核对过术语在不同章中的不同含义,或者不同问中的不同用法。
算法层关注的是术文所蕴含的计算程序及其性质。具体包括:术文所规定的有限步骤序列、该序列的终止性(是否在有限步内达到所求)、该序列的正确性(是否对所有合法输入都能给出正确答案)、该序列的可重复性(不同执行者依此术运算是否得到相同结果)、该序列与其他已知算法(如希腊、印度、阿拉伯传统中的算法)的关系。算法层的考察以计算理论与算法分析为基本工具,其目的是使术文所描述的程序变得可分析、可比较、可评估。这一层的考察是本书的核心工作量所在,也是最容易产生新见解的地方。
精神层关注的是文本所体现的思维方式与价值取向。具体包括:文本对"何为有效的数学知识"的判断、对"何为好的数学处理"的判断、对抽象与具体之间关系的处理、对"数"与"术"之间关系的处理、对务实倾向与理论倾向之间张力的处理。精神层的考察以数学哲学与思想史为基本工具,其目的是理解《九章》作为一个知识传统整体所体现的倾向与限度。这一层的考察最易流于印象式议论,因而需要克制。任何关于"精神"的判断都必须有文本层与算法层的具体证据支撑,否则便是空谈。
三层之间的关系不是平行的,而是递进的:文本层是基础,算法层是核心,精神层是综合。三层之间也存在反向的约束关系:精神层的判断不能与算法层的事实相抵触,算法层的判断不能与文本层的证据相抵触。这一约束机制是本书写作纪律的一部分。
三层考察法在实际运用中,并非"先做文本层、再做算法层、最后做精神层"的简单顺序。分析一个具体的术文时,往往需要同时调动三层的工具:先识别术语(文本层),再分析程序(算法层),最后评估其在整个传统中的位置(精神层)。这是一种综合性的解读,而非分割式的操作。三层之间的调用是递归的,而非线性的。
三层法的另一个重要应用,是它可以自然地解释《九章》与后世文本之间的承接关系。后世算经的写作,往往在三层上各有侧重:有些文本(《海岛算经》《缀术》)在算法层有显著推进,但在文本层与精神层基本继承《九章》;有些文本(《缉古算经》)在文本层有所扩充(增加了工程实例),但在算法层并无实质推进;有些文本(《测圆海镜》《益古演段》)则在精神层有显著变化,从术文操作转向符号化程,并在文本层与算法层都有相应调整。借助三层法,可以对这些文本进行更精细的定位,避免笼统的"发展论"叙事。后者往往以时间为序罗列成就,无法解释为何某些文本在某一层停滞、在另一层推进。
四、问、答、术三段式作为分析单元的合法性
本书以问—答—术三段式作为最小的分析单元。这一选择看似自然,实则需要论证其合法性。为什么这种三段式是合适的解读单元,而不是任意的人为划定?
从经验层面看,三段式在文本自身中具有高度稳定性。遍检《九章》二百四十六问,几乎每问都具备问、答、术三部分。少数问仅有术而无答,或仅有答而无术,但这些例外本身值得单独讨论。这种统计意义上的稳定性,意味着三段式并非后人的整理结果,而是文本生产过程中的内在结构。后世的算经写作虽时有变体,但大多保留这一基本结构。这一稳定性是三段式作为分析单元的经验基础。
从功能层面看,三段式对应于问题求解的完整过程。问段确立问题(已知、所求、约束),答段确立目标(最终数值结果),术段确立机制(从已知到所求的程序)。三者共同构成了一个最小的问题求解单元。任何缺少其中一段的文本,要么无法独立求解(缺术),要么无法独立验证(缺答),要么无法独立陈述(缺问)。三段式因而具有功能性必然,而非偶然的修辞选择。
从信息层面看,三段式在解读上具有最大的信息密度。对于一个具体的问题,三段式提供了足够且必要的全部信息:术语的指称在问段中确立,程序的步骤在术段中确立,结果的数值在答段中确立。任何脱离三段式单一成分的论述都是不完整的:单看问段无法知道如何求解,单看术段无法知道程序为谁服务,单看答段无法验证程序的正确性。
基于以上三点,本书将反复以三段式作为基本分析单元。后文对每一条术文的讨论,都将从其所在的三段式出发;任何关于算法的比较,都将在同一问的形态下进行;三段式因而既是操作的翻译单元,也是比较的对齐单元。
这里举一例以见具体分析方式。《少广》章第一问:
> 今有田广三步、长四步。问为田几何。 > > 答曰:十二步。 > > 术曰:广步数相乘得积步。
此问之术文虽简,却完整呈现了三段式的基本逻辑:问段陈述已知(广三步、长四步)与所求(为田几何);答段给出结果(十二步);术段给出从已知到所求的程序(广步数相乘得积步)。初看之下,此问无足奇,它只是矩形面积公式 $S = a \times b$ 的最简实例。但若将此问与同章中处理正方形、圆形、弓形、圭田等他形田亩的诸问并置,便可看出一组系统的对应关系:每一种田亩形状对应一种特定的"广"与"长"的解释,每一种解释对应一条不同的术文。这种系统性,恰恰是三段式所能揭示,而单看任何一段都无法看到的。
再举一例以见层次的丰富性。《方程》章第一问:
> 今有上禾三秉、中禾二秉、下禾一秉,实三十九斗;上禾二秉、中禾三秉、下禾一秉,实三十四斗;上禾一秉、中禾二秉、下禾三秉,实二十六斗。问上、中、下禾实一秉各几何。 > > 答曰:上禾一秉九斗四分斗之一,中禾一秉四斗四分斗之一,下禾一秉二斗四分斗之三。 > > 术曰:置上禾三秉、中禾二秉、下禾一秉、实三十九斗于右方;次置上禾二秉、中禾三秉、下禾一秉、实三十四斗于其次;又置上禾一秉、中禾二秉、下禾三秉、实二十六斗于其下。皆以右行上禾遍乘中行而以除,曰乘之。
此问之问段陈述一个三元线性方程组的标准应用情境(禾秉数与实斗数的关系),答段给出三未知数的分数解。以现代算式核验:$3 \times 9\frac{1}{4} + 2 \times 4\frac{1}{4} + 1 \times 2\frac{3}{4} = 39$,$2 \times 9\frac{1}{4} + 3 \times 4\frac{1}{4} + 1 \times 2\frac{3}{4} = 34$,$1 \times 9\frac{1}{4} + 2 \times 4\frac{1}{4} + 3 \times 2\frac{3}{4} = 26$,三组等式均与问段原始数据吻合。术段则详细给出逐步消元的程序。这一术文若被翻译为现代矩阵语言,便等价于高斯消元法的完整描述。但《九章》并未使用任何代数符号,也未提出任何一般性定理;它给出的仅仅是一个针对具体数据的程序,且这一程序在原理上可以推广到任意阶线性方程组。三段式在这里同时承担了陈述、目标、机制三重功能,这是任何单一的解读视角都无法替代的。
值得特别留意的是,《方程》章的前若干问与后续各问之间存在一个显著的演化:从单一具体问题的消元程序,到对一般线性方程组性质的抽象把握(如"正负数"概念的引入、"方程"作为方法论术语的反复使用、"损之日益"等普遍规则的提炼)。这一演化只能在三段式的逐问分析中被揭示。它不是一个抽象的发展论叙事,而是一系列具体三段式的内部差异。
本章小结
《九章算术》的算经之祖地位,并不在于它最古老(它未必比《周髀》更早),而在于它确立了一套文本生产与解读的基本范式:问题域优先的分类法、术文优先的操作主义、问答术三段式的稳定结构、答案必出的可重复性。这一范式在《九章》之后的整个唐前数学史中未被真正突破;后世算经的写作,无论其在某个具体算法上的推进有多大,都没有离开这一基本框架。
《九章》的佚名性质,将其解读从作者、文本的考据学拉到了文本、程序的分析学。这种解读方式拒绝将文本统一归到一个虚构作者名下,而是承认文本内部的非一致性本身就是其集体生产过程的真实痕迹。放弃作者中心论,并不是放弃解读工作,而是要求一种对文本形态本身的更细致的关注。
本书所采用的三层考察法,是上述两点的具体化。它既是解读公约,也是分析工具。三层之间的约束机制,保证了解读的纪律性,避免常见的印象式议论。三段式作为最小分析单元,则把三层考察具体化为可操作的步骤。本章以三段式作为落点,并非任意选择:它使后续十四章的讨论获得一个统一的可重复单元,使每一章都能以具体的三段式展开分析,而不是停留在抽象的总体判断。
下一章将进入对《九章》文本本身的考察,重点处理其源流问题。《九章》的内容从何而来?哪些部分可能源于先秦,哪些部分可能为秦汉整理者所补,哪些部分可能经过了更晚的增订?这一问题在数学史界已有大量讨论,但多数讨论侧重于断代,而非内容成分的分析。本章将以三段式为基本单元,重新讨论这一问题,并在此基础上建立一个文本层次的初步分期方案,为后续各章对具体术文的分析提供一个时间坐标。