用Layman的术语讲抽动引理是什么?


81

我看到了这个问题,并对什么是抽水引理感到好奇(维基百科没有太大帮助)。

我了解这基本上是理论上的证明,对于某种语言在某类课程中必须是正确的,但是除此之外,我并没有真正理解它。

任何人都想尝试以非数学家/比较科学博士可以理解的方式在相当细粒度的级别上解释它吗?


2
我坚信数学/ TCS没有捷径:“外行术语”不会让您理解。也就是说,我们当然在计算机科学上对此进行了广泛的讨论;看到这里这里这里
拉斐尔2015年

1
请注意,通常要求一年级学生理解该定理及其证明并加以应用,因此,通过查看任何正式的语言教科书,可以轻松满足对“非博士学位者可以理解的”要求。
拉斐尔2015年

引理不是证明:顾名思义,这是引理
nbro

Answers:


157

抽水式引理是显示语言不规则的简单证明,这意味着无法为其构建有限状态机。典型的例子是语言(a^n)(b^n)。这是简单的语言,它可以是任意数量的as,然后是相同数量的bs。所以弦

ab
aabb
aaabbb
aaaabbbb

等以语言显示,但

aab
bab
aaabbbbbb

等不是。

为这些示例构建FSM非常简单:

FSM

这个将一直工作到n = 4。问题在于我们的语言没有对n施加任何约束,并且有限状态机必须是有限的。无论我在这台计算机上添加多少个状态,都可以给我输入n等于状态数加1的输入,我的计算机将发生故障。因此,如果有一台机器可以读取该语言,则必须在其中某处存在一个循环以保持有限的状态数。添加以下循环:

FSM 2

我们语言中的所有字符串都将被接受,但是存在问题。在前四个as之后,由于机器a保持在相同状态,因此无法记录已输入多少s的计数。这意味着在四之后,我可以a在字符串中添加任意数量的bs,而无需添加任何s,并且仍然获得相同的返回值。这意味着字符串:

aaaa(a*)bbbb

(a*)代表任意数量的aS,将全部由即使他们显然不是所有的语言机器被接受。在这种情况下,我们可以说字符串的一部分(a*)可以被抽出。有限状态机是有限的且n是无界的,这保证了接受语言中所有字符串的任何机器都必须具有此属性。机器必须在某个点循环,并且在循环点可以泵送语言。因此,无法为该语言构建有限状态机,并且该语言不是常规语言。

请记住,正则表达式和有限状态机是等效的,然后替换ab使用可相互嵌入的Html标签打开和关闭,您会看到为什么无法使用正则表达式解析Html的原因。


2
您的第二张图也是不正确的,因为它可以产生baaaabbbb。
詹姆斯2010年

3
@James是对的,可以很简单地通过添加另一个接受状态来解决它,但是为了简单起见,我将其保持原样。
Graphics Noob 2010年

1
好的答案,但没有提及抽水引理可以用来证明语言是上下文无关的,而不仅仅是反驳规律性
MobileMon 2013年

1
这甚至没有结论性地表明这a^n b^n是不规则的,也没有提出关于抽水引理的许多直觉。
拉斐尔

1
顾名思义,@ GraphicsNoob抽水引理不是证明,而是引理。一个引理是已被证明的命题。引理可以认为是一个较小但不太重要的定理,通常用于证明或证明其他命题或陈述。我不认为一个回答开始说“抽奖引理是一个证明”,目前有114票赞成票,这就是为什么对问题和答案应该加上描述或解释来投票。
nbro

15

这是一种旨在证明给定语言不能属于特定类别的设备。

让我们考虑平衡括号的语言(意思是符号'('和')',包括所有按通常意义平衡的字符串,没有不平衡的字符串)。我们可以使用抽水引理来证明这是不正常的。

(语言是一组可能的字符串。解析器是一种机制,我们可以用来查看字符串是否在该语言中,因此它必须能够分辨出该语言中的字符串与外部字符串之间的区别。如果有常规(或其他)解析器可以识别语言,则该语言为“常规”(或“无上下文”或“上下文敏感”等)语言,以区分该语言中的字符串和非该语言中的字符串语言。)

LFSR咨询提供了很好的描述。我们可以将常规语言的解析器绘制为框和箭头的有限集合,其中箭头代表字符,框将它们连接起来(充当“状态”)。(如果比这更复杂,则它不是常规语言。)如果我们得到的字符串长于框数,则意味着我们经历了一个框不止一次。这意味着我们有一个循环,我们可以根据需要多次循环。

因此,对于常规语言,如果我们可以创建任意长的字符串,则可以将其划分为xyz,其中x是循环开始时需要的字符,y是实际循环,而z是我们所需要的循环后需要使字符串有效。重要的是x和y的总长度是有限的。毕竟,如果长度大于盒子的数量,那么我们显然在进行此操作时就经过了另一个盒子,因此存在一个循环。

因此,在我们平衡的语言中,我们可以从编写任意数量的左括号开始。特别是,对于任何给定的解析器,我们可以写入的左解析器多于框,因此解析器无法分辨出有多少个左解析器。因此,x是左括号的一些量,这是固定的。y也是左括号的数量,并且可以无限期增加。可以说z是一些右括号。

这意味着我们的解析器可能识别出一个由43个左括号和43个右括号组成的字符串,但是解析器无法从一个由44个左括号和43个右括号组成的字符串中分辨出来,这不是我们的语言,因此解析器无法解析我们的语言。

由于任何可能的常规解析器都有固定数量的框,因此我们总是可以写出更多的左解析器,并且通过抽水引理,我们可以以解析器无法分辨的方式添加更多的左解析器。因此,平衡的括号语言不能由正则解析器解析,因此不是正则表达式。


对于那些寻求使用正则表达式捕获平衡的字符串的人来说,这是一个很好的答案和阅读材料。
贾斯汀·约翰逊

9

用外行人的术语很难理解,但是基本上正则表达式中应该包含一个非空的子字符串,该子字符串可以重复多次,而整个新单词对该语言仍然有效。

实践中,泵词引理不足以证明一种语言正确无误,而是作为一种通过矛盾进行证明的方式,并且通过显示泵词引理可以证明该语言不适合语言类别(常规或上下文无关)不适合它。


您是什么意思,“不足以证明一种语言正确无误”?“正确”,我想你是说定期。确实,常规语言具有泵浦性,但是如果语言具有泵浦性,则不一定意味着它是常规的。另一方面,如果该语言没有表现出泵送特性,那么我们确定它不是常规的。基本上,泵送属性是必需的,不足以显示某种语言是否正常。
nbro

4

基本上,您有一种语言(如XML)的定义,这是一种判断给定的字符串(“单词”)是否为该语言成员的方法。

抽动引理建立了一种方法,您可以通过该方法从语言中选择一个“单词”,然后对其进行一些更改。该定理指出,如果语言是常规的,则这些更改将产生一个仍然来自同一语言的“单词”。如果您想出的单词不是该语言中的语言,那么该语言首先可能不是常规语言。


3

简单抽引引理是常规语言的引理,其中包括有限自动机描述的字符串集。有限自动化的主要特征在于,它仅具有有限数量的内存(由状态描述)。

现在假设您有一个字符串,该字符串可以通过有限的自动机识别,并且该字符串足够长,可以“超出”自动化的内存,即状态必须重复。然后有一个子字符串,其中子字符串开头的自动机的状态与子字符串末尾的状态相同。由于读取子字符串不会改变状态,因此可以将其删除或重复任意次,而无需使用自动机。因此,还必须接受这些修改后的字符串。

对于上下文无关的语言,还有一个更复杂的抽取引理,您可以在其中删除/插入在字符串中两个位置直观地视为匹配括号的内容。


您的第二段很不错,但是第一段却有些糟糕:“简单的抽奖引理是常规语言的引理”。普通语言是做什么的吗?为什么我们需要抽水引理?引理和常规语言之间有什么关系?IMO,您应该回答所有这些问题。
nbro

@starblue:您能告诉我为什么如果语言是$ {a} $时,最小抽水长度是$ 2 $; 如果语言是$ {a ^ n:n∈ℕ} $,则最小抽水长度为$ 1 $。更多信息,请访问:(math.stackexchange.com/questions/1508471/minimum-pumping-length/…)。
贾斯汀

0

根据定义,常规语言是指由有限状态自动机识别的语言。可以将其视为迷宫:状态是房间,过渡是房间之间的单向走廊,有初始房间和出口(最终)房间。就像“有限状态自动机”这个名字所说,房间数量有限。每次沿着走廊旅行时,都会记下写在墙上的信。如果您能以正确的顺序找到从最初的房间到最后一个房间的路径,该路径穿过标有字母的走廊,则可以识别一个单词。

抽水引理说,有一个最大长度(抽水长度),您可以在迷宫中漫步,而不必回到以前经过的房间。这样做的想法是,由于只有有限的房间可以进入,经过某个点,因此您必须退出迷宫或越过轨道。如果您设法走的路比迷宫中的这个抽水长度更长,那么您将绕道而行:您在路径中插入了(至少一个)可以删除的循环(如果您想让迷宫越过识别较小的单词)或无限期重复(抽取)(允许识别超长单词)。

上下文无关的语言也有类似的引理。这些语言可以表示为下推自动机接受的单词,下推自动机是有限状态自动机,可以利用堆栈来确定要执行的转换。尽管如此,由于存在状态stilla有限数量,直觉上面所解释的过载,甚至通过属性的正规表达式可能稍微更复杂


@寻找这样的答案。最初的房间和最后的房间可以一样吗?如果语言是$ {a ^ n:n∈N} $,则最小抽水长度为$ 1 $。您能帮我吗? /…)。
贾斯汀

0

用外行的话来说,我认为你几乎是对的。这是一种证明技术(实际上是两种),用于证明某种语言不在特定类别中。

例如,请考虑其中包含无限数量的字符串的常规语言(regexp,自动机等)。正如starblue所说,在某个时候,您用完了内存,因为字符串对于自动机来说太长了。这意味着必须有一部分字符串,自动机无法分辨出您拥有多少个副本(您处于循环中)。因此,该子字符串在字符串中间的任意数量的副本,您仍然可以使用该语言。

这意味着,如果您使用的语言不具有此属性,即,字符串足够长且没有子字符串,您可以重复任意次并且仍然使用该语言,则该语言不是常规语言。


至少最后一句话是错误的。由字符串“ a”组成的语言是常规的,但是您不能对其进行泵送。如果您可以通过某种方式泵送字符串,那么这是不正常的。例如,由所有平衡表达式(而不是非平衡表达式)组成的带有符号“(”和“)”的语言是不规则的,您可以通过抽入“()”来证明这一点。
David Thornley,2009年

@David,谢谢,更正了最后一句话。但我认为您对平衡的括号错了。我认为您不能通过抽引引理来证明括号是不正常的。我认为。
布赖恩·波斯托

0

例如,采用这种语言L = a n b n

现在尝试将上述语言的有限自动机可视化一些n

如果n = 1,则字符串w = ab。在这里,如果n = 2,则字符串w = a 2 b 2,我们可以制作一个没有循环的有限自动机。在这里,我们可以制作一个没有循环的有限自动机

如果n = p,则字符串w = a p b p。本质上可以假设一个有限的自动机分为三个阶段。第一阶段,需要一系列输入,然后进入第二阶段。同样,从阶段2到阶段3。我们将这些阶段称为xyz

有一些观察

  1. 肯定x将包含“ a”,z将包含“ b”。
  2. 现在我们必须清楚y
    • 情况ay只能包含'a'
    • 情况by只能包含“ b”
    • 情况cy可能包含“ a”和“ b”的组合

因此,阶段y的有限自动机状态应能够接受输入“ a”和“ b”,并且不应接受无法计数的更多a和b。

  1. 如果阶段y仅取一个'a'和一个'b',则需要两个状态
  2. 如果取两个“ a”和一个“ b”,则需要三个状态,且带有循环,依此类推。

因此,阶段y的设计纯粹是无限的。我们只能通过放置一些循环来使其有限,如果我们放置循环,则有限自动机可以接受L = a n b n以外的语言。因此,对于这种语言,我们无法构造有限的自动机。因此,这是不规则的。


-1

这不是这样的解释,而是简单的。对于a ^ nb ^ n,我们的FSM应该以这样的方式构建:b必须知道已经解析的a的数目,并且将接受相同的n个b的数目。FSM不能简单地做这样的事情。

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.