作为计算理论练习的一部分,我被要求找到语言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)的进展间隙“中间”。
答案 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^k
和a + 2b = 2^(m+1) - 2^k = 2^j
也是2的幂。将其重写为{{1 }}。除以2^(m+1) = 2^k + 2^j
和k
中的较小者,得到j
。可以满足此等式的唯一方法是2^r = 2^s + 1
,即s = 0
,否则RHS是奇数,而LHS必须是偶数。但是后来k = j
和m = k
。但是,b = 0
必须大于0,因为泵浦引理。
那个丑陋的男人,但你明白了。