文脈自由言語の反復補題のソースを表示
←
文脈自由言語の反復補題
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''文脈自由言語の反復補題'''(ぶんみゃくじゆうげんごのはんぷくほだい、{{lang-en-short|Pumping lemma for context-free languages}})は、全ての[[文脈自由言語]]が持つ属性を与える[[反復補題]]である。'''Bar-Hillelの補題'''や、'''uvwxy定理'''とも呼ばれる。その主たる用法は、ある言語が[[文脈自由言語]]でないことを証明することである。 文脈自由言語の反復補題は、任意の[[文脈自由言語]]でない言語が文脈自由でないことを証明するのに使えるわけではない。場合によってはより汎用化された[[オグデンの補題]]を使う必要がある。 == 形式的定義 == 任意の文脈自由言語 ''L'' に対して,(反復長 (pumping length) と呼ばれる)ある正の整数 ''p'' > 0 が存在し、''L'' 内の |''w''| ≥ ''p'' となる任意の文字列 ''w'' を以下のように表すことができる: :''w'' = ''uvxyz'' このとき、文字列 ''u''、''v''、''x''、''y''、''z'' について |''vxy''| ≤ ''p''、|''vy''| ≥ 1、そして以下が成り立つ。 : 全ての0以上の整数 ''i'' ≥ 0 について ''uv<sup> i</sup>xy<sup> i</sup>z'' が ''L'' に含まれる。 なお、文字列 ''a'' と ''b'' があるとき ''ab'' はその連結した文字列を表し、|''a''| は ''a'' の長さを表す。また、''a<sup>i</sup>'' は ''a'' を ''i'' 回反復した文字列を表す。 == 解説 == 文脈自由言語の反復補題(以下、単に反復補題と略記)は、全ての文脈自由言語が持つと保証されている属性を表している。その属性は、当該言語に含まれる長さ ''p'' 以上の全ての文字列について成り立つ。ここで、''p'' は定数であり、反復長と呼ばれ、個々の文脈自由言語によって異なる。''s'' が長さ ''p'' 以上の文字列とする。反復補題によれば、''s'' は5つの部分文字列 <math>s = uvxyz</math> に分けられ、''vy'' は空でない文字列で、''vxy'' の長さは最大で ''p'' であり、''s'' の中の ''v'' と ''y'' に相当する部分を任意の同じ回数繰り返して生成される文字列も同じ言語に含まれる(ゼロ回繰り返す場合も含まれ、その場合 ''v'' と ''y'' に相当する部分がない文字列 ''uxz'' となる)。このような ''v'' と ''y'' の複製を追加していくことを「反復; pumping」と呼び、そのため反復補題と呼ばれている。 反復補題で言語が文脈自由でないことを証明するには、その言語に含まれる長さ ''p'' 以上の文字列 ''s'' が上述の属性を持たないことを示せばよい。つまり、反復によってその言語に含まれない文字列が生成されることを示す。 == 補題の利用例 == 反復補題は、特定の言語 <math> L </math> が文脈自由言語ではないことを証明する際によく使用される。これは、任意の長さの文字列 <math> s </math> が <math> L </math> に属しているものの、反復操作を行うと <math> L </math> の外に出る文字列を生成することを示すことで証明される。 例えば、集合 <math> S \subset \mathbb{N} </math> が無限であるが(無限の)[[等差数列]]を含まない場合、言語 <math> L = \{a^n : n \in S\} </math> は文脈自由ではない。特に、<math>S</math> が[[素数]]全体や[[平方数]]全体からなる言語は文脈自由言語ではない。 具体例として、言語 <math> L = \{ a^n b^n c^n \mid n > 0 \} </math> は、[[背理法]]で反復補題を使い文脈自由でないことが証明できる。まず、<math> L </math> が文脈自由であると仮定する。反復補題によれば、言語 <math> L </math> の反復長を表す整数 <math> p </math> が存在する。このとき、文字列 <math> s = a^p b^p c^p </math> を <math> L </math> に属する文字列として考える。 反復補題によれば、文字列 <math> s </math> は <math> s = uvwxy </math> の形式で表現できる。 ここで、部分文字列 <math> u, v, w, x, y </math> は以下の条件を満たす: # <math> |vx| \geq 1 </math> # <math> |vwx| \leq p </math> # 任意の整数 <math> i \geq 0 </math> に対して <math> uv^i wx^i y \in L </math> <math> s </math> の選び方と <math> |vwx| \leq p </math> という条件により、部分文字列 <math> vwx </math> は高々2種類の異なる記号しか含まないことがわかる。このため、<math> vwx </math> としてあり得る文字列は以下の5つに限定される: # <math> vwx = a^j </math> (<math> j \leq p </math>) # <math> vwx = a^j b^k </math> (<math> j + k \leq p </math>) # <math> vwx = b^j </math> (<math> j \leq p </math>) # <math> vwx = b^j c^k </math> (<math> j + k \leq p </math>) # <math> vwx = c^j </math> (<math> j \leq p </math>) 各場合について、<math> uv^i wx^i y </math> が <math> i \neq 1 </math> のとき各記号の数が等しくならないことを簡単に確認できる。例えば、<math> uv^2 wx^2 y </math> は <math> a^i b^i c^i </math> の形式にならないが、これは <math> L </math> の定義に矛盾する。したがって、初めの仮定である「<math> L </math> が文脈自由である」という主張は誤りであることが示された。 1960年、Scheinberg は補題の先駆けを用いて、言語 <math> L = \{a^n b^n a^n \mid n > 0\} </math> が文脈自由ではないことを証明した。<ref>{{cite journal |author=Stephen Scheinberg |year=1960 |title=Note on the Boolean Properties of Context Free Languages |url=https://core.ac.uk/download/pdf/82210847.pdf |journal=Information and Control |volume=3 |issue=4 |pages=372–375 |doi=10.1016/s0019-9958(60)90965-7 |doi-access=free}} Here: Lemma 3, and its use on p.374-375.</ref> 反復補題は、ある言語が文脈自由でないことを証明する上で便利なツールだが、文脈自由言語を完全に特徴づけるものではない。言語が反復補題の条件を満たさない場合、その言語は文脈自由ではないことが確立される。一方で、文脈自由ではないにもかかわらず、反復補題の条件を満たす言語も存在する。 例えば、以下の言語である: <math>L = \{ b^j c^k d^l \mid j, k, l \in \mathbb{N} \} \cup \{ a^i b^j c^j d^j \mid i, j \in \mathbb{N}, i \geq 1\}</math> この場合、文字列 <math> s = b^j c^k d^l </math> に対して <math> j \geq 1 </math> の場合、<math> vwx </math> を <math> b </math> のみから構成し、また <math> s = a^i b^j c^j d^j </math> に対して <math> vwx </math> を <math> a </math> のみから構成すれば、いずれの場合も反復された文字列は <math> L </math> に属する。<ref>{{cite book| author=John E. Hopcroft, Jeffrey D. Ullman| title=Introduction to Automata Theory, Languages, and Computation| year=1979| publisher=Addison-Wesley| isbn=0-201-02988-X| url=https://archive.org/details/introductiontoau00hopc}} Here: sect.6.1, p.129</ref> == 脚注 == {{Reflist}} == 参考文献 == * {{cite book|author = Michael Sipser | date = 1997年 | title = Introduction to the Theory of Computation | publisher = PWS Publishing | id = ISBN 0-534-94728-X}} Section 1.4: Nonregular Languages, pp.77–83. Section 2.3: Non-context-free Languages, pp.115–119. == 関連項目 == * [[正規言語の反復補題]] * [[オグデンの補題]] * [[形式言語]] {{DEFAULTSORT:ふんみやくしゆうけんこのはんふくほたい}} [[Category:形式言語]] [[Category:補題]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Cite book
(
ソースを閲覧
)
テンプレート:Cite journal
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
文脈自由言語の反復補題
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報