私はこの質問を見て、ポンピングの補題が何であるかについて興味がありました(ウィキペディアはあまり役に立ちませんでした)。
言語が特定のクラスに入るには、基本的には理論的な証明である必要があることを理解していますが、それを超えると、実際にはわかりません。
非数学者/計算機科学の博士号が理解できる方法で、かなり詳細なレベルでそれを説明しようとする人はいますか?
回答:
ポンピング補題は、言語が規則的ではないことを示す簡単な証明です。つまり、有限状態マシンを構築することはできません。正規の例は言語(a^n)(b^n)
です。これは、任意の数のa
sの後に同じ数のb
sが続く単純な言語です。だから文字列
ab
aabb
aaabbb
aaaabbbb
などは言語ですが、
aab
bab
aaabbbbbb
などではありません。
これらの例のFSMを構築するのは簡単です。
これはn = 4までずっと機能します。問題は、私たちの言語がnに制約を課しておらず、有限状態マシンは有限でなければならないということです。このマシンにいくつの状態を追加しても、誰かが私に入力を与えることができます。ここで、nは状態の数に1を加えたものに等しく、私のマシンは失敗します。したがって、この言語を読み取るために構築されたマシンが存在する可能性がある場合、状態の数を有限に保つために、どこかにループが存在する必要があります。これらのループを追加すると:
私たちの言語のすべての文字列が受け入れられますが、問題があります。最初の4a
秒後、マシンa
は同じ状態のままであるため、入力された秒数のカウントを失います。つまり、4a
を超えると、b
sを追加せずに、文字列に必要な数のsを追加しても、同じ戻り値を取得できます。これは、文字列が次のことを意味します。
aaaa(a*)bbbb
(a*)
任意の数のa
sを表すと、明らかにすべてが言語であるわけではありませんが、すべてがマシンによって受け入れられます。この文脈では、ストリングの一部を(a*)
ポンピングできると言えます。有限状態マシンが有限であり、nが制限されていないという事実は、言語のすべての文字列を受け入れるすべてのマシンがこのプロパティを持たなければならないことを保証します。マシンはある時点でループする必要があり、ループする時点で言語をポンピングできます。したがって、この言語用に有限状態マシンを構築することはできず、言語は規則的ではありません。
ことを忘れないでください正規表現と有限状態機械が等価である、そして置き換えるa
と、b
開口部と、お互いの中に埋め込むことができますHTMLタグを閉じ、そしてなぜあなたは見ることができ、パースHTMLに正規表現を使用することはできません
a^n b^n
が非規則的であることを決定的に示すものでも、ポンピング補題についての直感の多くを提案するものでもありません。
これは、特定の言語が特定のクラスに属することができないことを証明することを目的としたデバイスです。
バランスの取れた括弧の言語を考えてみましょう(記号 '('および ')'を意味し、通常の意味でバランスの取れたすべての文字列を含み、そうでない文字列は含まれません)。ポンピング補題を使用して、これが規則的でないことを示すことができます。
(言語は可能な文字列のセットです。パーサーは、文字列がその言語にあるかどうかを確認するために使用できる一種のメカニズムであるため、言語内の文字列と外部の文字列の違いを判別できる必要があります。言語。言語を認識できる通常の(またはその他の)パーサーが存在する場合、その言語は「通常」(または「コンテキストフリー」または「コンテキストセンシティブ」など)であり、言語内の文字列とそうでない文字列を区別します。言語。)
LFSRコンサルティングは良い説明を提供しました。正規言語のパーサーは、ボックスと矢印の有限のコレクションとして描画できます。矢印は文字を表し、ボックスはそれらを接続します(「状態」として機能します)。(それよりも複雑な場合は、正規言語ではありません。)ボックスの数よりも長い文字列を取得できる場合は、1つのボックスを複数回通過したことを意味します。つまり、ループがあり、ループを何度でも通過できます。
したがって、正規言語の場合、任意の長さの文字列を作成できる場合は、それをxyzに分割できます。ここで、xはループの開始に到達するために必要な文字、yは実際のループ、zは任意の文字列です。ループの後で文字列を有効にする必要があります。重要なことは、xとyの全長が制限されていることです。結局のところ、長さがボックスの数よりも大きい場合、これを実行している間に明らかに別のボックスを通過したため、ループが発生します。
したがって、バランスの取れた言語では、左括弧をいくつでも書くことから始めることができます。特に、特定のパーサーについて、ボックスよりも多くの左パーレンを書き込むことができるため、パーサーは左パーレンの数を知ることができません。したがって、xはある程度の左親であり、これは修正されています。yもいくつかの左親であり、これは無期限に増加する可能性があります。zはいくつかの正しい親であると言えます。
これは、43個の左パレンと43個の右パレンの文字列がパーサーによって認識される可能性があることを意味しますが、パーサーは、44個の左パレンと43個の右パレンの文字列からそれを判断できません。これは、私たちの言語ではありません。パーサーは言語を解析できません。
可能な通常のパーサーには固定数のボックスがあるため、常にそれよりも多くの左パーレンを書き込むことができ、ポンピング補題によって、パーサーが認識できない方法で左パーサーを追加できます。したがって、バランスの取れた括弧言語は正規表現では解析できず、したがって正規表現ではありません。
素人の言葉で理解するのは難しいことですが、基本的に正規表現には空でない部分文字列が含まれている必要があります。この部分文字列は、新しい単語全体がその言語で有効なまま、何度でも繰り返すことができます。
では実際、ポンプの補題は、正しい言語を証明するのに十分ではなく、(フリーのコンテキスト正規または)ポンプの補題を示すことによって、言語のクラスに収まらない言語を背理法を行うと、表示する方法としてはありませんんそれのために動作しません。
単純なポンピング補題は、とりわけ有限オートマトンによって記述される文字列のセットである正規言語の補題です。有限自動化の主な特徴は、状態によって記述される有限量のメモリしかないことです。
ここで、有限オートマトンによって認識され、自動化のメモリを「超える」のに十分な長さの文字列があるとします。つまり、状態を繰り返す必要があります。次に、部分文字列の先頭のオートマトンの状態が部分文字列の最後の状態と同じである部分文字列があります。部分文字列を読み取っても状態は変わらないため、オートマトンを賢くすることなく、任意の回数削除または複製することができます。したがって、これらの変更された文字列も受け入れる必要があります。
また、文脈自由言語には、文字列の2つの場所で括弧が一致していると直感的に見なされる可能性のあるものを削除/挿入できる、やや複雑なポンピング補題があります。
定義上、正規言語は有限状態オートマトンによって認識される言語です。それを迷路と考えてください。状態は部屋であり、遷移は部屋間の一方通行の廊下であり、最初の部屋と出口(最後の)部屋があります。「有限状態オートマトン」という名前が示すように、部屋の数には限りがあります。廊下を旅するたびに、その壁に書かれた手紙を書き留めます。最初の部屋から最後の部屋まで、文字がラベル付けされた廊下を正しい順序で通過するパスを見つけることができれば、単語を認識することができます。
ポンピングの補題は、以前に行った部屋に戻らずに迷路をさまようことができる最大の長さ(ポンピングの長さ)があることを示しています。アイデアは、特定のポイントを過ぎて歩くことができる個別の部屋が非常に多いため、迷路を出るか、トラックを横断する必要があるということです。ラビリンスでこのポンピングの長さよりも長いパスを歩くことができた場合は、迂回しています:削除できる(少なくとも1つの)サイクルをパスに挿入しています(ラビリンスの交差点を小さい単語を認識する)または無期限に繰り返される(ポンピングされる)(超長い単語を認識できるようにする)。
文脈自由言語にも同様の補題があります。これらの言語は、プッシュダウンオートマトンによって受け入れられる単語として表すことができます。プッシュダウンオートマトンは、スタックを利用して実行する遷移を決定できる有限状態オートマトンです。それにもかかわらず、状態の数はまだ有限であるため、プロパティの正式な表現を介しても、上記で説明した直感は少し複雑になる可能性があります。
素人の言葉で言えば、あなたはそれをほぼ正しいと思います。これは、言語がそうではないことを証明するための証明手法(実際には2つ)です。特定のクラスに。
たとえば、無限の数の文字列を含む正規言語(regexp、automataなど)について考えてみます。ある時点で、starblueが言ったように、文字列がオートマトンに対して長すぎるため、メモリが不足します。これは、オートマトンがあなたが持っている文字列のコピーの数を知ることができない文字列のチャンクがなければならないことを意味します(あなたはループに入っています)。したがって、文字列の途中にその部分文字列のコピーがいくつあっても、その言語を使用できます。
このプロパティを持っていない言語を持っている場合、すなわち、と十分に長い文字列があることをこの手段NOは、あなたが任意の回数を繰り返し、まだ言語であることをサブストリングは、その後、言語は、通常ではありません。
例えば、この言語取るL = NのBは、N。
ここで、上記の言語の有限オートマトンをいくつかのnについて視覚化してみてください。
もし、N = 1、列W = AB。ここで、n = 2の場合、ループなしで有限オートマトンを作成できます。文字列w = a 2 b 2ます。ここでは、ループなしで有限オートマトンを作成できます
もしN = P、列W = PとBのP。基本的に、有限オートマトンは3段階で想定できます。第1段階では、一連の入力を受け取り、第2段階に入ります。同様に、ステージ2からステージ3まで。これらのステージをx、y、zと呼びましょう。
いくつかの観察があります
したがって、ステージyの有限オートマトン状態は、入力「a」および「b」を取得できる必要があります。また、可算できないaおよびbをこれ以上取得することはできません。
したがって、ステージyの設計は純粋に無限です。私たちは、それはいくつかのループを置くことによって有限作ることができると私たちはループを置けば、有限オートマトンは超えて言語を受け入れることができ、L = n個のBをn個。したがって、この言語では、有限オートマトンを構築することはできません。したがって、それは定期的ではありません。
これはそれ自体の説明ではありませんが、簡単です。a ^ nb ^ nの場合、FSMは、bがすでに解析されたaの数を認識し、同じn個のbを受け入れるように構築する必要があります。FSMはそのようなことを単純に行うことはできません。