是否有一种算法/系统程序来测试一种语言是否不受上下文限制?
换句话说,在给定的代数形式指定的语言(想到像),测试的语言是否是与否上下文无关。想象一下,我们正在编写一个Web服务,以帮助学生完成所有作业。您指定语言,Web服务将输出“无上下文”或“无上下文”。有没有什么好的方法可以自动执行此操作?
当然,还有一些用于手动证明的技术,例如抽运引理,奥格登引理,帕里克引理,互换引理等等。但是,它们每个人都需要在某个时候进行手动洞察,因此尚不清楚如何将它们中的任何一种转化为算法。
我看到Kaveh在其他地方写过,非上下文无关的语言集不是可递归枚举的,因此似乎没有希望任何算法都能在所有可能的语言上运行。因此,我认为Web服务将需要能够输出“无上下文”,“非上下文”或“我无法分辨”。在教科书中很可能会看到的多种语言上,是否有除“我无法分辨”以外的其他算法通常能够提供答案?您将如何构建这样的Web服务?
为了使这个问题更好地解决,我们需要确定用户如何指定语言。我愿意接受建议,但我在想这样的事情:
其中是一个单词表达式,S是一个在长度变量上的线性不等式的系统,具有以下定义:
每个就是一个字表达。(这些代表可以容纳∑ ∗中任何单词的变量。)
中的每一个都是单词表达。(示例性地,Σ = { a ,b ,c ,… },因此a ,b ,c ,…表示基础字母中的单个符号。)
每是一个字表达式中,如果η是一个长度可变。
单词表达的串联是单词表达。
每个的是一个长度可变。(这些代表可以包含任何自然数的变量。)
每个是长度可变的。(这些代表相应单词的长度。)
这似乎足以处理我们在教科书练习中看到的许多情况。当然,如果愿意,您可以替换以代数形式指定语言的任何其他文本方法。