如何证明一种语言不是正常语言?


75

我们了解了常规语言。它的特征在于正则表达式,有限自动机和左线性语法中的任何一种,因此很容易证明给定语言是正则的。REG

但是,如何显示相反的内容?我的助教坚持要做到这一点,我们必须为所有正则表达式(或所有有限自动机,或所有左线性语法)表明它们无法描述当前的语言。这似乎是一项艰巨的任务!

我读过一些抽奖式引理,但看起来确实很复杂。

这旨在成为收集常规证明方法和应用示例的参考问题。有关上下文无关语言的相同问题,请参见此处

Answers:


60

矛盾证明通常用于表明一种语言不是常规语言:让为所有常规语言提供true的属性,如果您的特定语言未验证,则它不是常规语言。可以使用以下属性:PPP

  1. 正如戴夫(Dave)的回答所证明的那样:
  2. 封闭性质常规语言的(设置操作,串联,Kleene星,镜像,同态);
  3. 常规语言具有数量有限的前缀对等类Myhill-Nerode定理

为了使用闭包属性证明语言不是规则语言,该技术是通过保留规则性的操作将与规则语言结合起来,以获得已知的非规则语言,例如原型语言。例如,让。假设是正规的,因为正规语言在补码下是封闭的,所以的补码。现在采取的交集和这是规律的,我们得到这是不正规。L I = { a n b n | Ñ Ñ } 大号= { 一个p b q | p q } 大号大号大号Ç 大号Ç 一个b LLI={anbn|nN}L={apbq|pq}LLLcLcabI

Myhill-Nerode定理可以用来证明不是正规的。对于,。所有类都是不同的,并且此类的数量无穷。由于常规语言必须具有有限数量的类,不是常规的。p 0 / 一个p = { - [R b [R b p | ř Ñ } = { b p } Ip0I/ap={arbrbp|rN}=I.{bp}I


3
不知道Myhill-Nerode定理,太酷了!
丹尼尔,2012年

维基百科也有一个关于单词在常规语言的号段:如果你能证明你的语言不匹配的特征,那么你的语言不是正规:en.wikipedia.org/wiki/...
亚历克斯·10布林克

@Daniil,在我看来,正则表达式无法计数,这是Myhill-Nerode定理的一种流行非正式形式。
AProgrammer 2012年

@AlextenBrink:很好。我猜语句中的常数是自动机的拉普拉斯算子的特征值吗?这将为此处的答案提供很好的补充。
路易

@Louis:实际上,我们根本没有找到该定理的参考,因此,如果您对此有更多了解...另请参见:cs.stackexchange.com/questions/1045/…–
Alex 10 Brink

37

根据Dave的回答,这是使用抽水引理的分步“手册”。

回忆抽水的引理(取自戴维的答案,摘自维基百科):

L为常规语言。然后存在一个整数n1(仅取决于L使得)每串wL长度至少的nn被称为“泵送长度”)可被写为w=xyz(即,w罐分为三个子字符串),满足以下条件:

  1. |y|1
  2. |xy|n
  3. 一个“抽” w仍然在L:对于所有i0xyizL

假设您被赋予某种语言L并且您想通过抽水引理证明它不是正常的。证明如下所示:

  1. 假设L 规则的。
  2. 如果它是规则的,则抽引引理说存在一个数n,即泵送长度。
  3. 选择一个特定的wL长度大于的n。困难的部分是知道要选哪个词。
  4. 考虑所有分区的方式w成3个部分,w=xyz,用|xy|ny非空。对于每一个的这些方式,表明它不能被泵送:总是存在一些i0,使得xyizL
  5. 结论:w不能与抽运引理矛盾地“抽出”(无论我们如何将其分解为xyz),即我们的假设(步骤1)是错误的:L不规则。

在进行示例之前,让我重申步骤3和步骤4(这是大多数人出错的地方)。在步骤3中,您需要选择L一个特定单词。明确写下来,例如“ 00001111”或“ anbn ”。特定单词的示例:“ w ”或“前缀为000的单词”。

另一方面,在步骤4中,您需要考虑多个情况。例如,如果w=000111,仅说x=00,y=01,z=00并不足以成立矛盾。您还必须检查x=0,y=0,z=0111x=ϵ,y=000,z=111,以及所有其他可能的选项。


现在让我们按照步骤操作,证明L={0k12kk>0}是不规则的。

  1. 假设L是规则的。
  2. n为由抽运引理给出的抽运长度。
  3. w=0n12n
    (根据需要进行合理性检查:|w|>n。为什么要使用这个词?换句话说,其他词也可以工作..需要一些经验才能得出正确的w)。再次注意,w是一个特定的词:0000n times11112n times
  4. 现在开始考虑用|w分成xyz的各种情况|xy|n|y|>0。由于|xy|<n无论我们如何拆分wx将只包含0的,因此将y。假设|x|=s|y|=k。我们需要考虑所有可能的选择s,k使得s0,k1s+knFOR THISL所有这些情况的证明是相同的,但在总体上可能会有所不同。
    i=0并考虑xyiz=xz。这个词不在L因为它的形式为0nk12n(无论s k什么k是),并且由于k1,这个字是不是在L和我们达到一个矛盾。
  5. 因此,我们的假设是错误的,并且L不是规则的。

可以在此处找到解释如何沿相同方向使用抽引引理的youtube剪辑


1
在这个定义中,n是泵浦长度!
saadtaame 2012年

28

在Wikipedia中,常规语言的抽取语言如下:

为常规语言。然后存在一个整数p 1(仅取决于大号),使得每个字符串瓦特大号长度至少的pp被称为“泵送长度”)可被写为瓦特= X ý Ž(即,瓦特罐分为三个子字符串),满足以下条件:Lp1LwLppw=xyzw

  1. |y|1
  2. |xy|p
  3. 对于所有X ÿ Ž 大号y是可以泵送的子字符串(可删除或重复任意次数,并且结果字符串始终在L中)。 i0xyizL
    yL

(1)表示要泵送的回路y的长度必须至少为一; (2)表示循环必须在前p个字符内发生。x和z没有限制。

简单地说,对于任何正则语言L,任何足够长的字可以分成3个部分。即瓦特= X ÿ Ž,使得所有的弦X ÿ ķ žķ 0 ,可以在大号wLw=xyzxykzk0L

现在让我们考虑一个例子。让L={(01)n2nn0}

为了证明这是不规则的,您需要考虑所有分解样子,因此可以给定x,y和z的所有可能事物是x y z = 01 p 2 p(我们选择查看长度为3 p的特定单词,其中p是泵浦长度)。我们需要考虑字符串的y部分出现的位置。它可以与所述第一部分重叠,并且将因此等于或者01 ķ + 110 w=xyzxyz=(01)p2p3ppy(01)k+1101ķ010ķ,对于一些ķ0(不要忘记, | ÿ |1)。它可能与第二部分重叠,这意味着对于k>0y= 2 k。否则它可能会重叠在单词的两个部分上,其形式为01k + 1 2 l10k(10)k+11(01)k0(10)kk0|y|1y=2kk>0(01)k+12l。, 1 01 ķ 2 0 10 ķ 2 ,对于 ķ 01(10)k+12l1(01)k2l0(10)k2lk0l1

现在,让每个人都陷入矛盾,这将是一个不是您所用语言的单词。例如,如果我们取,则抽运引理说,例如,x y 2 z = x 0 10 k 2 l 0 10 k 2 l z必须在语言,适当选择xz。但是这个词不能用2出现在1之前的语言。y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

其他情况将导致的个数大于2的个数,反之亦然,或者将导致单词不具有01 n 2 n的结构,例如连续两个0(01)2(01)n2n0

别忘了。在这里,缩短证明很有用:上面的许多分解都是不可能的,因为它们会使z部分过长。|xy|pz

上面的每种情况都需要导致这样的矛盾,然后这将是泵激引理的矛盾。瞧!语言不是正常的。


一个例子,其中假设需要将是很好。|xy|p
吉尔斯2012年

@吉尔斯:我什至不知道您添加的句子是什么意思。
戴夫·克拉克

@吉勒斯:我认为所有分解都是可能的,只是将是有界的。我不确定z的长度与它有什么关系。kz
戴夫·克拉克

!我现在看到了。谢谢。但是,它不排除答案中提到的任何分解形式。它仅限制我可以取l的值。kl
Dave Clarke

1
为了回答这样一个简单的问题而进行的大量编辑工作使我感到奇怪,为什么每个人都将泵激引理作为“证明”非规律性的“方式”来教授。出于好奇,为什么不只是将字符串变成类似呢?抽引式引理告诉您y中没有2 s,由此可以更直接地得出矛盾。(01)2p22py2
路易(Louis)

14

对于给定的语言,让LΣ

SL(z)=n0|LΣn|zn

的(普通)生成函数L,即其每单位长度的字计数的序列。

以下语句为[ FlSe09,p52]:

LREGSL rational

即,PQSL(z)=P(z)Q(z)P,Q多项式。

因此,任何语言,它的生成函数是理性的是不正规。不幸的是,所有线性语言也都具有理性的生成功能¹,因此该方法不适用于更简单的非常规语言。另一个缺点是很难获得(并且表明它不合理)。SL

示例:考虑正确嵌套括号词的语言,即Dyck语言。它是由明确的语法生成的

S[S]Sε

可以转化为等式

S(z)=z2S2(z)+1

一种解决方案(具有所有正系数的解决方案)是

S(z)=114z22z2

由于 [ Kuic70 ]且S不合理,因此Dyck语言不规则。SL=SS


  1. 常规语言语句的证明通过语法起作用,并立即转换为线性语法(乘法的可交换性)。

  [FlSe09] P. Flajolet和R. Sedgewick(2009)的分析组合学 [Kuic70] W. Kuich(1970)关于上下文无关语言的熵
  


13

这就是我的答案从这里扩展版本使用泵引理来证明语言是不是经常L={(01)m2mm0},因为这应该是一个参考的问题。

那么,您认为抽奖引理看起来很复杂吗?不用担心 这是一种稍微不同的获取方法,该方法也隐藏在@Romuald的答案中。(测验:在哪里?)

让我们从记住确定性的有限状态自动机(DFA)接受每种常规语言开始。DFA是有限有向图,其中每个顶点对于字母表中的每个字母都具有一个精确的边缘。字符串会基于标记为“开始”的顶点为您提供图形中的遍历,并且DFA会接受该遍历是否以标记为“接受”的顶点结束。(这些顶点称为“状态”,因为不同的数学领域喜欢为同一件事组成自己的术语。)

通过这种思维方式,很容易看到:如果字符串b将DFA驱动到相同的状态,那么对于任何其他字符串ca cb c会将DFA驱动到相同的状态。abcacbc为什么?因为步行的起点和定义步行的字符串完全确定了终点。

稍有不同:如果是规则的,并且字符串ab将识别自动机驱动到相同状态,则对于所有字符串ca cb c都在L中或都不在L中。LabcacbcL

我们可以用它来证明语言不通过想象它,然后想出经常b驱动DFA到相同的状态,并Ç使ç是在语言和b Ç不是。从@Dave的答案中获取示例语言。想象一下它是规则的,因此它可以识别带有m个状态的DFA 。在鸽子洞原理说,至少两个{ 01 0 中号+ 1 }发送DFA到相同的状态,比方说一个= 01abcacbcm{(01)i:0im+1} b = 01 q。由于 p q,我们看到 a 2 p是该语言,而 b 2 p不是该语言,因此该语言不能是规则的。a=(01)pb=(01)qpqa2pb2p

令人高兴的是,该示例实际上是证明语言不规范的模板:

  • 寻找家庭字符串与他们每个人都有一个“尾巴”属性牛逼一个牛逼是在语言和一个牛逼Ĵ,对Ĵ不是。{ai:iN}tiaitiaitjij
  • 逐字应用论点。(这是允许的,因为总是有足够来让您调用“鸽子洞原理”。)ai

还有其他技巧,但是这一技巧可以轻松解决大多数作业问题。

编辑:较早的版本对此概念与Pumping Lemma的关系进行了一些讨论。


我认为,复制抽水引理的证明通常没有用,但YMMV。在任何情况下,理解证明都是好的。它立即与许多闭包以及有限自动机和常规语言的其他有趣属性联系在一起。不过,我非常不同意最后一句话:自动机理论一点也不乏味,它当然也不是理论课中最无聊的部分。
拉斐尔

@Louis在您的答案中,您we see that a2p is in the language and b2p is not, so this language can't be regular.最后如何提出此声明。请您举个例子
Himanshu

@Himanshu b都将您带到相同的状态q 1。因此,无论你(后读2 p这里),将让你同样的状态q 2,不管你是什么开始使用- 一个babq12pq2ab
Al.G.

7

这里跟随答案,我将描述证明基于Kolmogorv复杂非规律性的方法。

“通过Kolmogorov复杂性进行形式语言理论的新方法”中讨论了这种方法。Ming Li和Paul MB Vitanyi(请参阅第3.1节)。

表示的字符串的Kolmogorov复杂X,即图灵机的最短的编码长度中号,使得中号ε = X(任何常用的定义都行)。然后,可以使用以下引理证明非规律性:K(x)xMM(ϵ)=x

KC-规律:让是规则的语言,那么存在一个常数C ^仅取决于大号,使得对于所有X &Element; &Sigma; *,如果ÿÑ 'ħ串(相对于词典式排序)在大号X = { ý &Element; &Sigma; * | X ÿ 大号},然后ķ Ý ø 登录Ñ LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

人们可以理解(并且证明)上述引理如下,对于任何,来描述Ñ 'ħ在串大号X一个需要指定:xΣnthLx

  • 接受L的自动机L
  • 处理前缀x后自动机中的状态x
  • 指数n

由于我们只需要记住处理之后的状态,而不需要记住x本身,因此可以根据L将其隐藏在常数中。索引n需要log n位来描述,我们得到上面的结果(为完整起见,需要添加生成y所需的特定指令,但这只会在最终描述中添加一个常数因子)。xxLnlogny

这个引理说明如何约束它们的成员的所有字符串的柯尔莫哥洛夫复杂对于一些正规语言大号X &Element; &Sigma; *。为了显示非规则性,可以假设L是规则的,并证明边界过于严格(例如,无限组字符串的有限Kolmogrov复杂度)。LxLxΣL

上面链接的答案包含一个示例,说明如何使用此引理显示是不规则的,本文提供了更多示例。为了完整起见,我们在这里显示如何证明L = { 0 n 1 n | Ñ 0 }是不规律的。L={1p|p is prime}L={0n1n|n0}

鉴于一些,我们用ý X 'ħ在字大号X。注意y 0 i 1 = 1 i。使用上述引理,着眼于前缀X的形式的X = 0 和固定Ñ = 1,我们得到0 ķ Ý 0 1x{0,1}yixithLxy10i=1ixx=0in=1。由于 y 0 i 1 = 1 i,这意味着我们可以用一个常数来约束形式为 1 i的所有字符串的Kolmogorov复杂度,这显然是错误的。值得一提的是,我们可以探讨一个 X,如 X = 0 ñ足够大 ň满足 ķ 0 ñ日志ñ(我们先从一个高度复杂的前缀)。由于 y x 1 = 1 n,我们得到i0:K(y10i)cy10i=1i1ixx=0nnK(0n)logny1x=1n,矛盾(假设 n > 2 c)。K(1n)<cn>2c


7

对于一元语言(超过1个字母的语言),有一个简单的标准。让我们固定字母表,以及用于Ñ,定义 大号= { σ ÑÑ } {σ}AN

L(A)={σn:nA}.

定理。让。以下是等效的:AN

  1. 是规则的。L(A)

  2. 是上下文无关的。L(A)

  3. 存在,使得对于所有Ñ Ñ 0,它认为Ñ IFF Ñ + 。(我们说A最终周期性的。)n0,m1nn0nAn+mAA

  4. 。然后0. 一个0 一个1 2 ...是合理的。ai=1iA0.a0a1a2

  5. 生成函数是一个有理函数。iAxi

该定理可以通过多种方式证明,例如,使用抽引引理,Myhill-Nerode理论,Parikh定理,一元语言上的DFA结构(在Pollard的ρ算法中,它们看起来像“ ” ),等等。 。这是有用的推论。ρρ

结果。让,并假设大号是有规律的。ANL(A)

  1. 极限存在。(这是渐近密度。)ρ=limn|A{1,,n}|nA

  2. 如果A是有限的。ρ=0A

  3. 如果然后是cofinite(即,¯ 是有限的)。ρ=1AA¯

作为一个例子,该语言不是正则,由于集已消失渐近密度,但是无限的。L({2n:n0})


4

常规语言的类别在各种闭合操作下被闭合,例如联合,交集,补码,同态,正则替换,逆同态等等。通过简化为已知为非常规语言,可以用来证明给定语言不是常规语言。

作为一个非常简单的例子,假设我们知道,语言{anbn:n0}是没有规律的。然后,我们可以证明语言{w{a,b}:#a(w)=#b(w)}(用同样多的所有单词的语言a S和b S)是不是正规如下:

假设L={w{a,b}:#a(w)=#b(w)}是正则的。然后Lab也将是有规律的。但Lab={anbn:n0},这是已知不是规则的。

L={(0+1)n2(0+1)n:n0}

hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

L={0n10n:n0}

kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

使用Myhill–Nerode理论。

Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

LSx,ySLL

这是应用此标准的简单示例:

L={anbn:n0}

S={an:n0}SLai,ajSijaibiLaibjL

LLLLLL


1

LxyxyL

您需要做的就是证明此类集合的数量不是有限的。

L=anbn:n0x=anbn1yxyLy=bn1nL

xx{y:xyL}


这不仅是Myhill-Nerode吗?
David Richerby
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.