CFL的泵浦引理

时间:2009-08-22 19:37:42

标签: computer-science context-free-grammar pumping-lemma

我的问题是:

设L = {x in {a,b} * | x具有相同数量的a和b}}

我知道这是一种无上下文的语言,因为我可以为它创建一个语法(e是epsilon):

S -> aX | bY | e

X -> bS | aXX

Y -> aS | bYY

通过使用与常规语言相交的无上下文语言无上下文这一事实,您还可以证明它是无上下文的。

由于它是无上下文的语言,根据CFL的泵浦引理,任何长度超过泵送长度p的字符串都应该能够被泵送。但是,如果我选择字符串s = a ^ p b ^ p a ^ p b ^ p,则不能抽取此字符串,因此语言不应该是无上下文的。

我哪里错了?

2 个答案:

答案 0 :(得分:4)

确定可以抽出绳子。让u = a^p b^(p-1), v = b, x = e, y = a, z=a^(p-1) b^p。现在uvxyz = s和任何i u v^i x y^i z都有相同数量的as和bs。

答案 1 :(得分:1)

设u = a ^ p,v = b ^(p-1),x = ba,y = a ^(p-1),z = b ^ p,因此你的字符串s = uvxyz。

然后任何形式的字符串u v ^ i x y ^ i z都在语言中,因此满足CFL泵浦引理的条件。

对于你的例子,抽水长度不是“p”......也许这就是你感到困惑的地方?

编辑: sepp2k正确地指出我选择的vxy违反了| vxy | < = p,语言的抽水长度。他的解v = b,x = e,y = a是正确的。对于这种语言,任何长度为2或更大的字符串都将填充 - “ab”或“ba”必须出现在某处,因此vy = ab或vy = ba将始终有效。