逃离柏油(警察)


9

这是一个 围绕定义语言并证明他们已经完成图灵这一挑战。

这是警察的话题。强盗的线索在这里

警察

作为一名警察,您将准备两件事:

  • 编程语言或其他计算系统的正式规范。(计算系统定义如下。)

  • 根据以下较为严格的定义,证明您的系统是Turing完整的。

您将发布您的语言说明,强盗将通过证明其图灵完整性来尝试“破解”它。如果您提交的内容在一周内没有被破解,则可以将其标记为安全并发布证明。(如果有人发现您的证明有缺陷,则您的答案可能无效,除非您可以修复它。)

这是一个 ,因此获胜者将是投票数最多且未破解或无效的答案。挑战是无限的-我不会接受答案。

为了应对这一挑战,将计算系统定义为四件事:

  • 一个“程序集” P。这将是一个无穷无穷的集合,例如字符串,整数,二叉树,网格上的像素配置等。(但请参见下面的技术限制。)

  • “输入集” I,也将是可数的无限集,并且不必与P(虽然可以)相同。

  • “输出组” O,其类似地将是一个可数无限组,并且可以是或可以不是相同PI

  • 用于产生输出一个确定性的,机械程序o从程序p和输入i,其中pio是的成员PIO分别。该过程应原则上可以在图灵机或其他抽象计算模型上实现。当然,该程序可能无法停止,具体取决于程序及其输入。

该套PI并且O必须是这样的,你可以表达他们作为一个可计算的方式串。(对于大多数明智的选择,这无关紧要;存在此规则是为了防止您选择奇怪的集合,例如不停止的图灵机集合。)

图灵完整性将定义如下:

  • 对于任何可计算部分功能fIO,存在一个程序pP,使得给定的p和输入i,输出的是f(i)如果f(i)有一个值。(否则程序不会停止。)

上述定义中的“可计算”一词是指“可以使用图灵机来计算”。

请注意,规则110按位循环标记都不是图灵完成的,因为它们没有所需的输入输出结构。只要我们定义I并且O教会数字,Lambda演算就已经完成了Turing 。(这不是图灵完整的,如果我们采取IO将在一般lambda表达式。)

请注意,您不必提供某种语言的实现,但是如果愿意,欢迎在您的答案中加入一种语言。但是,您不应该以任何方式依赖实现来定义语言-规范本身应该完整,并且如果规范和实现之间存在矛盾,则应将其视为实现中的错误。


9
对不起,但是人气竞赛 一个客观的获胜标准。成为流行舞者并不会带来挑战,而且从来没有做过。在最近的讨论荟萃有+27赞成这种共识,所以虽然你的五个可能更喜欢它是不同的,你真的没有自顾不暇。由于已经针对议定的政策解决了这个问题,因此我要求将其重新讨论。
纳撒尼尔(Nathaniel)'18

2
(请注意,WhatWizard由于不同的原因将其关闭。)
user202729 '18

2
请不要使用接近投票作为“我不同意”或“我不喜欢”按钮。紧密投票将用于实施站点策略。如果您不同意某项政策,请将其付诸实践-不要解决社区共识所提出的挑战。
Mego

1
@Mego我投票结束这一点过于广泛,但我也认为这与我们现有的流行音乐规则不合时宜。我们希望普及度竞赛能够“明确说明必须实现的目标”,这个问题是最具创意的doX。对我来说很清楚,除了有一个有效的答案外,没有其他目的,并且附有pop-con标签只是为了保持打开状态。
Ad Hoc Garf Hunter'Apr

2
@WhatWizard必须实现的目标显然不是图灵完成的,并且通过在一周内不被破解来评估不明显性。不清楚吗?
纳撒尼尔(Nathaniel)'18

Answers:


10

蒙住眼睛的算术

相对来说,可能是一门相当容易的语言。(由于我必须证明自己能完成图灵完成,所以我很难用一种语言来限制语言!)

对于这种语言,程序集是下面“程序”部分中给出的蒙蔽算术程序集,输入集是正整数集,输出集是整数集(整个集,而不仅仅是正整数)。

这种语言非常有趣-甚至在实际中很有用-因为它或多或少完全缺乏控制流程,完全基于对看不见的数字的计算。这使其潜在地用作在同态加密 系统中实现程序的语言 。

规格

蒙眼算术是一种深奥的编程语言,具有以下规范:

数据存储

正在运行的“蒙住眼睛的算术”程序的状态由六个变量组成,每个变量可以存储一个整数。(上有多么大或小的这些整数可以得到没有限制;特别是,他们可以去负)的变量被称为abcde,和 i

在程序开始时,ae包含在内的每个值初始化为0,并i初始化为从用户输入获取的正整数。(如果没有可用的输入,i则初始化为1。)

如果程序停止执行(只能由于被零除而发生),则将i尝试除法之前的值用作程序的输出。

程序

Blindfolded Arithmetic程序是命令列表,每个命令具有以下一种形式(其中v可以用任何变量名替换,每次使用时都可以使用不同的名称):

  • v = v + v
  • v = v - v
  • v = v * v
  • v = v / v

注意,命令的每个操作数必须是一个变量。此语言不允许使用文字整数。

程序的执行是通过依次运行每个命令,然后循环回到开始并继续无限制地依次运行命令(直到尝试除以零为止,从而结束程序)。 。

每个命令的语义与您期望的符号相同,与大多数实际的编程语言所使用的语义没有什么不同:提取命令中所提及的第二个和第三个变量的值,并进行算术运算(加/减分别对四种形式的命令分别使用/ multiply / divide),并将结果值存储到第一个变量中。此处的除法是整数除法,四舍五入为0。

除了程序退出以外,没有任何类型的控制流。这些命令始终按顺序循环,直到除以零(如果有)并结束程序。特别是,没有直接读取变量的方法,只能将它们用作其结果影响分配给其他变量的值的计算源。


您能检查我的答案是否缺失?
user202729 '18

@ user202729 :(在这里评论,因为我没有代表在那里评论)您无法在“翻转”中模拟“如果错误则移动”,而在“翻转”中则无法模拟,因为您无法撤消翻转移动后 因此,您将需要其他方法来处理该问题(例如,一种反转测试的方法,这应该不难)。不过,更值得注意的是,就停止行为而言,这是一个图灵完整性证明,但是问题中的定义要求您也能够执行I / O,因此您需要证明自己可以做到这一点。
ais523

我希望I / O部分(现在)可以。至于另一个问题,我意识到内部甚至没有必要,中间状态也可以解决所有问题(尽管我不确定该怎么写)
user202729 '18

@ user202729:它仍然不是很正确(例如,问题要求您能够输出负数,并且还需要更改的目的,i以使状态数(始终为“停止”)不会作为输出的一部分),但它已经足够接近了,因此我不会将其标记为安全,因为如果有足够的时间并充分阐明规则,您显然会完全被破解。我不想赢得技术上的挑战。
ais523

这非常接近de.ioccc.org/years-spoiler.html#1992_buzzard.1使用的限制。该实现使用固定大小的整数,因此不是图灵完备的,并且该实现在您拥有的变量数方面受到严格限制,但是我认为证明还是相似的。
b_jonas
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.