是* b *常规吗?

时间:2013-05-23 20:21:10

标签: regular-language computation-theory

我知道 n b n 对于n>泵浦引理0不常规,但我认为a*b*是常规的,因为a,b不必是相同的长度。有证据证明它是正常的吗?

3 个答案:

答案 0 :(得分:15)

回答你的问题:

  

想象 a * b * 是常规的,是否有正常的证明?

无需想象,表达式a*b*被称为regular expression(重新),正则表达式仅适用于常规语言。如果一种语言不是常规语言,那么正则表达式也是不可能的,如果一种语言是常规语言,那么我们总是可以通过一些正则表达式来表示它。

是的,a*b*代表常规语言。

语言描述:任意数量的 a ,后跟任意数量的 b 任何数字我的意思是零(包括null ^)或更多次)。一些示例字符串是:

{^, a, b, aab, abbb, aabbb, ...}

RE a*b*的DFA如下:

      a-            b-
      ||            ||
      ▼|            ▼|
---►((Q0))---b---►((Q1))

In figure: `(())` means final state, so both `{Q0, Q1}` are final states.

您需要了解以下基本概念:

基本上什么是常规语言?为什么无限语言“a * b *”是规则的,而像`{a n b n | n> 0}`不规律!!

语言(集合)被称为常规语言,如果它只需要有限的(有限的)信息量来处理语言的字符串时在任何时间存储。

那么,什么是'有界'信息?
例如:考虑一个风扇'开'/'关'开关。通过查看风扇开关,我们可以说风扇是处于on还是off状态(这是有限的还是有限的信息)。但是我们不能说过去一次风扇的开启和关闭“多少次”! (记住,它需要一种机制来存储'无限'的信息量 - '多少次',例如某种仪表在我们的汽车/自行车中使用的数量。)

语言{a n b n | n> 0} 是常规语言,因为此处n是无界的(可以是无限大)。要验证语言a n b n 中的字符串,我们需要记住已经出现了多少 a 符号并且需要一个无限的内存存储空间,因为字符串中 a 符号的数量可以是无穷大的!

这意味着,如果自动机具有无限内存,例如PDA,则它只能处理语言字符串 n b n

然而,a*b*当然是有规律的,因为存在有限的限制 - b 可能会在某些 {{1}之后出现} {/ strong>(a之后无法a。这就是为什么这种语言的每一个字符串都可以被我们拥有有限内存的自动机轻松处理(或识别)的原因 - 而有限自动机是一类内存有限的自动机。是的,在有限自动机中,我们在状态方面具有有限的内存量。

有限自动机中的记忆以状态b的形式存在并且根据自动机主体:任何自动机都只能有有限状态。因此有限自动机具有有限的记忆,这就是常规语言的自动机被称为有限自动机。你可以认为像CPU一样有限的自动机没有内存,它有有限的寄存器来记住它的内部状态

有限状态⇒有限存储器⇒在处理字符串时,只有语言可以处理有限存储器在任何时刻需要存储的处理⇒该语言称为常规语言

缺少外部记忆是有限自动化的限制⇒或者我们可以说限制有限自动机定义的语言类称为常规语言。

您应该阅读其他答案"finiteness of regular language"以了解常规语言的范围。

旁注:

  • 语言{a n b n | n> 0}是Q
  • 的子集
  • 也是一种语言{a n b n | 10 > 100 n> 0}是常规的,是一个很大的集合但是规则因为a*b*是有界的,因此这种语言可以使用有限自动机和正则表达式。

您还应该阅读:How to prove a language is regular?

答案 1 :(得分:2)

证据是:((a*)(b*))是一个格式正确的正则表达式,因此匹配常规语言。 a*b*是对同一表达式的句法缩短。

另一个证明:常规语言不能连接。 a *是一种常规语言。 b *是一种常规语言,因此它们的连接a * b *也是一个正则表达式。

您可以为它构建自动机:

0 ->(a) 1
0 ->(b) 2
1 ->(a) 1
1 ->(b) 2
2 ->(b) 2
2 ->(a) 3
3 ->(a,b) 3

其中只有3个不是接受状态,并证明该语言是* b *。

答案 2 :(得分:0)

要证明某种语言是正规的,只需显示以下内容即可:

1)存在一些识别它的DFA。在这种情况下,DFA是微不足道的。

2)语言可以表达为正则表达式,如另一个答案中所述。 a*b*是识别此语言的正则表达式。