【问题标题】:Turing complete and parallel programming (true concurrency)图灵完备和并行编程(真正的并发)
【发布时间】:2011-11-05 07:12:52
【问题描述】:

我经常看到人们说,如果你可以用某种语言做 X,那么你就可以用另一种语言做 Y,这就是图灵完备论点。所以你会经常(通常在讽刺的评论中)“确定你可以用 y 做 t,因为 y 也是图灵完备的。

我很久以前就学习了 CS 理论,但我认为这并不总是正确的,因为我不确定图灵在哪里适合并发。例如,有些编程语言具有正确的硬件,您可以在同一时间执行一些事情,但其他一些则不可能。

我知道这可能更多的是硬件/驱动程序问题而不是语言,但我很好奇并发是否或如何改变图灵完备的含义?你能比图灵完备吗?

编辑: 我问这个问题的original reason 在很大程度上是由于量子计算。虽然接受的答案没有说这个but quantum computing is (ostensible) a subset of turing

【问题讨论】:

  • AFAIK“图灵完备”本身并没有说明并发性……因此可以用图灵完备语言实现并发性——这就是争论变得模糊的地方……我不知道'认为您所描述的内容没有“唯一正确答案”......
  • 实际上有一个单独的站点可以解答有关理论计算机科学的问题:cstheory.stackexchange.com。我已将此帖子标记为迁移。
  • 应用程序。我不知道那个网站。
  • @Jeremy:cstheory 仅适用于“研究级问题”
  • @sepp2k:哦,我的错。在这种情况下,您认为这个问题是 SO 的主题吗?

标签: concurrency theory quantum-computing


【解决方案1】:

这对很多人来说是一个令人困惑的话题;你不是一个人。问题是这里有两种不同的“可能”定义。 “可能”的一个定义是你如何使用它:是否可以进行并发,是否可以使用该语言操作一个巨型机器人,是否可以让计算机享受草莓等。这是外行的定义“可能”。

图灵完备性与上述意义上的可能性无关。当然,并发并非在任何地方都是可能的,因为(至少对于并发的某些定义)语言必须能够生成可以同时在两个或多个不同处理器上运行的代码。因此,只能编译为将在单个处理器上运行的代码的语言将无法并发。然而,它仍然可能是图灵完备的。

图灵完备性与数学函数的种类有关,可以在给定足够内存和运行时间的机器上计算。为了评估数学函数,单个处理器可以做多个处理器可以做的所有事情,因为它可以通过一个接一个地执行一个处理器的逻辑来模拟多个处理器。可以使用图灵机计算的所有可以在任何设备上计算的数学函数的声明(未经证实和无法证明,尽管 可证伪)就是所谓的 Church-Turing 论文 .

如果您可以证明您可以使用它模拟任何图灵机,则该编程语言称为图灵完备。将此与 Church-Turing 论文相结合,这意味着编程语言能够评估任何设备可以评估的每种类型的数学函数,只要有足够的时间和内存。大多数语言都是图灵完备的,因为这只需要分配动态数组和使用循环和 if 语句以及一些基本数据操作的能力。

另一方面,由于可以构建图灵机来模拟我们目前所知的任何处理器,并且编程语言使用处理器完成它们所做的事情,因此当前的编程语言也没有比图灵机更具表达能力。因此,数学函数的计算同样可以在所有常见的编程语言中进行。在一个中可计算的函数在另一个中可计算。这并没有说明 性能 - 并发本质上是一种性能优化。

【讨论】:

  • 我会说“模拟通用图灵机”或“模拟任何图灵机”——有很多简单的图灵机可以由例如有限状态机模拟。
  • 是否有任何已知的事物(数学结构)可以用图灵机来表示?
  • 有无法计算的数字。图灵提出了图灵机概念作为所有计算的非常简单的模型,以解决“决策问题”;他证明了一定存在一些算法无法计算的函数。
  • @Adam 这是一个非常好的问题。不熟悉这些主题的人常常惊讶于答案是肯定的。对于任何图灵机都无法计算的(合理的)简单示例,请参阅Wikipedia article on the halting problem
  • 哈哈好笑,当我读到“Halting”时,一阵CS理论记忆回来了。它慢慢地回来了。谢谢维基百科。很遗憾我忘记了这么多。我会说停止问题让我想起了罗素悖论(讽刺的是我记得那个)。
【解决方案2】:

是和不是。没有已知的计算模型可以做图灵机可以做的事情,并且仍然被称为计算,而不是魔术¹。因此,从这个意义上说,除了图灵完备性之外,没有任何东西。

另一方面,你可能对“没有加一层间接层解决不了的问题”这句话很熟悉。因此,我们可能想要区分直接映射到图灵机的计算模型和需要一定程度的间接性的计算模型。 “添加间接级别”通常不是一个精确的数学概念,但在许多特定情况下,您可以观察到间接级别。通常,证明某种计算范式是图灵可计算的最简单方法是在图灵机上为它编写一个解释器,而这正是一个间接级别。

那么让我们来看看对并发建模意味着什么。你提到了“在同一时间执行的事情”的能力。这是一种特定类型的并发,称为parallelism,就并发而言,它是一个高度受限的模型。 concurrency 的世界比这要狂野得多。尽管如此,并行性已经允许在图灵机上建模时需要某种形式的间接性。

考虑以下问题:给定计算机程序 A 和 B(在通用图灵机的磁带上传递),同时执行它们,并返回任一程序的结果;您的程序必须终止,除非 A 和 B 都未终止。在纯粹的顺序世界中,您可以执行 A 并返回结果;或者您可以执行 B 并返回结果。但是,如果您从执行 A 开始,并且它恰好是一个非终止程序,而 B 确实终止了,那么您的执行策略并不能解决问题。同样,如果您从执行 B 开始,您的执行策略并不能解决问题,因为即使 A 终止,B 也可能不会终止。

鉴于 A 或 B 是否终止是无法确定的,因此您不能基于此来决定首先执行哪一个。但是,有一种非常简单的方法可以修改图灵机以并行执行程序:将 A 和 B 放在不同的磁带上,复制自动机,然后执行每个程序的一个步骤,直到两个程序之一终止。通过添加这一层处理,可以解决并行执行问题。

解决这个问题只需要对模型稍作修改(很容易用单磁带机建模双磁带图灵机)。我仍然提到它是因为它是另一个重要的计算模型 [lambda calculus](http://en.wikipedia.org/wiki/Lambda calculus) 中的一个重要示例。并行减少(评估)两个 lambda 项直到其中一个达到标准形式(终止)的操作称为Plotkin's parallel or。众所周知,不可能编写实现并行或的 lambda 项(一个 lambda 演算程序)。因此,lambda 演算被称为“固有的顺序”。

我在这里提到 lambda 演算的原因是大多数编程语言更接近 lambda 演算,而不是编程机器。因此,作为一名程序员,来自 lambda 演算的见解通常比来自图灵机的见解更重要。并行 or 的示例表明,将并发性添加到语言² 可以打开原始语言中不可用的可能性。

可以通过与图灵机基本相同的技巧为顺序语言添加并发性:执行一小块线程 A,然后执行一小块线程 B,依此类推。事实上,如果您不使用您的语言执行此操作,操作系统的内核通常可以为您执行此操作。严格来说,这提供了线程的并发执行,但仍然使用单个处理器。

作为一个理论模型,这种线程执行受到deterministic的限制。事实上,任何可以直接在图灵机上建模的系统都是确定性的。在处理并发系统时,能够编写非确定性程序通常很重要。通常,多个计算线程交错的确切顺序是无关紧要的。因此,如果两个程序进行基本相同的计算,但顺序略有不同,则它们是等价的。您可以通过查看可能的交错集合而不是单个程序运行来从顺序计算模型中创建并发计算模型,但这增加了难以管理的间接级别。因此,大多数并发模型将非确定性融入系统。当你这样做时,you can't run on a Turing machine any more

¹ 在这方面,思想(我们大脑中发生的事情)仍然是神奇的,因为我们不知道它是如何完成的,我们对它没有科学的理解。我们知道如何复制的任何东西(不是生物学意义上的!)都是图灵可计算的。
² 请注意,这里的语言包括您无法自行定义的所有内容。从这个意义上说,标准库是“语言”的一部分。

【讨论】:

  • 感谢您的回答,因为它缓解了我对并发和 TM 的不安。我觉得自己像个白痴一样问问题,因为我在大学学过 CS 理论。但最近我一直在阅读量子力学,因此这个问题来自于自然的非确定性状态(即猫是死是活)。
  • 那么这是否意味着 lambda 演算不是图灵完备的?
  • @HappyFace lambda 演算是图灵完备的:它们具有与图灵机相同的计算能力。并发可以表达顺序计算模型不能表达的东西。
  • 如果 LC 是 Turning-complete,那么我们不应该能够在其上建模图灵机吗?我们可以实现并行或在车床(只需使用相当于普通机器的双胶带机)。所以我们应该也可以并行或在 LC 中,不是吗?
  • @HappyFace 您可以在 lambda 演算上为图灵完备建模。这很乏味,但在概念上并不困难。这不会给你并行或在 lambda 演算中的原因是转换是在类似整数的输入和输出的整个计算之间进行的。翻译不保留计算的内部机制。并行或需要 lambda 演算来“自我检查”。这种直接的反身性不是 Church-Turing 论文所包含的内容。
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2011-11-22
  • 2021-07-28
  • 2011-05-07
  • 2014-12-26
相关资源
最近更新 更多