使用闭包属性证明正则性
Posted
技术标签:
【中文标题】使用闭包属性证明正则性【英文标题】:Using Closure Properties to prove Regularity 【发布时间】:2011-07-05 08:48:58 【问题描述】:这是一道作业题:
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)
,通过说每个都是彼此的子集(在这种情况下,e 表示空词)。
所以他的方法涉及形成一个0^p
的正则表达式,但是当我基本上已经有了一个正则表达式时,我该怎么做呢?
【问题讨论】:
0^p : p prime 不规则。它实际上是上下文相关的。 另外,仅仅因为 L 不规则就假设 L_4 不规则是不正确的——闭包属性不能那样工作!例如,如果我们让 P 是素数 p 的 0^p 语言,那么即使 P 不是,P* 也是正则的。 哦,谢谢第一部分。我们刚刚开始使用上下文无关语言以及其他语言。是的,这是一个糟糕的假设……但我已经习惯于认为“封闭”-> 相同类型,即使是规律性也是如此。 【参考方案1】:常规语言在 Kleene 星号下关闭。也就是说,如果语言 R 是正则的,那么 R* 也是正则的。
但是推理在另一个方向上不起作用:有一些非常规语言 P,其中 P* 实际上是正则的。
您在问题中提到了一个这样的 P:字符串 0^p 的集合,其中 p 是素数。
很容易将pumping lemmas 用于常规和上下文无关语言,以表明 P 至少是上下文相关的。 但是,P* 等价于语言 0^q,其中 q 是零个或多个素数之和。 但这对于 q=0(空字符串)和任何 q>=2 都是正确的,因此 P* 可以用三态 DFA 来识别,即使 P 本身不是正则的。
因此,L 与上下文无关与您的 L_4 = L* 是否是常规的无关。如果您可以构造一个识别 L_4 的 DFA,就像我在上面对 P* 所做的那样,那么显然它是常规的。 在尝试寻找有效的 DFA 的过程中,您可能会看到一些模式 出现,可以用作抽水论证的基础。 Myhill-Nerode theorem 是另一种证明语言非常规的方法,如果该语言适合分析前缀和区分扩展名,则该方法很有用。如果该语言可以在某种关系下分解为一组有限的等价类,那么它就可以用包含这么多状态的 DFA 来识别。
编辑:对于任何想知道 OP 的示例 L_4 是否是正则的人......它不是,这可以使用正则语言的泵引理来证明。
假设 L_4 是规则的,具有“泵送长度”P。考虑字符串 w=0P1P,它是 L_4 的一个元素。我们需要将其分解为 w=xyz 的形式, 与 |y| >= 1 和 |xy| nz 与 n != 1 将具有不匹配的 0 和 1 计数,因此不能是 L_4 的元素。所以抽水引理不成立,L_4 不可能是正则的。
【讨论】:
我发现我们可以用任何方法来证明正则性。谢谢! @WAT:如果你提出了一个很好的证据,请回来报告......不要让我们悬而未决! 看起来他让你挂了:( @g14nfr4nc0 :也许吧,但我不会! :)以上是关于使用闭包属性证明正则性的主要内容,如果未能解决你的问题,请参考以下文章