4
独自のソースコードに関するプログラム推論
この質問のインスピレーションは、次の(あいまいな)質問です:独自のソースコードについて推論し、それを変更できるAIを持つためのプログラミング言語/論理的基盤は何ですか? これはまったく厳密ではないので、ここから具体的な質問を抽出するための私の試みです。私が興味を持っているのは次の2つです。 (A)独自のプログラムをデータ型プログラム(たとえば、AST)として表現および操作できるプログラミング言語P。(必要に応じて、タイプProgramのオブジェクトは、その言語の有効なプログラムのテキストであるStringに変換できます。これは、コンパイラーが行うことの反対です。) (B)言語Pのプログラムが何をするかを推論する方法。私が考えている2つのレベルは次のとおりです。 Pプログラムの動作をモデル化する別の言語Q(定理証明機能付き)。「プログラムpの実行結果はfooです」などのステートメントを表現および証明できるはずです。 プログラムp:Programが言語P自体で行うことについて推論する方法。(つまり、上記のP = Qを使用しています。) このようなものはどの程度実装されていますか、またはこの方向の進捗はどうですか?実用的な障害は何ですか?質問の当初の意図に照らして、問題を形式化する最良の方法は何ですか? * 答えが示すように(ありがとう!)、(A)と(B1)の両方を別々に行うことができますが、それらを一緒に行うことはより研究上の質問のようです。 ここに、この問題に関する私の最初の考えがいくつかあります(警告:かなりあいまいです)。Martin Bergerの答えに対する私のコメントも参照してください。 私は、より単純なプログラミング言語ではなく、同じプログラミング言語をモデル化するプログラミング言語に興味があります(上記のP = Q)。これは、「独自のソースコードに関する理由」が可能なプログラムの「概念実証」になります。依存型のプログラミング言語は、その関数の出力について保証することができますが、これは「Hello world!」以外の「独自のソースコードについての推論」としてはカウントされません。裸の文字列を自動的に出力する言語では、クインとしてカウントされます---ある種の引用/自己参照が必要です。ここでの類似物は、プログラムを表すデータ型を持っています。 それはかなり大きなプロジェクトのようです-言語が単純であるほど、その中のすべてを表現することは難しくなります。言語が複雑になるほど、言語をモデル化するためにより多くの作業が必要になります。 再帰定理の精神では、プログラムは独自のソースコードを「取得」し、それを変更することができます(つまり、それ自体の変更バージョンを出力します)。(B2)それから、プログラムは修正されたプログラムについて保証を表明できるべきであると私たちに伝えます(これは再帰できる、つまり将来のすべての修正について何かを表明できるべきですか?)。