我知道可以使用正则表达式定义的语言和DFA / NFA(有限自动机)可以识别的语言是等效的。同样,语言也不存在DFA 。但是仍然可以使用正则表达式(就此而言,任何非正则语言都可以)来编写。但是我们知道,每一种具有正则表达式的语言都具有可以识别该正则表达式的DFA(与我之前的声明相矛盾)。我知道这是一件微不足道的事情,但是正则表达式的定义是否包含它应该是有限的条件?{ ε } ∪ { 01 } ∪ { 0011 } 。。。。。。
我知道可以使用正则表达式定义的语言和DFA / NFA(有限自动机)可以识别的语言是等效的。同样,语言也不存在DFA 。但是仍然可以使用正则表达式(就此而言,任何非正则语言都可以)来编写。但是我们知道,每一种具有正则表达式的语言都具有可以识别该正则表达式的DFA(与我之前的声明相矛盾)。我知道这是一件微不足道的事情,但是正则表达式的定义是否包含它应该是有限的条件?{ ε } ∪ { 01 } ∪ { 0011 } 。。。。。。
Answers:
如果允许正则表达式为无穷大,那么任何语言都将是正则表达式。
给定语言,我们总能定义正则表达式,这恰好限定。
(示例:正则表达式定义。)- [R = 瓦特1 + 瓦特2 + ⋯ 大号- [R 1 = ε + 0 + 1 + 00 + 01 + 10 + 11 + ⋯ 大号1 = { 0 ,1 } *
我们知道某些语言不是正则语言,因此这表明与正则表达式相比,无限正则表达式描述的语言类别更大。
是的,它必须是有限的。假设您有无限可能的匹配集,而您的输入是011
。您能拒绝它吗?您会用完比赛检查吗?
根据该定义,是否有任何不规则的语言?那么所有成对的程序和输入对的集合如何使给定程序在给定输入上停止?
现在,如果您有一个程序按照字典顺序以一种语言枚举字符串,
为了根据注释中的反馈澄清一下,根据定义,并非这种形式的每种语言都是正常的原因。例如,如果您查找Kleene定理的证明,则取决于正则表达式必须是有限的事实,以证明它生成了有限状态机。
为什么我们用这种方式定义“常规”语言?因为每种形式语言都是字母表中字符串的子集,并且每组字符串都可以表示为单例的并集,所以如果我们将任何一组字符串称为“常规”语言,则常规语言将只是语言。这不是一个非常有用的定义,特别是因为我们实际上无法在硬件或软件中实现它。我们不能在任何地方存储任意无限列表,也不能构建无限状态机。
但是,正如我所暗示的那样,如果您有一种方法可以按顺序枚举一种语言中的所有字符串,则可以从中构建一个决定器(接受时看到一个确切的字符串,当遇到一个在您之后的字符串时就拒绝它(正在寻找),反之亦然(对于每个字符串,请依次通过决定程序运行并在(只有)接受时将其输出)。因此,如果我们将每种可枚举的语言都视为常规语言,则每种可判定的语言都将是“常规”语言,并且对于由有限状态机及其等效编码作为有限表达式表示的语言,我们将需要一个新术语。
假设正则表达式是无限的。
因此,由{ϵ}∪{01}∪{0011} ...定义的语言将是常规的。对于每种常规语言,都有一个NFA。获得此NFA的一种方法是为{ϵ},{01},{0011} ...中的每一个都拥有单独的NFA,并使用ϵ转换将它们合并。由于存在无限的不同正则表达式,因此我们需要将无限的子NFA组合在一起。但是,NFA只能具有有限数量的状态(NFA的定义)。
因此,没有NFA可以定义由无穷正则表达式的并集定义的语言,这意味着该语言不是正规的。
因此,没有正则表达式可以定义与由无限正则表达式的并集定义的语言相同的语言。
因此,正则表达式只能具有有限的表达式。