是语言{0 ^ n 1 ^ n 0 ^ k | k!= n}上下文免费?

时间:2012-12-23 13:52:52

标签: computer-science context-free-grammar regular-language pushdown-automaton

我相信这种语言不是没有上下文的,因为PDA不可能比较2个0和1的相同长度的块,也记住它的长度供以后使用。

不幸的是,我不知道如何证明它。

我尝试使用泵浦引理无济于事......

我还试图通过矛盾来假设语言是无上下文的,并且使用这样一个事实,即上下文无关语言与常规语言的交集也是无上下文的(通过查找一些神秘的常规语言L),并且令人惊讶(或不) - 我所有的努力都是徒劳的......

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

语言{0 n 1 n 0 k | k!= n}上下文无关?

,语言L = {0 n 1 n 0 k | k!= n} 不是上下文无关语言。另外,Class of Regular Languages is subset of class Context free languages

您使用PDA的想法是正确且明显的方式来表明语言不是上下文。 我们无法为语言0 n 1 n 0 k 绘制PDA,因为在匹配前缀0 n < / sup>到1 n 堆栈变空,然后我们没有存储信息来检查天气后缀0 K 是否等于n

提示:正式证明

  • 首先
  

L = {0 n 1 n 0 k | k!= n}现在L的补体是L '

     

L ' = {{0 n 1 n 0 n }这是众所周知的上下文敏感语言(可以证明)。

上下文相关语言的补充本身就是上下文敏感的。

  • 第二

关于抽水引理:

  

L = {0 n 1 n 0 k | k!= n}是L 1 和L 2 的联合,其中
  L 1 = {0 n 1 n 0 k | k> n}和   L 2 = {0 n 1 n 0 k | k&lt; n},

     

L = L 1 U L 2

L 1 和L 2 都是非上下文语言。并且两种非上下文免费语言的联合是非上下文的。(可以通过语法轻松证明)


此外,联合,两个上下文相关语言的连接是上下文相关的。