上下文无关语言的闭包属性

时间:2010-05-09 05:17:16

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

我有以下问题:

  

语言L1 = {a ^ n * b ^ n:n> = 0}且L2 = {b ^ n * a ^ n:n> = 0}是   上下文无关语言,因此它们在L1L2下关闭,所以L = {a ^ n *   b ^ 2n A ^ n:n> = 0}也必须是无上下文的,因为它是由a生成的   关闭财产。

我必须证明这是否属实。 所以我检查了L语言,我不认为它是无上下文的,然后我也看到L2只是L1反转。

我是否必须检查L1,L2是否具有确定性?

2 个答案:

答案 0 :(得分:4)

L1 = {a n b n :n> = 0}且L2 = {b n a n :n> = 0}都是 没有上下文。

由于在串联下关闭了无上下文语言,因此L3 = L1L2也是无上下文的。

然而,L3与L4 = {a n b 2n a n :n> = 0}的语言不同。 字符串abbbaa在L3中,但不在L4中。

L4是否也没有上下文?如果是这样,它必须遵守pumping lemma for context-free languages

设p为L4的泵送长度。选择s = a p b 2p a p 。 然后s在L4中,| s | >页。因此,如果L4是无上下文的,我们可以编写s 作为uvxyz,使用| vxy | < = p,| vy | > = 1,并且uv n xy n z在L4中 任何n> = 0。

观察L4中任何非空字符串的以下属性:a的计数等于b的计数。子串“ab”恰好出现一次,恰好是一次 子串'ba'的出现。 a的初始字符串的长度等于a的最终字符串的长度。

我们可以使用这些观察来约束我们在L4的抽水论证中对v和y的可能选择。 v和y都不能包含子串“ab”,因为当v和y被抽取任意次数时,输出字符串将包含多次出现的'ab',因此不能是L4的元素。相同的参数适用于子串'ba'。

所以v必须是空的,全部的,或全部的。这同样适用于y。

此外,如果v都是a,那么y必须由相同数量的b组成;否则,泵浦的字符串将包含不等数量的a和b,因为v和y被泵送 同样的同样,如果v都是b,那么y必须与a的数量相同。

但是如果v都是a,并且y都是b,则a的最后一个字符串不受v和y的影响,因此a的前导字符串将不再匹配a的尾随字符串。 类似地,如果v是全部b并且y都是a,则a的前导和尾随字符串将再次具有不同的长度,因为v和y被抽取。

v和y不能都是空的,因为这会违反条件| vy | > = 1表示 CFL泵浦引理。但是因为我们已经建立了| v | = | y |,接下来 v和y都不是空的。

但是如果v不能为空,不能全是一个,不能全是b的,也不能包含 子串'ab'或'ba',那么就没有可能选择的uvxyz 泵送版本的s仍在L4中。因此L4不是无上下文的。

答案 1 :(得分:0)

我不确定它是什么 - 请注意,在L1L2的每一个定义中,n都在该定义范围内,即它们是两个不同的变量。当你将它们组合起来时,你应该重命名一个,然后改为:

L = {a^n * b^n b^m * a^m : n,m>=0}

这是一种与L非常不同的语言,但它显然是一种无上下文的语言。