【问题标题】:Is the given language a valid CFG?给定的语言是有效的 CFG 吗?
【发布时间】:2020-07-28 14:25:45
【问题描述】:
语言,L = { a^n b^n a^n ; n=1,2,3,.. }
我想检查给定的语言 L 是否是上下文无关的。
CFG 使用使用堆栈的 PDA。因此,首先将每个“a”存储到堆栈中。然后每次弹出两次
“b”的出现。这个逻辑对吗?
【问题讨论】:
标签:
context-free-grammar
computation-theory
pushdown-automaton
context-free-language
automata-theory
【解决方案1】:
使用上下文无关语言的泵引理可以证明这种语言不是上下文无关的。证明是矛盾的。假设语言是上下文无关的。那么语言中长度至少为 p 的单词可以用 |vxy| 写成 uvxyz 0,其中 u(v^n)x(y^n)z 在语言中适用于所有整数 n。选择语言中的字符串 a^p b^p a^p。有五种情况需要考虑:
-
vxy 仅包含第一部分中的 a。向上或向下抽气打破了第一部分中 a 的数量等于第二部分中 b 的数量的要求。
-
vxy 仅由前两部分中的 a 和 b 组成。抽水可能会保持第一部分中a的数量与第二部分中b的数量相等的要求,但它肯定会打破第一部分和第三部分中a的数量相同的要求。
-
vxy 仅包含第二部分中的 b。泵送失败的原因与案例 1 相同。
-
vxy 由第二部分和第三部分中的 a 和 b 组成。泵送失败的原因与第二种情况类似。
-
vxy 仅包含来自第三部分的 a。泵送失败的原因与第一种情况类似。
所以,没有办法重写我们的字符串 a^n b^n a^n 以便它可以写成 uvxyz 并满足抽水引理的要求。这是一个矛盾,所以语言不可能是规则的。