这里一个重要的绊脚石是“能够抽水”并不意味着无上下文,而“不能抽水”表明它不是无上下文的。同样,灰色并不意味着你是一头大象,但作为一头大象确实意味着你是灰色的......
Grammar context free => Pumping Lemma is definitely satisfied
Grammar not context free => Pumping Lemma *may* be satisfied
Pumping Lemma satisfied => Grammar *may* be context free
Pumping Lemma not satisfied => Grammar definitely not context free
# (we can write exactly the same for Ogden's Lemma)
# Here "=>" should be read as implies
也就是说,为了证明一种语言不是上下文无关的,我们必须证明它不能(!)满足这些引理之一。(即使它满足两者,我们也没有证明它是上下文无关的。)
L = { a^i b^j c^k d^l where i = 0 or j = k = l}
下面是一个非上下文无关的草图证明(尽管它满足抽水引理,但不满足奥格登引理):
如果一种语言L
是上下文无关的,那么存在一些整数p ≥ 1
,使得withs
中的任何字符串(其中是泵送长度)都可以写成
带有 substrings ,这样:
1. 、
2.和
3.是每个自然的号。L
|s| ≥ p
p
s = uvxyz
u, v, x, y and z
|vxy| ≤ p
|vy| ≥ 1
u v^n x y^n z
L
n
在我们的示例中:
对于任何s
in L
(with |s|>=p)
:
- 如果
s
包含a
s 则选择v=a, x=epsilon, y=epsilon
(我们与上下文无关的语言没有矛盾) 。
- 如果
s
不包含a
s(w=b^j c^k d^l
和其中之一j
,k
或l
非零,因为|s|>=1
)然后选择v=b
(如果j>0
,v=c
elif k>0
,else v=c
),,x=epsilon
(y=epsilon
我们与上下文无关的语言没有矛盾) 。
(所以不幸的是:使用抽水引理我们无法证明任何事情L
!
注意:以上基本上是您在问题中给出的论点。)
如果一种语言L
是上下文无关的,那么存在一些数字p > 0
(其中p
可能是也可能不是抽水长度),使得对于任何w
长度的字符串,至少p
在L
“标记”p
或更多位置中的所有方式中w
,w
可以是w = uxyzv
用字符串写成
u, x, y, z,
这样v
:
1.xz
至少有一个标记位置,
2.xyz
最多p
有标记位置,
3.u x^n y z^n v
在L
每个n ≥ 0
.
注意:这个标记是奥格登引理的关键部分,它说:“不仅可以“泵送”每个元素,而且可以使用任何p
标记的位置进行泵送”。
在我们的示例中:
令w = a b^p c^p d^p
并标记b
s 的位置(其中有p
,因此w
满足奥格登引理的要求),令u,x,y,z,v
是满足奥格登引理条件的分解 ( z=uxyzv
)。
- 如果
x
orz
包含多个符号,u x^2 y z^2 w
则不在 中L
,因为会有符号顺序错误(考虑(bc)^2 = bcbc
)。
- 要么 要么
x
必须z
包含b
(根据引理条件 1。)
这给我们留下了五个需要检查的情况(对于i,j>0
):
x=epsilon, z=b^i
x=a, z=b^i
x=b^i, z=c^j
x=b^i, z=d^j
x=b^i, z=epsilon
在每种情况下(通过比较b
s、c
s 和d
s 的数量)我们可以看到它u x^2 v y^2 z
不在L
(并且我们与上下文无关的语言存在矛盾(!),也就是说,我们已经证明了L
不是上下文免费)。
.
总而言之,L
它不是上下文无关的,但这不能使用 The Pumping Lemma 来证明(但可以通过 Ogden 的引理),因此我们可以说:
Ogden 引理是上下文无关语言的第二个更强大的引理。