Wie überprüfe ich, ob ein DFA einem NFA entspricht?


10

Ich lerne, wie man NFAs in DFAs konvertiert, und ich möchte sicherstellen, dass ich es richtig mache. Offensichtlich ist es keine Sache, in die andere Richtung zurückzukehren. Kennt jemand einen Algorithmus, um zu überprüfen, ob ein DFA einem NFA entspricht?


Eine mögliche Interpretation: Gibt es einen "Ergebnisprüfer" (im Sinne von Wasserman und Blum ) für das Problem der Umwandlung einer NFA in eine DFA? Mit anderen Worten, gibt es einen Algorithmus, der asymptotisch schneller ist als die Konvertierung selbst, der bei einem angeblichen (Eingabe, Ausgabe) Paar für den Konvertierungsalgorithmus prüft, ob die Ausgabe korrekt ist?
DW

Antworten:


7

Dies ist eine problematische Frage. Es gibt eine Möglichkeit, die Gleichwertigkeit von Automaten zu überprüfen, die ich jetzt erläutern werde, aber ich fürchte, es wird Ihnen nicht helfen, wie Sie am Ende sehen werden.

Denken Sie daran, dass zwei Mengen und gleich sind, wenn und (dies ist die Definition der Mengengleichheit). Es reicht also aus, zu überprüfen, ob und , wobei und Ihr DFA bzw. NFA sind.B A B B A L ( D ) L ( N ) L ( N ) L ( D ) D N.ABABBAL(D)L(N)L(N)L(D)DN

Aber wie überprüfen Sie die Einschließung von Sprachen, könnten Sie fragen. Nun, beobachten Sie nun, dass iff (wobei das Komplement von ).A ¯ B = ¯ B BABAB¯=B¯B

Betrachten wir zunächst, ob . Dazu müssen Sie ergänzen (sehr einfach - die akzeptierenden und ablehnenden Zustände austauschen), dann den Schnittautomaten (z. B. mit der Produktkonstruktion) mit konstruieren und auf Leere prüfen, indem Sie einen Pfad zu einem akzeptierenden Zustand finden.D N.L(N)L(D)DN

Die umgekehrte Richtung zeigt jedoch, warum dies Ihnen nicht hilft. Um zu überprüfen, ob , müssen Sie ergänzen . Um eine NFA zu ergänzen, müssen Sie sie zunächst in eine DFA konvertieren, wodurch die gesamte Idee sinnlos wird.N.L(D)L(N)N

Im Wesentlichen ist das Problem mit Ihrer Frage viel tiefer: Sie möchten überprüfen, ob Sie (ein undefiniertes Rechenmodell) einen genau definierten Algorithmus ordnungsgemäß ausgeführt haben. Das ist also kein wirkliches Informatikproblem.

Ich werde dies sagen: Nach den von mir vorgeschlagenen Konstruktionen ist es nicht schwer zu schließen, dass wenn es ein Wort mit einer Länge von höchstens ( ist die Anzahl der Zustände von ) das wird von dem einen und nicht vom anderen akzeptiert. Sie können also alle Wörter bis zu dieser Länge ausprobieren.2 2 n n N.L(D)L(N)22nnN


Vielen Dank für die durchdachte Antwort. Ich habe heute etwas Neues gelernt. Es hört sich so an, als würde ich meine Arbeit am besten mit JFLAP vergleichen.
IAmOnStackExchange

2
Wenn Ihre NFA nicht groß ist (z. B. mit mehr als 7-8 Staaten), ist es wahrscheinlich die beste Option, sich selbst sorgfältig zu überprüfen. In der Regel erhalten Sie nach dem Entfernen nicht erreichbarer Zustände einen kleinen DFA, und die manuelle Überprüfung ist nicht allzu schwierig.
Shaull

1
Können Sie nicht beide Maschinen bestimmen und minimieren und prüfen, ob die beiden Maschinen isomorph sind?
Saadtaame

5

Eine Möglichkeit besteht darin, den NFA in einen DFA umzuwandeln und dann die Äquivalenz der beiden DFAs zu überprüfen, für die es einen linearen Algorithmus gibt [1].

Das folgende Papier behandelt den allgemeineren Fall der Äquivalenz von zwei NFAs (was natürlich auch für Ihren Fall gilt).

Filippo Bonchi, Damien Pous, Überprüfung der NFA-Äquivalenz mit Bisimulationen bis zur Kongruenz Prinzip der Programmiersprachen (POPL), Januar 2013, Roma, Italien. ACM, S. 457–468, 2013.

Zusammenfassung . Wir führen die Bisimulation bis zur Kongruenz als eine Technik zum Nachweis der Sprachäquivalenz nicht deterministischer endlicher Automaten ein. Unter Ausnutzung dieser Technik entwickeln wir eine Optimierung des klassischen Algorithmus von Hopcroft und Karp [1]. Wir vergleichen unseren Ansatz mit den kürzlich eingeführten Antichain-Algorithmen, indem wir die beiden zugrunde liegenden koinduktiven Beweismethoden analysieren und in Beziehung setzen. Wir geben konkrete Beispiele, bei denen wir uns gegenüber Antichains exponentiell verbessern. experimentelle Ergebnisse zeigen darüber hinaus nicht zu vernachlässigende Verbesserungen.

[1] JE Hopcroft und RM Karp. Ein linearer Algorithmus zum Testen der Äquivalenz endlicher Automaten. TR 114, Cornell Univ., Dezember 1971.

Siehe auch den Web-Anhang zu diesem Dokument , der Coq-Proof-Skripte der Ergebnisse, einen Link zu einer Implementierung und ein interaktives Applet enthält.


Eine Möglichkeit besteht darin, die NFA in eine DFA umzuwandeln. Das Ziel des Posters besteht darin, das Ergebnis dieses Algorithmus zu überprüfen. Zweimaliges Anwenden ist zwar eine Möglichkeit, aber nicht immun gegen Missverständnisse des Algorithmus. Das ist wahrscheinlich der Grund, warum eine Überprüfungsmethode gefragt wurde.
AProgrammer

2
@aprogrammer Der Hauptteil meiner Antwort ist ein Verweis auf einen Algorithmus, für den ein Coq-Proof-Skript verfügbar ist. Dies ist sicherlich die sicherste Überprüfungsmethode, die ich mir vorstellen kann.
J.-E.

1
Ich bin mir nicht sicher, was jemand, der sich nicht sicher ist, ob er einen einfachen Algorithmus wie NFA zu DFA versteht, mit einem Coq-Proof-Skript machen wird. Dies scheint mit Algebra das mathematische Problem eines Drittklässlers zu lösen.
AProgrammer

0

Bei dieser Frage geht es eher um angewandte Softwaretests und die Überprüfung der Richtigkeit in der Praxis als um eine theoretische Frage.

  • D1D2¯D2D1¯D¯

  • Sie können sich auf zuvor getestete Software verlassen, die getestet wurde, um Ihre Ergebnisse zu validieren. zB AT & T FSM Bibliothek

  • eine andere Idee: randomisierte Tests. Wähle zufällige Zeichenfolgen in deiner Sprache. Stellen Sie fest, ob die Zeichenfolgen vom DFA / NFA akzeptiert oder nicht akzeptiert werden. Wenn die beiden nicht gleich sind, werden Sie mit hoher Wahrscheinlichkeit Zeichenfolgen finden, die nicht übereinstimmen.

  • Eine andere Idee: Sie können Code schreiben, um alle Zweige des DFA und des NFA bis zu einer bestimmten Tiefe zu durchlaufen und nach Fehlanpassungen zu suchen. Dies entspricht der Aufzählung aller potenziell akzeptierten Zeichenfolgen mit bestimmten Längen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.