【问题标题】: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。有五种情况需要考虑:

  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 并满足抽水引理的要求。这是一个矛盾,所以语言不可能是规则的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2011-07-20
    • 1970-01-01
    • 2015-10-17
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多