「逆転した」正規言語が正規であることを示す方法


19

私は次の質問にこだわっています:

「通常の言語とは、有限オートマトンが受け入れる言語です。この事実を考えると、言語が有限オートマトンに受け入れられると、も有限オートマトンに受け入れられますはすべての単語逆転しました。」LLRLRL


1
さて、を受け入れるオートマトンを構築しようとしましたか?例を描くと役立つかもしれません。LR
ジル 'SO-悪であるのをやめる

お返事ありがとうございます。これを行う方法がわかりません。L ^ Rは同じ「アルファベット」から構成されているため、通常の言語になるため、何らかの言語で受け入れられます。しかし、それを証明する方法や、例を描く方法がわかりません。

2
ようこそ!宿題をたたくようなそのような基本的な質問については、質問に質問者の(重要な)事前の仕事が含まれているのが好きです。あなたは確かにあなたが共有できるものを試しました(それを使用して正しい方向に導くことができます)。そうでない場合は、定義を再確認し、Gillesのアドバイスに注意することをお勧めします。
ラファエル

3
@Victoria「同じ「アルファベット」から構築されているため、通常の言語にもなります」-ああ、nonono。、とはすべて同じアルファベットで定義されていますが、非常に異なる言語クラスに分類されます。{ n個のB M N | nはM N } { n個のB N N | N N }{anbmaon,m,oN}{anbmann,mN}{anbnannN}
ラファエル

1
この章の最後にある他の質問では、特定のアルファベット上のすべての回文を受け入れることができる有限オートマトンはないことを証明するように求められます。この証拠は、可能なすべてのパリンドローム(長さの制限なし)を検討する場合、無限の数の状態があるという事実にかかっていると思いますが、マシンは有限状態マシンです。

回答:


26

したがって、通常の言語与えられた場合、(本質的に)有限オートマトンによって受け入れられることがわかっているので、入力がは文字列です。物事を単純化するために、受け入れ状態は1つだけだと主張することさえできます。逆の言語を受け入れるために必要なことは、遷移の方向を逆にし、開始状態を受け入れ状態に変更し、受け入れ状態を開始状態に変更することだけです。次に、元のマシンと比較して「後方」にあり、言語を受け入れるマシンがあります。L L RLLLR


ルーク、ありがとうございます。あなたの言ったことは理解できたと思います。あなたはスポットです-私は、有限オートマトンでの実際的な経験は全くありません!私はあなたに「賛成票」を投じますが、どうやら十分なポイントがありません。ごめんなさい!

いいですね、あなたが好きな答えを「受け入れる」ことができるはずです(投票ボタンの下にチェックマークがあるはずです)。また、Saadtaameのより正式な答えは、私の次の素晴らしいステップです。
ルークマティソン

5
受け入れ状態が1つだけであると想定するには、遷移を許可するか、ます。両方とも本当の制限ではないので、答えは大丈夫です。ε LϵϵL
ヘンドリック

1
ええ、その考えは私には明らかなようです。難しい部分は、それが正しいことを確認することです。
誰も

24

あなたは常にで文字列を受け入れる有限オートマトン構築できることを示さなければならない内の文字列を受け入れ有限オートマトン与え。これを行う手順を次に示します。LRL

  1. オートマトンのすべてのリンクを逆にします
  2. 新しい状態を追加します(と呼びます)qs
  3. 状態からラベルが付いたリンクをすべての最終状態にしますϵqs
  4. すべての最終状態を通常状態に変えます
  5. 初期状態を最終状態に変える
  6. メイクは初期状態をqs

これらすべてを形式化しましょう。定理を述べることから始めます。

定理。が正規言語の場合、です。LLR

レッツ NFAこととしましょう。 -NFA以下に定義言語受け付ける。A=(QA,ΣA,δA,qA,FA)L=L(A)ϵARLR

  1. AR=(QA{qs},ΣA,δAR,qs,{qA})およびqsQA
  2. pδA(q,a)qδAR(p,a)Σ Aの Q P Q A、ここでおよびaΣAq,pQA
  3. ϵclosure(qs)=FA

証明。まず、次のステートメントを証明:からパスしにで標識場合に限り、からパスにしてで標識(の逆用)。証明はの長さの帰納法によるものです。qpAwpqARwRwq,pQAw

  1. ベースケース: 定義により保持|w|=1δ A R
    δAR
  2. 帰納法:ステートメントが長さ単語に対して成立し、および う ことを我々は知っているおよびは、シンボル未満の単語です。帰納法の仮説により、および。これは、ます。<n|w|=nw=xaP δ * AQ W = δ * AQ X A δ * AQ X 、A = P ' δ AP 'P 'δ * AQ
    pδA(q,w)=δA(q,xa)
    δA(q,xa)=pδA(p,a) pδA(q,x)
    x、n個のP 'δ A RP Q δ * A RP 'X Rのq δ * A RP XのRをanpδAR(p,a)qδAR(p,xR)qδAR(p,axR)pδA(q,xa)

まかせおよびいくつかのためと置換ための保証その。で標識されたパスがあるためから内のすべての状態に(の定義3.)およびすべての状態からパス状態にで標識、パスが存在しますで標識したからに。これは定理を証明します。q=qAp=ssFAwRaxRqδAR(s,wR) sFAϵqsFAARFAqAwRϵwR=wRqsqA

これはでもあることを証明していることに注意してください。(LR)R=L

書式に誤りがある場合、または私の証拠に欠陥がある場合は編集してください。


1
とはどういう意味ですか?ϵclosure(qs)=FA
-user124384

しかし、決定論的な正規言語に移行することはできません!?
ユカシマフクサイ18年

@yukashimahuksay本当ですが、いつでも非決定的有限オートマトンを取得して、それを決定論的有限オートマトンに変えることもできます。それらは同等です。
プロQ

12

上記のオートマトンベースの変換に追加するために、の正規表現を正規表現に変換する方法を示すことにより、反転時に正規言語が閉じていることを証明することもできます。そうするために、ある言語正規表現を入力として受け入れ、言語正規表現を生成する正規表現の関数を定義します。これは、正規表現の構造に帰納的に定義されます。LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. REV(a)=a foraΣ
  4. REV(R1R2)=REV(R2)REV(R1)
  5. REV(R1|R2)=REV(R1)|REV(R2)
  6. REV(R)=REV(R)
  7. REV((R))=(REV(R))

この構造が演習として正しいことを正式に証明できます。

お役に立てれば!


こんにちは!文字列に対して右アンカーの一致を最適化する方法として、逆正規表現のアイデアを考えていたので、私はここに着陸しました:文字を逆オートマトンに逆順でフィードします。ワンパス。正規表現の反転の代数的性質を書き留めましたrev()。表記法を使用しても、テーブルとほぼ正確に一致します。:)私も置くREV(R1&R2) = REV(R1)&REV(R2); 共通部分を持つ正規表現の実装があります。はい; 私は、おそらくR\r逆に演算子を追加することを考えています(逆の先行する正規表現要素)。
カズ

トリッキーなものがあります:REV(〜R)の代数規則は何ですか:正規表現否定?REV(~R)は、Rの外側のすべての文字列のセットの逆です。それは、~REV(R)Rで示されるセットの逆の外側のすべての文字列のセットと同じですか?のパリンドロームRもにあるため、これはまったく明確ではありませんREV(R)
カズ

1

その場合証明する、正規表現を使用して、の正規言語であり、次いで、\ EMPH {逆転}、、また規則的です。特に、を記述する正規表現が与えられた場合、を記述する正規表現に変換する方法を誘導により示します。あなたの証明はNFAに頼ることはできません。 LLLR={wR:wL}LLR

を記述する正規表現が与えられていると仮定します。最初に連結演算子()を見てみましょう。次に、より高度な演算子に移ります。したがって、連結のケースでは、連結対象の長さを扱います。したがって、最初にからへのすべての連結を解除します。これらを扱うときは、可能な限りコンポーネントを分割します:ですが、もちろん、異なる理解の間の連想順序をすることはできません。Labab(aba)b(aba)b

ときR

とき、我々はすでにメカニズムがない変更を行いますので、逆転された空の文字列を持っていますs=ϵ

ときちょうど手紙である、のように、逆転はちょうどその手紙であり、ssΣs

場合、単一の構成要素があるため、その構成要素を反転するだけであるため、s=σσR

kが奇数である場合、我々は、のように書くことができる正規表現有する。これらの偶数の長さの文字列の反転は簡単です。0インデックスをkインデックスに単に切り替えます。次に、1つのインデックスをk-1インデックスに切り替えます。各要素が一度切り替えられるまで続けます。したがって、最後の要素はreg exの最初であり、最初は最後です。最後から2番目が2番目で、2番目が最後から2番目です。したがって、逆の文字列(最初の文字が最後など)を受け入れる逆の正規表現があります。もちろん、各構成要素を逆にします。したがって、s=(σ0σ1...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σ1Rσ0R)

kが偶数である場合、我々は、のように書くことができる一般的な正規表現有する。これらの偶数の長さの文字列の反転は簡単です。0インデックスをkインデックスに単に切り替えます。次に、1つのインデックスをk-1インデックスに切り替えます。各要素が1回切り替えられるまで続けますが、k / 2要素(kは偶数であるため整数)。したがって、最後の要素はreg exの最初であり、最初は最後です。最後から2番目が2番目で、2番目が最後から2番目です。したがって、逆の文字列を受け入れる逆の正規表現があります(最初の文字が最後など)。そしてその中間の手紙。そしてもちろん、各構成要素を逆にします。したがって、我々は得るだろうs=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σk/2R...σ1Rσ0R)

さて、難しい部分は完了です。演算子を見てみましょう。これは単にセットの結合です。だから、二つの文字列、与えられた、逆のあるだけで。組合は変わりません。そしてこれは理にかなっています。これは、セットに文字列を追加するだけです。セットに追加される順序は問題ではありません。重要なのは、それらの順序です。s1,s2s1s2s1Rs2R

kleene star演算子は同じです。セットに文字列を追加するだけで、文字列の解釈をどのように解釈するかはわかりません。そのため、文字列 kleene starを反転するには、です。反転は、それらを通過するだけです。s((sR))

したがって、これを逆にするには、ルールに従うだけです。外側のユニオンを逆にするには、単にその2つのコンポーネントを逆にします。これを逆にするには: kleene star、その中にあるものを単に反転します。次に、連結を逆にするために、インデックスを作成し、最小で最大に切り替えます。したがって、から始めてを取得します。その1文字を反転するには、ベースケースに到達してを取得します。上記で概説したこのプロセスは、この変更の帰納的記述を説明しています。(((ab)(a))((ab)(b)))R((ab)(a))(((ab)(a))R)A RA B RA RA ((ab)(a))R((a)R(ab)R)(a)R(a)

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