正規言語について

30
正規言語について

Upload: jumpei-ogawa

Post on 07-Jul-2015

3.851 views

Category:

Technology


1 download

DESCRIPTION

大学の授業用に作成した正規言語と反復補題の解説スライドです。 正規言語については十分に理解しているわけではないので、多分色々と間違っていると思いますが、雰囲気をつかむのには役立つかも知れません。

TRANSCRIPT

Page 1: 正規言語について

正規言語について

Page 2: 正規言語について

有限オートマトン

入力 =SUM(B3,B4)

= S U M

(

大文字アルファベット1文字

数字

,

)

Page 3: 正規言語について

有限オートマトン

入力 =SAM(B3,B4)

= S U M

(

大文字アルファベット1文字

数字

,

)

不受理! Error!

Page 4: 正規言語について

正規言語?

定義: 決定性有限オートマトンによって受理可能な文字列

Excel の式の例では、=SUM(B8,C2, A9)

などは、先程のオートマトンで受理されるので、正規言語になる

Page 5: 正規言語について

応用例: コンパイラ

コンパイラ (プログラミング言語を、0と1で書かれた機械語に変換するプログラム)

Dim str = “abcde” as String

なんてのを、ちゃんと文法通りに文字列が並んでいるかチェックし、受理されない場合はコンパイルエラーを出す

Page 6: 正規言語について

応用例: 正規表現

送信者が a*@u-tokyo.ac.jp のメールを、「情報教育」フォルダに振り分けると設定[email protected]

[email protected]

a で始まり @u-tokyo.ac.jp で終わるアドレスの全てが「情報教育」フォルダに入る

※1 本当はこれは正規表現ではなくワイルドカードなのですが、一番わかり易いので、その辺りはご容赦

Page 7: 正規言語について

a*@st.u-gakugei.ac.jp のオートマトン

入力 [email protected]

a @ u -

a~z の中のうちの一文字又は0~9のうちの一文字

t……

Page 8: 正規言語について

反復補題 (Pumping Lemma)

Page 9: 正規言語について

反復補題の厳密な定義

L が正規言語ならば、ある定数 n が存在して、L に属する長さが n 又はそれ以上の全ての語 W

に対して、次のような語 X, Y, Z が存在するW = XYZ

(XY の文字列の長さ) <= n

(Y の文字列の長さ) >= 1

k = 1,2,3,... に対して、XYkZ はL に属するここで、Yk は語 Y が k 個繰り返される事を意味する以上、教科書よりコピペ

Page 10: 正規言語について

もう少しましな反復補題の説明

正規言語の集合を考え、これをLとする。この集合に含まれる適当な文字列を用意する。

aaabbbbccccc

定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。

ここでは n = 8 とする。この文字列を三つに分割してみる。

…但し以下の条件をみたすように真ん中の文字列が1文字以上

Page 11: 正規言語について

もう少しましな反復補題の説明

aaa | bbbb | ccccc

一文字以上

n文字(ここでは8文字)以下

真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは8文字) 以下

Page 12: 正規言語について

もう少しましな反復補題の説明

aaa | bbbb | cccccaaa | bbbb bbbb | cccccaaa | bbbb bbbb bbbb | ccccc

aaa | bbbb bbbb bbbb bbbb | cccccaaa | bbbb bbbb bbbb bbbb bbbb | ccccc

真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは8文字) 以下真ん中をどれだけ増やしても、これらは全部正規言語になる!

Page 13: 正規言語について

もう少しましな反復補題の説明

このような条件が、aaabbbbccccc だけでなく、全ての正規言語に対して当てはまる、という補題

Page 14: 正規言語について

反復補題 (Pumping Lemma)

全ての正規言語には、真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは8文字) 以下真ん中をどれだけ増やしても、これらは全部正規言語になる!

という三つの条件を全て満たすような定数 n がそれぞれ存在する。

Page 15: 正規言語について

で?

Page 16: 正規言語について

反復補題の用途

与えられた言語が正規言語でないことの証明に用いる

Page 17: 正規言語について

回文が正規言語でない証明

ある条件を満たす文字列の集合 L を考え 今回は L: 回文の集合とする。

Lを正規言語である 集合 と仮定し、その矛盾を導くこの集合に含まれる適当な文字列を用意する。

akasaka

定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。

ここでは n = 6 とする。この文字列を三つに分割してみる。

Page 18: 正規言語について

n=6 で akasaka は条件に合致する?

akas | ak | a

1文字以上

n文字(ここでは6文字)以下

真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下

Page 19: 正規言語について

n=6 で akasaka は条件に合致する?

akas | ak | aakas | ak ak | aakas | ak ak ak | aakas | ak ak ak ak | aakas | ak ak ak ak ak | a

真ん中をどれだけ増やしても、これらは全部…正規言語で回文になるはずだが ならない!?

Page 20: 正規言語について

じゃあ n=4 で!

Page 21: 正規言語について

n=4 で akasaka は条件に合致する?

aka | s | aka

1文字以上

n文字(ここでは4文字)以下

真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下

Page 22: 正規言語について

n=4 で akasaka は条件に合致する?

aka | s | akaaka | s s | akaaka | s s s | akaaka | s s s s | akaaka | s s s s s | aka

真ん中をどれだけ増やしても、これらは全部…正規言語で回文に なった! (`・ω ’・ b

Page 23: 正規言語について

n=4 で akasaka は条件に合致する?

n=4 の時、akasaka を反復させてaka s s s s … aka

としても、回文であり続ける

よって、反復補題より、他の全ての回文も正規言 語であるはず → n=4 の時に同じ反復が可能な

はず!

Page 24: 正規言語について

No Melon No Lemon でやってみよう!

“nomelonnolemon”

n=4 として反復を行う

nomelonnolemon は回文なので、正規言語に成るはず!

Page 25: 正規言語について

No Melon No Lemon でやってみよう!

nom | e | lonnolemon

1文字以上

n文字(ここでは4文字)以下

真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下

Page 26: 正規言語について

No Melon No Lemon でやってみよう!

no | m | elonnolemonno | m m | elonnolemon

no | m m m | elonnolemonno | m m m m | elonnolemonno | m m m m m | elonnolemon

真ん中をどれだけ増やしても、これらは全部… …正規言語で回文にな らない orz

Page 27: 正規言語について

回文が正規言語でない証明 (結論)

akasaka は n=4 において、反復補題を満たすので、正規言語である。

aka s s s s … aka

反復補題より、他の回文も n=4 において正規言語であるはずであるので、nomelonnolemon もn=4 で反復補題を満たすはず。しかし、nom e e e e …lonnolemon

Page 28: 正規言語について

だからそれで?

Page 29: 正規言語について

回文は正規言語でない。だから?

あるテキストが回文か否か、ということを、正規表現を使って判断することができない。あるテキストから、なにかしらの回文を抽出する、ということができない。

[email protected]

[email protected]

など、回文で構成されたメールアドレスからの

Page 30: 正規言語について

参考資料

Wikipedia 日本語版「正規言語の反復補題」

「オートマトン・言語理論」 富田悦次・横森貴 共著 森北出版 1992年

p20「2・2 有限オートマトン」