数学・論理
0と1。たった2つの記号が、いまこの瞬間もあなたの目に届く文字を描き、声を伝え、世界をつないでいる。3進数のほうが数学的には効率がいい。10進数のほうが人間には馴染む。それでも、2が選ばれた。その理由は——数学ではなく、物理と歴史の偶然にある。
ライプニッツが「2進数の算術の解説」をパリ王立科学アカデミー紀要に発表。0と1だけで全ての数を表す体系を初めて公式に論じた。
同年の世界:ピョートル大帝がサンクトペテルブルクを建設開始。日本では赤穂浪士の討ち入りが元禄の世を揺るがし、イングランドでは史上最悪の暴風雨「1703年の大嵐」が8,000人以上の命を奪った。
ライプニッツから320年。彼が哲学と神学のために構想した0と1は、いまや世界中の情報の基盤になっている。しかし、2進数がコンピュータの言語になったのは彼の論文から230年以上後のことだ。
スマートフォンの電源を入れる。画面が灯り、通知が並び、メッセージが届く。スワイプすればニュースが流れ、タップすれば音楽が鳴る。その一切が、たった2つの数字——0と1——の組み合わせで動いている。文字も、色も、音も。
私たちは10本の指を持っている。だから10で数える。それは自然なことに思える。バビロニア人は60進法を使い、マヤ文明は20進法を使った。数え方は文化の数だけあった。しかしコンピュータは、どの文明が作っても2進法を選ぶ。
それは数学的な必然ではない。物理と、論理と、歴史的偶然が重なった結果だ。
数を指で数え、スイッチで切り替え、ゲートで計算する——その一連を手で触って確かめる。「なぜ2なのか」に自分の手で答えを出す記事。
数を数えるとき、私たちは無意識に10を区切りにする。9の次は10。99の次は100。桁が増える。位取り記数法位取り記数法(positional notation)
数字の「位置」によって値が変わる記数法。123は「1×100 + 2×10 + 3×1」。同じ「1」でも、百の位にあれば100、一の位にあれば1を意味する。——数字の位置で値が変わるしくみ——は、人類が発明した最も優れた抽象のひとつだ。ローマ数字のXIIIは13だが、数字の位置に意味はない。アラビア数字の13は「1が十の位にある」から10+3と読める。この違いは革命的だった。
位取り記数法には「底」がある。私たちの10進法では底が10。使える数字は0〜9の10種類。では底を2にしたらどうなるか。使える数字は0と1の2種類だけ。数は0, 1, 10, 11, 100, 101, 110, 111...と増えていく。桁が多くなるかわりに、使う記号はたった2つで済む。
同じ数「13」を3つの底で表した場合。底が小さいほど桁は増えるが、使う記号の種類は減る。
1703年、ゴットフリート・ヴィルヘルム・ライプニッツライプニッツ(1646–1716)
ドイツの哲学者・数学者。微積分をニュートンとほぼ同時に独立発見した。普遍的な記号言語の構想でも知られる。は、パリ王立科学アカデミーの紀要に一本の論文を発表した。「2進数の算術の解説——0と1のみの記号を用い、その有用性と、中国・伏羲の古代図形に光を投じることについて」。タイトルからして異色だ。数学の論文なのに、中国の古代図形が出てくる。
ゴットフリート・ヴィルヘルム・ライプニッツ
Gottfried Wilhelm Leibniz(1646–1716)
ドイツの哲学者・数学者。ニュートンとは独立に微積分を発明した。現代の2進法の体系的な定式化を最初に公表した人物で、100篇を超える2進法に関する原稿を残した。16進法(彼は「sedecimal」と呼んだ)の最初の公表記録も彼に帰する。
| 10進 | 2進 | 3進 | 16進 | ビット数 |
|---|---|---|---|---|
| 0 | 0000 | 00 | 0 | 1 |
| 1 | 0001 | 01 | 1 | 1 |
| 2 | 0010 | 02 | 2 | 2 |
| 3 | 0011 | 10 | 3 | 2 |
| 4 | 0100 | 11 | 4 | 3 |
| 7 | 0111 | 21 | 7 | 3 |
| 8 | 1000 | 22 | 8 | 4 |
| 10 | 1010 | 101 | A | 4 |
| 13 | 1101 | 111 | D | 4 |
| 15 | 1111 | 120 | F | 4 |
| 255 | 11111111 | 100110 | FF | 8 |
同じ数をさまざまな底で表すと、桁数と使う記号の種類のトレードオフが見える。2進数は桁数が多いが、記号は0と1だけ。赤の行は先ほどのSVG図解で例に使った「13」。
こうした変換を実際に手で確かめてみよう。スライダーで10進数を動かすと、各進法の表記がリアルタイムに変わる。特に2進数の「ランプ」が点いたり消えたりする様子に注目してほしい——これが、コンピュータの中で起きていることの原型だ。
スライダーを動かして10進数を選ぶと、2進・3進・16進がリアルタイムに変換される。2進数のランプ(ビット)のオン/オフが、コンピュータ内部の電気のオン/オフに対応している。
2進
00101010
3進
1120
16進
2A
8ビット(0〜255)の範囲で表示。1ビットは2進数の1桁に対応する。8ビット = 1バイト = 256通りの状態を表現できる。
ライプニッツにとって、2進法は実用的な計算ツールではなかった。彼が魅了されたのは、その哲学的な美しさだった。0は「無」、1は「神」。すべての数が無と神の組み合わせから生まれる——彼はこれを、キリスト教の「無からの創造(creatio ex nihilo)」の数学的な証明だと考えた。
1697年、ライプニッツは中国に滞在するイエズス会の宣教師ジョアシャン・ブーヴェに、自分の2進法の原理を書き送った。ブーヴェはそれを読み、ある古代の書物を思い出した。易経易経(I Ching / Book of Changes)
古代中国の占いの書。紀元前9世紀頃に体系化されたとされる。陰(破線 ╌)と陽(実線 ─)の2種類の線を3本組み合わせた「八卦」、6本組み合わせた「六十四卦」で占いの結果を表す。——古代中国で数千年にわたって使われてきた占いの書だ。易経では、実線(陽)と破線(陰)の2種類の線を3本組み合わせた「八卦」で自然現象を分類し、6本組み合わせた「六十四卦」で占いの結果を体系化している。ブーヴェはこの陰陽の2値が、ライプニッツの0と1に対応することに気づいた。
古代中国の八卦(三爻の組み合わせ)を2進数として読むと、0〜7に対応する。ライプニッツは1703年にこの対応を論文で示した。ただし、易経の本来の目的は占いであり、数学ではなかった。
"All these operations are so easy that there would never be any need to guess or try out anything."
「これらの演算はすべて極めて容易であり、推測や試行錯誤の必要が一切ない。」
— ゴットフリート・ヴィルヘルム・ライプニッツ『2進数の算術の解説』(1703)
しかし、ライプニッツの論文は同時代にほとんど反響を得なかった。2進法は美しいが、実用的ではない。10進法の「17」を2進法で書くと「10001」——桁が倍以上になる。日常の計算には不便きわまりない。2進法が真に必要とされるには、電気で動く機械が発明されるまで、230年以上待つ必要があった。
よくある誤解
誤解
「2進数はコンピュータのために発明された」
実際は
ライプニッツは哲学・神学的な動機から2進法を体系化した。コンピュータが登場する230年以上前のことで、彼の構想に電子機械は含まれていない。
誤解
「2進数が最も効率的な記数法だから選ばれた」
実際は
数学的な「記数効率」では3進法のほうが2進法より優れている。2進数が選ばれた理由は数学ではなく、トランジスタの物理的性質にある。
誤解
「ライプニッツが2進法の唯一の発明者」
実際は
イギリスの数学者トマス・ハリオットが1600年頃に2進法を含む複数の位取り記数法を研究していた。スペインの聖職者カラムエルも1670年に2進法を出版している。ただし後世に影響を与えたのはライプニッツの論文だった。
ライプニッツの2進法は、150年間ほぼ忘れられた。次に動いたのは、独学のイギリス人数学者ジョージ・ブールジョージ・ブール(1815–1864)
イギリスの数学者・論理学者。靴職人の息子として生まれ、ほぼ独学で数学を学んだ。論理を代数で扱う方法を確立し、現代のコンピュータ科学の土台を築いた。だった。1854年、ブールは『思考の法則の探究』を出版する。
ブールの問いは、ライプニッツとは別の方向に向いていた。「論理的な推論を、代数のように計算できないか?」——彼は「真」と「偽」を1と0に対応させ、AND(かつ)、OR(または)、NOT(でない)という3つの基本操作で、あらゆる論理を代数式として扱えることを示した。これがブール代数ブール代数(Boolean algebra)
0と1(真と偽)の2つの値だけを扱う代数体系。AND, OR, NOTの3つの基本操作で構成される。コンピュータの論理回路の設計に直結する。の始まりだ。
ジョージ・ブール
George Boole(1815–1864)
イギリスの数学者・論理学者。靴職人の息子として生まれ、ほぼ独学で数学を学んだ。1854年の『思考の法則の探究』で、論理を代数として扱う方法を確立。「真=1、偽=0」という対応づけは、180年後のデジタル回路設計の基礎となった。
ブールの代数もまた、出版当時は「使いどころのない抽象」と見なされた。80年以上が過ぎた1937年、MITの21歳の大学院生が状況を一変させる。クロード・シャノンクロード・シャノン(1916–2001)
アメリカの数学者・電気工学者。「情報理論の父」と呼ばれる。1937年の修士論文で、ブール代数と電気回路の対応を証明し、デジタル回路設計の基礎を確立した。。ミシガン大学で電気工学と数学の二重学位を取り、MITでヴァネヴァー・ブッシュの微分解析機の保守をしていた若者だ。
解析機には100個ほどのリレーリレー(電磁継電器)
電磁石の力でスイッチを開閉する装置。電流が流れると接点が閉じ(オン)、止まると開く(オフ)。初期のコンピュータの基本部品だった。——電磁石で開閉するスイッチ——が並んでいた。シャノンはリレーを眺めながら気づいた。スイッチが閉じている状態を「1」、開いている状態を「0」とすれば、これはブール代数そのものではないか。彼はこの着想を修士論文「リレーおよびスイッチング回路の記号的解析」にまとめた。1937年8月10日提出。「おそらく20世紀で最も重要な修士論文」と後に評されることになる。
クロード・シャノン
Claude E. Shannon(1916–2001)
アメリカの数学者・電気工学者。「情報理論の父」。1937年の修士論文でブール代数と電気回路の等価性を証明し、デジタル回路設計を科学にした。1948年の「通信の数学的理論」で情報理論を創始。
写真: Konrad Jacobs / Mathematisches Forschungsinstitut Oberwolfach (MFO), CC-BY-SA 2.0 DE
ここで、ひとつ意外な事実がある。数学的な効率だけで言えば、3進法は2進法より優れている。これは「記数コスト記数コスト(radix economy)
ある数を表すのに必要な「桁数 × 記号の種類数」の積。底が自然対数の底 e(≈ 2.718)に近いほど、このコストが最小になる。整数では3が最も近い。」という指標で測れる。ある数を表すのに必要な「桁数 × 使える記号の種類数」——この積が小さいほど効率がいい。数学的には、底が自然対数の底 e(≈ 2.718)に近いほどコストが最小になる。整数で e に最も近いのは3だ。2ではない。
下のスライダーで底を変えてみてほしい。数「1000」を表すときの記数コストがリアルタイムで変わる。底3が底2より効率的であることが目で見える。
スライダーで底(基数)を変えると、その底の理論的な記数コストがリアルタイムに変化する。コストが低いほど効率的。底=3が最小であることを確かめよう。
相対コスト = b / ln(b) で計算。この値が小さいほど、桁数と記号数のバランスが良い。数学的に最小となる底は自然対数の底 e ≈ 2.718 で、整数では3が最良(2.73)。実際の桁数は整数に切り上がるため、特定の数では2進や4進がたまたま有利に見えることもある。しかし十分に大きい数を平均すると、底3が最も効率的になる。なお、この「効率」は純粋に数学的なもので、ハードウェア実装のコストは含まない。
では、数学的に有利な3進法がなぜ採用されなかったのか。答えは物理にある。トランジスタトランジスタ(transistor)
半導体で作られた電子部品で、電流を増幅したりスイッチしたりする。現代のCPUには数十億個のトランジスタが詰め込まれている。オンかオフの2状態を取るのが基本動作。は、オンかオフかの2状態を取るのが最も安定する。「少しだけオン」という中間状態は、ノイズや温度変化で簡単に揺らぐ。10段階のスイッチを想像してほしい——位置3と位置4の区別は微妙だ。しかしオンとオフなら、間違えようがない。
1958年、ソ連のモスクワ大学でニコライ・ブルセンツォフが3進コンピュータ「Setun」を開発した。磁気コアとダイオードを使い、3つの状態(−1, 0, +1)を表現する方式だった。約50台が製造されたが、やがて2進コンピュータに置き換えられた。理由はシンプルだ——1トリット(3進数の1桁)を表すのに2つの磁気コアが必要で、同じコアを2進法に使えば2ビット(4状態)を扱えた。物理的なコストで、2進法が勝ったのだ。
シャノンの修士論文が示したのは、単に「スイッチでブール代数ができる」という対応関係だけではなかった。2つのスイッチを直列につなげばAND(両方オンのときだけ電流が流れる)、並列につなげばOR(どちらかがオンなら電流が流れる)。スイッチの手前に反転器を置けばNOT(オンをオフに、オフをオンにする)。ANDとNOTを組み合わせればXOR(2つの入力が違うときだけオンになる——「片方だけがオンのとき」という意味だ)も作れる。この4種の基本操作の組み合わせで、あらゆる論理演算が実行できることをシャノンは証明した。
現代のコンピュータはこの原理の延長にある。トランジスタを組み合わせて作る論理ゲート論理ゲート(logic gate)
1つまたは2つの入力(0か1)を受け取り、ブール演算の結果を1つ出力する回路。AND, OR, NOT, XOR などの種類がある。これらを組み合わせることで、加算や比較など複雑な計算が可能になる。——AND、OR、NOT、XOR——が、計算の最小単位だ。下のシミュレーターで、実際にゲートを操作してみてほしい。
ゲートの種類を選び、入力A・Bのトグルスイッチを切り替えると出力がリアルタイムに変わる。AND は「両方1のとき1」、OR は「どちらか1なら1」、XOR は「異なるとき1」、NOT は「入力の反転」。
現代のCPUには数十億個のトランジスタが搭載され、それらが論理ゲートを構成している。このシミュレーターは1つのゲートを手動で操作するもので、実際のCPUでは毎秒数十億回のゲート操作が行われている。
ライプニッツの2進法(1703)→ ブールの論理代数(1854)→ シャノンの回路理論(1937)→ 現代のデジタルコンピュータ。約250年にわたる知的系譜。
トランジスタには「ゲート」と呼ばれる制御端子がある。ゲートに電圧をかけると電流が流れ(オン = 1)、かけないと流れない(オフ = 0)。水道の蛇口と同じだ——ひねれば水が出る、閉めれば止まる。日常でもスイッチは2状態だろう。部屋の照明も、蛇口も、ドアも。
理論的には、電圧を3段階や10段階に分けることもできる。しかし段階が増えると、隣り合う状態の電圧差が小さくなる。温度変化やノイズで電圧がわずかにふらつくだけで、「3」なのか「4」なのかわからなくなる。2状態なら電圧のしきい値を1つ設定するだけでよく、間違いが起きにくい。蛇口を「全開」と「全閉」だけで使えば、水漏れの心配はほぼない。
ムーアの法則に従い、トランジスタは年々小さくなっている。現在の最先端プロセスは3ナノメートル——DNA2本分の太さだ。この極小サイズでは量子力学的な効果も無視できなくなり、電圧の制御はますます困難になる。2状態ですら区別が難しくなる世界で、3状態以上を安定させるのは現実的ではない。
仮に3状態のトランジスタが実用化されても、プログラミング言語、OS、回路設計ツール、教科書——すべてが2進法を前提に構築されている。この巨大なエコシステムを作り直すコストは天文学的だ。技術の世界では「より良い方式」が「すでに普及している方式」に勝てないことがよくある。VHSとベータマックス、QWERTYキーボードと同じ構図だ。
2進法のルーツは驚くほど古い。以下の年表では、 赤茶の丸が2進法の発展に直接関わる出来事、 白抜きの丸が周辺の技術的・文化的文脈を示す。
紀元前9世紀頃
易経の六十四卦
中国の占いの書『易経』で、陰(破線)と陽(実線)の2値で構成される六十四卦が体系化される。数学的な意図はなかったが、結果的に6ビットの全組み合わせ(2⁶ = 64)を網羅していた。
1605
フランシス・ベーコンの2値暗号
ベーコンは、アルファベットの各文字を「a」と「b」の5文字の組み合わせで表す暗号体系を考案。「2値で任意の情報を符号化できる」という発想の初期の例。
c.1600
トマス・ハリオットの2進法研究
イギリスの数学者ハリオットが、2進・3進・4進・5進を含む複数の位取り記数法を研究。変換や四則演算も記録していたが、生前には未発表。
1703
ライプニッツ「2進数の算術の解説」を発表
パリ王立科学アカデミー紀要に掲載。0と1のみで全ての数を表す体系を初めて公式に論じ、八卦との対応を示した。2進法の歴史における最重要文献。
1854
ジョージ・ブール『思考の法則の探究』
論理的推論を代数で扱う方法を確立。真=1、偽=0とし、AND/OR/NOTの3操作で論理を計算する体系を構築。コンピュータ科学の論理的基盤。
1937
クロード・シャノンの修士論文
「リレーおよびスイッチング回路の記号的解析」をMITに提出。ブール代数と電気回路の等価性を証明し、デジタル回路設計を「技」から「科学」に変えた。
1946
ENIAC 稼働開始
ペンシルベニア大学で世界初の汎用電子コンピュータが稼働。17,468本の真空管を使用。内部は10進演算だったが、論理制御は2値のスイッチに基づいていた。
1947
トランジスタの発明
ベル研究所のバーディーン、ブラッテン、ショックレーが点接触型トランジスタを発明。真空管に代わる半導体スイッチの時代が始まる。
1958
Setun — 3進コンピュータの挑戦
モスクワ大学でブルセンツォフが3進コンピュータを開発。約50台が製造されたが、2進ハードウェアの普及に押され、やがて姿を消した。
2020年代
数十億トランジスタの時代
Apple M2チップのトランジスタ数は約200億個。1つひとつが0か1を記憶し、毎秒数十億回のゲート操作を行っている。ライプニッツの0と1は、今も変わっていない。
ライプニッツは哲学のために2進法を構想した。ブールは論理を代数にするために0と1を使った。シャノンはリレーのカチカチに論理を見た。そして現代のCPUは、数十億のトランジスタが毎秒数十億回オンとオフを繰り返すことで、この文章をあなたの目に届けている。
2進数が「正解」だったわけではない。3進数のほうが数学的に効率的だし、10進数のほうが人間には読みやすい。しかし、トランジスタがオンとオフの2状態で最も安定するという物理的事実と、ブール代数が真と偽の2値で論理を扱えるという数学的事実が、偶然にも一致した。そしてその一致の上に、70年分の巨大なエコシステムが積み上がった。
"Shannon's thesis became the foundation of practical digital circuit design when it became widely known among the electrical engineering community during and after World War II."
「シャノンの論文は、第二次世界大戦中から戦後にかけて電気工学のコミュニティに広く知られるようになり、実用的なデジタル回路設計の基礎となった。」
— Wikipedia「A Symbolic Analysis of Relay and Switching Circuits」より、歴史的評価
これは技術の選択に関する、もっと普遍的な教訓でもある。「最も効率的なもの」が勝つとは限らない。物理的な制約、歴史的な偶然、エコシステムのロックイン——これらが絡み合って、「なぜこうなっているのか」の答えが決まる。2進数は、数学的必然ではなく、物理と歴史の必然だった。
この話を知ったからといって、明日からコンピュータの使い方が変わるわけではない。しかし、スマートフォンの画面を見るたびに、そこに流れている信号のひとつひとつが——ライプニッツの哲学と、ブールの論理と、シャノンの修士論文と、トランジスタの物理法則が重なった先にある——0か1かの判断であることを、知っておくのは悪くない。
文化への登場
映画『マトリックス』(1999)
画面を流れる緑色の0と1のカスケードは、「コンピュータが世界を構成している」という比喩として20世紀末を象徴するビジュアルとなった。実際のコードは寿司のレシピを変形したものだという。
ライプニッツとI Ching
ライプニッツが易経の六十四卦に2進法の「古代の先駆」を見た逸話は、東西の知的交流の象徴として繰り返し語られる。ただし中国側は卦を数学的に読んでおらず、ライプニッツの解釈は誤読とされる。
「10種類の人間」ジョーク
「世の中には10種類の人間がいる——2進数がわかる人と、わからない人だ」。プログラマー文化で最も有名なジョークの1つ。2進法の「10」は10進法の「2」である。
Explication de l'Arithmétique Binaire
2進法の歴史はここから始まる。英訳も上記リンクで読める。ライプニッツがいかに哲学的動機で2進法に取り組んだかが伝わる、驚くほど読みやすい論文。
Leibniz on Binary: The Invention of Computer Arithmetic
ライプニッツの2進法に関する原稿100篇以上を英訳・解説した決定版。2進法が「コンピュータのために作られた」という通説を丁寧に解体する。研究者でなくても楽しめる。
A Symbolic Analysis of Relay and Switching Circuits
「20世紀で最も重要な修士論文」。ブール代数と電気回路の等価性を証明し、デジタル時代の幕を開けた。現代のコンピュータ科学者にとっての聖典。有料だが大学図書館経由でアクセスできることが多い。
This Number System Beats Binary, But Most Computers Can't Use It
「なぜ3進数が勝てなかったのか」を平易に解説した記事。Setunの歴史から現代の3進研究まで網羅している。この記事の体験セクションの背景にある議論が、ここにある。