循環シフト下で文脈自由言語がクローズされていることの簡単な証明


11

サイクリックシフト (別名回転又は抱合言語の)ように定義される{ Y 、X | のX 、Y L }ウィキペディア(およびここ)によると、文脈自由言語はこの操作のもとで閉鎖されており、大芝とMaslovの論文を参照しています。この事実の簡単な証拠はありますか?L{yxxyL}

通常の言語の場合、この形式では、「通常の言語がサイクル演算子の下で閉じられていることを証明する」という形でクロージャーが説明されます。

回答:


5

プッシュダウンオートマトンを使用してみることができます。元の言語のプッシュダウンオートマトンを前提として、循環シフトのオートマトンを作成します。新しいオートマトンはに対応する2つの段階で動作及びXの単語の一部のy のxxはyは元の言語です)。オートマトンは、非末端ポップしたいときはいつでも第一段階では、Aが、その代わりに非末端プッシュすることができAを' ; アイデアは、最初のステージの終わりに、スタックには逆の順序で、xを読み取った後にスタックで見つかったシンボルが含まれるということです。yxyxxyAAxオリジナルのオートマトンによる。2番目の段階(スイッチは非決定的)では、非端末をプッシュする代わりに、非端末A をポップすることができます。元のオートマトンが実際にxの読み取り時にスタックを生成できる場合、新しいオートマトンはスタック全体を正確にポップできます。AAx

編集:詳細は次のとおりです。アルファベット、状態のセットQ、受け入れ状態のセットF非終端記号、、初期状態q 0、および許容される遷移のセットを含むPDAが与えられているとします。各許容遷移の形式であるQ A Q 'α を意味し、そのときの状態でQ、読めA(または= εトップ場合、それは自由な遷移ですその場合には、) -of-スタックがあるA ΣQFΓq0(q,a,A,q,α)qaAa=ϵ(又は A = εスタックが空であることを意味する)、その後PDA状態への移行(これは、非決定論的モデルの)缶 Q '置き換え、 A α Γ *AΓA=ϵqAαΓ

新しいPDAは、新しい非終端持っそれぞれのA Γを。各2つの状態についてのQ Q 'Q及びA Γ { ε }、二つの状態があるQ Q '1 Q Q '2 Aが。開始状態(実際の開始状態はϵ遷移を介してそれらの中から非決定的に選択されます)はAAΓq,qQAΓ{ϵ}(q,q,1),(q,q,2,A)ϵ。各遷移q a A q α には、対応する遷移q q 1 a A q q 1 α およびq q 2 B(q,q,1)(q,a,A,q,α)((q,q,1),a,A,(q,q,1),α)。他のトランジションもあります。((q,q,2,B),a,A,(q,q,2,B),α)

各遷移には、遷移q q 1 a B q q 1 B A α )があります。ここで、B Γ { ε }ε ' =(q,a,A,q,α)((q,q,1),a,B,(q,q,1),BAα)BΓ{ϵ}。すべての最終状態のための Q F、遷移が存在するQ Q "1 ε A Q 0Q "2 ε A 、ここで、 A Γ { εは}ϵ=ϵqF((q,q,1),ϵ,A,(q0,q,2,ϵ),A)AΓ{ϵ}

すべての遷移には、遷移q q 2 A a B q q 2 A B ′があります。 α 、ここで、A Γ { ε }。すべての移行について(q,a,ϵ,q,α)((q,q,2,A),a,B,(q,q,2,A),Bα)AΓ{ϵ}、遷移があるq q 2 B a A q q 2 A ϵ 、ここで B Γ { ε }。すべての遷移q a(q,a,ϵ,q,A)((q,q,2,B),a,A,(q,q,2,A),ϵ)BΓ{ϵ}、「一般化された遷移」q q 2 C a B A q q 2 C ϵ )があります。これらは、中間の新しい状態を通る2つの遷移のシーケンスとして実装されます。遷移q a ϵ q (q,a,A,q,B)((q,q,2,C),a,BA,(q,q,2,C),ϵ) | α | 2は、同様に処理されます。すべての遷移q a A q A には、遷移q q 2 A a B q q 2 A B )があります。どこ B (q,a,ϵ,q,α)|α|2(q,a,A,q,A)((q,q,2,A),a,B,(q,q,2,A),B)。遷移Q A Q 'αは同様に処理されます。最後に、唯一の最終状態 fと遷移q q 2 A ϵ ϵ f ϵ )があります。BΓ{ϵ}(q,a,A,q,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)

(私が見逃したいくつかの移行があるかもしれません、そして私が省略している詳細のいくつかはやや面倒です。)

私たちは言葉の承諾しようとしている思い出してxがyは、元のPDAで受け入れられているが。状態q q 1 は、ステージ1の状態qにあり、元のPDAがxを読み取った後の状態q であることを意味します。状態q q 2 A は類似しており、Aは最後にポップされたA ′に対応します。ステージ1で、我々は、プッシュする許可されているAを"yxxy(q,q,1)qqx(q,q,2,A)AAAをポップする代わりに。xの処理中に生成される非ターミナルごとにそれを行いますが、yの処理中にのみポップされます。ステージ2では、Aをプッシュする代わりに、A 'をポップすることができます。これを行う場合、在庫の上限は実際にはAであることを覚えておく必要があります。これは、スタックに「一時的な」ものが存在しない場合にのみ適用されます。これは、シミュレートされたPDAで、スタックの最上位がϵまたはフォームB 場合と同じです。AxyAAAϵB

これは簡単な例です。各xに対してAをプッシュし、各yに対してAをポップするオートマトンを考えます。新しいオートマトンは、y k x n y n kx k y n x n kの2つの形式の単語を受け入れます。最初の形式の単語の場合、ステージ1はkA 'をプッシュすることで構成され、ステージ2はkA 'をポップすることで構成され、nをプッシュします。xnynAxAyykxnynkxkynxnkkAkA時間 Aを、そしてポップ N - k個の時間 A。2番目の形式の単語の場合、まず k Aをプッシュし、次に k Aをポップし、 n k A ′をプッシュして、ステージ2に遷移し、 n k A をポップします。nkAnkAkAkAnkAnkA

次に、より複雑な例を示します。さまざまなタイプ( "()"、 "[]"、 "<>")のバランスのとれた括弧の言語の場合、括弧の各タイプの直接の子孫は異なるタイプに属している必要があります。たとえば、「([] <>)」は問題ありませんが、「()」は誤りです。各「(」、我々は押しのためにトップ・オブ・スタックがない場合にはAごとに、「)」、私たちは、ポップAを。同様に、BCは「[]」と「<>」に関連付けられています。">)([()] <"という単語を受け入れる方法を次に示します。>を消費し、C A ′をプッシュして、ステージ2に移行します。「(」、飛び出るAをトップ・オブ・スタック思い出しAを。"[()]"を消費し、プッシュしてポップしますA AABCCAAA ; Bをプッシュするとき、「本当の」スタックのトップが Aであることを認識しているため、角括弧を使用できます(>)(()<")にだまされることはありません)。Aをプッシュするとき、スタックの先頭は B(これは ϵでも形式 X ′でもない)なので、 Bも "実際の"スタックの先頭であることを知っているので、丸括弧を使用できます(スタックの最上部のシャドウは Aですが)。最後に、「<」を消費して C をポップします。BABAABϵXBAC


申し訳ありません、理解できません。詳しく説明していただけますか?オートマトンはどこから始まり、その遷移は何ですか?そして、スイッチはすべてのスタックシンボルに対して発生しますか?ありがとう!AA
usul

非常に興味深い提案。ありがとう。私はそれがでシンクさせるために、この小さなにかむます。
ヘンドリック月

@usul、自分で詳細を入力する必要があります。スイッチ(最初のステージ)は、オートマトンがAをポップしたいができない場合に発生し、代わりにA 'をプッシュします。あなたはそれを非決定論的な動きと考えることができます。AAAA
Yuval Filmus、2013年

@ユヴァル:申し訳ありませんが、これを実現することはできません。あなたの考えを理解しているように、新しいオートマトンは、部分をシミュレートし、ポップとプッシュを変更することから始まります。次に、スタック上にαを生成します。元のオートマトンは、yを読み取るときにαで始まります。オリジナルは押すことから始まりますか?次に、nweオートマトンが空のスタックからポップする必要があります。私はまだあなたの直感は価値があると思いますが、いくつかの特別な注意が必要と思われます。yααy
Hendrik Jan

@ヘンドリク、申し訳ありませんが、あなたの反例をたどることはできません。新しいオートマトンは空のスタックからポップする必要があると思いますか?
Yuval Filmus

4

グレイバッハの正規形を考えます。あなたが唯一の変更の制作に必要なシフト言語構築するため、S A 1 ... A N αを、新たな非終端追加S "のように振る舞うことをSがするために使用し、ケースにはいくつかのいくつかの生産は、参照SSαA1AnSA1AnαSSS


おかげで、これは1文字のシフトです。私は、任意の数の文字による一般的なローテーションに興味があります。
Hendrik Jan

3
shift1(L)shiftn(L)=shift1(shift1((L))nshiftn(L)n=2SαABAβCSαβCB

1
nnL={anbnn0}{akbnak+=n}{bkanbk+=n}

@HendrikJan、なるほど。問題は有限シフトに関するものであると誤って思いました。私は私の答えを再考します...
KarolisJuodelėJan

4

古いHopcroftとUllmanの古典的なIntroduction to Automata Theory(1979)をチェックするのは良い考えであることがわかりました。サイクル中の閉鎖は演習6.4cであり、S **とマークされています。二重の星は、それが(本の中で)最も難しい問題の1つであることを意味します。幸い、Sは、それがソリューションで選択された問題の1つであることを示しています。

S=X1,X2,,Xnx1,x2,,xny1,y2,,ynx1x2xnyny2y1xi

S,X^n,X^2,X^1yn,,y2y1xn,,x2x1yny2y1x1x2xn

構造の詳細は本に記載されています。

これが、Yuvalによる(受け入れられた)ソリューションを思い出させることに注意してください。ポップされる代わりにプッシュされる非ターミナルは、スタック上で逆の順序になります。ツリーの逆さまに非常に似ています。

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