wwwの文脈依存文法を生成する方法


7

私はこれから出題される試験の問題を解決しようとしています。たとえば、この種の質問にどのように進むかなど、状況依存言語の文法を生成する方法がわかりません。

(長さを増やすだけでなく)状況依存の文法を {www:w{a,b}}

この種の質問への対処方法に関するアイデアやアプローチは高く評価されています。


4
アイデア: "a"を生成するたびに、 "a '"と "a' '"も生成します( "b" sも同様)。これで、a ''は、プライムされていない文字を右に切り替えることができます(ただし、プライムされた文字、またはダブルされた文字はできません)。最後に、素数を取り除きます。
Ran G.

1
ヒント:ますので、「WWW」は、文脈自由ではありません持っている文脈依存文法はあなたを与える追加の施設を利用します。一般的なテーマは、非端末を切り替えて、効果的にそれらを文内で移動することです。したがって、TMヘッドを文法でシミュレートするのは簡単です。「www」をアルゴリズム的にどのように決定しますか?
ラファエル

回答:


5

直感的には、一度に3つの中間シンボルを生成し、シンボルがそれ自体をソートできるようにする必要があります。しましょうS開始記号です。生成規則は次のとおりです。

SSA1A2A3
SSB1B2B3
ソート規則は次のとおりです。 Xi,Yi{A1,A2,A3,B1,B2,B3} そのような j<i ルールを追加します。
XiYjYjXi
最後に、中間シンボルを終端シンボルに変換する必要があります。開始記号を別の記号に変えるS1 生成フェーズを終了します。
SS1
押す S1 途中で記号を終端記号に変換する文字列を介して、1つの単語で終了すると添字をインクリメントします w。すべてのためにi{1,2,3} ルールを追加します。
SiAiaSi|aSi+1
SiBibSi|bSi+1
下付き文字 S添え字を減らすことができないため、シンボルが適切な順序で変換されるようにします。最後に削除S3
S3ε

2
文法は近づいていますが、 "User_1234が要求したように、"ABBA"による単調でもない S3ϵ
lukas.coenig 2015年

@ lukas.coenigイプシロンルールは確かに許可されていません(簡単に修正できるはずです)が、それ以外の場合、文法は黒田標準形式です。CSGのすべての定義がそれを認めているわけではありませんが、有名な同等の定義です。OP(または任意のリーダー)が別の定義を使用する必要がある場合、それらは定義の等価性の証明から取った構造を使用し、それらを(機械的に)このソリューションに適用できます。
ラファエル

1
@ラファエル。ありがとうございましたが、そんなに簡単なことではないと思います。言葉を考えるaaa例として。その単語を取得するには、まずSSA1A2A3。この定型文の長さは4ですが、aaa3なので、道のどこかで、定型文の長さを短くする必要があります。ただし、これは減少しないため、つまり、すべてのプロダクションに対して、文脈依存の文法では許可されません。xy、持っている必要があります xy。私が間違っていなければ、これはjnalankoの解決策がすべて間違っていることを意味します。しかし、私は正しい解決策を見つけることができないようです...
Barbara

1
@Barbara誤解しているようです。文法全体をリファクタリングするつもりでした。あなたはA10A2A3; 上位指数i 「の権利を置き換える Si"。抽象的に言えば、すべての一定サイズの"オーバーヘッド "は、特別な記号に折りたたむことができます(私はそう思います。)
ラファエル

1
@Barbaraこの時点で、新しい質問を開く必要があると思います。ここからあなたが必要とするものへの道が私が思ったほど単純ではない場合、コメントでの議論は明確にする正しい方法ではありません。
ラファエル

2

特定の例の答えはそこにありますが、一般的な質問は残ります。

非常に長い間、理論と応用コンピュータサイエンスの両方で、CS文法をそのように記述しなければならなかったことを思い出しません。

それでも、私がアドバイスをする場合は、CF文法を作成するようなものはまったく見られないはずです。ルールを考案してすべてを適切に配置し、作成されたとおりに正しく調整する必要があります。

CS文法ははるかにアルゴリズム的であり、必要に応じて物事を移動するために、チューリングマシン(入力サイズに比例する有限空間で動作します。つまり、線形制限オートマトン-LBA)を模倣できます。ですから、それはプログラミング演習のほうがずっと多いのです。

言語の単語の1つを構築するための最初の要素をほとんど生成してから、それらをアルゴリズムに従って移動できます。特別なシンボル(有限状態に対応するさまざまなフレーバーの場合もある)を使用して、適切なルールで移動するヘッドとして機能し、何が行われるかを確認できます。等々。

CSG言語とLBA言語、つまりCS言語の間の同等性の証明を検討することをお勧めします。

私たちが使用するほぼすべてのアルゴリズムはLBAで実行できるため、CSG定義可能な言語に対応していることを覚えておいてください。これにより、利用可能なアルゴリズム能力がわかります。

しかし、あなたが与えた例のように、ちょっとした想像力がエレガントなソリューションを助けます。


では、User_1234の質問で提供されている言語について、そのためのLBAを設計するにはどうしたらよいでしょうか。私は、セパレーターを備えた言語用のチューリングマシンの設計経験があるだけです。例えば:{w#w#w:w{a,b}}、物事を簡単にするようです。
David Smith、

@DavidSmith For www最初のRan Gコメントで与えられた簡単な特定の解決策があり、詳細は前の解決策にあります。これは、通常はアクセプター(認識機能)として構築されるTMとは少し異なりますが、ここではコンストラクターが必要です。それを行うもう1つの方法は、文字列を生成することですw、次に2つのシンボルを追加する # 片側で、各シンボルを置き換えます # 文字列のコピーによる w。これはより複雑ですが、任意の数のコピーで機能しますw、シンボルの数を増やすだけで #
babou

@DavidSmith LBAはアクセプターであり、TMのように「プログラム」します。この場合、与えられた場合www そしてそれを認識したいのであれば、2つを配置するために何らかの方法で(多くの方法で)シンボルを数える最初の計算をすることができます #適切な場所で。または、非決定論に依存して、2つを配置することもできます#入力文字列のランダムな場所。文字列が言語に含まれている場合は、それらの1つを選択することをお勧めします。
babou 2014

1

これは、一般的な解決策と考えることができる追加の回答にすぎません。CSL、状況依存言語は、LBA、線形有界オートマトンによってモデル化されています。LBAは、入力テープのサイズの定数倍以下のワークテープを指定して受け入れまたは拒否できるチューリングマシンです。したがって、一定の空間で入力を処理できるコンピュータプログラムを理解できる場合は、そのCSLです。アイデア:この問題で機能するプログラムは、定数空間で順列を列挙するようなものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.