有没有一种语言可以表达自己的编译器图灵完备的语言?


12

对tex.SE的评论让我感到奇怪。该语句实质上是:

如果我可以用语言X编写语言X的编译器,那么X是图灵完备的。

用可计算性和正式语言来讲,这是:

如果决定大号大号Ť 中号中号∈ 大号,然后˚F 大号 = - [R ËMLLTMMLFL=RE

这里表示所有图灵机编码的语言,而F L表示由L中的机器计算的函数集。LTMFLL

这是真的?


接近,认为/同意一定要有一些真实的东西,例如任何可以表达自己的模拟器的 “非平凡的”或“足够复杂的”语言都是TM完整的。编译器通常是模拟器的必要部分。它的确是许多TM完整性证明中发现的“设计模式”,但可能尚未进行概括/形式化。也许是“ 计算机科学聊天”中需要进一步分析/讨论的主题。可疑/猜想还有其他一些有趣的想法,例如“可以将每一个平凡/足够复杂的递归和可递归枚举的语言都映射/还原为彼此”。
vzn 2015年

1
我创建了一种深奥的语言,称为InterpretMe,它只能表达自己的解释器,因此无能为力,因此图灵当然还不够完善。
上下文拼写,

你能解释第二句话吗?什么是?此陈述与第一个陈述有何关系?M
reinierpost

@reinierpost 通常表示的数量中号,给定的一些(受理)编码。因此,大号Ť 中号 = { 中号| 中号 是图灵机}。通过˚F 大号我表示该组由语言计算功能大号图灵机的。MMLTM={MM is a Turing machine}FLL
拉斐尔

一种更好的方式来陈述权利要求将是:“如果有一个TM 中号∈ 大号大号中号 = 大号,然后˚F 大号 = - [R ëMMLLM=LFL=RE
圣拉斐尔

Answers:


13

非正式声明不正确,如以下编程语言所示。例如ASCII字符的任何字符串都是有效程序,每个程序的含义是:“输出仅输出其输入副本的程序”。因此,使用该语言的每个程序都是该语言的编译器,但该语言不是图灵完备的。

我不确定您的“可计算性理论版本”是否等效,但事实并非如此。根据Kleene的第二个递归定理,对于图灵机的任何编码,都有一个TM接受其自己的编码而拒绝所有其他编码。1这台机器是该主张的反例。更具体地说,我们可以通过选择编码来达到结果。例如,让每个奇数编号编码由“如果我的输入为奇数,接受它;否则,拒绝”定义的机器  ,然后让  2 x对以您自己喜欢的图灵机编码方案由x编码的机器进行编码  。中号  是在语言  大号通过接受  中号M2xxMLM但是  尚未完成图灵处理。FL


1克林的第二递归定理指出的是,对于任何枚举的部分递归函数(即,对于任何编码方案为整数),以及任何部分递归函数  Q X ÿ ,有一个整数  p使得ϕ p  是将y映射到Q p y 的函数。因此,特别是让Qx = y时接受的函数(ϕi)i0Q(x,y)pϕpyQ(p,y)Qx=ypϕp(y)=Q(p,y)ϕpp


1
从哪种意义上说,该语言中的每个程序都是该语言的编译器?每个程序都是以该语言输入程序并以该语言输出不同程序的程序,是的,但是通常不认为quines是编译器。
user253751

1
cc(P)={xreturn P}P(x)=Pc

1
@immibis我(迟来的)认为你是对的。看来我要写的是每个程序的语义只是“输出您的输入”。这似乎与我写的内容非常接近,这也许就是我最初要说的内容。也许我很幸运,从错误答案到正确答案的编辑距离是如此之小。:-)
David Richerby

1
现在,答案是“忽略其输入并输出其输入的副本”-您不能同时执行这两个操作。
user253751 '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.