【问题标题】:Is HTML Turing Complete?HTML 图灵完备吗?
【发布时间】:2015-08-23 12:20:35
【问题描述】:

读完这个问题Is CSS Turing complete?——得到了一些深思熟虑、简洁的答案——让我想知道:HTML 图灵完备吗?

虽然简短的回答是肯定的是或否,但也请提供简短的描述或反例来证明 HTML 是否是Turing Complete(显然不能两者兼而有之)。有关其他版本 HTML 的信息可能很有趣,但正确答案应该是 HTML5

【问题讨论】:

  • 图灵完备是否不是争论,它是可证明的。对于投票结束这个过于宽泛的人:这个问题比stackoverflow.com/q/2497146/1766230 更有效,它获得了一些几乎“对于这种格式来说太长”的精彩答案?最终答案是肯定的是/否,有一些证据——非常适合 StackOverflow IMO。
  • 我修改了问题的文本以试图提供帮助,但该英语的正确解析 = "提供一个示例说明它如何是图灵完备的,或者提供一个示例说明它如何不是图灵完备的。”如果有人找到一种方法来证明一种语言是否是图灵完备的,我将授予他们一枚奖章。
  • 投票结束的人的唯一评论显示了对基本问题的误解——“图灵完备”(没有争议的东西)和“HTML”(不同于 CSS 的东西——在所谓的“重复问题”)。请让社区从对深思熟虑的问题的智能答案中学习,并投票重新提出这个问题。
  • @holdenweb 对类似问题“CSS 图灵完备”的回答相当简短。我怀疑这个问题的反例将大致相同。为什么提问者有责任证明所有答案都是简短的?为什么不让社区先提供一些答案?那么只有当答案变得过长时,才标记问题?
  • 感谢您的提问。我绝对希望看到它重新开放。天哪,SO 社区往往如此可悲。 “呼,杜尔,你问的没有任何意义。我很好,我知道很多,我是精英的一员,我只在形式逻辑上推理,我不使用自然语言进行交流,我甚至不会在我完美、开明的意见中提到这个问题有什么问题”。可怜的。拿这个@JK。例如……亲爱的主……

标签: html turing-complete


【解决方案1】:

在我看来,状态和转换可以分别用页面和超链接在 HTML 中表示,这似乎很清楚。有了这个,可以实现deterministic finite automata,点击链接在状态之间转换。例如,我实现了一些简单的 DFA,可以访问 here

DFA 比图灵机简单得多。为了实现更接近 TM 的东西,除了基本的状态/转换功能之外,还需要一个涉及读取和写入内存的额外机制。但是,HTML 似乎没有这种特性。所以我会说 HTML 不是图灵完备的,但能够模拟 DFA。

编辑:写这个答案时,我想起了视频On The Turing Completeness of PowerPoint

编辑:用 DFA 定义和说明补充这个答案。

定义

来自https://en.wikipedia.org/wiki/Deterministic_finite_automaton#Formal_definition

在计算理论中,理论计算机的一个分支 科学,确定性有限自动机 (DFA),也称为 确定性有限接受器 (DFA),确定性有限状态 机器(DFSM)或确定性有限状态自动机(DFSA)——是 接受或拒绝给定字符串的有限状态机 符号,通过运行由唯一确定的状态序列 字符串。

确定性有限自动机 M 是一个 5 元组,(Q, Σ, δ, q0, F), 由

组成
  • 有限状态集 Q
  • 一组有限的输入符号,称为字母表 Σ
  • 一个转移函数 δ : Q × Σ → 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 不会改变自动机的状态。当输入结束时, state 将显示输入是否包含偶数个 0 或 不是。如果输入确实包含偶数个 0,则 M 将在 state S1,一个接受状态,所以输入的字符串会被接受。

HTML 实现

上面举例说明的 DFA M 以及一些最基本的 DFA 在 Markdown 中实现,并由 Github 转换/托管为 HTML 页面,可访问 here

按照M的定义,其HTML实现详述如下。

  • 状态集Q包含页面s1.htmls2.html,还有接受页面acc.html和拒绝页面rej.html。这两个附加状态是一种“用户友好”的方式来传达单词的接受情况,并且不会影响 DFA 的语义。
  • 符号集合 Σ 定义为符号 0 和 1。还包括空字符串符号 ε 以表示输入的结束,导致 acc.htmlrej.html 状态。
  • 初始状态q0为s1.html
  • 接受状态集是 {acc.html}。
  • 过渡集由超链接定义,这样页面s1.html 包含一个链接,其中文本“0”指向s2.html,文本链接“1”指向s1.html,以及文本链接“ ε" 导致acc.html。根据下面的转换表,每一页都是类似的。 Obs:acc.htmlrej.html 不包含链接。
0 1 ε
s1.html s2.html s1.html acc.html
s2.html s1.html s2.html rej.html

问题

  • 这些 HTML 页面以何种方式成为“机器”?这些机器不包括浏览器和点击链接的人吗?链接以何种方式执行计算?

DFA 是一个抽象机器,即一个数学对象。通过上面所示的定义,它是一个元组,根据一组符号定义状态之间的转换规则。这些规则的实际实现(即 跟踪当前状态,查找转换表并相应地更新当前状态)超出了定义的范围。就此而言,图灵机是一个similar tuple,其中包含更多元素。

如上所述,HTML 实现完整地表示了 DFA M:每个状态和每个转换分别由一个页面和一个链接表示。浏览器、点击次数和 CPU 在 DFA 的上下文中是不相关的。

换句话说,正如@Not_Here 在 cmets 中所写:

规则本身不会自行实现,它们只是规则 应遵循实施。这样考虑:图灵机 不是真正的机器,图灵没有制造机器。他们纯粹 数学对象,它们是集合(状态、符号)的元组和 状态之间的转换函数。图灵机纯粹是 数学对象,它们是关于如何 实现一个计算,HTML 中的这个例子也是如此。

abstract machines 上的维基百科文章:

抽象机器,也称为抽象计算机,是一种 用于定义计算模型的理论计算机。 计算过程的抽象用于计算机 科学和计算机工程学科,通常假设 离散时间范式。

在计算理论中,抽象机器常用于 关于可计算性的思想实验或分析 算法的复杂性(参见计算复杂性理论)。一种 典型的抽象机器由输入方面的定义组成, 输出,以及用于转动前者的一组允许操作 进入后者。最著名的例子是图灵机。

【讨论】:

  • “在可计算性理论中,如果一个数据操作规则系统可以用来模拟任何图灵机,那么它就是图灵完备的或计算通用的。这意味着这个系统能够识别或决定其他数据操作规则集。” - 维基定义。您的系统还将包括一个会进行点击的人,因此它不是纯 HTML。我很确定当人们说 javascript 图灵完备时,他们指的是引擎而不是语法。
  • @Anthony Yershov 可计算性理论比这更抽象。您不需要解释器甚至 CPU 来确定此类规则的计算能力(例如形式语法)。这种分析都是关于语法的,而不是状态之间转换机制的实现。所以我会说它是纯 HTML,就像任何形式语法都是“纯”的一样。
  • 链接本身不执行任何逻辑计算,所以我认为它不能用于表示状态转移。
  • 超链接不仅代表状态转换,它们也工作。你可以自己test
  • @AnthonyYershov 在您的引文中“数据操作规则系统”与您试图争论的内容背道而驰。规则本身并不是天生的,它们只是实现应该遵循的规则。这样想:图灵机不是真正的机器,图灵没有制造机器。它们是纯粹的数学对象,它们是集合(状态、符号)的元组和状态之间的转换函数。图灵机是纯粹的数学对象,它们是关于如何实现计算的指令集,HTML 中的这个示例也是如此。
【解决方案2】:

HTML(没有 CSS 或 JS)本身(没有 CSS 或 JS)不可能是图灵完备的,因为它不是机器。询问是否是,本质上等同于询问苹果或橙子是否是图灵完备的,或者举一个更相关的例子,一本书。

HTML 不是“运行”的东西。它是一种代表。它是一种格式。它是一种信息编码。不是一台机器,它不能在图灵完整性级别或任何其他级别上自行计算任何东西。

【讨论】:

  • 虽然我认为“否”是正确的,但您能否详细说明为什么 HTML 不是正式的“机器”,以及为什么这是图灵完备性的要求?当浏览器解析 HTML 时,难道不能像 JavaScript 文件一样被视为“运行”吗?
  • 对于初学者来说,HTML 没有任何方法可以做出“决定”,例如if ... then ... else。它也没有循环,没有变量等。它本身不是编程语言,它只是声明性的。
  • 这不准确。您可以将 html 制作成一个状态机,其中每个状态都由一个 iframe 表示。
  • @TravisJ 当然,我可以用 IFRAME 或许多其他方式表示状态。但要成为一台机器,我们必须能够在状态之间转换。怎么会这样?
  • HTML5 和 CSS3 已经完成,因为其中编写了 Rule 110 实现
猜你喜欢
  • 2014-12-26
  • 2011-05-22
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2017-01-11
相关资源
最近更新 更多