4
关于自己的源代码的程序推理
这个问题的灵感来自以下(模糊的)问题:拥有可以推理并修改其源代码的AI的编程语言/逻辑基础是什么? 这一点都不严格,因此这是我尝试从中提取一个具体的问题。我对两件事感兴趣: (A)可以将自己的程序表示和操纵为数据类型程序(例如,AST)的编程语言P。(如果需要,可以将类型为Program的对象转换为String,即该语言的有效程序的文本。这与编译器的操作相反。) (B)一种推理语言P程序的功能的方法。我正在考虑以下两个层次: 另一种语言Q(具有定理证明功能)可对P程序的功能进行建模。它应该能够表达和证明诸如“运行程序p的结果为foo”之类的语句。 推理程序p:Program 用语言P本身做什么的一种方式。(因此,我们将P = Q视为上述值。) 在何种程度上实施了类似的措施,或者在这个方向上取得了什么进展?实际的障碍是什么?根据问题的初衷,使问题形式化的最佳方法是什么? * 正如答案所显示的(谢谢!),(A)和(B1)可以分别完成,尽管似乎将它们一起执行更多是研究问题。 这是我对这个问题的一些初步想法(警告:相当模糊)。另请参阅我对Martin Berger答案的评论。 我对编程语言建模相同的编程语言感兴趣,而不是对一种更简单的编程语言(因此上面的P = Q)感兴趣。这将是程序能够“了解其自身源代码”的“概念证明”。相依类型的编程语言可以保证其功能的输出,但这不算是“关心自己的源代码”,而不仅仅是“ Hello world!”。会被视为一种会自动打印出裸露的字符串的语言中的quine-需要某种引用/自引用。这里的类似物具有表示Program的数据类型。 这似乎是一个相当大的项目-语言越简单,表达其中的所有内容就越困难;语言越复杂,就需要进行更多的建模工作。 按照递归定理的精神,程序可以“获取”其自己的源代码并对其进行修改(即,输出其自身的修改版本)。(B2)然后告诉我们该程序应该能够对修改后的程序表示保证(这应该能够递归,即它应该能够对将来的所有修改内容进行表达?)。