Luk*_*uke 16 html html5 turing-complete
看完这个问题后,CSS图灵完成了吗?- 它收到了一些深思熟虑的简洁答案 - 它让我想知道:HTML图灵是否完整?
虽然简短的答案是肯定的肯定或否定,但也请提供一个简短的描述或反例来证明HTML是否是图灵完全(显然不能同时).关于其他版本的HTML的信息可能很有趣,但正确的答案应该回答HTML5.
小智 14
单独(没有CSS或JS),HTML(5或其他)不可能是Turing-complete,因为它不是一台机器.询问它是否是基本等同于询问苹果或橙子是图灵完整,还是采取更相关的例子,一本书.
HTML不是"运行"的东西.这是一种表现形式.这是一种格式.这是一种信息编码.它不是一台机器,它无法在图灵完整性或任何其他级别上自行计算任何东西.
bwd*_*wdm 12
我似乎很清楚,状态和转换可以分别用页面和超链接在 HTML 中表示。有了这个,人们可以实现确定性有限自动机,其中单击链接在状态之间转换。例如,我实现了一些简单的 DFA,可在此处访问。
DFA 比图灵机简单得多。为了实现更接近 TM 的东西,除了基本的状态/转换功能之外,还需要一种涉及读取和写入内存的附加机制。但是,HTML 似乎没有这种功能。所以我会说 HTML 不是图灵完备的,但能够模拟 DFA。
编辑:在写这个答案时,我想起了关于 PowerPoint 图灵完整性的视频。
编辑:用 DFA 定义和澄清补充这个答案。
来自https://en.wikipedia.org/wiki/Deterministic_finite_automaton#Formal_definition
在计算理论(理论计算机科学的一个分支)中,确定性有限自动机 (DFA) — 也称为确定性有限接受器 (DFA)、确定性有限状态机 (DFSM) 或确定性有限状态自动机 (DFSA) —是一种有限状态机,它通过运行由字符串唯一确定的状态序列来接受或拒绝给定的符号字符串。
确定性有限自动机 M 是一个 5 元组,(Q, ?, ?, q0, F),由
- 有限状态集 Q
- 称为字母表的有限输入符号集 ?
- 过渡函数 ? :问×?? 问
- 初始或起始状态 q0
- 一组接受状态 F
以下示例是 DFA M,具有二进制字母表,它要求输入包含偶数个 0。
M = (Q, ?, ?, q0, F) 其中
- Q = {S1, S2}
- ? = {0, 1}
- q0 = S1
- F = {S1} 和
- ? 由以下状态转换表定义:
0 0 s1 s2 s1 s2 s1 s2 M的状态图:
状态 S1 表示到目前为止输入中有偶数个 0,而 S2 表示奇数。输入中的 1 不会改变自动机的状态。当输入结束时,状态将显示输入是否包含偶数个 0。如果输入确实包含偶数个 0,则 M 将在状态 S1 中完成,这是一个接受状态,因此输入字符串将被接受。
上面举例的 DFA M 加上一些最基本的 DFA 是在 Markdown 中实现的,并由 Github 转换/托管为 HTML 页面,可在此处访问。
按照M的定义,其HTML实现详述如下。
s1.html
和s2.html
,以及接受页面acc.html
和拒绝页面rej.html
。这两个附加状态是一种“用户友好”的方式来传达一个词的接受度,并且不会影响 DFA 的语义。acc.html
或rej.html
状态。s1.html
。acc.html
}。s1.html
包含一个文本“0”指向s2.html
的链接,一个文本“1”s1.html
指向 的链接,以及一个文本“?”的链接。导致acc.html
. 根据下面的转换表,每个页面都是类似的。Obs:acc.html
并且rej.html
不包含链接。0 | 1 | ? | |
---|---|---|---|
s1.html | s2.html | s1.html | acc.html |
s2.html | s1.html | s2.html | rej.html |
DFA 是一个抽象机器,即一个数学对象。通过上面所示的定义,它是一个元组,它根据一组符号定义了状态之间的转换规则。这些规则的实际实现(即谁跟踪当前状态,查找转换表并相应地更新当前状态)则超出了定义的范围。就此而言,图灵机是一个类似的元组,其中包含更多元素。
如上所述,HTML 实现完整地表示了 DFA M:每个状态和每个转换分别由一个页面和一个链接表示。浏览器、点击次数和 CPU 与 DFA 的上下文无关。
换句话说,正如@Not_Here 在评论中所写:
规则本身不会实现,它们只是实现应该遵循的规则。这样考虑:图灵机不是真正的机器,图灵没有制造机器。它们是纯粹的数学对象,它们是集合(状态、符号)的元组和状态之间的转换函数。图灵机是纯粹的数学对象,它们是关于如何实现计算的指令集,HTML 中的这个示例也是如此。
维基百科关于抽象机器的文章:
抽象机器,也称为抽象计算机,是一种用于定义计算模型的理论计算机。计算过程的抽象用于计算机科学和计算机工程学科,并且通常假设离散时间范式。
在计算理论中,抽象机器经常用于有关可计算性的思想实验或分析算法的复杂性(参见计算复杂性理论)。典型的抽象机器由输入、输出和用于将前者转变为后者的一组允许操作的定义组成。最著名的例子是图灵机。