考虑以下语言。
以下哪一项陈述是错误的?
(A) L2 是上下文无关的。
(B) L1 交叉点 L2 是上下文无关的。
(C) L2 的补码是递归的。
(D) L1 的补语是上下文无关的,但不规则。答案: (D)
解释: (D)是假的。
L1 是正则的,所以它的补码也是正则的。
L1 是 0^* 1^* 0^* 形式的正则语言。另一方面,L2 是 CFL,因为它可以从以下 CFG 导出
L2 = { 0^p 1^q 0^r | p,q,r>0 并且 p notEqualTo r }
S -> AC|CA
C -> 0C0|B
A -> 0A|0
B -> 1B|epsilon
如果为 L2 提出 CFG 很困难,可以通过将其简化为更简单的问题来直观地看出这一点。 L2 非常类似于已知的 CFL L3 = { a^mb^l | m notEqualTo n }
(A) L2 是上下文无关的,这是真的 [正确]
(B) L1 交集 L2 是上下文无关的,这又是正确的,因为 L1 是常规语言,而 L2 是 CFL。 RL 联盟 CFL 始终是 CFL。因此[正确]
(C) L2 的补语是递归的,这是正确的,因为 CFL 的补语肯定是 CSL(上下文敏感语言),而后者 (CSL) 是递归语言的子集。因此[正确]
(D) L1 的补语是上下文无关的但不是正则的,由于正则语言的闭包定律,这是错误的。 RL 的补码始终是 RL。因此[不正确]
此解决方案由Vineet Purswani 提供。
这个问题的测验