判定语言L是否正则,寻求泵引理证明方法帮助
这个语言不是正则语言,用泵引理证明如下
嘿,我太懂你看了一堆泵引理示例还是卡壳的感觉——咱们一步步拆解这个问题,用泵引理实锤它不是正则语言。
首先先明确泵引理的核心逻辑:如果一个语言是正则的,那么必然存在一个泵长度p,所有长度≥p的字符串s都能拆分成x y z三个部分,满足:
|xy| ≤ p(前两部分总长度不超过泵长度)|y| ≥ 1(中间的y不能是空串)- 对任意k≥0,
xy^kz都属于这个语言
第一步:构造关键字符串
咱们从L里选一个长度足够长的字符串,比如s = a^p b^p c^p d^p——这个字符串明显属于L的第一个子集{a^n b^n c^m d^m}(这里n=m=p≥1)。
第二步:按照泵引理拆分字符串
根据泵引理的要求,|xy| ≤ p,而s的前p个字符全是a,所以x和y只能由a组成:
- 设
x = a^i(i≥0) y = a^j(j≥1,因为|y|≥1)z = a^(p-i-j) b^p c^p d^p
第三步:泵出一个不在L里的字符串
现在咱们取k=2,得到新字符串s' = xy^2z = a^(i+2j) b^p c^p d^p。现在来验证s'是否属于L:
- 先看L的第一个子集:要求
a的数量 = b的数量,但这里a的数量是i+2j,而i+j ≤ p(因为|xy|=i+j ≤p),所以i+2j = (i+j)+j > p(j≥1),而b的数量是p,显然不相等,不符合第一个子集的条件。 - 再看L的第二个子集
{a^n b^m c^m d^n}:要求a的数量 = d的数量,同时b的数量 = c的数量。这里b和c的数量都是p,满足后者,但a的数量是i+2j > p,而d的数量是p,两者不相等,也不符合第二个子集的条件。
这就意味着s'不在L里,直接违反了泵引理的要求——所以L不可能是正则语言。
内容的提问来源于stack exchange,提问作者John Nick
相关产品推荐
相关产品推荐

