理论/学术问题——是否有可能在 8 位 Knuth TeX 引擎上模拟 (unicode) LuaTeX 引擎?

理论/学术问题——是否有可能在 8 位 Knuth TeX 引擎上模拟 (unicode) LuaTeX 引擎?

以下问题本质上是理论性/学术性的。

根据维基百科

如果一套数据操作规则系统(比如计算机的指令集、编程语言或细胞自动机)可以用来模拟任何图灵机,则称其是图灵完备的或计算通用的。

据说 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 是图灵完备的,但它的内存容量有限,你可能在到达那里之前就用完了容量。我猜需要重新实现 TeXTeX 宏是项目的一部分,同时还用 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 中,但随后您需要一个单独的步骤来提取最终输出。

相关内容