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