“定理还支撑编译器专门化、解释器残留程序和通用模拟的形式分析。结合Rice 定理,它说明同一套有效编号既允许丰富的代码生成,又不提供语义判定捷径;“能构造程序”与“能决定程序做什么”必须严格区…”
“证明骨架是有效的程序模板构造。建立一个模板,它把常量 $e,x 1,\ldots,x m$ 写入自身,并在收到 $y 1,\ldots,y n$ 后调用通用解释器计算”
模型Model
施工中 · 内容逐步修订
Universal Turing machine
输入机器编码和输入串后模拟该机器运行的图灵机。
固定一种可有效解析的编码。通用图灵机
若被模拟机器还规定了停机时怎样从纸带读出有限输出,通用模拟也保留这个输出,而不只保留接受或拒绝。原因是它始终保存被模拟配置;到达停机配置后,再按同一输出规则读出所保存的纸带内容即可。采用固定的有效自然数与元组编码后,这给出通用部分可计算函数
其中两边同时发散,或同时停机并输出同一个值。程序编号可以先把非法索引译成一个固定的处处发散程序;这与前面语言识别接口对格式错误的机器描述直接拒绝,是分别声明的输入约定。程序编号、参数固化与递归定理使用的是这里的函数输出接口。
机器本身也能表示成数据。通用机把“硬件规则固定、程序作为输入”这一现代存储程序计算机观念形式化:一个固定解释器读取另一台机器的有限编码和输入,维护被模拟带、状态与头位置并逐步解释每条转移,就能执行任意可编码算法。程序与数据采用同一种有限字符串表示,也是自指、编译器和可计算性极限得以出现的根源。
一次模拟循环先从工作带读出被模拟状态 (q,101,头在首位) 变为 (r,001,头在第二位);通用机可能为这一个被模拟步骤执行许多自己的步骤,但必须保持这项配置对应。
现代解释器把源程序或字节码连同输入交给同一个运行时,结构上类似
通用性不表示有限设备能实际保存无穷带,也不保证高效或常数开销:朴素模拟可能产生多项式甚至更大的时间开销。它同样不保证模拟机能预知被模拟程序何时停机。恰恰因为
通用机的状态集不必包含每台被模拟机器的所有状态。被模拟状态只是工作带上的有限编码,通用机自身的有限控制只负责查表和更新;把这两个状态层次分开,就能理解为什么一台固定有限描述的机器可以解释任意大的转移表。
通用机建立在 图灵机 可有效编码的事实上,使“程序分析另一个程序”得到形式化。程序编号与可接受编号把这种解释能力组织成有效枚举,$s$-$m$-$n$ 定理把部分实参固化进新程序代码,Kleene 递归定理再由自应用构造语义固定点。停机问题、对角化与自解释器由此有统一索引语言;复杂性理论若关心资源,还需另行指定高效通用模拟器。
Scott Aaronson, 6.045J Lecture 7: Decidability, MIT OpenCourseWare, 2011,幻灯片 36–38,固定控制模拟任意机器及其停机边界。
Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Ch. 3, universal Turing machine and machine encodings。
Alan M. Turing, “On Computable Numbers, with an Application to the Entscheidungsproblem,” Proceedings of the London Mathematical Society, 1936,Full paper, universal-machine construction and machine descriptions。
正在载入交互图谱…
上位 / 更一般
下位 / 直接特例
暂未标注直接特例。