如何证明 L = {a^j b^k c^k d^k: j, k ≥ 1} ∪ {b^j c^k d^l : j, k, l ≥ 0} 满足 CFL 的泵引理?

问题描述

我必须证明 L 满足 CFL 的抽水引理。语言 L 不是上下文无关的,但满足上下文无关语言的泵引理。令 L 为: L = {a^j b^k c^k d^k: j,k ≥ 1} ∪ {b^j c^k d^l : j,k,l ≥ 0}

我之前曾尝试通过抽取引理来做证明,但我总是搞砸了。我希望有人可以向我解释如何解决这个问题。我很挣扎。

解决方法

为了证明这一点,我们必须证明对于 L 中的任何字符串满足泵引理假设,结论成立:也就是说,对于 L 中的任何字符串 w,其中 |w| >= p,w 可以重写为 uvxyz 使得 |vxy| 0 并且对于所有 n >= 0,u(v^n)x(y^n)z 也在 L 中。

设 w 是 L 中长度至少为 p 的任意字符串。w 要么以某个 a 开头,要么不以 a 开头。分别考虑这些情况。

  1. 如果 w 以某个 a 开头,则让 vxy 只是 a 的某个子串。抽取 a 的数量必须将字符串保留在语言中,因为 a 的数量是任意的,而且我们不会更改 b、c 或 d 的数量,如果我们的字符串最初包含 a,那么这些数量一定是相同的。

  2. 如果 w 不以任何 a 开头,则让 vxy 是单一字符的任何子串。抽取该字符的数量并不重要,因为如果我们的原始字符串中没有 a,那么 b、c 和 d 的数量无论如何都无关紧要。因为我们只是抽取一个符号,所以将保持顺序并且字符串保留在语言中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...