如何确定我的NFA是否正确?

时间:2011-10-18 02:41:43

标签: finite-automata dfa nfa

显而易见的选择是耗尽所有可能的投入。我想我做到了。但我不确定它是否有效,而且我没有违反任何非确定性有限自动机的规则。

我的NFA由:(ab u aab u aba)*给出,下面是我的图表。

enter image description here

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

你没有遗漏任何东西,但是通过折叠路径和消除λ规则可以大大简化NFA。为了确定您的NFA是否决定正则表达式表示的语言,您可以通过在转换图中追逐状态来非正式地进行辩论。为了讨论NFA,我将使用以下δ函数定义,最终状态为{q 0 ,q 3 ,q 4 }和初始状态q 0

  • δ(q 0 ,a)= {q 1 ,q 2 }
  • δ(q 1 ,a)= {q 2 }
  • δ(q 2 ,b)= {q 3 }
  • δ(q 3 ,a)= {q 4 }
  • δ(q 3 ,λ)= {q 0 }
  • δ(q 4 ,λ)= {q - }

目标是表明NFA恰好接受语言(ab U aab U aba)*。为此,我们可以考虑在q 0 处以λ开头接受的字符串,并通过图表耗尽所有可能的转换,记录通过连接转换的符号构建的字符串,并注意是否这样的字符串被接受与否。图中的路径表示连接;最终状态表示接受或分离;循环表示Kleene明星。

  

从q 0 和λ,我们可以在 a 上转换为q 1 或q 2 。在q 1 a 上,我们可以转换到q 2 。因此,在q 2 上,我们有 a aa 而没有别的。从q 2 a aa ,我们可以转换到 b 上的q 3 。因此,在q 3 ,我们有 ab aab 而没有别的。从q 3 ab aab ,我们可以在λ或q 4 <上转换到q 0 / sub> on a 。因此,在q 3 ab aab 上,我们有 ab aab 或者 aba 而没有别的。最后,在q 4 aba 上,我们可以转换到λ上的q 0 。由于我们有 ab aab aba 并转换到开始状态,这意味着我们的推导可以重复零次或多次,我们有耗尽了可能的转换,我们得出结论,NFA决定 ab aab aba 的Kleene闭包。

有更多正式的方法可以显示给定的NFA决定一种语言。但最简单的方法是耗尽所有可能的路径通过NFA,在循环中引入Kleene闭包。形式方法的一个示例是将NFA转换为正则表达式,然后公理化地获得所获得的表达式和目标表达式的相等性。这在很大程度上是不必要的。

你可能已经完成了我刚刚写的内容,然而,整个帖子都没必要了。如果没有,我希望它能显示出一种非正式推理,可以用来说服自己NFA决定一种语言。