语言的上下文无关语法L = a ^(2 ^ k)

时间:2015-09-13 18:21:07

标签: context-free-grammar computation-theory

作为计算理论练习的一部分,我被要求找到语言L = a ^(2 ^ k)的无上下文语言。

我是如何处理它的:我想使用 X 句子,递归地将所有其他句子产生的a加倍。这将导致我只使用像a,a ^ 2,a ^ 4,a ^ 8这样的字符串,这是我正在寻找的语法。

但这样的事情可能吗?我怎样才能做到这一点?

S -> aS | X | ε
Χ -> (doubles all previous a's)

还存在将a字符串加倍的问题,这会产生a ^(2 ^ k)条件不接受的a个数,例如^ 3 ,a ^ 5,a ^ 6都落在一个^(2 ^ k)的进展间隙“中间”。

1 个答案:

答案 0 :(得分:2)

考虑您的语言中的字符串a^(2^p),其中p是无上下文语言的抽象引理中的常量。我们可以将此字符串写为uvxyz,以便:

  • |vy| >= 1
  • |vxy| <= p

然后我们知道如果语言没有上下文,那么u v^n x y^n z形式的所有字符串都应该是n >= 0的语言。我们致电a = |uxz|b = |vy|。然后我们必须使用长度为a, a + b, a + 2b, ...的语言的字符串。假设a = 2^k是2的幂,而a + b也是2的幂。然后b = 2^m - 2^ka + 2b = 2^(m+1) - 2^k = 2^j也是2的幂。将其重写为{{1 }}。除以2^(m+1) = 2^k + 2^jk中的较小者,得到j。可以满足此等式的唯一方法是2^r = 2^s + 1,即s = 0,否则RHS是奇数,而LHS必须是偶数。但是后来k = jm = k。但是,b = 0必须大于0,因为泵浦引理。

那个丑陋的男人,但你明白了。