上下文相关(类型1)语言的重要性是什么?


34

看到在乔姆斯基层次结构中,类型3语言可以由没有外部存储器的状态机(即有限自动机)识别,类型2由具有单个堆栈的状态机(即下推自动机)识别,类型0可以通过类型识别。一个具有两个堆栈的状态机(或者等效地,一个磁带,就像图灵机的情况一样),类型1的语言如何适合这张图片?而且,确定一种语言不仅是Type 0还是Type 1会带来什么优势?


2
由于您是在此处而不是在cstheory.SE中进行询问(由@Sunil提出),因此我建议您还对类型1进行简短的描述/定义,这可能不是每个人都熟悉的术语。
Janoma'3

5
@Sunil不,不会。这不是研究级别的问题(即使是,也仍然是主题,因为我们不排除研究级别的问题-至少我记得这是在Area51上进行讨论的结果)。
sepp2k 2012年

3
@Janoma:为什么要包含容易查找的信息(这不算噪音)有什么帮助?
bitmask 2012年

4
@Janoma我认为一般准则应该是解释那些能够回答该问题的人可能不知道的概念(如果该准则是要解释该网站的某些用户可能不知道的一切,我们将在解释一切一直以来,这肯定不是其他SE网站的标准)。而且我不认为不知道Chomsky层次结构的人能够回答这个问题。当然,尽可能多地解释(只要它不会使问题变得冗长乏味)也无妨-我只是在这种情况下认为没有必要。
sepp2k 2012年

4
每个计算机科学专业的人都知道(或应该知道)乔姆斯基层次结构。其他人都可以在20多秒钟后查找它。也许到维基百科的链接在这里就足够了。
拉斐尔

Answers:


19

上下文相关的语言正是图灵机可以使用线性空间和非确定性识别的语言。您可以使用指数时间来模拟这样的图灵机,因此您可以在指数时间内识别任何这样的语言。请注意,识别某些上下文相关语言的问题是 -complete,这意味着我们很确定您做得不会比指数时间更好。P小号P一种CË

比较这键入0语言,这意味着你至少可以说的东西大概需要多长时间来识别的语言。0类语言甚至可能不是可判定的:所有停止运行的Turing机器的语言都是0类语言,但是由于识别该语言恰好是制止问题,所以它不是可判定的。

上下文相关的语法在实践中不是很有用。上下文免费语法是直观与工作,但因为在维基百科上显示的示例中,上下文敏感文法很快变得相当凌乱。使用多项式空间的程序更容易设计(并且完整性保证了某些等效CSG的存在,其数量仅比算法的空间使用数大)。P小号P一种CË

它们存在的原因是它们形成了上下文无关语法的非常自然的扩展(您可以让上下文确定哪些乘积有效)。这可能会激发乔姆斯基定义它们并将它们命名为1类语言。请记住,这个定义是在计算机像今天这样发展之前做出的:与语言相比,形式语言理论家更感兴趣。

不受限制的语法变得更加奇怪:不再存在“扩展”非终结符并将其替换为产生式的想法,这可能取决于上下文。您也可以自由修改上下文。这使无限制的语法使用起来更加不直观:程序是等效的,而且更加直观。


但是,上下文敏感的语言中有用的!例如,参见此讨论
拉斐尔

上下文敏感度很有用,但是IMO作为描述语言的一种方式,上下文敏感语法不是很有用。使用其他方式描述上下文相关功能会更好。
亚历克斯(Alex)10 Brink 2012年

但是您在答案的大部分部分都谈论语言。关于语法,ymmw。CFG和CSG之间存在具有自然建模应用程序的语法模型,例如耦合/多CFG。
拉斐尔

1
没错,我对语言和语法之间的区别一直很草率。我已经更新了答案。
亚历克斯(Alex)10 Brink 2012年

10

一般来说,您通常想知道给定语言所属的较小类。这是因为较小的类别可以通过更简单的机制(自动机,语法,正则表达式等)识别/接受/生成。大号

例如,常规语言类具有良好的闭包特性,并且给定了DFA 您可以在线性时间内测试单词是否属于L A。相反,使用图灵机,您需要线性时间来读取输出,这通常发生实际开始处理之前一种大号一种

简而言之,对于较小的类,您需要较少的计算能力来解决确定单词是否属于该语言的问题。

根据维基百科,乔姆斯基定义了上下文相关的语法(即类型1)来描述自然语言的语法。这与其他类别的语言有所不同,其他类别的语言是用来描述数学中使用的字符串系列(例如算术公式的语法)而不是自然语言(例如英语中语法正确的句子的语法)的。


2
“简而言之,对于较小的类,您需要较少的计算能力来解决确定单词是否属于该语言的问题。” 究竟,但如何这是否适用于1型和0型?这就是问题所在!
bitmask'3

好吧,如果您事先知道仅使用线性空间的TM可以识别一种语言,则在实现(例如可伸缩性)方面将为您带来优势。另外,如果您对证明理论性质感兴趣,可以只取一个常数,以便TM使用空间c n并进行相应的分析。对于通用TM或通用Type 0语言,这是不可能的。CCñ
Janoma'3

8

在无上下文的语言中,在输入解析的任何时候,自动机都处于其堆栈所定义的状态。无论在何处使用输入,每个产品在使用输入时都具有相同的行为。

这导致了一个有趣的特性,即每个产品都生成由堆栈中较深的产品生成的产品的子语言,因此对于在任何特定输入上生成和消费的产品A和B的对,我们有三种可能的情况:

  • a:A消耗的输入完全包含在B消耗的输入中;要么
  • b:A消耗的输入完全包含B消耗的输入;要么
  • c:A消耗的输入与B消耗的输入完全不相交。

这意味着以下情况永远不会发生:

  • d:A消耗的输入与B消耗的输入部分重叠。

与此相反,在上下文相关的语言中,每个生产的行为取决于它的使用位置,因此生产中消耗的输入不是堆栈深处的输入的子语言(实际上,使用堆栈将无法正常工作)。而且我们有可能发生d。

在现实世界中,上下文敏感的语言有意义的情况就像用<b>粗体字</ b>,<i>斜体字</ i>和<u>带下划线的文本</ u>这些html标签并让它们重叠,例如“这是带有<i> mixed </ u>重叠标签</ i>的<u>文本”。观察一下以进行解析,并确定所有开始标签是否都与结束标签匹配,PDA不会这样做,因为它不是上下文无关的,但是LBA会很容易做到。


7

关闭属性

在Chomsky层次结构的所有语言类中,只有常规语言和上下文相关语言在补充下关闭。因此,这是上下文相关语言的一种独特功能。

与上下文无关的语言相反,CS在交集和混排乘积下也被关闭。


6

仅使用线性空间(所谓的线性有界自动机)的图灵机可以识别任何类型1的语言。


2
是的,这就是定义。但是这个限制对我有什么帮助?
bitmask 2012年

3
它对我有帮助,因为它将识别CSG的算法的功能限制为E而不是EXP。我不知道它会如何帮助您:)
Suresh 2012年


4

乔姆斯基层次结构对语法的分类远胜于对语言的分类。但是,它的设计与自动机应该识别的磁带数量无关,正如您对类型2和类型3所建议的那样,即使有一类图灵机可以对类型1语法进行识别。

您还应注意,图灵机并不能全部识别Type-0语法的语言,但只能由此类机器枚举它们:Type-0意味着可递归枚举,而Turing机仅识别递归语言。


4

现代编程语言一直都在使用上下文相关功能。它们属于可以有效确定的子集。

示例包括名称和类型分析以及类型推断。


3

许多其他人提到Type-1语言是可以被线性有界自动机识别的语言。停止问题对于线性有界自动机是可以确定的,这反过来意味着对于Turning Machines识别的语言,计算上无法确定的许多其他属性对于Type-1语言是可以确定的。

可以肯定的是,对于线性有界自动机可以决定停止问题的证据是基于这样的事实:在有限数量的磁带上,它们只能进入有限数量的状态,因此,如果它们在很多步骤中都无法停止,那么您就知道它们是循环播放,永远不会停止。从技术上讲,该证明适用于所有实际计算机(也具有有限的内存),但这对于解决运行在其上的程序的暂停问题没有任何实际的好处。

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.