- ペアノ算術(PA) は 機械的な計算過程 を表現できるため、個々の Goodstein 列の消滅はすべて PA で証明可能である
- Cantor 標準形と遺伝的基数表記 によって Goodstein 列とその下降性などを表現でき、その結果として 有限長の証明構成が可能になる
- 帰納法(強い帰納法/超限帰納法) により、特定の次数の基数まで証明をそれぞれ拡張できる
- PA は すべての自然数 n について「G(n) が 0 に到達する」 ことを証明できるが、Goodstein 定理全体(すべての n)についての総体的な証明はできない
- PA では 計算、データ構造(List、Pair など)、さらにはプログラミング言語(Lisp)自体のエンコード や、自身の証明過程のエンコードまでも十分に実装できる
序論と問題の背景
- この記事は ペアノ算術(PA) が Goodstein 列について「各 n ごとに 0 に到達する(G(n) terminates)」 ことを証明できることを述べる
- これは論理学者には自明に見えるかもしれないが、プログラマが理解できるように 計算のエンコード という観点から説明している
- Goodstein 列の各ケースについて、PA の内部で 具体的な証明ルーチンを構成 できる
Ordinals(順序数)と Goodstein 列
- Von Neumann の方式で 順序数(Sets as Ordinals) を生成する
- 0 は空集合、1 は {0}、2 は {0,1}、ω は {0,1,2,…}、ω+1 は {0,1,2,…,ω} など、順序がよく定義される
- Goodstein 列 は Cantor 標準形を用いた 遺伝的基数表記 によって記述される
- 例: ω^ω は ((1,ω))、すなわち ((1,(1,1)))
- < の順序は各項の基数・係数に対する辞書式比較で判定する
帰納法と超限帰納法(Transfinite Induction)
- ペアノ算術の帰納法: 0 について成り立ち、n→n+1 について成り立てば、すべての自然数について成り立つ
- 強い帰納法 も PA で証明可能である
- 超限帰納法(Transfinite induction): ZFC などでは無限基数に対して拡張可能であり、Cantor 標準形で書かれた数に適用できる
- Theorem 1: Cantor 標準形内の下降列は常に有限である
- Theorem 2: Cantor 標準形の数に対して超限帰納法を用いることができる
PA における超限帰納法と Goodstein 列の証明長
- PA は 任意の n に対する Goodstein 列の消滅証明 を生成できる
- Cantor 標準形の塔の高さ m=O(log* n)(反復対数)に応じて証明を構成できる
- 各段階ごとに m 回の証明を組み合わせることで、全体の証明長は O(m^2) となり、または特別な表記法(ω[m])を導入すると O(m log m) に短縮できる
- ただし、Goodstein 定理全体(すべての n)についての証明は PA では不可能である(ε0 に対する超限帰納法は不可)
- もし可能なら、PA の無矛盾性も証明できてしまい、Gödel の第2不完全性定理と衝突する
PA のプログラム、データ構造のエンコード
- PA は計算/プログラム/データ構造(数、対、リスト、その他あらゆる構造) を十分にエンコードできる
- 次のような方法で多様な機能を実装できる:
- 基礎論理と演算(+, *, pow, //, %, min, max など)
- パターンマッチングと条件分岐(if, cond など)
- 数を 2 つの数(対)としてエンコードしたり、対から再びリストなど、より複雑な構造へ繰り返し拡張したりすること(再帰的リスト、木、テキストなど)
- このようなデータ構造のエンコードにより、任意の 仮想マシン/プログラミング言語(Lisp など)のインタプリタ まで構築できる
Lisp へのブートストラップとエンコード
- Lisp を例として、基礎的な数値演算・論理演算、データ構造、プログラミング言語の評価器/インタプリタ の実装法を説明する
- Lisp の構造(命令/引数マッピング、特殊形式、macro など)はすべて PA において適切な関数の組み合わせで実装できる
- さらに PA の内部で PA の証明過程そのもの、論理証明手続き、自己言及的構造 までもすべて記号的にエンコードして実装できる
PA 内での論理自体のエンコード
- 数理論理学における一階述語論理の証明過程 を PA の数データとしてエンコードできる
- 各証明段階/命題/推論規則/正しい証明の検査を、一連の数値関数やリスト処理として認識・処理する
- このようなメタ的で自己言及的なエンコードは、Gödel の不完全性や停止問題の証明にもつながる
結論
- 計算、データ構造、プログラム、論理証明過程に至るまで、PA では十分にエンコード・証明・解釈が可能である
- したがって 任意の Goodstein 列(n に対する G(n) の消滅) は PA の内部で具体的に証明可能である
- ただし、Goodstein 定理全体(すべての n)について「PA が PA の内部で Goodstein 定理を証明する」という証明は、論理の限界上不可能である
- プログラマの観点から見ると、PA は計算そのものをエンコードできる完全な論理基盤である
1件のコメント
Hacker Newsのコメント
(defun not (x) (if x false true)の例を参照)。いったん誰かが括弧を使い始めると、本能的に正しく閉じられているか確認してしまいます。そのあとで「括弧が釣り合っているかはコンピュータで簡単に判定できる」と書かれているのを見て大笑いしました。こういう冗談は本当に面白かったですし、"Basic Number Theory" セクションの; After a while, you stop noticing that stack of closing parens.というコメントも印象的でした。久しぶりにLispに触れましたが、とても楽しく読める記事でした。\omegaと表記し忘れている箇所があります。epsilon_0までの超限帰納法(transfinite induction)も可能になるのではないかと推測しています。EDIT: もしかすると「PAは無矛盾である」だけでも十分ではないでしょうか?T + RFN_T + すべての真な論理式の集合が無矛盾である」という意味であり、これは「T + RFN_Tが真である」ことと同値だと解釈できます。Nに対してGoodsteinの定理が偽であるモデルも許してしまうように思えます。オメガ無矛盾性というより強い主張なら、こうしたケースを排除できるはずです。epsilon_0)の証明がPA自身を証明すると述べられています。私としては、PA+「PAの無矛盾性」があればepsilon_0までの超限帰納法を証明できるように思えます。forall n, G(n)を証明する」のではなく、「PAがforall n, Provable(G(n))を証明する」という違いが核心なのだと思います。私は論理にあまり強くないので、なぜforall n, Provable(P(n))を証明したからといってProvable(forall n, P(n))を証明できるわけではないのか、誰か具体的に説明してくれるとありがたいです。will-returnやopposite-returnのような関数も作れますが、これは停止性問題の標準的な証明と一致します。opposite-return(opposite-return, opposite-return)のケースを考えると、PAが opposite-return が返ることを証明すれば、実際には返らないことも証明してしまいますし、逆に返らないことを証明すれば返ることを証明してしまいます。もしPAが「証明可能なものはすべて実際に証明可能である」といった、さらに強い命題を採用してしまうなら、それはすぐにGödelの第二不完全性定理により、PAが矛盾していることを意味します。したがって、単に「PAが証明する」と「PAが自分で証明すると証明する」は必ず区別しなければなりません。zero/succで作る Nat の定義(Lean や Rocq で見られるもの)を見せました。相手は「これだけで十分なのか?」「Peano公理系が必要なのか? 帰納的データ型よりさらに原始的な何かがあるのか?」などと疑問を持っていました。Peano公理系を本質的に自明なものと思い込まず、あくまで一つの設計にすぎないと折に触れて振り返るのは大事だと思うようになりました。