言語が正規かどうかをテストするアルゴリズム
言語が正規かどうかをテストするためのアルゴリズム/体系的な手順はありますか? 換言すれば、代数形式で指定された言語与えられる(のようなものを考えるL={anbn:n∈N}L={anbn:n∈N}L=\{a^n b^n : n \in \mathbb{N}\})、言語が正規であるかどうかをテストします。学生がすべての宿題を手助けするWebサービスを作成していると想像してください。ユーザーが言語を指定すると、Webサービスは「通常」、「通常ではない」、または「わからない」で応答します。(Webサービスに「わからない」とできるだけ頻繁に回答しないようにしてください。)これを自動化する良い方法はありますか?これは扱いやすいですか?それは決定可能ですか(つまり、「わからない」と答える必要がないことを保証することは可能ですか)?この問題を解決するための合理的に効率的なアルゴリズムはあり、実際に発生する可能性のある多くの/ほとんどの言語に対して「わからない」以外の回答を提供できるでしょうか? 言語が規則的でないことを証明する古典的な方法は、ポンピングレンマです。ただし、ある時点では(たとえば、ポンプする単語を選択するために)手動での洞察が必要となるため、これをアルゴリズムに変換できるかどうかは不明です。 言語が正規であることを証明する古典的な方法は、Myhill–Nerodeの定理を使用して有限状態オートマトンを導出することです。これは有望なアプローチのように見えますが、代数形式で言語に対して基本的な操作を実行する機能が必要です。代数形式の言語で、必要になる可能性のあるすべての操作を象徴的に実行する体系的な方法があるかどうかは、私にはわかりません。 この質問を適切に配置するには、ユーザーが言語を指定する方法を決定する必要があります。私は提案を受け入れていますが、私はこのようなことを考えています: L={E:S}L={E:S}L = \{E : S\} ここで、は単語式、Sは長さ変数に対する線形不等式のシステムであり、次のように定義されています。EEESSS 各ワード表現です。(これらは、Σ ∗の任意の単語をとることができる変数を表します。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* それぞれワード表現です。(ここで、x rは文字列xの逆を表します。)xr,yr,zr,…xr,yr,zr,…x^r,y^r,z^r,\dotsxrxrx^rxxx それぞれ、B 、Cは、...ワード表現です。(暗黙的に、Σ = { 、B 、C 、... }、そう、B 、C 、...、基礎となるアルファベットで単一のシンボルを表します。)a,b,c,…a,b,c,…a,b,c,\dotsΣ={a,b,c,…}Σ={a,b,c,…}\Sigma=\{a,b,c,\dots\}a,b,c,…a,b,c,…a,b,c,\dots 各η、B η、C ηは、...場合、単語表現であるηは、可変長のです。aη,bη,cη,…aη,bη,cη,…a^\eta,b^\eta,c^\eta,\dotsηη\eta 単語式の連結は単語式です。 各長可変です。(これらは任意の自然数を取ることができる変数を表します。)m,n,p,q,…m,n,p,q,…m,n,p,q,\dots それぞれ x | 、| y | 、| z | 、…は長さ変数です。(これらは対応する単語の長さを表します。)|x|,|y|,|z|,…|x|,|y|,|z|,…|x|,|y|,|z|,\dots これは、教科書の演習で見られる多くのケースを処理するのに十分広いようです。もちろん、より適切な提案があれば、代数形式で言語を指定する他のテキストによる方法で置き換えることができます。