Bagaimana cara saya memverifikasi bahwa DFA setara dengan NFA?

10

Saya belajar cara mengonversi NFA ke DFA dan saya ingin memastikan saya melakukannya dengan benar. Jelas, kembali ke arah lain bukanlah sesuatu. Adakah yang tahu algoritma untuk memeriksa apakah DFA setara dengan NFA?

IAmOnStackExchange
sumber
Satu interpretasi kandidat: apakah ada "pemeriksa hasil" (dalam arti Wasserman dan Blum ) untuk masalah mengubah NFA menjadi DFA? Dengan kata lain, adakah algoritma yang asimptotically lebih cepat daripada melakukan konversi itu sendiri, yang memberikan pasangan (input, output) dugaan untuk algoritma konversi, memeriksa apakah outputnya benar?
DW

Jawaban:

7

Ini pertanyaan yang problematis. Ada cara untuk memeriksa kesetaraan automata, yang sekarang akan saya jelaskan, tetapi saya khawatir itu tidak akan membantu Anda, seperti yang akan Anda lihat di bagian akhir.

Ingatlah bahwa dua set dan B adalah sama jika if A B dan B A (ini adalah definisi kesetaraan himpunan). Dengan demikian, cukup bagi Anda untuk memverifikasi bahwa L ( D ) L ( N ) dan L ( N ) L ( D ) , di mana D dan N adalah masing-masing DFA dan NFA Anda.SEBUAHBSEBUAHBBSEBUAHL.(D)L.(N)L.(N)L.(D)DN

Tetapi bagaimana Anda memeriksa konten bahasa, Anda mungkin bertanya. Nah, sekarang amati bahwa iff A ¯ B = (di mana ¯ B adalah komplemen dari B ).SEBUAHBSEBUAHB¯=B¯B

Mari kita pertimbangkan dulu apakah . Untuk melakukan ini, Anda perlu melengkapi D (sangat mudah - menukar negara penerima yang menolak), lalu membuat persimpangan otomat (misalnya dengan konstruksi produk) dengan N , dan memeriksa kekosongan, dengan menemukan jalan ke negara penerima.L.(N)L.(D)DN

Namun, arah sebaliknya akan menunjukkan mengapa ini tidak membantu Anda. Dalam rangka untuk memeriksa apakah , Anda perlu untuk N . Tetapi untuk melengkapi NFA, pertama-tama Anda harus mengubahnya menjadi DFA, menjadikan seluruh gagasan itu sia-sia.L.(D)L.(N)N

Pada dasarnya, masalah dengan pertanyaan Anda jauh lebih dalam: Anda ingin memverifikasi bahwa Anda (model komputasi yang tidak ditentukan) menjalankan algoritma yang terdefinisi dengan baik. Jadi ini bukan masalah ilmu komputer.

Saya akan mengatakan ini: mengikuti konstruksi yang saya sarankan, tidak sulit untuk menyimpulkan bahwa iff ada panjang kata paling banyak 2 2 n ( n menjadi jumlah negara N ) yang diterima oleh satu dan bukan oleh yang lain. Jadi Anda dapat mencoba semua kata hingga sejauh ini.L.(D)L.(N)22nnN

Shaull
sumber
Terima kasih atas balasan yang dipikirkan dengan matang. Saya belajar sesuatu yang baru hari ini. Kedengarannya seperti taruhan terbaik saya adalah membandingkan pekerjaan saya dengan JFLAP.
IAmOnStackExchange
2
Kecuali jika NFA Anda besar (mis. Dengan lebih dari 7-8 status), opsi terbaik Anda mungkin hanya memeriksa diri Anda dengan cermat. Biasanya, setelah menghapus status yang tidak dapat dijangkau, Anda mendapatkan DFA kecil, dan memeriksa secara manual tidak terlalu sulit.
Shaull
1
Tidak bisakah Anda menentukan dan meminimalkan kedua mesin dan memeriksa apakah kedua mesin itu isomorfik?
saadtaame
5

Salah satu cara untuk melanjutkan adalah dengan mengkonversi NFA ke DFA dan kemudian memeriksa kesetaraan dari dua DFA, yang ada algoritma linier [1].

Makalah berikut membahas kasus kesetaraan dua NFA yang lebih umum (yang tentu saja juga berlaku untuk kasus Anda).

Filippo Bonchi, Damien Pous, Memeriksa kesetaraan NFA dengan bisimulasi hingga kongruensi Prinsip Bahasa Pemrograman (POPL), Jan 2013, Roma, Italia. ACM, hal.457-468, 2013.

Abstrak . Kami memperkenalkan bisimulasi hingga kongruensi sebagai teknik untuk membuktikan kesetaraan bahasa automata terbatas non-deterministik. Memanfaatkan teknik ini, kami merancang optimasi algoritma klasik oleh Hopcroft dan Karp [1]. Kami membandingkan pendekatan kami dengan algoritme antikain yang baru saja diperkenalkan, dengan menganalisis dan menghubungkan dua metode bukti koinduktif yang mendasarinya. Kami memberikan contoh konkret di mana kami secara eksponensial meningkat daripada antik Harbor; Hasil eksperimen juga menunjukkan peningkatan yang tidak dapat diabaikan.

[1] JE Hopcroft dan RM Karp. Algoritma linier untuk menguji kesetaraan automata terbatas. TR 114, Cornell Univ., Desember 1971.

Lihat juga lampiran web untuk makalah ini , yang berisi skrip bukti Coq hasil, tautan ke implementasi dan applet interaktif.

J.-E. Pin
sumber
Salah satu cara untuk melanjutkan adalah mengubah NFA menjadi DFA , tujuan poster adalah untuk memverifikasi hasil dari algoritma tersebut. Menerapkan dua kali memang salah satu cara tetapi tidak kebal terhadap kesalahpahaman algoritma. Itu mungkin mengapa metode pemeriksaan diminta.
Pemrogram
2
@aprogrammer Bagian utama dari jawaban saya adalah referensi ke algoritme yang tersedia untuk skrip bukti Coq, yang tentunya merupakan metode pemeriksaan teraman yang bisa saya pikirkan.
J.-E.
1
Saya tidak yakin apa yang seseorang tidak yakin tentang pemahamannya tentang algoritma sederhana seperti NFA ke DFA yang akan dilakukan dengan skrip bukti Coq. Ini seperti menggunakan aljabar untuk menyelesaikan soal matematika siswa kelas tiga.
Pemrogram
0

pertanyaan ini lebih tentang pengujian perangkat lunak yang diterapkan dan memverifikasi kebenaran dalam praktik daripada pertanyaan teoretis.

  • D1D2¯D2D1¯D¯ adalah komplemen.

  • Anda dapat mengandalkan perangkat lunak yang diuji sebelumnya yang telah diuji untuk memvalidasi hasil Anda. misalnya perpustakaan AT&T FSM

  • ide lain: pengujian acak. pilih string acak dalam bahasa Anda. menentukan apakah string diterima atau tidak diterima oleh DFA / NFA. jika keduanya tidak sama, dengan probabilitas tinggi Anda akan menemukan string yang tidak cocok.

  • ide lain: Anda dapat menulis kode untuk melintasi semua cabang DFA dan NFA ke kedalaman tertentu dan mencari ketidakcocokan. ini sama dengan menghitung semua string yang mungkin diterima dengan panjang tertentu.

vzn
sumber