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


12

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

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

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

如果决定大号⊆ 大号Ť 中号和⟨ 中号⟩ ∈ 大号,然后˚F 大号 = - [R Ë。ML⊆LTM⟨M⟩∈LFL=RE

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

这是真的?


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

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

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

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

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

Answers:


13

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

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


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


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

1
cc(P)={x⇒return 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.