每种自修改算法都可以用非自修改算法建模吗?


12

如果我们有任何可以修改其指令的计算机程序,是否可以使用无法修改其指令的程序来模拟该程序?


编辑:

我是stackexchange的新手,所以不确定是否可以在这里提出一个新问题,但是这里有:好的,就如你们所显示的,证明有可能实现这一事实实际上非常简单。现在,我想知道:与输入输出等效的最有效非自修改算法相比,使用最有效的自修改算法来解决该问题是否更有效(在何种程度上)?

Answers:


29

是的,有可能。您可以使用解释器为其编写的语言来模拟程序。现在,该程序(解释器)已固定,以前是自修改程序的东西现在是解释器的数据。

特别是,您完全可以拥有一台通用的Turing机器,该机器允许其模拟的TM修改其自己的描述。(我的意思是模拟机器的描述;不是UTM。)


11
您甚至不需要假设的解释器。执行自我修改算法的CPU本身就是执行固定算法(指示其如何执行指令)的机器
亚历山大-莫妮卡(Monica

1
@AlexanderMomchliov 有一些CPU可以即时修改其指令集的一部分(但是的,想法是相同的-可编程部分是数据,运行它的微控制器是解释器-尽管指向FPGA单元内部的微控制器)可能很棘手)
约翰·德沃夏克

回应:“您完全可以拥有一台通用的Turing机器,该机器可以让正在模拟的TM修改其自己的描述。” 我在想:这不是问题吗?因为现在您仍然需要证明被仿真的TM可以实际对自修改算法建模,对吗?仍然可能存在一个自我修改程序本身不是图灵机,因此我们无法使用图灵完备性来表明它可以被仿真,因为图灵完备性涉及到TM的仿真和自我修改。算法不是TM。
user56834'8

@ Programmer2134根本没有问题。无论您认为运行自修改程序的CPU是什么,我都可以在Turing计算机上模拟该CPU。为了用另一种方式解释它,初始程序是一个有限的指令序列,其中一些指令会修改程序本身。每个指令都可以由UTM进行模拟,可以对每个修改进行模拟,并且可以对每个修改后的指令进行模拟。在此过程的任何阶段,没有任何事情超出图灵机的能力范围。
David Richerby '16

10

任何没有修改代码(或“代码”)的图灵完备计算模型都可作为该陈述的证明。我不知道任何标准模型(TM,RAM等)具有修改后的代码,因此我们不必看得太远。

要使用您想要使用的任何语言获得程序,请从这样的模型进行编译(并确保编译器未进行代码修改)。


这是当然的,一个存在争论:有一个等效的程序。但是我们也知道,在任何两种图灵完备的语言之间都有递归(即可计算)的编译器,因此您可以通过这种方式获得所需形式的程序(以该语言阅读)。


4

要补充David Richerby的答案

如果确实没有非自修改算法无法建模自修改算法,那么这些算法将必须在也自修改的东西上执行。必须一直是乌龟。

正如我在评论中提到的那样,自修改算法可以在处理器上执行,该处理器本身遵守静态算法(在其设计中进行编码)的规则,该规则“告诉”它如何执行机器指令。


1
我认为这可能是一个有趣的分界线。我认为有人可以辩称,“生命”是一种自我修改算法,不能用非自我修改算法来建模,但话又说回来,“生命”通常不被视为一种算法。
Cort Ammon

2
@CortAmmon:如果我们将“生命”视为一种算法,那么它的输入和输出是什么?如何证明任何等效算法(即,在给定相同输入时产生相同输出的任何算法)必须是自修改的?
ruakh

@ruakh如果我要争论生活是一种自我修改算法,则输入将是自身,而其输出将是自身。证明不能将其简化为非自修改算法会比较棘手,但我认为这是一个流行的假设。毕竟,有多少人希望相信他们可以简化为可以在计算机上运行的算法?
Cort Ammon

1
@CortAmmon:我不能只限于在计算机上运行的算法,因为该算法不再是“我”;我不仅仅是我的投入和产出。但是,如果我们从假设开始,我刚才的算法,然后在套结实际上并没有改变什么“可以在计算机上运行”。回复:“如果我认为生命是一种自我修改算法,那么输入将是自身,而输出将是自身”:在那种情况下,我认为您在CS之外会表现得很好,并且危险地接近陶器。
ruakh

1
@CortAmmon一个将自身作为输入输出的程序就是just cat。(即使猫恰巧是生物,也没有双关语)
user253751 '16
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.