作为思维工具的记号:艾弗森
1962 年,曾在哈佛任教、当时在 IBM 工作的加拿大人肯尼斯·艾弗森出版了一本名为《一种编程语言》(A Programming Language)的书。尽管书名如此,它其实是一本讲数学记号的书:一种简洁而精确地书写算法的方法,用新的符号表示对整个数列和数表的运算。几年后,IBM 自己把这套记号变成了计算机可以执行的语言,并以书名为它命名:APL。
下取整、上取整与括号
艾弗森的一些符号离开了 APL,进入了普通数学。最著名的是下取整与上取整这一对:
$$\lfloor x \rfloor = \text{不大于 } x \text{ 的最大整数}, \qquad \lceil x \rceil = \text{不小于 } x \text{ 的最小整数}.$$在他之前,人们写 $[x]$ 或“$x$ 的整数部分”,而上取整没有符号。有了这两个符号,需要分几种情况的计算可以写在一行里:$1$ 到 $100$ 之间 $7$ 的倍数有 $\lfloor 100/7 \rfloor = 14$ 个。
另一个符号,艾弗森括号,把一个命题变成一个数:
$$[P] = \begin{cases} 1, & P \text{ 为真}, \\ 0, & P \text{ 为假}. \end{cases}$$有了它,“数一数 $1$ 到 $n$ 之间的偶数”就成了一个普通的和 $\sum_{k=1}^{n} [k \text{ 是偶数}]$,而这个和可以用通常的规则来处理。高德纳在 1992 年一篇名为《关于记号的两则札记》(Two notes on notation)的文章中为这种括号辩护,并在与罗纳德·格雷厄姆、奥伦·帕塔什尼克合写的《具体数学》一书中通篇使用它。上一篇中的克罗内克 δ 只是一个特例:$\delta_{ij} = [i = j]$。
五种品质
1979 年,艾弗森获得计算机领域的最高奖项图灵奖,并作了一次演讲,其题目后来成了一句流行语:作为思维工具的记号(Notation as a tool of thought)。他在其中列出了好记号的五种品质:
- 易于表达问题中出现的想法。
- 启发性:书写的形式能提示步骤和推广。
- 细节的从属:不重要的东西被隐藏起来。
- 经济:少量符号,以多种方式组合。
- 适于证明:书写便于进行形式化的论证。
这正是本书所说的能动的记号,由一位毕生设计记号的人说了出来。APL 把它推向了极端:整个程序可以写在一行里,用一种布满希腊字母和数学符号的专用键盘写成。对掌握它的人来说,它是非凡的思维工具;对其他人来说,它看上去像密码。没有人能证明更密集的记号总是更好。
命名法、记号和语言作为思维工具的重要性,早已为人们所认识。
— 肯尼斯·艾弗森《作为思维工具的记号》(1980)
练习:用括号计数
计算 $\sum_{k=1}^{30} [3 \mid k]$,其中 $3 \mid k$ 表示“3 整除 $k$”,并用下取整检验。
当 $k = 3, 6, 9, \ldots, 30$ 时,括号为 $1$,其余为 $0$:共有 $10$ 项等于 $1$。用下取整,$\lfloor 30/3 \rfloor = 10$。一般地,$\sum_{k=1}^{n} [d \mid k] = \lfloor n/d \rfloor$,这个等式让艾弗森的两个符号彼此对话。
练习:下取整与上取整
计算 $\lfloor 2.7 \rfloor$、$\lceil 2.7 \rceil$、$\lfloor -2.7 \rfloor$ 和 $\lceil -2.7 \rceil$。
$\lfloor 2.7 \rfloor = 2$,$\lceil 2.7 \rceil = 3$,$\lfloor -2.7 \rfloor = -3$,$\lceil -2.7 \rceil = -2$。后两个说明了为什么“整数部分”是一个含糊的名称:对负数来说,“去掉小数部分”得到 $-2$,那是上取整而不是下取整。艾弗森的记号迫使人说清楚要的是哪一个。