证明语言不是上下文无关的吗?

时间:2018-10-23 22:29:23

标签: finite-automata

您如何证明以下给出的语言L不是上下文无关的,我想知道以下给出的证明是否有意义,如果没有,什么是正确的证明方法?

L = {a ^ n b ^ n c ^ i | n≤i≤2n}

我正试图通过矛盾解决这种语言。假设L是规则的并且具有抽运长度p,使得S = a ^ p b ^ p c ^ p。观察到S∉L。由于必须有一个长度小于p的泵浦循环xy,所以可以重复y,该循环由一些b组成,导致x(y ^ 2)z输入语言,因为b的数量超过了c的数量不再受给定的条件n≤i≥2n的约束,因此,我们存在矛盾,因此语言L不是上下文无关的。

1 个答案:

答案 0 :(得分:0)

证明是矛盾的。假设该语言是上下文无关的。然后,通过上下文无关语言的抽取引理,L中的任何字符串都可以写成uvxyz,其中| vxy | 0,并且对于所有自然数k,u(v ^ k)x(y ^ k)z也是该语言。选择a ^ p b ^ p c ^(p + 1)。然后,我们必须能够将此字符串写为uvxyz,以便| vy | >0。可以考虑以下几种可能性:

  1. v和y仅包含a。在这种情况下,在任一方向上泵送都会导致a和b的数目不同,从而产生一个非语言字符串。因此情况并非如此。
  2. v和y仅由a和b组成。在这种情况下,泵送可能会使a和b的数目保持相同,但是泵送最终将导致c的数目小于a和b的数目。因此情况并非如此。
  3. v和y仅由b组成。这种情况类似于上面的(1),因此不是有效选择。
  4. v和y仅包含b和c。与(1)和(3)类似,在抽水过程中,a和b的数目也不同。
  5. v和y仅包含c。抽水最终将导致c的数量超过a数量的两倍。所以也不是这种情况。

无论我们如何选择v和y,泵送都会产生非语言的字符串。这是一个矛盾。这意味着我们关于该语言是无上下文的假设肯定是错误的。