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?
automata
finite-automata
proof-techniques
nondeterminism
IAmOnStackExchange
sumber
sumber
Jawaban:
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.SEBUAH B A ⊆ B B ⊆ A L ( D ) ⊆ L ( N) L ( N) ⊆ L ( D ) D N
Tetapi bagaimana Anda memeriksa konten bahasa, Anda mungkin bertanya. Nah, sekarang amati bahwa iff A ∩ ¯ B = ∅ (di mana ¯ B adalah komplemen dari B ).A ⊆ B A ∩ B¯¯¯¯= ∅ 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 ) D N
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) 22 n n N
sumber
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.
sumber
pertanyaan ini lebih tentang pengujian perangkat lunak yang diterapkan dan memverifikasi kebenaran dalam praktik daripada pertanyaan teoretis.
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.
sumber