在CS课程中,我正在学习一门非常规语言的例子:
{a^nb^n | n >= 0}
我可以理解它不常规,因为没有有限状态自动机/机器可以写入验证并接受此输入,因为它缺少内存组件。 (如果我错了,请纠正我)
wikipedia entry on Regular Language也列出了这个例子,但没有提供(数学)证明为什么它不常规。
任何人都可以启发我并为此提供证据,或者指出我是一个很好的资源吗?
答案 0 :(得分:13)
您要找的是Pumping lemma for regular languages。
以下是example,其中包含您的确切问题:
示例:
设L = {a m b m | m≥1}。
然后L不规律 证明:让n与泵浦引理一样 设w = a n b n 设w = xyz与泵浦引理一样 因此,xy 2 z∈L,然而,xy 2 z包含的a比b更多。
答案 1 :(得分:6)
因为你不能编写一个有限状态机来“计算”'a'和'b'符号的相同序列。简而言之,FSM无法“计算”。尝试想象这样一个FSM:你会给符号'a'多少个州? 'b'有多少?如果您的输入序列有更多?
请注意,如果n <= X且X为整数值,则可以准备这样的FSM(通过使其具有大量状态,但仍然是有限数);这种语言会定期。
答案 2 :(得分:1)
有限状态自动机没有数据结构(堆栈) - 内存与下推自动机一样。是的它可以给你一些'a's后跟一些'b'但不是'a'的确切数量,其次是'b'。
答案 3 :(得分:1)
原因是,只有在否时才必须达到最终状态。的“ a”而不是输入字符串中'b'的值相等。要做到这一点,您必须同时数两个。的“ a”以及否。 'b'的值,但是因为'n'的值可以达到无穷大,所以不可能使用有限自动机将其计算到无穷大。
所以这就是{a ^ n b ^ n | n> = 0}是不规则的。
答案 4 :(得分:0)
假设 L = {a n b n | n≥0} 是常规的。然后我们可以使用抽水引理。
让 n 为抽水引理数。考虑 w = a n b n ∈L。抽运引理指出,您可以将 w 分为 xyz ,这样 xy≤n , y≥1 和< strong>∀i∈ℕ 0 :xy i z∈L。
使用前两个规则,我们可以轻松地看到,无论我们如何将 w 划分为 xyz , y ,始终仅包含< strong> a ,并且它将至少包含一个这样的字母。根据规则3,我们得出 a n-k b n ∈L的结论,其中 k = | y | ≥1 。但是 nk≠n 违反了 L 的定义,因此 a nk b n ∉L< / strong>。 ?这是一个矛盾,我们得出的结论是 L 是规则的假设是错误的。