这种上下文自由语言的上下文无关语法

时间:2011-12-08 19:45:21

标签: context-free-grammar

以下语言的无上下文语法?

L={a^m b^n a^k|Maximum(m,n) => k}  Σ={a,b}

1 个答案:

答案 0 :(得分:1)

实际上,该语言不是无上下文的,因此无法用CFG表示。我们可以通过使用用于无上下文语言的泵浦引理来看到这一点。

设G是乔姆斯基语法,使得L(G)= L.设j(通常称为 k )= 2 ^(n + 1)其中 n = G中的非终端数量。让z = uvwxy | vwx | &lt; = j, | vx | < / em>&gt; 0,并且通过泵浦引理,对于所有i> = 0,s_i = u(v ^ i)w(x ^ i)y 在L中。让z = a ^ jb ^ j + 1 a ^ j + 1 。有几种情况可以选择产生矛盾的v和x。记住我们的语言是{a ^ m b ^ n a ^ k | k = max(m,n)}。

案例1 v x 都是*:我们选择字符串为^ jb ^ j + 1 a ^ j + 1,所以如果v和x分别来自第一个和第二个a,那么抽取a将导致字符串a ^ j + ib ^ j + 1 a ^ j + 1 + i,a ^ j + 2i b ^ j + 1 a ^ j + 1如果v和x都在第一个a中,或者^ jb ^ j + 1 a ^ j + 1 + 2i如果它们都来自第二个。很明显,所有这些都是矛盾的,因为 k 不等于大i的max(m,n)。

案例2 v x 都是b *的形式:我们只是抽出b,这意味着我们会得到a ^ jb ^ j + 1 + 2i a ^ j + 1,不接受 j + 1 != j + 1 + 2i。

案例3 v 的格式为*且 x 的格式为b *:由于 v 是在 x 之前, v 表示第一部分中的一些数字。但是既然我们正在加速a和b,我们将得到^ j + ib ^ j + 1 + ia ^ j + 1,所以k!= max(m,n)我们有矛盾。< / p>

案例4 v 的格式为b *,而 x 的格式为*:这不会像我们一样提供矛盾以与a ^ k相同的速率重新抽取最大值(b ^ n)。

案例5 v 包含 a b :如果我们将其抽出,我们将得到我们的a ^ m和b ^ n之间的子串abab..ab或者b ^ n和a ^ k之间的子串baba..ba,这是不被接受的。

案例6 x 包含 a b :与案例6类似。< / p>

用CFL的泵浦引理证明不规则是非常繁琐的,但我希望这有帮助!