反復補題を利用した正規言語の判別問題

問題

(1)下記の言語が正規言語ではないことを反復補題を利用して証明せよ。
(1)L=(an,bn|n0)
(2)自由文脈文法G1=(N1,Σ1,P1,S1)の生成規則の集合P1を与えよ。ただし、N1=S1,Σ1=(a,b),S1はそれぞれ非終端記号の集合、終端記号の集合、開始記号とする。

はじめに

オートマトンを試験範囲とする大学で、たまに出題される証明問題です。ネットで検索すると、講義資料では説明されていますが、文章として説明する場所が無いように見えました。ですので、今回紹介します。

※頻出問題としては、ある言語Lが与えられ、それに対応するオートマトンを作成する問題があります。こちらに関しては別サイトでの解説が豊富なので、今回は省略します。

標記の問題、皆様はどのような証明を考えますでしょうか。

直感的な証明方法

私が一番最初に考える証明方法は下記です。

an,bnであるため、aが出た回数分bが発生する必要がある。しかし、nに上限値が無いため、aが出た回数を記憶するために必要な状態が限りなく必要。

状態を規定できないため、正規言語ではない。

こちらの証明方法、ネットでもよく説明されていると思います。実際、試験という限りのある時間であれば、こちらで満点近く得点できるのではないかと考えています。

ただ、少し直感的な説明であることが否めません。数式を用いて、厳密的な証明ができないのでしょうか。

そういった時に出てくる方法が、今回紹介する「反復補題」です。上記の証明方法を背理法として説明しているに過ぎないのですが、実際に厳密的な証明を求められたときに役立つ考え方と思います。

反復補題を使用した証明方法

反復補題とは

与えられた言語Lが正規言語ならば、Lの長さがm以上の任意の系列wが存在します。

また、w=xyzと適当な文字列xyzに分割することができ、以下の条件を満たすことを言います。

  1. 任意の整数i≧0に対し、xyizL
  2. |y|1
  3. |xy|m

w=xyzの文字列のうち、xとzの間にあるyの個数を変化させても、その結果発生した文字列は変わらずLに属することを指しています。

今回は、背理法を用いて上記と矛盾することを証明します。

これにより、言語Lは正規言語ではないことが分かります。しかし、文脈自由言語ではあります。ですので、ある生成規則P1に基づいて表現できるものになります。(2)で詳しい説明をしますが、生成規則を与えるには、n=0,1,2と数を上げていき(実験)、共通の生成ルールを見つけていくことが解答の定石になります。

解答例 (1)

L=(an,bn|n0) が正規言語とすると、ある自然数mを使用して文字列w=ambmが存在する。

w=xyzとする。反復補題の条件2により、yは空集合ではない。反復補題の条件3により、|xy|≦mである。

このとき、yは文字aのみを含む。yに属する文字aの個数をk個(1≦k≦m)とすると、xzはaをm-k個、bをm個含み、個数は一致しない。

このとき、反復補題の条件1 xyizLが成立するか確認する。i=0とすると、xz=xyi=0zで、仮定よりLに属するはず。

しかし、前述の通りxzにあるaとbの個数は一致しないため、仮定に矛盾する。

反復補題1に反するため、xzはLに含まれない。

解答例 (2)

まず、n0より、空集合が考えられます。

n=1のとき、abn=2のとき、aabbn=3のとき、aaabbbだから

aS1bの生成規則を用いれば、任意のnに対して言語Lを表現できる。

以上より、求める生成規則は、P1=(aS1b|)

最後に

オートマトンの問題は、文字列の規則性、状態遷移図の概要を手書きで実験して、その後与えられた問に答えることが多いです。

正規言語でないことの厳密な証明は、本問の考え方をベースに行います。

他、正規言語でない文字列は他にもあるため、十分に演習を積むことをオススメします。

参考文献

計算理論とオートマトン言語理論:丸岡 章 (著) P79,80

タイトルとURLをコピーしました