1962 年、ハーバードで教えたのち IBM で働いていたカナダのケネス・アイバーソンは、『あるプログラミング言語』(A Programming Language)という本を出版した。題名に反して、それは数学の記法の本だった。数のリストや表をまるごと扱う演算のための新しい記号を使って、アルゴリズムを簡潔かつ正確に書く方法である。数年後、IBM 自身がこの記法をコンピュータで実行できる言語に変え、本の名をとって APL と名づけた。

床、天井、そしてかっこ

アイバーソンの記号のいくつかは、APL を出てふつうの数学に入った。もっともよく知られているのは、床関数と天井関数の組である。

$$\lfloor x \rfloor = x \text{ 以下の最大の整数}, \qquad \lceil x \rceil = 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)という論文でこの括弧を擁護し、ロナルド・グレアム、オーレン・パタシュニクとの共著『コンピュータの数学』(Concrete Mathematics)の全体で使った。前の文章のクロネッカーのデルタは特別な場合にすぎない。$\delta_{ij} = [i = j]$ である。

五つの性質

1979 年、アイバーソンはコンピュータ科学の最高の賞であるチューリング賞を受け、その題名が決まり文句になった講演を行った。思考の道具としての記法(Notation as a tool of thought)である。その中で彼は、よい記法の五つの性質をあげた。

  1. 問題に現れる考えを表しやすいこと。
  2. 示唆に富むこと。書き方の形が手順や一般化を示唆する。
  3. 細部を従属させること。重要でないものは隠れている。
  4. 経済性。少ない記号を、いろいろに組み合わせる。
  5. 証明への適性。書いたものが形式的な証明に向いている。

これは、この本が生きた記法と呼んできたものと同じ考えを、生涯をかけて記法を設計した人が言ったものである。APL はそれを極端まで推し進めた。プログラム全体が一行に収まり、ギリシア文字や数学記号でいっぱいの専用キーボードで書かれた。使いこなす人にとってはすばらしい思考の道具だったが、ほかの人には暗号のように見えた。より密な記法がいつもよりよいことを証明できた人はいない。

命名法、記法、言語が思考の道具として重要であることは、ずっと前から認められてきた。

— ケネス・アイバーソン「思考の道具としての記法」(1980)
練習:括弧で数える

$\sum_{k=1}^{30} [3 \mid k]$ を計算し、床関数で確かめよ。ただし $3 \mid k$ は「3 は $k$ を割り切る」を意味する。

和は $k = 3, 6, 9, \ldots, 30$ のとき $1$、それ以外は $0$ である。$1$ に等しい項が $10$ 個ある。床関数では $\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$ になり、これは床ではなく天井である。アイバーソンの記法は、どちらを意味するのかを言うことを求める。


章の目次 · ← 部族の約束:アインシュタイン、ブルバキ、通の読み手 · 命令する等号:x = x + 1 とプログラミング言語 →