見出し画像

「ゲーデルの不完全性定理」をPythonスクリプトで表現しました

ゲーデルの不完全性定理は、ゲーデルが1931年の論文で証明した次の内容です。

『数学原理(プリンキピア・マセマティカ)』の体系や公理的集合論の中には、「証明も反証もできない「自然数論の命題」」が存在する。

また、これらの体系に公理を追加しても公理が有限個であれば、前述の命題の存在を解消できない。

Wikipedia - ゲーデルの不完全性定理


より正確には、不完全性定理とは次の2つの定理(それぞれ第一/第二不完全性定理と呼ばれる)の総称です。

第一不完全性定理 ― "初等的な自然数論"を含むω無矛盾な公理的理論Tは不完全である。つまりT内で証明も反証もされない命題(決定不能命題(undecidable proposition)、あるいは独立命題)が存在する。

第二不完全性定理 ― "初等的な自然数論"を含む理論Tが無矛盾ならば,Tの無矛盾性を表す命題 Con(T) がその体系で証明できない。

Wikipedia - ゲーデルの不完全性定理


ゲーデルの不完全性定理を直接的にPythonコードで表現することは難しいですが、不完全性定理の精神を模倣する形で何かしらのコードを書くことは可能です。

ゲーデルの不完全性定理は、ある種の数学的体系(十分に強力で算術を含む体系)内で、その体系自体では証明も反証もできない命題が存在することを示しています。

この概念を模倣するために、自己参照的なプログラムをPythonで作成しました。

以下のPythonスクリプトは、自己参照(自分自身を調べる)という概念を用いて、プログラムが自分自身のソースコードを読み取り、ある条件を評価しようとします。

しかし、最終的には明確な結論には至らないという点で、ゲーデルの不完全性定理の精神に触れるものです。

# self_ref.py

def is_statement_true(statement):
    """ Evaluate the logical statement about this program's source code. """
    with open(__file__, 'r') as file:
        source_code = file.read()
    return eval(statement, {'source_code': source_code})

# The paradoxical statement: "This statement is not provable."
# We attempt to evaluate whether the source code does not contain 'True'.
# It's a simplification and doesn't capture the full depth of Gödel's theorems.
try:
    paradox = "not 'True' in source_code"
    result = is_statement_true(paradox)
    print("The statement that 'True' is not in the source code is:", result)
except Exception as e:
    print("Error evaluating the statement:", e)


このスクリプトをMacのターミナルで実行するには、まず上記のコードを self_ref.py として保存します。次に、ターミナルを開いて以下のコマンドを実行します。

python3 self_ref.py

このプログラムは自己参照的なステートメントを評価しようとしますが、このステートメント自体がプログラムの内容を直接的に変更することはないため、証明も反証もされません。

ただし、これは実際のゲーデルの不完全性定理の深さや厳密さを完全に表現するものではありません。理論の一側面を示唆するための一つの試みに過ぎません。


【SNS】

いいなと思ったら応援しよう!