正規言語について
DESCRIPTION
大学の授業用に作成した正規言語と反復補題の解説スライドです。 正規言語については十分に理解しているわけではないので、多分色々と間違っていると思いますが、雰囲気をつかむのには役立つかも知れません。TRANSCRIPT
![Page 1: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/1.jpg)
正規言語について
![Page 2: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/2.jpg)
有限オートマトン
入力 =SUM(B3,B4)
= S U M
(
大文字アルファベット1文字
数字
,
)
![Page 3: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/3.jpg)
有限オートマトン
入力 =SAM(B3,B4)
= S U M
(
大文字アルファベット1文字
数字
,
)
不受理! Error!
![Page 4: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/4.jpg)
正規言語?
定義: 決定性有限オートマトンによって受理可能な文字列
Excel の式の例では、=SUM(B8,C2, A9)
などは、先程のオートマトンで受理されるので、正規言語になる
![Page 5: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/5.jpg)
応用例: コンパイラ
コンパイラ (プログラミング言語を、0と1で書かれた機械語に変換するプログラム)
Dim str = “abcde” as String
なんてのを、ちゃんと文法通りに文字列が並んでいるかチェックし、受理されない場合はコンパイルエラーを出す
![Page 6: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/6.jpg)
応用例: 正規表現
送信者が a*@u-tokyo.ac.jp のメールを、「情報教育」フォルダに振り分けると設定[email protected]
…
a で始まり @u-tokyo.ac.jp で終わるアドレスの全てが「情報教育」フォルダに入る
※1 本当はこれは正規表現ではなくワイルドカードなのですが、一番わかり易いので、その辺りはご容赦
![Page 8: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/8.jpg)
反復補題 (Pumping Lemma)
![Page 9: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/9.jpg)
反復補題の厳密な定義
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: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/10.jpg)
もう少しましな反復補題の説明
正規言語の集合を考え、これをLとする。この集合に含まれる適当な文字列を用意する。
aaabbbbccccc
定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。
ここでは n = 8 とする。この文字列を三つに分割してみる。
…但し以下の条件をみたすように真ん中の文字列が1文字以上
![Page 11: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/11.jpg)
もう少しましな反復補題の説明
aaa | bbbb | ccccc
一文字以上
n文字(ここでは8文字)以下
真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは8文字) 以下
![Page 12: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/12.jpg)
もう少しましな反復補題の説明
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: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/13.jpg)
もう少しましな反復補題の説明
このような条件が、aaabbbbccccc だけでなく、全ての正規言語に対して当てはまる、という補題
![Page 14: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/14.jpg)
反復補題 (Pumping Lemma)
全ての正規言語には、真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは8文字) 以下真ん中をどれだけ増やしても、これらは全部正規言語になる!
という三つの条件を全て満たすような定数 n がそれぞれ存在する。
![Page 15: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/15.jpg)
で?
![Page 16: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/16.jpg)
反復補題の用途
与えられた言語が正規言語でないことの証明に用いる
![Page 17: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/17.jpg)
回文が正規言語でない証明
ある条件を満たす文字列の集合 L を考え 今回は L: 回文の集合とする。
Lを正規言語である 集合 と仮定し、その矛盾を導くこの集合に含まれる適当な文字列を用意する。
akasaka
定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。
ここでは n = 6 とする。この文字列を三つに分割してみる。
![Page 18: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/18.jpg)
n=6 で akasaka は条件に合致する?
akas | ak | a
1文字以上
n文字(ここでは6文字)以下
真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下
![Page 19: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/19.jpg)
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: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/20.jpg)
じゃあ n=4 で!
![Page 21: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/21.jpg)
n=4 で akasaka は条件に合致する?
aka | s | aka
1文字以上
n文字(ここでは4文字)以下
真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下
![Page 22: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/22.jpg)
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: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/23.jpg)
n=4 で akasaka は条件に合致する?
n=4 の時、akasaka を反復させてaka s s s s … aka
としても、回文であり続ける
よって、反復補題より、他の全ての回文も正規言 語であるはず → n=4 の時に同じ反復が可能な
はず!
![Page 24: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/24.jpg)
No Melon No Lemon でやってみよう!
“nomelonnolemon”
n=4 として反復を行う
nomelonnolemon は回文なので、正規言語に成るはず!
![Page 25: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/25.jpg)
No Melon No Lemon でやってみよう!
nom | e | lonnolemon
1文字以上
n文字(ここでは4文字)以下
真ん中の文字列が1文字以上最初と真ん中の文字列の合計がn 文字 (ここでは6文字) 以下
![Page 26: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/26.jpg)
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: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/27.jpg)
回文が正規言語でない証明 (結論)
akasaka は n=4 において、反復補題を満たすので、正規言語である。
aka s s s s … aka
反復補題より、他の回文も n=4 において正規言語であるはずであるので、nomelonnolemon もn=4 で反復補題を満たすはず。しかし、nom e e e e …lonnolemon
![Page 28: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/28.jpg)
だからそれで?
![Page 29: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/29.jpg)
回文は正規言語でない。だから?
あるテキストが回文か否か、ということを、正規表現を使って判断することができない。あるテキストから、なにかしらの回文を抽出する、ということができない。
…
など、回文で構成されたメールアドレスからの
![Page 30: 正規言語について](https://reader033.vdocuments.pub/reader033/viewer/2022052910/559bf1581a28ab07428b45c2/html5/thumbnails/30.jpg)
参考資料
Wikipedia 日本語版「正規言語の反復補題」
「オートマトン・言語理論」 富田悦次・横森貴 共著 森北出版 1992年
p20「2・2 有限オートマトン」