使用Closure属性来证明规律性

时间:2011-02-27 20:04:15

标签: regular-language dfa

这是一个家庭作业问题:

Is L_4 Regular?
Let L_4 = L*, where L={0^i1^i | i>=1}.

我知道L是非常规的,我知道Kleene Star是一个封闭的操作,所以我的假设是L_4是非常规的。

然而,我的教授提供了上述L = {0^p | p is prime}的例子,他说这是L*的常规,证明L(000* + e)等于0^p说每个人都是彼此的子集(在这种情况下,e表示空字)。

所以他的方法涉及形成{{1}}的正则表达式,但是当我基本上已经有一个时,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

普通语言在Kleene star下关闭。也就是说,如果语言R是常规的,那么R *也是如此。

但是推理在另一个方向上不起作用:存在P *实际上是常规的非正规语言P.

你在问题​​中提到了一个这样的P:字符串0 ^ p,其中p是素数。

对于常规和无上下文语言,pumping lemmas很容易使用,以表明P至少对上下文敏感。 然而,P *等价于语言0 ^ q,其中q是零或更多素数的总和。 但是对于q = 0(空字符串)和任何q> = 2都是如此,因此P *可以用3态DFA识别,即使P本身不是常规的。

所以L无上下文与你的L_4 = L *是否正常无关。如果您可以构建一个识别L_4的DFA,就像我上面的P *所做的那样,那么显然它是常规的。 在尝试找到有效的DFA的过程中,您可能会看到一些模式 涌现,可以作为抽水论证的基础。 Myhill-Nerode theorem是证明非常规语言的另一种方法,如果该语言适用于分析前缀和区分扩展,则非常有用。如果语言可以在某种关系下被分解为一组有限的等价类,那么可以用包含许多状态的DFA来识别它。