正则文法的泵引理

定理

设 L 为正则语言。则存在一个常数 'c',使得对于 L 中的每个字符串 w

|w| ≥ c

我们可以将 w 拆分为三个字符串,w = xyz,使得 −

  • |y| > 0
  • |xy| ≤ c
  • 对于所有 k ≥ 0,字符串 xykz 也在 L 中。

泵引理的应用

泵引理用于证明某些语言不是规则的。它永远不应该被用来证明一种语言是正则的。

  • 如果 L 是正则的,它就满足 Pumping 引理。

  • 如果 L 不满足 Pumping 引理,它就是非正则的。

证明语言 L 不是正则的方法

  • 首先,我们必须假设 L 是正则的。

  • 因此,Pumping 引理应该对 L 成立。

  • 使用 Pumping 引理得到矛盾 −

    • 选择 w 使得 |w| ≥ c

    • 选择 y 使得 |y| ≥ 1

    • 选择 x 使得 |xy| ≤ c

    • 将剩余的字符串分配给 z。

    • 选择 k 使得结果字符串不在 L 中。

因此 L 不是正则的。

问题

证明 L = {aibi | i ≥ 0 不是正则的。

解决方案

  • 首先,我们假设 L 是正则的,n 是状态数。

  • 设 w = anbn。因此 |w| = 2n ≥ n。

  • 通过引理,设 w = xyz,其中 |xy| ≤ n。

  • 设 x = ap,y = aq,z = arbn,其中 p + q + r = n,p ≠ 0,q ≠ 0,r ≠ 0。因此 |y| ≠ 0。

  • 设 k = 2。则 xy2z = apa2qarbn

  • as 的数量 = (p + 2q + r) = (p + q + r) + q = n + q

  • 因此,xy2z = an+q bn。由于 q ≠ 0,xy2z 不属于 anbn 形式。

  • 因此,xy2z 不属于 L。因此 L 不是正则的。