Layman的条款中的抽水引理是什么?

时间:2009-01-20 14:52:46

标签: theory proof pumping-lemma

我看到了this question,并对抽水引理是什么感到好奇(Wikipedia没有多大帮助)。

我明白这基本上是一个理论证据,必须是真实的,以便语言在某个类中,但除此之外,我并没有真正得到它。

任何人都在努力尝试以非数学家/ comp sci博士学位理解的方式在相当精细的层面上解释它吗?

9 个答案:

答案 0 :(得分:152)

泵浦引理是一个简单的证据,表明语言不规则,这意味着无法为它构建有限状态机。规范示例是语言(a^n)(b^n)。这是一种简单的语言,它只是a个的任意数量,后跟相同数量的b s。所以字符串

ab
aabb
aaabbb
aaaabbbb

等。是语言,但

aab
bab
aaabbbbbb

等。不是。

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

FSM

这个将一直工作到n = 4。问题是我们的语言没有对n施加任何约束,而有限状态机必须是有限的。无论我添加到这台机器的状态有多少,有人可以给我一个输入,其中n等于状态数加一,我的机器将失败。因此,如果有一台机器可以读取这种语言,那么必须在某处设置一个循环来保持状态数量的有限。添加了这些循环:

FSM 2

我们语言中的所有字符串都将被接受,但存在问题。在前四个a之后,机器会丢失已输入多少a个的计数,因为它保持相同的状态。这意味着在四次之后,我可以在字符串中添加尽可能多的a s,而不添加任何b,并且仍然可以获得相同的返回值。这意味着字符串:

aaaa(a*)bbbb

(a*)表示任意数量的a,即使它们显然不是全部都在语言中,也会被机器接受。在这种情况下,我们可以说字符串(a*)的部分可以被抽取。有限状态机是有限的并且n没有界限这一事实保证了任何接受语言中所有字符串的机器必须具有这种属性。机器必须在某个时刻循环,并且在循环时可以抽取语言。因此,不能为这种语言构建有限状态机,并且语言不规则。

请记住Regular Expressions and Finite State Machines are equivalent,然后将ab替换为可以互相嵌入的打开和关闭Html标记,您可以看到为什么it is not possible to use regular expressions to parse Html

答案 1 :(得分:13)

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

让我们考虑平衡括号的语言(意思是符号'('和')',并包括所有以通常含义平衡的字符串,而不包括所有字符串)。我们可以使用泵浦引理来证明这不是常规的。

(一种语言是一组可能的字符串。解析器是我们可以用来查看字符串是否在语言中的某种机制,所以它必须能够区分语言中的字符串或语言之外的字符串。语言是“常规”(或“无上下文”或“上下文敏感”或其他),如果有一个可以识别它的常规(或其他)解析器,区分语言中的字符串和字符串不在语言中。)

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

因此,对于常规语言,如果我们可以创建任意长的字符串,我们可以将其划分为xyz,其中x是我们需要到循环开始的字符,y是实际循环,z是循环后我们需要使字符串有效的东西。重要的是x和y的总长度是有限的。毕竟,如果长度大于盒子的数量,我们显然会在这样做时经过另一个盒子,所以有一个循环。

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

这意味着我们的解析器可能会识别出43个左侧parens和43个右侧parens的字符串,但解析器无法通过44个左侧parens和43个右侧parens的字符串来识别,这不在我们的语言,所以解析器无法解析我们的语言。

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

答案 2 :(得分:9)

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

练习中,抽取词汇不足以证明语言正确,而是作为一种通过矛盾进行证明并且表明某种语言不适合语言类别的方法(常规或通过显示泵浦引理的无上下文对它不起作用。

答案 3 :(得分:3)

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

抽取引理建立了一种方法,通过该方法,您可以从语言中选择“单词”,然后对其应用一些更改。该定理指出,如果语言是规则的,这些变化应该产生仍然来自同一语言的“单词”。如果你提出的这个词不在语言中,那么语言就不可能是正常的。

答案 4 :(得分:3)

简单的泵浦引理是常规语言的引理,它是由有限自动机描述的字符串集合等。有限自动化的主要特征是它只有一个有限的内存量,由其状态描述。

现在假设你有一个字符串,它被有限自动机识别,并且足够长以“超过”自动化的存储器,即必须重复哪些状态。然后有一个子字符串,其中子字符串开头的自动机状态与子字符串末尾的状态相同。由于读取子字符串不会改变状态,因此可以将其删除或重复任意次数,而自动机不是更明智的。所以这些修改后的字符串也必须被接受。

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

答案 5 :(得分:0)

根据定义,常规语言是由有限状态自动机识别的语言。把它想象成一个迷宫:州是房间,过渡是房间之间的单向走廊,有初始房间和出口(最后)房间。正如“有限状态自动机”这样的名称所说,房间数量有限。每次沿着走廊旅行时,都要记下写在墙上的信。如果您能够找到从初始房间到最终房间的路径,通过标有其字母的走廊,并按正确的顺序识别单词。

抽水引理说有一个最大长度(抽水长度),你可以在迷宫中漫步,而不会回到你以前经过过的房间。我们的想法是,由于只有很多不同的房间可以走进去,经过某一点,你必须要么退出迷宫,要么越过你的轨道。如果你设法在迷宫中行走比这个抽水长度更长的路径,那么你正在绕道而行:你在路径中插入一个(至少一个)可以被移除的循环(如果你想要穿过迷宫识别一个较小的单词)或无限期地重复(抽取)(允许识别超长单词)。

对于无上下文语言,有一个类似的引理。这些语言可以表示为下推自动机接受的单词,它是有限状态自动机,可以利用堆栈来决定执行哪些转换。尽管如此,由于存在有限数量的状态,上面解释的直觉仍然存在,即使通过正式表达的属性可能会略微more complex

答案 6 :(得分:0)

在外行人看来,我认为你几乎是对的。它是一种证明技术(实际上是两种),用于证明某种语言中的语言 NOT

例如,考虑一种常规语言(正则表达式,自动机等),其中包含无限数量的字符串。在某个时刻,正如starblue所说,你的内存耗尽,因为自动机的字符串太长了。这意味着必须有一个字符串块,自动机无法告诉你有多少副本(你在循环中)。因此,字符串中间的子字符串的任意数量的副本,您仍然使用该语言。

这意味着如果你的语言没有这个属性,即有一个足够长的字符串,带有 NO 子字符串,你可以重复任意次,但仍然使用该语言那么语言不规律。

答案 7 :(得分: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功能 的。基本上可以假设有限自动机有3个阶段。 第一阶段,它需要一系列输入并进入第二阶段。同样,从第2阶段到第3阶段。让我们将这些阶段称为 x y z

有一些观察

  1. 绝对 x 将包含'a'而 z 将包含'b'。
  2. 现在我们必须清楚 y
    • 案例 a y 可能只包含“a”
    • 案例 b y 可能只包含'b'
    • 案例 c y 可能包含'a'和'b'的组合
  3. 因此阶段 y 的有限自动机状态应该能够输入'a'和'b',并且它不应该采用更多的a和b,这是不可数的。

    1. 如果阶段 y 只采用一个'a'和一个'b',则需要两个状态
    2. 如果它采用两个'a'和一个'b',则需要三个状态的out循环 等等....
    3. 因此舞台 y 的设计纯粹是无限的。我们只能通过放置一些循环来使它变得有限,如果我们放置循环,有限自动机可以接受 L = a n b n <之外的语言/ SUP> 的。因此,对于这种语言,我们无法构造有限自动机。因此不常见。

答案 8 :(得分:-1)

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