我有以下问题:
语言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是否具有确定性?
答案 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)
我不确定它是什么 - 请注意,在L1
和L2
的每一个定义中,n
都在该定义范围内,即它们是两个不同的变量。当你将它们组合起来时,你应该重命名一个,然后改为:
L = {a^n * b^n b^m * a^m : n,m>=0}
这是一种与L
非常不同的语言,但它显然是一种无上下文的语言。