正規言語について

4,932 views
4,590 views

Published on

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

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,932
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 有限オートマトンについての復習 最初に Excel なり Calc を起動して、Sum 関数を入力してみる。(引数は三つ位まで実演する) エクセルの計算式の例 例えば Excel のセルに計算式を入力すると、Excel のエンジンは裏側で入力された文字列を一文字ずつ読み込む 次に来るのは何かしらのアルファベット。 その次に数字、カンマ。 これが何回か繰り返し。 最後に、カッコ閉じが来る
  • 途中で変な文字が入って、 =SAM などになってしまうと、これは不受理
  • Wikipedia によると、 非決定性有限オートマトンによって受理可能 正規表現で記述可能 正規文法から生成可能 読みとり専用チューリングマシンで受理可能 などの条件もあるらしいが、未検証
  • 例えば、Dis str =... なんて来たら、当然コンパイルエラーになる。 実際にオートマトンを書いてみる
  • GMail の画面を見せる [email_address] とフィルタに入れて、情報教育フォルダに転送されるようになることを示す。 では、 j???????@st.u-gakugei.ac.jp のアドレスからメールが来たら情報教育フォルダに振り分けられるようにするにはどうすればいいか… ? *.u-gakugei.ac.jp は、 何とか、.u-gakugei.ac.jp のアドレスを表す。 J類の学生の大学のメールアドレスは、jの後に、何か文字列が来て、その後に @st.u-gakugei.ac.jp が付くので、j*@st.u-gakugei.ac.jp のアドレスを「J類の学生」フォルダに自動的に振り分ける、と設定しておけば、自動的にJ類の学生からのメールを振り分けることができる。
  • 本には「汲み出し補題」とあったが、これだとググッても全然出てこない…。
  • 回文が正規言語でないという証明 白板を用いる 1. aaaaabbbbb を適当な文字列とする これを正則言語として仮定。 ( 背理法で解きます ) 2. L に含まれる文字列の中で、一番文字数の少ない文字列の数より小さくなければならない 3. ではこれを三分割してみましょう…
  • 回文が正規言語でないという証明 真ん中の文字列が一文字以上なので、 aaaaabbbbb
  • ※このように、真ん中にあるbbbbをなんども繰り返してつけくわえていくことを反復という
  • 本には「汲み出し補題」とあったが、これだとググッても全然出てこない…。
  • 回文が正規言語でないという証明 回文とは、前から読んでも後ろから読んでも同じになる文字列のこと akasaka は「えーけーえーえすえー…」と読む 白板を用いる 1. aaaaabbbbb を適当な文字列とする これを正則言語として仮定。 ( 背理法で解きます ) 2. n = 6 とおく 3. ではこれを三分割してみましょう…
  • 回文が正規言語でないという証明 真ん中の文字列が一文字以上なので、 aaaaabbbbb
  • ※ このように、真ん中にある bbbb をなんども繰り返してつけくわえていくことを反復という
  • 回文が正規言語でないという証明 真ん中の文字列が一文字以上なので、 aaaaabbbbb
  • ※ このように、真ん中にある bbbb をなんども繰り返してつけくわえていくことを反復という
  • 回文が正規言語でないという証明 真ん中の文字列が一文字以上なので、 aaaaabbbbb
  • ※ このように、真ん中にある bbbb をなんども繰り返してつけくわえていくことを反復という
  • 個別に [email_address] [email_address]
  • 正規言語について

    1. 1. 正規言語について
    2. 2. 有限オートマトン 入力 =SUM(B3,B4) = S U M ( 大文字アルファベット1文字 数字 , )
    3. 3. 有限オートマトン 入力 =S A M(B3,B4) = S U M ( 大文字アルファベット 1 文字 数字 , ) 不受理 ! Error!
    4. 4. 正規言語? <ul><li>定義: 決定性有限オートマトンによって受理可能な文字列
    5. 5. Excel の式の例では、 </li><ul><li>=SUM(B8,C2, A9) </li></ul><li>などは、先程のオートマトンで受理されるので、正規言語になる </li></ul>
    6. 6. 応用例: コンパイラ <ul><li>コンパイラ (プログラミング言語を、0と1で書かれた機械語に変換するプログラム) </li><ul><li>Dim str = “abcde” as String
    7. 7. なんてのを、ちゃんと文法通りに文字列が並んでいるかチェックし、受理されない場合はコンパイルエラーを出す </li></ul></ul>
    8. 8. 応用例: 正規表現 <ul><li>送信者が a*@u-tokyo.ac.jp のメールを、「情報教育」フォルダに振り分けると設定 </li><ul><li>[email_address]
    9. 9. [email_address]
    10. 10.
    11. 11. a で始まり @u-tokyo.ac.jp で終わるアドレスの全てが「情報教育」フォルダに入る
    12. 12. ※1 本当はこれは正規表現ではなくワイルドカードなのですが、一番わかり易いので、その辺りはご容赦を…。
    13. 13. ※2 アドレスは架空のものです。もし本当に存在したらごめんなさい。 </li></ul></ul>
    14. 14. a*@st.u-gakugei.ac.jp のオートマトン 入力 [email_address] a @ u - a~z の中のうちの一文字 又は0~9のうちの一文字 t ……
    15. 15. 反復補題 (Pumping Lemma)
    16. 16. 反復補題の厳密な定義 <ul><li>L が正規言語ならば、ある定数 n が存在して、L に属する長さが n 又はそれ以上の全ての語 W に対して、次のような語 X, Y, Z が存在する
    17. 17. W = XYZ
    18. 18. (XY の文字列の長さ) <= n
    19. 19. (Y の文字列の長さ) >= 1
    20. 20. k = 1,2,3,... に対して、 XY k Z は L に属する
    21. 21. ここで、Y k は語 Y が k 個繰り返される事を意味する </li></ul>以上、教科書よりコピペ
    22. 22. もう少しましな反復補題の説明 <ul><li>正規言語の集合を考え、これをLとする。
    23. 23. この集合に含まれる適当な文字列を用意する。 </li><ul><li>aaabbbbccccc </li></ul><li>定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。 </li><ul><li>ここでは n = 8 とする。 </li></ul><li>この文字列を三つに分割してみる。
    24. 24. 但し以下の条件をみたすように… </li><ul><ul><li>真ん中の文字列が1文字以上
    25. 25. 最初と真ん中の文字列の合計がn文字 (ここでは8文字) 以下
    26. 26. 真ん中をどれだけ増やしても、これらは全部正規言語になる </li></ul></ul></ul>
    27. 27. もう少しましな反復補題の説明 aaa | bbbb | ccccc <ul><li>真ん中の文字列が 1 文字以上
    28. 28. 最初と真ん中の文字列の合計が n 文字 ( ここでは 8 文字 ) 以下 </li></ul>一文字以上 n 文字 ( ここでは 8 文字 ) 以下
    29. 29. もう少しましな反復補題の説明 aaa | bbbb | ccccc aaa | bbbb bbbb | ccccc aaa | bbbb bbbb bbbb | ccccc aaa | bbbb bbbb bbbb bbbb | ccccc aaa | bbbb bbbb bbbb bbbb bbbb | ccccc <ul><li>真ん中の文字列が 1 文字以上
    30. 30. 最初と真ん中の文字列の合計が n 文字 ( ここでは 8 文字 ) 以下
    31. 31. 真ん中をどれだけ増やしても、これらは全部正規言語になる ! </li></ul>
    32. 32. もう少しましな反復補題の説明 <ul><li>このような条件が、aaabbbbccccc だけでなく、全ての正規言語に対して当てはまる、という補題 </li></ul>
    33. 33. 反復補題 (Pumping Lemma) <ul><li>全ての正規言語には、 </li><ul><li>真ん中の文字列が1文字以上
    34. 34. 最初と真ん中の文字列の合計がn文字 (ここでは8文字) 以下
    35. 35. 真ん中をどれだけ増やしても、これらは全部正規言語になる! </li></ul><li>という三つの条件を全て満たすような定数 n がそれぞれ存在する。 </li></ul>
    36. 36. で?
    37. 37. 反復補題の用途 <ul><li>与えられた言語が正規言語でないことの証明に用いる </li></ul>
    38. 38. 回文が正規言語でない証明 <ul><li>ある条件を満たす文字列の集合 L を考え </li></ul><ul><ul><li>今回は L: 回文 の集合 とする。 </li></ul></ul><ul><ul><li>Lを 正規言語である 集合 と仮定し、その矛盾を導く </li></ul></ul><ul><li>この集合に含まれる適当な文字列を用意する。 </li><ul><li>akasaka </li></ul><li>定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。 </li><ul><li>ここでは n = 6 とする。 </li></ul><li>この文字列を三つに分割してみる。
    39. 39. 但し以下の条件をみたすように… </li><ul><ul><li>真ん中の文字列が1文字以上
    40. 40. 最初と真ん中の文字列の合計がn文字 (ここでは6文字) 以下
    41. 41. 真ん中をどれだけ増やしても、これらは全部正規言語になる </li></ul></ul></ul>
    42. 42. n=6 で akasaka は条件に合致する? akas | ak | a <ul><li>真ん中の文字列が 1 文字以上
    43. 43. 最初と真ん中の文字列の合計が n 文字 ( ここでは 6 文字 ) 以下 </li></ul>1 文字以上 n 文字 ( ここでは 6 文字 ) 以下
    44. 44. n=6 で akasaka は条件に合致する? akas | ak | a akas | ak ak | a akas | ak ak ak | a akas | ak ak ak ak | a akas | ak ak ak ak ak | a <ul>真ん中をどれだけ増やしても、これらは全部正規言語で回文になるはずだが…ならない !? </ul>
    45. 45. じゃあ n=4 で!
    46. 46. n= 4 で akasaka は条件に合致する? aka | s | aka <ul><li>真ん中の文字列が 1 文字以上
    47. 47. 最初と真ん中の文字列の合計が n 文字 ( ここでは 6 文字 ) 以下 </li></ul>1 文字以上 n 文字 ( ここでは 4 文字 ) 以下
    48. 48. n= 4 で akasaka は条件に合致する? aka | s | aka aka | s s | aka aka | s s s | aka aka | s s s s | aka aka | s s s s s | aka <ul>真ん中をどれだけ増やしても、これらは全部正規言語で回文に…なった ! (` ・ ω ・’ b </ul>
    49. 49. n= 4 で akasaka は条件に合致する? <ul><li>n=4 の時、akasaka を反復させて
    50. 50. aka s s s s … aka
    51. 51. としても、回文であり続ける
    52. 52. よって、反復補題より、他の全ての回文も正規言語であるはず -> n=4 の時に同じ反復が可能なはず! </li></ul>
    53. 53. No Melon No Lemon でやってみよう! <ul><li>“nomelonnolemon”
    54. 54. n=4 として反復を行う
    55. 55. nomelonnolemon は回文なので、正規言語に成るはず! </li></ul>
    56. 56. No Melon No Lemon でやってみよう! nom | e | lonnolemon <ul><li>真ん中の文字列が 1 文字以上
    57. 57. 最初と真ん中の文字列の合計が n 文字 ( ここでは 6 文字 ) 以下 </li></ul>1 文字以上 n 文字 ( ここでは 4 文字 ) 以下
    58. 58. No Melon No Lemon でやってみよう! no | m | elonnolemon no | m m | elonnolemon no | m m m | elonnolemon no | m m m m | elonnolemon no | m m m m m | elonnolemon <ul>真ん中をどれだけ増やしても、これらは全部正規言語で回文にな…らない… orz </ul>
    59. 59. 回文が正規言語でない証明 (結論) <ul><li>akasaka は n=4 において、反復補題を満たすので、正規言語である。
    60. 60. aka s s s s … aka
    61. 61. 反復補題より、他の回文も n=4 において正規言語であるはずであるので、nomelonnolemon も n=4 で反復補題を満たすはず。
    62. 62. しかし、
    63. 63. nom e e e e …lonnolemon
    64. 64. となり、回文とならない、つまり反復補題を満たさない。
    65. 65. よって矛盾するため、回文は正規言語ではない。 </li></ul>
    66. 66. だからそれで?
    67. 67. 回文は正規言語でない。だから? <ul><li>あるテキストが回文か否か、ということを、正規表現を使って判断することができない。
    68. 68. あるテキストから、なにかしらの回文を抽出する、ということができない。
    69. 69. [email_address]
    70. 70. [email_address]
    71. 71.
    72. 72. など、回文で構成されたメールアドレスからのメールを全て「回文」フォルダに振り分ける、という行為はできない! </li></ul>
    73. 73. 参考資料 <ul><li>Wikipedia 日本語版 </li><ul><li>「正規言語の反復補題」 </li></ul><li>「オートマトン・言語理論」 富田悦次・横森貴 共著 森北出版 1992年
    74. 74. p20「2・2 有限オートマトン」 </li></ul>

    ×