用法
泵定理(pumping lemma):判断一个语言不是正则语言,通常使用反证法(泵引理是RL语言的必要条件)
原理
设L 是一个RL,则存在仅依赖于L的正整数P
对于∀w∈L, 如果|w|≥P,则存在x,y,z∈Σ∗ 满足w=xyz,同时有:
(1) |xy|≤P
(2) |y|≥1
(3) ∀i∈N0,xyiz∈L
上叙是自然语言,用正式表达式 (formal expression)
如下
(∀L⊆Σ∗)(regular(L)⇒((∃P≥1)((∀w∈L)((|w|≥P)⇒((∃x,y,z∈Σ∗)(w=xyz∧(|xy|≤P∧|y|≥1∧(∀i∈N0)(xyiz∈L))))))))
图形结合
所以对于y这个字符串来说,无论中间重复多少遍,都是会回到红色的状态中
其中P可以取值 = 最小DFA状态数
证明
试证明上下文无关文法L={0n1n|n≥1}不是RL
反证法:设L={0n1n|n≥1}是RL,则L满足泵引理. 不妨设 P是仅依赖于 L的正整数
取语句w=0P1P,由L的定义可知 w∈L.
此时|w|=2P≥P,由定理结论
(1) |xy|≤P
(2) |y|≥1
可知 x、y一定是形如 x=0g(g≥1),y=0h(h≥1)
那么倒推出 z=0P−g−h1P
取定理结论(3)中变量i=2,则xy2z=0g(0h)20P−g−h1P=0P+h1P∉L,不满足定理结论(3),得出矛盾
假设不成立,得证
实际上,正则语言不具有计数性.
例如编译原理中,利用正则表达式(DFA、NFA)做完词法分析,需要引入更强的语法 上下文无关文法 去做语法分析