正则表达式可以是无限的吗?


10

我知道可以使用正则表达式定义的语言和DFA / NFA(有限自动机)可以识别的语言是等效的。同样,语言也不存在DFA 。但是仍然可以使用正则表达式(就此而言,任何非正则语言都可以)来编写。但是我们知道,每一种具有正则表达式的语言都具有可以识别该正则表达式的DFA(与我之前的声明相矛盾)。我知道这是一件微不足道的事情,但是正则表达式的定义是否包含它应该是有限的条件?{ ε } { 01 } { 0011 } {0n1n|n0}{ϵ}{01}{0011}.....


3
您已经回答了自己的问题:如果REG CFL,则此类术语不能为正则表达式。
拉斐尔

1
附带说明一下:如果我们放弃DFA / NFA的要求是有限的,我们可以构建一个自动机来接受{0ñ1个ññ0}

3
作为术语,“自动机”一词是“自动机”的复数形式。没有“自动机”一词-您不能使其变得比现在更复数。(自动机是所有格,但不是复数是正确的)

Answers:


23

如果允许正则表达式为无穷大,那么任何语言都将是正则表达式。

给定语言,我们总能定义正则表达式,这恰好限定。 (示例:正则表达式定义。)- [R = 瓦特1 + 瓦特2 + 大号- [R 1 = ε + 0 + 1 + 00 + 01 + 10 + 11 + 大号1 = { 0 1 } *大号={w1个w2}[R=w1个+w2+大号
[R1个=ϵ+0+1个+00+01+10+11+大号1个={01个}

我们知道某些语言不是正则语言,因此这表明与正则表达式相比,无限正则表达式描述的语言类别更大。


5
我喜欢这个答案,因为它不仅说明无限的正则表达式是不同的,而且从整体上讲这个概念没有意义。
jmite 2015年

我在第二段中更清楚地表达了这一点,因此更加清楚。
戴维斯洛

但这确实以纯重言式结束。如果采用这种形式,为什么我们不将所有语言都视为常规语言呢?我们对正则表达式所做的事情不再起作用。我们无法通过归纳算法构建状态机,因为它永远不会完成并且具有无限状态。我们无法与列表中的所有内容进行比较,如果没有匹配项,则拒绝。而且我们无论如何也无法实际代表该列表。(我们可以通过计算机生成的列表是可决定的语言。)我们可以利用每种语言都具有这种形式的事实来证明事物,而不是我们所知道的有关正则表达式的事物。
戴维斯洛

@jmite“没有意义”或特殊情况?
2015年

@BAR没什么意义,因为在的语言中,无限正则表达式描述的只是即所有语言的集合。我们没有像使用有限RE,CFG甚至图灵机那样的语言。2 ΣΣ2Σ
jmite 2015年

5

是的,它必须是有限的。假设您有无限可能的匹配集,而您的输入是011。您能拒绝它吗?您会用完比赛检查吗?

根据该定义,是否有任何不规则的语言?那么所有成对的程序和输入对的集合如何使给定程序在给定输入上停止?

现在,如果您有一个程序按照字典顺序以一种语言枚举字符串,

更新资料

为了根据注释中的反馈澄清一下,根据定义,并非这种形式的每种语言都是正常的原因。例如,如果您查找Kleene定理的证明,则取决于正则表达式必须是有限的事实,以证明它生成了有限状态机。

为什么我们用这种方式定义“常规”语言?因为每种形式语言都是字母表中字符串的子集,并且每组字符串都可以表示为单例的并集,所以如果我们将任何一组字符串称为“常规”语言,则常规语言将只是语言。这不是一个非常有用的定义,特别是因为我们实际上无法在硬件或软件中实现它。我们不能在任何地方存储任意无限列表,也不能构建无限状态机。

但是,正如我所暗示的那样,如果您有一种方法可以按顺序枚举一种语言中的所有字符串,则可以从中构建一个决定器(接受时看到一个确切的字符串,当遇到一个在您之后的字符串时就拒绝它(正在寻找),反之亦然(对于每个字符串,请依次通过决定程序运行并在(只有)接受时将其输出)。因此,如果我们将每种可枚举的语言都视为常规语言,每种可判定的语言都将是“常规”语言,并且对于由有限状态机及其等效编码作为有限表达式表示的语言,我们将需要一个新术语。


1
这个答案是错误的。语言的某种表示不能自然地构建算法决定器这一事实本身并不意味着该表示是错误的。可能还有其他方法。实际上,每种可决定的语言都有sasha提议的形式的表示形式!简而言之,您犯下了“我看不到方法,所以它必须不可能”的谬论。
拉斐尔

@Raphael:请考虑您的陈述的含义,“ 每种可决定的语言都具有Sasha提议的形式的表示形式!” 实际上,这就是我在回答中指出的重点。问题是,这种形式的所有语言都定义为常规语言吗? 好吧,每种可决定的语言都正常吗?(而且,正如我所展示的,还有一些不确定的东西吗?)这是否是“常规”的有用定义?
戴维斯洛

此外,我的最后一句话不是说不能确定无限个字符串列表的决定者,还暗示了如何做到这一点:如果字符串列表排列合理,则可以立即拒绝一个字符串列表当您在排序中遇到一个字符串之后。但是,有限状态机无法执行此操作,因为它无法表示已与无限列表中的每个字符串进行比较的所有状态,正则表达式也无法表示。如果可以的话,它们将足够强大以识别所有可决定的语言。
戴维斯洛

0

假设正则表达式是无限的。

因此,由{ϵ}∪{01}∪{0011} ...定义的语言将是常规的。对于每种常规语言,都有一个NFA。获得此NFA的一种方法是为{ϵ},{01},{0011} ...中的每一个都拥有单独的NFA,并使用ϵ转换将它们合并。由于存在无限的不同正则表达式,因此我们需要将无限的子NFA组合在一起。但是,NFA只能具有有限数量的状态(NFA的定义)。

因此,没有NFA可以定义由无穷正则表达式的并集定义的语言,这意味着该语言不是正规的。

因此,没有正则表达式可以定义与由无限正则表达式的并集定义的语言相同的语言。

因此,正则表达式只能具有有限的表达式。


然后,“无限正则表达式”将定义另一类语言,而不是正则语言。实际上,他们能够定义任何语言,而这完全没有意思(它们不是有限的,因此很难使用;并且他们可以做任何事情,因此就限制而言没有什么可学习的)。
vonbrand,2015年
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.