插图:tuput
中文
杰扬特·沙阿等人把宾伽罗的《韵律经》定在约公元前2世纪,书末的规则列出长短音节的每一种排列,能由编号找到对应的排列,也能数出排列的总数。若把短音节读作1、数位前后颠倒,它的编号就与二进制计数一致,这能说明多少问题,史家看法不一。
《韵律经》(Chandahshastra)是一部相传为宾伽罗(Pingala)所作的梵文诗律手册,书末有一连串简短的规则,列出长短音节的每一种可能排列,由某个排列在表中的位置找到该排列,并数出排列的总数。三个音节有八种排列,六个音节有64种。东北大学的杰扬特·沙阿(Jayant Shah)写道,印度的组合数学,即研究排列方式计数的数学,起源于这套关于诗律的形式理论,他把它的年代定在公元前2世纪。
这些排列的编号也与二进制计数相符,条件是把短音节读作1、数位前后颠倒,并且从一开始数。本文所引的学者对这笔算术没有分歧。分歧在于它是否说明宾伽罗已有二进制数的想法,本文把这两件事分开讲。下文的经句(sutra,即格言)原文及译法,出自沙阿和海得拉巴大学的安巴·库尔卡尼(Amba Kulkarni)的引述与翻译。
一部以数学收尾的诗律手册
库尔卡尼称《韵律经》是目前发现的关于吠陀梵语诗律的最早论著。沙阿和努赫·艾丁(Nuh Aydin)等人2026年的一篇论文给出公元前2世纪,迪瓦卡兰(Divakaran)说是公元前3世纪至2世纪,库尔卡尼写的是公元前200年。苏巴什·卡克(Subhash Kak)主张公元前5世纪,条件是古老的说法成立:宾伽罗是语法学家波你尼的弟弟。卡克和帕尔马南德·辛格(Parmanand Singh)都把这一说法追溯到注释者萨德古鲁希希亚。波你尼和他的规则体系,见我们关于《八章书》的文章。
每个梵语音节不是laghu(轻音,即短音),算一个摩特拉(matra,时间单位),就是guru(重音,即长音),算两个。宾伽罗的记号用G和L,一行n个音节就是由n个这样的字母构成的字符串。诗人只用了其中少数几种字符串。沙阿指出,书末的理论在诗律实践中没有用处,“显然是为数学而数学”。
在库尔卡尼的校订本里,第八章有35条经句,最后16条(8.20至8.35)讲的是计数。
三个音节造出八种排列
最先的几条规则造出这张表,梵语诗律学家称它为prastara,意为“展开”。经句8.20,dvikau glau,给出一个音节的诗律的两种形式,G和L,经句8.21(misrau ca,“并且混合”)和8.22重复这一步。按沙阿的说明,这个程序是为较短的长度复制两份列表,一份给每个条目末尾加G,另一份加L,再把两份合并。
一个音节得到G、L。两个得到GG、LG、GL、LL。三个得到GGG、LGG、GLG、LLG、GGL、LGL、GLL、LLL。经句8.23,vasavastrikah,说三音节组共有八(vasu)种。宾伽罗按刚才列出的顺序,给这八种各配了一个简短的代码:m、y、r、s、t、j、bh和n。库尔卡尼指出,同样的一步被理解为对更长的诗律重复进行,所以四条规则就足以生成每一张表。
卡克记录了这八个代码的一串记忆口诀,yamatarajabhanasalagam,把它读成一个环,就恰好把八种三音节排列各过一遍。它的年代尚无定论:卡克称它很可能古老,并说这并不是证明。
不写出整张表,就找到第六种排列
有两条规则让读者可以直接跳到任何一条。nashta规则(“丢失的一行”),在经句8.24和8.25里,把位置变成排列。若数为偶数,写L并把它减半;若为奇数,写G,并在加一之后减半。重复,直到排列的音节够数。沙阿的例子是位置6,得到L,然后G,然后L。第6条在三个音节时是LGL,四个音节时是LGLG,五个音节时是LGLGG。
uddishta规则(“指明的一行”),在经句8.26和8.27里,把这个过程倒过来走。从1开始,由右向左扫描排列,跳过最末尾的所有G。遇到第一个L,把数加倍。此后,每遇到L就加倍,每遇到G就先加倍再减一。以LGLG为例:最右边的L得到2,它左边的G得到2乘2减1,即3,第一个L得到6。
库尔卡尼和卡克把这读成二进制算术。把L写成1、G写成0,从位置减去一,把结果写成二进制,最低位在先。四音节列表的第6条LGLG是1010,倒过来是0101,即5,而5就是6减1。库尔卡尼指出与现代做法的两处不同:高位在右边,计数从1开始。卡克的结论是,宾伽罗完全理解二进制系统。
迪瓦卡兰对同样的事实读得更为谨慎。在他的FPSAC报告中,他承认,一旦把数位倒着读并把L当作1,第i条就对应于i减1的二进制形式,但他指出,按所列的样子,无论怎样给G和L分配0和1,都不能使这张表成为按通常顺序排列的二进制数。在他看来,宾伽罗的规则没有用到明确的二进制数,位值记数和零的符号还要再过600到700年才会出现,而且印度始终以十为底。
据沙阿的解读,走向二进制数的最清楚的一步出现在后来。摩诃毗罗(Mahavira),沙阿的表把他定在约公元850年,用一条新规则取代了宾伽罗的规则:把2的幂写在音节上方,位置等于1加上每个L对应的值之和。沙阿称这是“印度数学家最接近发明二进制数的一步”,并补充说,婆罗多的《舞论》,一部公元前2世纪至公元1世纪的文本,在它的第121节诗里似乎勾勒了同一种方法。
不用数到64就得到64种排列
Pare purnam(“其次,满”)说,每增加一个音节,排列的数目就加倍。照沙阿的解读,这一对收尾经句是一个递归,也就是一条用前一个数来定义后一个数的规则:n加1个音节的数目是n个音节数目的两倍。
宾伽罗还给出了一个更快的求总数的办法,即sankhya规则。如果音节数可以减半,就求出一半的答案,再取平方。如果不能,就减一,求出答案,再加倍。沙阿把六个音节的例子走完:6减半成3,3变成2,2减半成1,1变成0。再往回算,得到2,然后平方得4,然后加倍得8,然后平方得64。规则里用shunya一词,“空”,标记奇数的情形,迪瓦卡兰把它读成零作为一个数的早期出现。计算机科学家把这种方法叫作分而治之,沙阿指出了这一点。
一条相邻的规则把倍增数列求和:n个音节数目的两倍,减去2,等于长度从1到n的各个数目相加。三个音节得到2加4加8,即14,也就是16减2。沙阿报告说,后来的印度数学家把这种减半再平方的措辞用在等比数列上,纳拉亚纳·潘迪塔(Narayana Pandita)在1356年的《计算之月》(Ganitakaumudi)中几乎一字不差地重复了它。
有人声称,减半再平方的规则是二进制取幂的发现,也就是现代密码学中使用的平方乘法。艾丁和他的合作者说,高德纳(Donald Knuth)的《计算机程序设计艺术》把这种方法的早期出现归功于宾伽罗,在公元400年之前,博客和其他二手资料未经核对原始文本就重复这一说法。在他们看来,宾伽罗的用法在诗律计数之内,并没有被表述成适用于任何底数的一般规则。他们找到的第一条明确的一般规则出自阿尔·卡希(al-Kashi)1427年的著作,并得出结论:这种方法曾多次独立出现。
六种程序中的最后一种,adhvayoga,衡量这张表需要多大的空间。贾纳什拉亚(Janashraya),沙阿把他定在约公元600年,规定每行宽一指,发现24个音节的表需要33,554,431个指宽,这个数等于2的24次方的两倍减一。沙阿把它换算成约265英里。
恰有两个短音节的排列有多少种
文本回答的第五个问题,是有多少种排列含有给定数目的短音节,这就是现代代数里的二项式系数。六音节的64种排列中,恰有两个L的有15种。
标准的答案是欧洲称为帕斯卡的那个三角形,梵语叫meru prastara,意为“山的展开”。注释者哈拉尤达(Halayudha)写出了它的构造:顶上一格,下面两格,然后三格,每一格都是上方两格之和。沙阿给出的六音节版本,最底下一行是1、6、15、20、15、6、1,即没有、有一个、有两个直到有六个短音节的排列数目,这一行的和是64。
哈拉尤达把这种构造附在宾伽罗的最后两条经句上。沙阿用哈拉尤达之前的诗律学家的著作检验了这一点,并不接受。按原文,这两条经句说了两遍“其次,满”,重复的是加倍的规则。在这一点上,沙阿站在德国学者阿尔布雷希特·韦伯(Albrecht Weber)一边,后者反对哈拉尤达的读法,也站在梵文的平实字义一边。不过他仍把二项式计数追溯到宾伽罗,依据是韦伯从该文本的夜柔吠陀传本中引的另一条经句,ekottarakramashah purvaprkta lasankhya。他把它读成一条指示:反复地形成1、2直到n的部分和,并指出《舞论》第124至127节诗用更多的话描述了同一步骤。由此得到的数构成了同一个三角形旋转后的版本。
哈拉尤达所述构造的第一次出现,是在维拉汉卡(Virahanka)的《诗律集成》(Vrittajatisamuccaya)里,沙阿把它定在7世纪。维拉汉卡给出了两种构造:由部分和构成的suci prastara(“针的展开”),以及meru prastara。迪瓦卡兰把递推式写成:n个音节、k个短音节的数目,等于n减1个音节、k减1个短音节的数目,加上n减1个音节、k个短音节的数目。
第二种计数,得出斐波那契数
如果短音节算一拍,长音节算两拍,问题就变成有多少种排列的总长度是n拍。一到六拍的答案是1、2、3、5、8和13,辛格在《数学史》(Historia Mathematica)1985年的一篇论文中这样列出。每一个都是前两个之和,沙阿把这个递推式说成是维拉汉卡把宾伽罗的方法推广到按拍计数的诗律。
辛格把维拉汉卡定在公元600年至800年之间,戈帕拉(Gopala)在1135年之前,赫马钱德拉(Hemachandra)约在1150年,都早于斐波那契的约1202年。沙阿引用的宾伽罗自己的四拍音步列表,有预期的五个条目:GG、LLG、LGL、GLL和LLLL。辛格依据的是10世纪的注释者亚达瓦(Yadava),他把misrau ca这条规则也读成包括按拍计数的诗律,所以与宾伽罗本人的联系是通过一部注释连起来的。
史料说法不一的年代
沙阿、迪瓦卡兰和辛格把注释者哈拉尤达放在10世纪,库尔卡尼写的是13世纪。对于凯达拉(Kedara)的《诗律宝库》(Vrittaratnakara),一部用另一种方法计数的较晚手册,库尔卡尼说约在公元800年,沙阿的表则说约公元1100年。宾伽罗本人的年代,如上所述,取决于是否接受关于波你尼的家族传说。
这种方法去了哪里
沙阿追踪宾伽罗的算法穿过约十五个世纪的印度著作。迪瓦卡兰补充说,马达瓦(Madhava)约公元1400年的正弦级数,建立在服从宾伽罗递推式的和的和之上,这一联系文本从未明说;喀拉拉学派是我们关于喀拉拉微积分的文章的主题。按迪瓦卡兰的说法,书写的位值数字和零的符号比宾伽罗晚了几个世纪,这个故事见零是印度给世界的礼物。萨尔伽德瓦(Sarngadeva)约公元1225年的《乐论宝库》(Sangitaratnakara)把这种方法扩展到有四种节拍的节奏上,这四种是druta、laghu、guru和pluta,分别持续1、2、4和6个单位。
资料来源与延伸阅读
- Jayant Shah, A History of Pingala's Combinatorics (Northeastern University)
- Amba Kulkarni, Recursion and Combinatorial Mathematics in Chandashastra (University of Hyderabad, 2017 version)
- Amba Kulkarni, Recursion and Combinatorial Mathematics in Chandashastra (arXiv math/0703658, first version)
- P. P. Divakaran, Pingala and the Beginnings of Combinatorics in India (talk at FPSAC, Bangalore, 21 July 2022)
- Subhash Kak, Indian binary numbers and the Katapayadi notation (Annals of the Bhandarkar Oriental Research Institute, vol. 81, 2000)
- Subhash Kak, Yamataraja bhanasalagam: An Interesting Combinatoric Sutra (Indian Journal of History of Science, vol. 35, 2000)
- Parmanand Singh, The So-called Fibonacci Numbers in Ancient and Medieval India (Historia Mathematica 12, 1985)
- Nuh Aydin, Mohammad K. Azarian, Omid Khormali and Ghaya Mtimet, On the History of the Square and Multiply Algorithm (arXiv 2606.00958, version 3, 29 July 2026)
本文在 AI 工具协助下研究与撰写,并经编辑核实。仅供一般参考与讨论,不构成专业建议。请参阅我们的编辑准则与免责声明。发现错误?告诉我们。
喜欢这篇吗?下一篇也别错过。
每次一篇好文章,直接送到你的邮箱。绝无垃圾邮件,随时可退订。