这是一个 警察和强盗 围绕定义语言并证明他们已经完成图灵这一挑战。
这是警察的话题。强盗的线索在这里。
警察
作为一名警察,您将准备两件事:
编程语言或其他计算系统的正式规范。(计算系统定义如下。)
根据以下较为严格的定义,证明您的系统是Turing完整的。
您将发布您的语言说明,强盗将通过证明其图灵完整性来尝试“破解”它。如果您提交的内容在一周内没有被破解,则可以将其标记为安全并发布证明。(如果有人发现您的证明有缺陷,则您的答案可能无效,除非您可以修复它。)
这是一个 人气竞赛,因此获胜者将是投票数最多且未破解或无效的答案。挑战是无限的-我不会接受答案。
为了应对这一挑战,将计算系统定义为四件事:
一个“程序集”
P
。这将是一个无穷无穷的集合,例如字符串,整数,二叉树,网格上的像素配置等。(但请参见下面的技术限制。)“输入集”
I
,也将是可数的无限集,并且不必与P
(虽然可以)相同。“输出组”
O
,其类似地将是一个可数无限组,并且可以是或可以不是相同P
或I
用于产生输出一个确定性的,机械程序
o
从程序p
和输入i
,其中p
,i
和o
是的成员P
,I
和O
分别。该过程应原则上可以在图灵机或其他抽象计算模型上实现。当然,该程序可能无法停止,具体取决于程序及其输入。
该套P
,I
并且O
必须是这样的,你可以表达他们作为一个可计算的方式串。(对于大多数明智的选择,这无关紧要;存在此规则是为了防止您选择奇怪的集合,例如不停止的图灵机集合。)
图灵完整性将定义如下:
- 对于任何可计算部分功能
f
从I
到O
,存在一个程序p
中P
,使得给定的p
和输入i
,输出的是f(i)
如果f(i)
有一个值。(否则程序不会停止。)
上述定义中的“可计算”一词是指“可以使用图灵机来计算”。
请注意,规则110和按位循环标记都不是图灵完成的,因为它们没有所需的输入输出结构。只要我们定义I
并且O
是教会数字,Lambda演算就已经完成了Turing 。(这不是图灵完整的,如果我们采取I
和O
将在一般lambda表达式。)
请注意,您不必提供某种语言的实现,但是如果愿意,欢迎在您的答案中加入一种语言。但是,您不应该以任何方式依赖实现来定义语言-规范本身应该完整,并且如果规范和实现之间存在矛盾,则应将其视为实现中的错误。