请求协助用交集法证明语言L = a^nb^{n²+n}; n ≥ 0非正则
嗨,我明白你想用交集法证明这个语言非正则的思路——毕竟直接用泵引理有时候会让人觉得绕,不过我还是先帮你梳理交集法的可能方向,再补充直接证明的方法作为备选。
首先说交集法的思路:你之前用交集法处理L₃=aⁿbⁿ²时,应该是混淆了同态和交集的概念(因为L₃∩b*其实只有空串,没法得到bⁿ²),不过没关系,我们回到你的核心需求:找一个正则语言L₁,使得L∩L₁是已知的非正则语言。
观察L的结构:b的个数是n²+n =n(n+1),也就是连续整数n和n+1的乘积。我们需要构造一个正则语言,把L中的字符串筛选出一部分,变成我们熟悉的非正则语言。但这里有个难点:正则语言没有记忆能力,没法直接识别“b的数量减去a的数量是平方数”这类关联关系,所以很难直接构造出能和L交集后得到已知非正则语言的正则L₁。
不过换个间接的交集思路,我们可以借助带标记的辅助语言:
- 构造辅助语言L'={aⁿ#bⁿ²⁺ⁿ |n≥0}(用#作为分隔符)
- 取正则语言L₁=a*#b*(匹配所有a开头、#分隔、b结尾的字符串)
- 显然L'∩L₁=L',而如果L是正则的,那么L'也应该是正则的(正则语言加上固定分隔符后仍正则)
接着我们用同态h(a)=ε,h(#)=ε,h(b)=b,得到h(L')=bⁿ⁽ⁿ⁺¹⁾。这个语言是非正则的——因为它的长度集合{n(n+1)}不是最终周期的,而正则语言的长度集合必须满足最终周期性。如果L'是正则的,那么h(L')也应该是正则的,矛盾,所以L'非正则,从而L非正则。这算是间接用到了交集法,虽然和你想要的直接交集有点区别,但也符合“正则交集后推导非正则”的核心逻辑。
如果觉得间接法不够直接,其实这个语言用泵引理证明非常简单,我给你演示一下:
假设L是正则语言,根据泵引理,存在一个泵长度p。取字符串w=aᵖbᵖ²⁺ᵖ,这个字符串属于L(对应n=p)。根据泵引理,w可以拆分为xyz,满足:
- |xy| ≤p
- |y| ≥1
- 对任意i≥0,xyⁱz ∈L
因为|xy|≤p,所以y只能由a组成,设y=aᵏ,其中1≤k≤p。那么xyⁱz =aᵖ⁺⁽ⁱ⁻¹⁾ᵏbᵖ²⁺ᵖ。要这个字符串属于L,必须满足:
(p + (i-1)k)² + (p + (i-1)k) = p² +p
展开左边并化简后会得到:
2p(i-1)k + (i-1)²k² + (i-1)k =0
因为k≥1,当i≥2时,左边所有项都是正数,不可能等于0,矛盾。所以L不是正则语言。
备注:内容来源于stack exchange,提问作者Papa

