エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

不完全性定理(7)

プログラミング言語不完全性定理(2)

「自分自身が証明できない」という論理式を定義することができれば真であり証明できない論理式になるということで『不完全性定理とはなにか 完全版 ゲーデルとチューリング 天才はなにを証明したのか (ブルーバックス B 2277)』に流れが書かれているので、できるだけこれに沿って ChatGPT で調べてみました。

入力1 (ラムダ計算)

 \mapsto をラムダ計算のラムダ抽象(右結合)、 \ll をラムダ計算の関数適用(左結合)とします。 (x \mapsto e) \ll y は式  e の変数  x を式  y で置き換えたものとします。
 r n はあらかじめ定義されているとします。
 g = f \mapsto e \mapsto (r \ll (f  \ll e))
 h = v \mapsto (n \ll (g \ll v \ll v))
 k = h \ll h
とおくと
 k = n \ll (r \ll k)
が成り立つことを証明してください

結果:

与えられた式をもとに証明を進めていきます。

 g, h, k の定義

1.  g = f \mapsto e \mapsto (p \ll (f \ll e))
2.  h = v \mapsto (n \ll (g \ll v \ll v))
3.  k = h \ll h

 k = n \ll (p \ll k) を証明する

Step 1:  h の定義を展開

まず、 h \ll h を計算するために、 h を展開します。

h = v \mapsto (n \ll (g \ll v \ll v))
したがって、

h \ll h = n \ll (g \ll h \ll h)

Step 2:  g の定義を展開

次に、 g \ll h \ll h を計算します。

g = f \mapsto e \mapsto (p \ll (f \ll e))
したがって、

g \ll h \ll h = (e \mapsto (p \ll (h \ll e))) \ll h
ここで、 e \mapsto (p \ll (h \ll e))  e = h を代入すると、

g \ll h \ll h = p \ll (h \ll h)

Step 3:  h \ll h を元に戻す


h \ll h = n \ll (g \ll h \ll h)
これに  g \ll h \ll h = p \ll (h \ll h) を代入すると、

h \ll h = n \ll (p \ll (h \ll h))

Step 4:  k  h \ll h の等価性

 k = h \ll h なので、上式はそのまま  k にも当てはまります:

k = n \ll (p \ll k)

結論

 k = n \ll (p \ll k) が成り立つことを証明しました。

入力2 (ラムダ計算のできるプログラミング言語)

ラムダ計算のできるプログラミング言語を考えます。
そのプログラミング言語では論理式を自然数で表すことができるとします。その自然数を論理式のコードと呼ぶことにします。
 p は、自然数を指定すると、「そのコードの論理式が証明できる」ということを表す論理式のコードを返す関数とします。
 n は、自然数を指定すると、「そのコードの論理式の否定」の論理式のコードを返す関数とします。
このとき
 k = n \ll (p \ll k)
はどのような意味になりますか

結果:

与えられた条件をもとに、 k = n \ll (p \ll k) の意味を解釈します。

前提

  • コード: 各論理式は自然数で表され、その自然数を「コード」と呼びます。
  •  p : 自然数  x を指定すると、「コード  x に対応する論理式が証明可能である」という論理式のコードを返す関数。
    •  p(x) : 「 x が証明可能」の論理式のコード。
  •  n : 自然数  x を指定すると、「コード  x に対応する論理式の否定」の論理式のコードを返す関数。
    •  n(x) : 「 x の否定」の論理式のコード。

 k = n \ll (p \ll k) の解釈

この式を展開すると次のようになります:

k = n(p(k))
つまり、 k は次のような論理式のコードです:

  •  k が証明可能である」という命題の否定

意味の深掘り

1.  k が証明可能である」

  •  p(k) は「 k が証明可能である」という命題を表します。

2. その否定

  •  n(p(k)) は「 k が証明可能である」という命題の否定、つまり「 k が証明可能でない」を表します。

3. 自己参照性

  •  k 自身が「 k が証明可能でない」という命題のコードであるため、これは自己参照的な構造を持っています。

関連する概念

このような自己参照的な構造は、ゲーデル不完全性定理の一部に関連しています。ゲーデルは、自然数で表される命題が自らについて「証明可能でない」と主張するような形式的システムの文を構築できることを示しました。この文を「ゲーデル文」と呼びます。

具体的には、 k = n(p(k)) は次のような意味を持つ可能性があります:

  •  k に対応する論理式は「私は証明可能ではない」という自己参照的な命題を表している。

結論

 k = n \ll (p \ll k) は、「私は証明可能ではない」という自己参照的な論理式のコードを定義しています。このような構造は、形式的システムの限界や不完全性を示す重要な役割を果たします。

入力3: これを使って不完全性定理を証明してください

結果:

不完全性定理の証明を、提示された構造を用いて示します。ここでは第一不完全性定理に焦点を当てます。

ゲーデルの第一不完全性定理

形式的定理:
任意の無矛盾な一階算術の形式体系(例えばペアノ算術)において、次を満たす命題  G が存在する:
1.  G は体系内で表現可能(つまり、その体系で記述できる)。
2.  G は体系内で証明も反証もできない(未解決)。

この命題  G を「ゲーデル文」と呼びます。

構造と前提

  • 論理式は自然数  x に対応する「コード」として表現される。
  • 関数  p(x) :  x の論理式が証明可能であることを表すコードを返す。
  • 関数  n(x) :  x の論理式の否定のコードを返す。
  •  k = n \ll (p \ll k) :  k は「 k が証明可能でない」という命題のコードを表す。

証明

1. ゲーデル文の構成

 k = n \ll (p \ll k) は次の自己参照的な命題を表しています:

k: \text{「私は証明可能ではない」}
これは、「 k が証明可能」という命題の否定(つまり、「 k が証明不可能」)を表しています。

2.  k が証明可能である場合の矛盾

仮に、 k が証明可能であるとします。この場合:

  •  k の内容は「私は証明可能ではない」であるため、 k が証明可能であるという事実と矛盾します。

したがって、 k が証明可能であることは無矛盾性を前提とした体系内では成立しません。

3.  k が反証可能である場合の矛盾

次に、仮に  k が反証可能(つまり、 k の否定が証明可能)であるとします。この場合:

  •  k の否定は「私は証明可能である」という命題を表します。
  • しかし、もし「私は証明可能である」が証明可能であれば、これは  k 自体が証明可能であることを意味します。
  • この場合も前述の矛盾が生じます。

したがって、 k が反証可能であることも無矛盾性を前提とした体系内では成立しません。

4.  k は未解決である

上記の議論より、 k は体系内で証明も反証もできません。

結論

これにより、形式体系の無矛盾性を仮定すると、自己参照的な命題  k が体系内で証明も反証もできないことが示されました。このことは、ゲーデルの第一不完全性定理にほかならず、任意の無矛盾な形式体系には未解決の命題が存在することを示します。

入力4:  k は「真」であるといえますか

結果:

 k が「真」であるかどうかは、どのようなメタ理論の観点で考えるかによります。ただし、形式体系が無矛盾であることを前提にすると、次のように議論できます。

 k の内容

 k は次のような命題を表しています:

k : 「私は証明可能ではない」
この命題の解釈を考えます。

1. 無矛盾性の前提

形式体系が無矛盾である場合、以下が成り立ちます:
1.  k を体系内で証明できない(さもなくば矛盾が生じます)。
2.  k を体系内で反証もできない(さもなくば矛盾が生じます)。

したがって、体系内では  k は「証明可能でも反証可能でもない」という未解決の命題です。

2. メタ理論の視点

形式体系の外部から(メタ理論の観点で)考えると:
1.  k が証明可能であると仮定すると、それは「 k は証明可能でない」という主張と矛盾するため、この仮定は成立しません。
2. よって、実際に  k は証明可能ではありません。

この結論から、 k の内容「私は証明可能ではない」は真であるといえます。

結論

形式体系が無矛盾であることを前提とすると、メタ理論の視点では  k は「真」であると解釈できます。ただし、体系内部では  k が「証明」も「反証」もできないため、体系内でその「真偽」を確定することはできません。