数学の足元が音もなく崩れた日

Share

数学は確実なものだと信じられていた。論理によって導かれ、矛盾を許さず、人間の感情が入り込む余地のない純粋な体系。その数学が、たった一つの問いで自分自身を疑いはじめた。

「自分自身を含まない集合すべての集合は、自分を含むか」

含むなら、定義により含まないことになる。含まないなら、定義により含むことになる。この問いには答えがない。そして、この問いに答えがないということが、数学の基礎に穴が開いていることを意味していた。

一通の手紙が崩したもの

1901年、バートランド・ラッセルは集合論の内部にこの矛盾を見つけた。集合R、すなわち「自分自身を要素として含まない集合すべてを集めた集合」を定義する。RはRを含むか。含むと仮定すれば、Rは「自分を含まない集合」の条件を満たさないから、含まないはず。含まないと仮定すれば、Rはまさに「自分を含まない集合」なのだから、含むはず。どちらに転んでも矛盾する。

翌1902年6月、ラッセルはゴットロープ・フレーゲに宛てて手紙を書いた。

フレーゲは20年以上をかけて『算術の基本法則(Grundgesetze der Arithmetik)』を書き上げていた。論理学だけから算術を導き出すという壮大な企て。その第二巻が印刷に回されようとしていたまさにそのとき、ラッセルの手紙が届いた。あなたの体系には矛盾がある、と。

フレーゲは第二巻の末尾に急遽付録を加え、こう書いた。「科学者にとって、仕事が完成に近づいたまさにそのとき、その基礎が崩壊するほど望ましくないことはほとんどない」。一人の学者の生涯の仕事が、一通の手紙で根底から揺らいだ。フレーゲはこの打撃から立ち直ることはなかった。

なお、エルンスト・ツェルメロもラッセルとは独立に同じ矛盾を発見していたが、自身の公理体系ではこの矛盾が生じないことを確認していたため、公表はしなかった。

「この文は偽である」の双子

ラッセルのパラドックスには双子がいる。自分のことは何も言えないで扱った嘘つきのパラドックス、「この文は偽である」だ。

構造は同じ。自己言及が矛盾を生む。ある文が自分自身について語ろうとすると壊れる。ある集合が自分自身を定義しようとすると壊れる。

ただし、この二つの間には重大な非対称がある。嘘つきのパラドックスは、日常言語の不完全さとして片づけられてきた。言語とはもともと曖昧で、自然言語に完全な整合性を求めること自体が的外れだ、と。しかしラッセルのパラドックスは数学で起きた。矛盾が許されないはずの、あの数学で。だからこそ、衝撃の桁が違った。

基礎を塞ぐ二つの方法

矛盾が見つかったとき、取りうる戦略は一つしかない。矛盾が生じないように、ルールを書き換える。

ラッセル自身が提案したのは「型の理論(Theory of Types)」だった。集合にレベルを導入する。個体は第0型、個体の集合は第1型、集合の集合は第2型。ある型の集合は、自分より低い型の要素しか含むことができない。自己言及はレベルの壁に阻まれ、そもそも文法的に成立しなくなる。

もう一つの道が、ツェルメロ-フレンケル集合論、いわゆるZFCだ。こちらは「分出公理(Axiom of Specification)」によって、すでに存在する集合の部分集合としてしか新しい集合を定義できないようにした。「すべての集合の集合」のような野放図な定義を、公理のレベルで禁じた。

どちらの戦略も、パラドックスを「解いた」のではない。パラドックスが生じる場所に立ち入り禁止の札を立てた。問題を解消したのではなく、問題の手前で道を封鎖した。

これが、人類が数学の基礎を守るために選んだ方法だった。

壊れやすさの連鎖

ラッセルのパラドックスは孤立した事件ではなかった。この矛盾が開けた穴から、さらに深い亀裂が走った。

1931年、クルト・ゲーデルは不完全性定理を証明した。十分に強い形式体系は、その体系の内部では証明も反証もできない命題を必ず含む。そして、その体系が無矛盾であることを、体系自身が証明することはできない。

ラッセルのパラドックスが示したのは「定義の自己言及が矛盾を生む」ということだった。ゲーデルが示したのは「体系が自分自身について完全に語ることはできない」ということだった。アラン・チューリングの停止問題もまた、同じ構造をなぞる。あるプログラムが自分自身を入力として受け取ったとき、そのプログラムが停止するかどうかを事前に判定するアルゴリズムは存在しない。

自己言及は、どこで試みても壊れる。数学で、論理で、計算で。終わらない議論の果てに立つということで見た無限後退と同じ構造が、ここにもある。定義が定義を要求し、根拠が根拠を要求し、その連鎖はどこにも着地しない。

日常に埋まっている同じ穴

ラッセルのパラドックスは数学の問題だが、その構造は日常にも顔を出す。

図書館のカタログを考える。すべての本を記載したカタログは、カタログ自身を記載するか。カタログは「本」か。Wikipediaの「すべてのリストのリスト」は、自分自身を含むか。「すべてのルールに適用されるルール」は、自分自身に適用されるか。

プログラミングでは、再帰関数が終了条件なく自分自身を呼び出し続けるとスタックオーバーフローを起こす。これもまた、自己言及が制御を失った瞬間だ。

追いつけないで扱ったゼノンのパラドックスは、無限分割が運動の概念を脅かした。ラッセルのパラドックスは、無制限な定義が集合の概念を脅かした。どちらも、日常的には自明に見えるものの基礎が、問い詰めると崩壊する。

線はどこにもなかったで扱った境界の問題とも接続する。「集合に含まれるか、含まれないか」という二分法は、定義が自己言及を含む瞬間に判定不能になる。分類という行為そのものが、ある条件のもとでは不可能になる。

規則は自分を救えない

ラッセルのパラドックスが突きつけた問いを、もう一段押し広げてみる。

数学は、矛盾を回避するために公理を書き換えた。型の理論やZFCは、自己言及を封じるルールだ。しかし、そのルール自体はどこから正当化されるのか。公理を選んだ理由は「矛盾が起きないから」であって、「それが真理だから」ではない。

寛容という名の自壊装置と同じ構造がここにある。寛容が自分自身を守るために不寛容になるように、数学もまた自分自身を守るために自由を制限した。無制限の集合定義を許していた素朴集合論は、その無制限さゆえに壊れた。修復のために導入された制限は、数学を救ったが、同時に「なぜその制限なのか」という問いを永遠に開いたまま残した。

言葉を研ぐほど声は遠くなるで描かれた精密さのジレンマが、ここでも反復する。定義を厳密にすればするほど、定義が自分自身に跳ね返るリスクが増す。精密さは安全を保証しない。むしろ、精密さの極限で体系は自分の穴を発見する。

もうひとつ抽象へ

ラッセルのパラドックスから百年以上が経った。数学はZFCのもとで問題なく機能している。パラドックスは封じ込められた。基礎の穴は塞がれた。

本当にそうだろうか。

塞がれたのは穴ではない。穴を見るための窓が塞がれたのだ。ZFCは矛盾を排除したのではなく、矛盾が生じる問いを立てること自体を禁じた。問いが消えたのではない。問いが許されなくなっただけだ。

「自分自身について完全に語ることはできない」。ゲーデルが証明したこの命題は、数学だけの話ではないのかもしれない。言語は自分自身を完全に記述できない。意識は自分自身を完全に観察できない。あらゆる体系は、自分自身の外部に立つことができない。

私たちが立っている基礎は、最初からなかったのかもしれない。あるいは、基礎とは常に仮設のもので、それ以外の基礎など存在しなかったのかもしれない。

Read more

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu