给定的语言是有效的 CFG 吗?

Is the given language a valid CFG?

语言,L = { a^n b^n a^n ; n=1,2,3,..}

我想检查给定的语言 L 是否是上下文无关的。

CFG 利用使用堆栈的PDA。因此,首先将每个 'a' 存储到堆栈中。然后每次弹出两次 'b' 的出现。这个逻辑对吗?

可以使用上下文无关语言的泵引理证明该语言不是上下文无关的。证明是反证法。假设语言是上下文无关的。那么语言中长度至少为 p 的词可以写成 uvxyz 和 |vxy| <= p, |维| > 0 并且其中 u(v^n)x(y^n)z 在所有整数 n 的语言中。选择语言中的字符串 a^p b^p a^p。有五种情况需要考虑:

  1. vxy 仅由第一部分的 a 组成。向上或向下抽水打破了第一部分中 a 的数量等于第二部分中 b 的数量的要求。

  2. vxy 仅由前两部分的 a 和 b 组成。泵送可能会保持第一部分中 a 的数量等于第二部分中 b 的数量的要求,但它肯定会打破第一部分和第三部分中 a 的数量相同的要求。

  3. vxy 仅由第二部分的 b 组成。泵送失败的原因与案例 1 相同。

  4. vxy 由第二部分和第三部分的 a 和 b 组成。泵送失败的原因与第二种情况类似。

  5. vxy 仅由第三部分的 a 组成。泵送失败的原因与第一种情况类似。

因此,无法重写我们的字符串 a^n b^n a^n 使其可以写成 uvxyz 并满足泵引理的要求。这是一个矛盾,所以语言不可能是正则的。