显而易见的选择是耗尽所有可能的投入。我想我做到了。但我不确定它是否有效,而且我没有违反任何非确定性有限自动机的规则。
我的NFA由:(ab u aab u aba)*
给出,下面是我的图表。
我错过了什么吗?
答案 0 :(得分:1)
你没有遗漏任何东西,但是通过折叠路径和消除λ规则可以大大简化NFA。为了确定您的NFA是否决定正则表达式表示的语言,您可以通过在转换图中追逐状态来非正式地进行辩论。为了讨论NFA,我将使用以下δ函数定义,最终状态为{q 0 ,q 3 ,q 4 }和初始状态q 0
目标是表明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决定一种语言。