Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
正規言語について
有限オートマトン 入力 =SUM(B3,B4) = S U M ( 大文字アルファベット1文字 数字 , )
有限オートマトン 入力 =S A M(B3,B4) = S U M ( 大文字アルファベット 1 文字 数字 , ) 不受理 ! Error!
正規言語? <ul><li>定義: 決定性有限オートマトンによって受理可能な文字列
Excel の式の例では、 </li><ul><li>=SUM(B8,C2, A9) </li></ul><li>などは、先程のオートマトンで受理されるので、正規言語になる </li></ul>
応用例: コンパイラ <ul><li>コンパイラ (プログラミング言語を、0と1で書かれた機械語に変換するプログラム)  </li><ul><li>Dim str = “abcde” as String
なんてのを、ちゃんと文法通りに文字列が並んでいるかチェックし、受理されない場合はコンパイルエラーを出す </li></ul></ul>
応用例: 正規表現 <ul><li>送信者が a*@u-tokyo.ac.jp のメールを、「情報教育」フォルダに振り分けると設定 </li><ul><li>[email_address]
[email_address]
…
a で始まり @u-tokyo.ac.jp で終わるアドレスの全てが「情報教育」フォルダに入る
※1 本当はこれは正規表現ではなくワイルドカードなのですが、一番わかり易いので、その辺りはご容赦を…。
※2 アドレスは架空のものです。もし本当に存在したらごめんなさい。 </li></ul></ul>
a*@st.u-gakugei.ac.jp のオートマトン 入力 [email_address] a @ u - a~z の中のうちの一文字 又は0~9のうちの一文字 t ……
反復補題 (Pumping Lemma)
反復補題の厳密な定義 <ul><li>L が正規言語ならば、ある定数 n が存在して、L に属する長さが n 又はそれ以上の全ての語 W に対して、次のような語 X, Y, Z が存在する
W = XYZ
(XY の文字列の長さ) <= n
(Y の文字列の長さ) >= 1
k = 1,2,3,...  に対して、 XY k Z  は L  に属する
ここで、Y k  は語 Y が k 個繰り返される事を意味する </li></ul>以上、教科書よりコピペ
もう少しましな反復補題の説明 <ul><li>正規言語の集合を考え、これをLとする。
この集合に含まれる適当な文字列を用意する。 </li><ul><li>aaabbbbccccc </li></ul><li>定数 n を決める。但し、上の文字列の文字数より小さい値である必要がある。 </li><ul><li>ここでは n = ...
但し以下の条件をみたすように… </li><ul><ul><li>真ん中の文字列が1文字以上
最初と真ん中の文字列の合計がn文字 (ここでは8文字) 以下
真ん中をどれだけ増やしても、これらは全部正規言語になる </li></ul></ul></ul>
もう少しましな反復補題の説明 aaa  |  bbbb  |  ccccc <ul><li>真ん中の文字列が 1 文字以上
最初と真ん中の文字列の合計が n 文字  ( ここでは 8 文字 )  以下 </li></ul>一文字以上 n 文字 ( ここでは 8 文字 ) 以下
もう少しましな反復補題の説明 aaa  |  bbbb  |  ccccc aaa  |  bbbb bbbb  |  ccccc aaa  |  bbbb bbbb bbbb  |  ccccc aaa  |  bbbb bbbb bbbb ...
最初と真ん中の文字列の合計が n 文字  ( ここでは 8 文字 )  以下
Upcoming SlideShare
Loading in …5
×

正規言語について

9,245 views

Published on

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

Published in: Technology, Business
  • -- DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT -- ......................................................................................................................... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... (Unlimited)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 随分以前(現時点2018)のスライドにコメントしますが; 間違っています。http://d.hatena.ne.jp/m-hiyama/20180813/1534143469 参照。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

正規言語について

  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>

×