使用泵引理证明语言非正则时的证明有效性疑问
为什么用字符串012证明A={0ⁿ1ⁿ2ⁿ | n≥0}非正则不被接受?
正则语言的泵引理有个关键前提你没注意到:它只对长度≥泵长度P的字符串生效。
泵引理的核心规则
若语言L是正则的,那么存在一个固定的泵长度P,满足:
所有长度≥P的字符串s∈L,都能拆分成s=xyz的形式,同时满足:
- |xy| ≤ P
- |y| ≥ 1(y不能为空)
- 对任意k≥0,xyᵏz 都属于L
你的证明问题所在
你选的字符串012长度为3,而如果假设A是正则的,它的泵长度P完全可以大于3(比如P=4)。这时候012是长度小于P的字符串,泵引理根本不对这类字符串做任何约束——哪怕它无法被泵分,也不违反泵引理的结论,自然无法推翻“A是正则的”这个假设。
正确的证明思路
要证明A非正则,你需要选取长度≥P的字符串来推导矛盾,比如取s=0^P 1^P 2^P:
- 根据泵引理的
|xy| ≤ P,xy必然全由0组成,且y至少包含一个0; - 当泵出k=2时,得到字符串
xy²z=0^(P+|y|)1^P2^P,此时0的数量明显多于1和2的数量,不在A中; - 这与泵引理的第三条规则矛盾,因此A不可能是正则语言。
内容的提问来源于stack exchange,提问作者Mr Bones
相关产品推荐
相关产品推荐

