问题:是一个编译器一种Gödel编号程序?

wikipedia告诉我们编译器是:“在计算中,编译器是一个计算机程序,该计算机程序将以一种编程语言(源语言)编写的计算机代码转换为另一种语言(目标语言)”。 https://en.wikipedia.org/wiki/compiler

也告诉我们:“哥特编号是一个函数,它分配给一些正式语言的每个符号和形成的公式,是一个独特的自然数,称为它的哥特号码”。 https://en.wikipedia.org/wiki/g%c3 %b6del_numbering

工作完成:我的直觉说是的。这是我的想法:编程语言是一种正式的语言。每个程序都是一个良好的公式,编译器将此公式的每个符号分配给计算机可以读取的数字的二进制表示。 (详情:计算机是通用图灵机,所以它可以执行算术)

但是,我不知道编译器如何工作的细节,所以我来到这里询问我的推理是否正确。

有帮助吗?

解决方案

no。考虑以下两个C功能:

int f(int a) {
    return a * 2;
}

int g(int a) {
    return a + a;
}
.

如果我们在这里有点自由,两者都是“成立的一些正式语言的配方”。然而,具有优化的大多数C编译器打开将使这两个功能编译为完全相同的代码。这违反了Gödel编号的唯一性。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top