【问题标题】:An infinite language can't be regular? What is a finite language?无限的语言不能是规则的吗?什么是有限语言?
【发布时间】:2013-06-29 01:18:39
【问题描述】:

我在一本关于可计算性的书中读到这一点:

(Kleene's Theorem) 一种语言是规则的当且仅当它可以是 通过应用三个操作并集从有限语言中获得, 连接,重复有限次。

我正在与“有限语言”作斗争。

考虑这种语言:L = a*

它不是有限的。它是集合{0, a, aa, aaa, ...},显然是一个无限集合(0 = 空字符串)。

所以它是一种无限的语言,对吧?也就是“无限集”就是“无限语言”吧?

显然,a* 是一种常规语言。它是一种无限的语言。因此,根据 Kleene 定理,它不可能是常规语言。矛盾。

我很困惑。我想我不知道“有限语言”是什么意思。

【问题讨论】:

  • 这可能更适合 math.stackexchange.com。自动机理论并没有真正参与编写程序。
  • IIRC,a* 只是常规语言,如果 a 是常规语言(注意,“a*”表示“a 中的所有元素”)。因此,这与 Kleene 定理并不矛盾。
  • Can be obtained from [not "is"] afinite languages by applying .. 虽然我以前没见过这样写.我希望阅读“字母表上的语言是常规的,如果它可以被有限自动机接受”或类似的。
  • 你在看哪本书repetition a finite number of times错了!一个很好的参考阅读Kleene's Theorem

标签: regular-language finite-automata formal-languages computability kleene-star


【解决方案1】:

具有有限个字符串的语言是有限语言。

因为字符串是有限的,所以可以使用它们来创建一个有限自动机。 Kleene 定理是 (1) 任何正则语言都可以被有限自动机接受。反之亦然:(2)有限自动机接受的任何语言都是规则的。请注意,自动机可能可能不是是确定性的。

现在,当一种语言是 infinite(它有无限数量的字符串)时,它可能是 Chomsky 中任何类型的语言(常规或非常规)层次结构。

【讨论】:

    【解决方案2】:

    无限语言意味着具有无限等价类的集合。然而,a* 语言只有一个等价类,因此它是一种有限语言。

    【讨论】:

      【解决方案3】:

      有限语言是包含有限数量单词的语言。最简单的情况是根本不包含任何单词、空字符串和由单个符号组成的单个字符串(例如您的示例中的a)。

      我认为你的困惑来自于误读了你引用的规则(正如一些评论问题的人一样)。

      (Kleene 定理)一种语言是规则的当且仅当它可以通过应用联合、连接、重复有限次数这三个操作从有限语言中获得。

      这篇文章不是在谈论创建一种语言中所有字符串所需的字符串操作数,而是关于定义正在定义的语言所需的更简单语言的操作数。您提到的语言是从有限语言(集合 {"a"})开始并应用重复运算符一次构建的。

      另一种不太直接的表达方式不是语言和语言上的运算,而是表示语言的表达式和组合它们的更复杂的表达式:当且仅当语言可以用正则表示时,它才是正则的包含有限个运算符的表达式。

      采用像a 这样的表达式,表示仅包含单个单词“a”的有限语言。我们可以在该表达式中添加一个重复运算符,我们得到a*,这是一种无限语言,包含来自第一种语言的零个或多个单词的每个连接。每个有限表达式 E 我们可以从表示有限语言的表达式开始,并使用模式 FG 组合一个或两个较小的表达式 G em>E = F | GE = FGE = F* 表示正则语言。表示有限语言(词数有限的语言)的表达式是用表达式陈述规则时的基本情况;当规则直接用语言来表述时,有限语言是基本情况,没有任何绕道表达域。

      如果我们允许无限多次应用并集、连接和重复(或者等效地,如果我们允许使用正则表达式规则的无限表达式),则不能保证生成的语言是正则的。这与观察到无限大的上下文无关文法可以定义非上下文无关语言的常规语言级别类似,如 van Wijngaarden 文法所示。

      【讨论】:

        【解决方案4】:

        很快,您的声明就是:

        当且仅当存在正则表达式时,语言才是正则的。


        “可以通过应用联合、连接、重复有限次数这三个操作从有限语言中获得”部分本质上是正则表达式的快速口头定义。通常,正则表达式 (RE) 从以下基本情况开始正式定义:

        • ∅(空集)是一个 RE
        • ε(空字符串)是一个 RE
        • a 是一个 RE,其中 a 在字母表中

        这些都是有限的语言。然后我们通过应用以下三个递归规则有限次数获得其他RE:

        • 一个 | B 是一个 RE,其中 AB 都是 REs
        • AB 是一个 RE,其中 AB 都是 REs
        • A* 是一个 RE,其中 A 是一个 RE

        最后,您可以使用有限的描述(正则表达式)创建无限的语言。

        【讨论】:

          【解决方案5】:

          你在正确的轨道上,它可能会更清楚。克莱恩定理表达了三个陈述的等价性

          一种语言是正则的 == 一种语言可以用正则表达式表示 == 一种语言可以用有限自动机表示。

          您的示例确实是一种常规语言。一种有限的语言是你所期望的,一种可以在有限的时间内列出的语言。

          当他们在谈论重复时,他们在谈论Kleen Star操作,这正是a*所代表的,集合{empty, a, aa, aaa, aaaa, ...}

          编辑:

          我找到了this link: Kleenes Theorem,这很有帮助。他们所说的“重复”是指 Kleen Star,那么原来的陈述是有道理的。 a*Kleen_Star(a)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-11
            • 1970-01-01
            • 1970-01-01
            • 2011-07-03
            • 2011-10-06
            • 2011-12-17
            • 2014-01-15
            • 2014-02-08
            相关资源
            最近更新 更多