如何验证DFA等同于NFA?


10

我正在学习如何将NFA转换为DFA,并且我想确保自己做得对。显然,往另一个方向前进并不是一件容易的事。有谁知道一种算法来检查DFA是否等于NFA?


一种候选解释:是否存在将NFA转换为DFA 的“结果检查器”(在Wasserman和Blum的意义上)?换句话说,是否有一种算法在渐近上比进行转换本身快,给定转换算法的一个所谓的(输入,输出)对,检查输出是否正确?
DW

Answers:


7

这是一个有问题的问题。有一种方法可以检查自动机的等效性,我现在将解释这一点,但是正如您在最后看到的那样,恐怕它无法为您提供帮助。

回忆两个集合和相等,当和(这是集合相等性的定义)时。因此,您足以验证和,其中和分别是DFA和NFA。大号dABABBA大号Ñ 大号d d ÑL(D)L(N)L(N)L(D)DN

但是,您可能会问,如何检查语言的包含性。那么,现在观察到当且仅当(其中是的补)。¯ = ¯ ABAB¯=B¯B

让我们考虑首先检查。为此,您需要对进行补充(非常容易-交换接受状态),然后使用构造交集自动机(例如,使用产品构造),并通过找到到达接受状态的路径检查空度。d ÑL(N)L(D)DN

相反的方向将显示为什么这对您没有帮助。为了检查是否,就需要补充。但是,为了补充NFA,您首先需要将其转换为DFA,使整个构想变得毫无意义。ñL(D)L(N)N

从本质上讲,您的问题所涉及的问题要深得多:您想验证自己(未定义的计算模型)正确执行了定义明确的算法。因此,这实际上不是计算机科学问题。

我要说的是:按照我建议的结构,不难得出结论,只要存在一个长度不超过(是状态的数量)被一个而不是另一个接受。因此,您可以尝试所有不超过此长度的单词。2 2 n n NL(D)L(N)22nnN


感谢您的深思熟虑的答复。我今天学了些新东西。听起来我最好的选择是将我的工作与JFLAP进行比较。
IAmOnStackExchange 2015年

2
除非您的NFA很大(例如,拥有超过7-8个州),否则最好的选择可能就是仔细检查自己。通常,在删除无法访问的状态后,您会得到一个小的DFA,并且手动检查不太困难。
Shaull

1
您不能同时确定和最小化这两个机器并检查这两个机器是否同构吗?
saadtaame 2015年

5

一种进行的方法是将NFA转换为DFA,然后检查两个DFA的等效性,为此存在线性算法[1]。

下列文章讨论了两个NFA等效的更一般情况(当然,这也适用于您的情况)。

菲利波·邦奇(Filippo Bonchi),达米安·普斯(Damien Pous),使用双仿真检查NFA等效性,直到一致 编程语言原理(POPL),2013年1月,意大利罗马。ACM,第457-468页,2013年。

摘要。我们引入直到一致性为止的双仿真作为一种证明非确定性有限自动机的语言等效性的技术。利用这项技术,我们设计了Hopcroft和Karp [1]对经典算法的优化。通过分析和关联两种潜在的协同证明方法,我们将我们的方法与最近引入的反链算法进行了比较。我们给出了具体的例子,在这些例子中,我们对反链进行了指数改进。实验结果还显示出不可忽视的改进。

[1] JE Hopcroft和RM Karp。用于测试有限自动机等价性的线性算法。康奈尔大学,TR 114,1971年12月。

另请参见本文Web附录,其中包含结果的Coq证明脚本,实现的链接和交互式applet。


一种进行方式是将NFA转换为DFA,发布者的目标是验证该算法的结果。两次应用确实是一种方法,但不能避免对该算法的误解。这可能就是为什么需要一种检查方法的原因。
AProgrammer 2015年

2
@aprogrammer我的答案的主要部分是对提供Coq证明脚本的算法的引用,这当然是我能想到的最安全的检查方法。
J.-E.

1
我不确定有人不确定他对像NFA到DFA这样的简单算法的理解会如何使用Coq证明脚本。这看起来像使用代数来解决三年级学生的数学问题。
AProgrammer 2015年

0

这个问题更多地是关于应用软件测试和实践中验证正确性,而不是理论上的问题。

  • D1D2¯D2D1¯D¯

  • 您可以依靠经过测试的,经过测试的软件来验证结果。例如AT&T FSM库

  • 另一个想法:随机测试。选择您语言中的随机字符串。确定DFA / NFA接受还是不接受字符串。如果两者不相等,则很有可能会发现不匹配的字符串。

  • 另一个想法:您可以编写代码以遍历DFA和NFA的所有分支到某个特定深度并查找不匹配的地方。这等效于枚举给定长度的所有可能接受的字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.