我的问题是:
设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,则不能抽取此字符串,因此语言不应该是无上下文的。
我哪里错了?
答案 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将始终有效。