用上下文自由语言抽取引理

时间:2010-11-10 21:41:07

标签: math context-free-grammar pumping-lemma

我的语言为{a^i b^j c^k | i,j,k>=0 & i>j & j>k} 我首先假设为我挑选了一些m,这样就是一个字符串

   z = a^m b^(m-1) c^(m-2)

然后将字符串拆分为(z =) uvwxy,以便vx不为空且#(vwx)<=m 然后,当我选择“i”时,我感到困惑。说我选择i=1然后我有: uv^1wx^1y我并不完全确定从哪里开始,因为对我来说看起来如此 就像我可以选择一种语言中的vwx。

有什么建议吗?

3 个答案:

答案 0 :(得分:7)

我首先选择稍好的z = a ^(m + 2)b ^(m + 1)c ^(m),其中m是泵送长度。该字符串显然在语言中,其长度大于或等于m。因此,假设语言是CFL,则泵浦引理适用于它。现在,因为你知道| vwx | &lt; = m和那| vx | &GT; 0,你也知道vwx必须包括(1)只有a,(2)a和a b,(3)只有b,(4)某些b和某些c,或者(5)只有c。

单独处理每个案例。我会为你做前两个案例。

案例1:这意味着vx是某些s的^(s)&gt; 0,因为引理告诉我们| vx | &GT;现在假设你取i = 0.然后引理告诉我们z'= uv ^(0)wx ^(0)y应该仍然属于该语言。然而,z'的形式为a ^(m + 2-s)b ^(m + 1)c ^(m),并且因为s> 0,违反了a的数量必须严格大于b的数量的条件。因此,z'不在语言中,并且这种情况无法推动。

情况2:这意味着对于某些s,t,vx是^(s)b ^(t),使得s + t> 1。再次假设你取i = 0.那么z'的形式为a ^(m + 2-s)b ^(m + 1-t)c ^(m)。如果t为正,则违反b的数量严格大于c的数量的条件。如果t为零,则s必须为正数,在这种情况下,我们退化为情况1.因此z'不在语言中,并且这种情况无法抽取。

对于处理其他情况,请记住,您可以为每个情况选择不同的抽水指数。

编辑(根据过去对这个问题的讨论,我决定展示其他三个案例。)

情况3:这意味着对于某些s> vx,vx是b ^(s)。 0.取i = 0.然后z'的形式为a ^(m + 2)b ^(m + 1-s)c ^(m)。由于s是正的,这违反了b的数量严格大于c的数量的条件。所以z'不在语言中,这种情况不能用。 (你也可以把我当作除1以外的任何东西来表示这种情况无法抽出。)

情况4:这意味着对于某些s,t,vx是b ^(s)c ^(t),使得s + t> 1。取i = 2.然后z'的形式为a ^(m + 2)b ^(m + 1 + s)c ^(m + t)。如果s非零,则违反a的数量严格大于b的数量的条件。如果s为零,那么t必须是非零的,在这种情况下,违反了b的数量严格大于c的数量的条件。所以z'不在语言中,这种情况也无法推动。

情况5:这意味着对于某些s> vx,vx是c ^(s)。 0.取i = 2.然后z'的形式为a ^(m + 2)b ^(m + 1)c ^(m + s)。由于s是正的,因此违反了b的数量严格大于c的数量的条件。所以z'不在语言中,这种情况无法抽出。

由于所有五种情况都无法抽吸,因此抽水引理告诉我们这种语言不是无背景的。

答案 1 :(得分:2)

注意:在评论中经过一些反复,我看到我错了 而威廉的回答其实是正确的。我会在这里留下这个答案,所以我可以 指出我的推理失败的地方。

我会这样想:

必须有什么属性子串v,w,x才能保留剩余的机会 抽水后的语言定义? v和x都不能包含子串 比如“ab”或“bc”,否则他们会立即抽出输入语言。所以 v和x中的每一个必须是空的,全部是a,所有b或者所有c。

考虑字符串aaabbc,它是语言。

如果我们选择u =“aa”,v =“a”,w = epsilon,x =“b”,y =“bc”,会发生什么?和 泵v和x? (这是我的错误:我没有考虑n = 0的情况,其中v和x是 实际上从字符串中删除;无论你如何选择uvwxy,证明都会 当uvwxy被泵送到uv n wx n y时,n = 0或n> 1的情况都会失败。

注意:CFL抽取引理可用于证明语言不是无上下文的, 但是,遵循泵浦引理本身 足以显示一种语言 无上下文。有些语言不是CF,而是所有条件 CFL泵浦引理仍然存在。对于这种情况,您可能希望看一下Ogden's lemma 更强大的测试,看看是否可以用来表明你的语言不是CF。

答案 2 :(得分:0)

泵浦引理说如果一种语言没有上下文,那么它就会“抽”。也就是说,如果没有上下文,那么:

有一些最小长度为p,因此任何长度为p或更长的字符串都可以重写 s = uvxyz,其中u和y项可以重复任意次数(包括零)。

一个典型的用法是证明语言不会抽出,以证明它不是无上下文的。从你的工作看起来这就是你想要做的事情。

但是泵浦引理的反面是错误的:有些语言可以提供但不具备上下文。事实上,你的语言就是这样的野兽。换句话说,你的语言不是没有上下文的,但它确实有用。 (证明这一点的最简单方法是拆分s,使得v =“a”和y =“b”。)因此,在分析这种语言时,泵浦引理不太可能对你有用。您可能希望考虑使用Ogden's lemma