以下问题本质上是理论性/学术性的。
根据维基百科
如果一套数据操作规则系统(比如计算机的指令集、编程语言或细胞自动机)可以用来模拟任何图灵机,则称其是图灵完备的或计算通用的。
据说 TeX 是图灵完备的。
我思考这些陈述的含义。
有几种 TeX 引擎 — 例如,Knuth 的 TeX、ε-TeX、pdfTeX、XeTeX、LuaTeX、uTeX、upTeX。
问题1:
这些 TeX 引擎是图灵完备的吗?
问题2:
这些 TeX 引擎是图灵机吗?
如果是这样:
问题 3:
是否可以在 8 位 Knuth TeX 引擎(以 ASCII 作为内部字符编码方案)上模拟 LuaTeX 引擎(以 unicode 作为内部字符编码方案)?
“是图灵机而不是图灵机的严格子集”和“图灵完备”是不同的属性。如果 TeX 引擎是图灵完备的而不仅仅是图灵机本身,那么你就不能得出不同的 TeX 引擎可以相互模拟的结论。
问题 4:
图灵机械是这些 TeX 引擎的严格子集吗?
TeX 引擎是否具有不属于图灵机概念的组件?
答案1
问题 1:是的,如果你假设这些引擎可以访问无限的内存和时间(不是无限的,而是在需要更多内存/时间时可以扩展),就像人们通常说计算机是图灵完备的一样。
问题2:不是。图灵机是一种计算的数学模型,就像寄存器机、lambda 演算和许多其他模型一样。TeX 引擎、真实计算机等是不同模型混合的实现。
问题 3:是的,如果你对问题 1 的回答是肯定的。每个图灵完备的形式主义都可以模拟任何其他模数输入/输出转换(否则它就不是图灵完备的)。这并没有说明实用性。例如,你可以使用 TeX 引擎(具有无限的内存/时间)来模拟运行 Linux 的 x86 架构,而 Linux 运行 XeTeX。但是,我不想在等待排版结果时耽误我的早餐时间Hello, world!\bye
。
答案2
有可能吗?理论上是的,但尽管 TeX 是图灵完备的,但它的内存容量有限,你可能在到达那里之前就用完了容量。我猜需要重新实现 TeX在TeX 宏是项目的一部分,同时还用 TeX 宏编写了一个完整的 Lua 解释器。TeX 宏语言的局限性在于,您可能需要编写一个编译器来将某些高级语言(例如 C)编译为 TeX 宏。如果您用 C 编写了这个编译器,它可以自行引导,然后作为 TeX 宏本身运行。但同样,内存容量一直是问题,而且永远都是问题。
答案3
图灵完备语言能够计算整数上的所有可计算函数。
有可能以旧系统能够计算的某种格式来表示 Unicode 系统,将输入转换为兼容的表示,然后生成输出的表示,所有这些都在旧 TeX 引擎上进行,只要有足够的时间和内存。事实上,与图灵兼容的 TeX 引擎可以模拟运行 LuaTeX 的整个计算机。
这并不一定意味着旧版 TeX 引擎可以读取 UTF-8 输入并生成嵌入 OpenType 字体的 Unicode PDF。但理论上,它可以是系统的后端,分别将旧版 TeX 引擎的输入和输出转换为兼容表示形式。
答案4
TeX 引擎是否具有不属于图灵机概念的组件?
图灵机模型没有考虑到一个方面:输入和输出能力。
例如,如果某个 TeX 引擎的输出受限.pdf
,不允许创建任意文件,那么就不可能让它输出.dvi
文件。它可以在内存中格式化它们,并将它们作为文本嵌入 PDF 中,但随后您需要一个单独的步骤来提取最终输出。