普通语言能否图灵完整?


32

我在阅读有关Iota和Jot的文章,发现本节令人困惑:

与Iota不同,在Iota中,字符串的语法树可以在左侧或右侧分支,而Jot语法统一在左分支。结果,Iota完全不受上下文限制,但Jot是常规语言。

我的理解是Iota和Jot都完成了。但显然,一个是上下文无关的,另一个是常规的!常规语言肯定不能完善图灵吗?


3
请注意,描述图灵机的语言可以用普通语言平凡地编写,例如i = {0,1,-1},b = {输入端}(i + bi + bi)+ b(i +)描述一组非空规则,后跟一个非空输入。或者,更确切地说,如果您有口译员,就可以像这样解释口译员,正如答案中提到的那样,这是该语言类别的一个独立概念。
立方2014年

1
@Cubic:为此,可以对图灵机进行编号,以使每个数字恰好代表一台机器(即它们是可数的),并且这些数字可以一元符号表示。我从来没有适当地研究过这些东西,所以我不得不努力定义它们,但是我认为这1*0是一门普通的语言;-)尽管对于程序员或编译器-编写者而言都不是一种非常友好的编程语言。
史蒂夫·杰索普

Answers:


40

简而言之,答案是肯定的。

但是,您正在混淆术语“语言”的两种完全不相关的含义(是的,这很令人困惑):

  • 一组字符串。“上下文无关的语言”是指“可以使用上下文无关的语法识别的一组字符串”。
  • 一种指定计算的方式。“图灵完备的语言”是指“指定可以在其中指定图灵机的程序的方式”。

请注意,您可以使用“语言”一词的两种不相关的含义,从两个完全不相关的观点谈论“ C ++语言”:

  • C ++为一组字符串,根据C ++语法合法
  • C ++作为指定程序的一种方式。

从这两种观点来看,“ C ++语言”的特性是无关的。

更多示例可帮助您区分这些概念:

  • 表达式“ [az] + @ [az]。[az]”描述了一组由有限自动机(即常规语言)识别的字符串。但是,仅仅是-一组字符串:不是一种指定程序的方法(除非您将一种这样的字符串解释为程序的方法),因此谈论它是否为Turing-没有意义。完成。
  • 流程图的语言是指定程序的一种方式。根据流程图的特定风格,它可能是图灵完成的,也可能不是。但是,流程图不是字符串,因此以“作为一组字符串的语言”的意义来谈论流程图绝对没有意义。

3
我要补充一点的(([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*是,这是一种常规语言,能够描述任何0类语言的语法
埃尔伯特斯(Erbureth)说Reinstate Monica 2014年

2
另请注意,这是可行的,因为我们将任何图灵机都编码为二进制字符串,并且可以确保每个二进制字符串都代表图灵机。因此显然是常规语言,可以附加图灵完成语义。{01个}
jmite 2016年

10

尽管Jot的法律计划很固定,但Jot本身是图灵完备的。这意味着每个可计算函数都可以用Jot表示。我们甚至可以提出一种语言,其中所有二进制字符串都合法,但是该语言本身是图灵完整的(练习)。您会混淆语法和语义。

顺便说一句,上下文无关的语言(可能)也不是NP完整的,因为它们具有多项式时间解析算法。


9

现代编程语言本身的语法(如在语法树中编码的语法)远非它们所做的一切。实际上,由所有程序集以给定语言定义的形式语言,即使没有错误地编译,也很少与上下文无关

静态和动态语义因素成为方程式。它们在语法树中是不可见的,但可以确定一段代码是否实际上是一个程序及其计算内容。底线是上下文无关的响应。由“语法”定义的常规形式语言给出了编程语言的过度近似

现在回答您的问题:是的,有可能。例如,考虑图灵机的任何哥德尔编号;您将获得所有自然数的“编程语言”,每个自然数代表一个TM。当然,这不是一种很好的编程语言,但它肯定是一种图灵完备的语言,它是常规的,甚至是微不足道的。


3
  1. 如果一种编程语言的表达能力足以指定Turing机器可计算的每个函数,那么它就是图灵完备的。在这里,我们正在讨论 的特定语言的力量编程语言。例如,用Python编写图灵机的解释器并不难,因此Python是图灵完备的编程语言。

  2. 编程语言的语法,即与该编程语言中的有效程序相对应的字符串集,本身就是一种语言。例如,考虑所有可能的Python程序的集合。编程语言的语法可以是上下文相关的上下文无关的常规的等。我们对检查给定的字符串在编程语言中是否为有效程序的困难(这由编译器/解释器完成)感兴趣。当我们说一种编程语言的语法是无上下文的时,这意味着它的语法有无上下文的语法,并且意味着存在下推式自动机来检查程序的有效性,

注意,一种编程语言的语法的简单性并不意味着对该种编程语言中指定的程序的计算能力的限制。


1

答案是肯定的。您会看到,正如公认的答案所述,语法与其含义无关。用乔姆斯基自己的话说:

我认为我们被迫得出这样的结论:语法是自主的并且独立于含义。

乔姆斯基,句法结构(1956)

如果一个语法可以产生足够的句子来描述所有可以计算的事物,那么我们可以将其句子的计算意义任意分配给每个可以计算的事物。

作为一个实际的例子,流行语言whitespace具有规则的语法甚至可能是常规的x86 assembly languages(需要验证)。


我认为这段经文并不意味着Go的语法在形式上是一种常规语言。我认为这只是意味着语法不是不规则的,即一致的。如果Go的语法实际上是Chomsky层次结构中的常规语言,则将无法生成例如平衡的嵌套括号。
tsleyson

是的,Go的语法中存在递归。更新帖子。
埃里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.