チューリングマシンは、NFAが素数の文字列を受け入れるかどうかを決定できますか?


14

次の問題が決定可能かどうかを知りたい:

インスタンス:n個の状態を持つNFA A

質問:Aが長さpの文字列を受け入れるような素数pが存在しますか。

私の考えでは、この問題は決定不能ですが、証明することはできません。決定者は、特定の数値が素数であるかどうかを判断するアルゴリズムを簡単に持つことができますが、NFAを分析して、生成できる長さを正確に知る方法が十分にわかりません。NFAを使用して文字列のテストを開始できますが、無限言語の場合、停止することはありません(したがって、決定者ではありません)。

もちろん、ソリューションで必要な場合は、NFAをDFAまたは正規表現に簡単に変更できます。

この質問は、2週間後に出てくる決勝戦のための自作の準備質問として考えていました。


これが学部レベルかどうかはわかりませんので、削除する心配はありません。それは難しい問題であることが判明する場合があります。たとえば、terrytao.wordpress.com

まあ、私はそれを作ったので、それは難しいかもしれません。NFA / DFAに関連する未決定の問題の証拠は見つかりませんでした。そのため、試してみるのは面白いかもしれません。

あなたがリンクしたのは別の(より簡単な)問題だと思います。「NFAは長さxの文字列をいくつ受け入れますか?」と答えることができます。提供された式を使用して、無数のインスタンスをチェックして、長さが素数であるNFAが受け入れる文字列が存在するかどうかを確認する必要があります。私は特定の素数について尋ねているのではなく、それらすべてについて尋ねています。sLn

回答:


17

DFAで受け入れられる文字列の長さは(コンテキストフリー言語のパリフの定理のように)半線形セットを形成し、それらの記述は実現するのがそれほど難しくありません(本質的にオートマトンのすべての可能なサイクルを接合します)。ディリクレの定理は、フォームの任意の等差数列と素数の無数を含んでいます。a+bkgcdab=1

上記をまとめると、通常の(または文脈自由言語でさえ)素数の文字列が含まれているかどうかをチェックするアルゴリズムが得られます。絶対に簡単な質問ではありません、IMVHO ...


この場合のパリフの定理の理解を助けてくれれば幸いです。PDAでスタックを使用しないだけで、明らかにNFAをPDAに変えることができます。線形サブセットはサイクルを指定しますか?もしそうなら、それはどのように機能しますか?
チル

1
@ Chill、DFAを通るパスを検討します。開始状態から最終状態に直接移行するか、ループする場合があります。ストリングの可能な長さは、「直線部分」+ 任意のに対する倍の「可能なループの長さ」の合計によって決定されます。DFAのもつれをいくつか描いて、それを通るパスをトレースします。可能な長さは、サイクルによって定義された算術シーケンスのファミリーに分類されます。つまり、それらは半線形セットを形成します。コンテキストを無料にする必要はありません(無料のボーナスです)。kk
フォンブランド

1
これで私の質問に答えられると思います。私はパリフの定理についてもっと調べてみたいと思います。この場合の考え方と、サイクルを指定する方法を理解しています。私が理解したいのは、この問題を解決するための実際のアルゴリズムを作成する、より「実践的な」ソリューションです。
チル

@Chill、前のコメントを見てください。DFAのシンボルをグラフとして消去し、開始開始状態と最終状態の間のウォークをチェックするだけで、可能な長さの説明を見つけることはそれほど難しくありません。形式化するのが難しく、どの例でも手で簡単に把握できます。
フォンブランド

3
@dkuper、それはそれほど単純ではありません。通常の言語は無限ですが、素数の文字列は含まれていません。aaaaaa
フォンブランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.