Upgrade to Pro — share decks privately, control downloads, hide ads and more …

素朴に計算可能性を考える / An Introduction to Computability

remeta
November 30, 2022

素朴に計算可能性を考える / An Introduction to Computability

計算不可能な関数の具体例から計算可能性について考えてみよう、という話です。

remeta

November 30, 2022
Tweet

More Decks by remeta

Other Decks in Science

Transcript

  1. <計算可能>を素朴に考える
    2022 年 11 月 16 日
    1

    View Slide

  2. なにをするか
    計算可能でない関数を考えて,計算を試み,
    「いや,やっぱり計算できないじゃん」と言う.
    厳密な話はしません.なんとなく面白そうだなとか
    思ってもらえると嬉しいです.
    少しばかりスライドに詰め込みすぎました.
    2

    View Slide

  3. 計算可能であるとは
    それを計算するための具体的な計算手順があること.
    例えば以下はだめ.
    • 無限に計算を続ける
    • 気合でいい感じの数を思いつく
    • ラマヌジャンを用意する
    ちゃんとした定義は,
    「それを有限のステップで計算する
    チューリング機械が存在すること」

    3

    View Slide

  4. 計算可能じゃないって?
    (以下,自然数(0 含む)のみを考える.

    「計算可能な関数」は,よく知ってるやつら.
    +, −, ×, π の n 桁目の値, . . . などなど.
    計算の仕方を示せば「確かに計算できますね」と言えそう.
    じゃあ「計算可能でない」ってどういうこと? たとえば?
    ためしに “計算可能でない関数” を作ってみよう.
    4

    View Slide

  5. “計算可能でない関数” を作る
    計算可能な関数は,具体的な計算方法を備えている.
    計算方法を記号列で表したとしよう(例えば英語で)

    例えば,f(x) = x + 1 の計算方法 E は E = “add one”
    計算方法をアルファベット順に並べて,番号をつける.
    E0
    , E1
    , E2
    , . . .
    これで計算可能な関数に自然数の番号がつく.
    f0
    , f1
    , f2
    , . . .
    5

    View Slide

  6. “計算可能でない関数” を作る
    ここで新しい関数 g を(さっきの番号の付け方を用いて)
    g(x) = fx
    (x) + 1
    とおいてみよう.何が起こるかな?
    6

    View Slide

  7. g は “計算可能” か?
    g が計算可能と仮定すると,g には番号が振られる.
    つまり,ある自然数 j について g = fj.
    そのような自然数 j について g(j) を考えると...?
    g(j) = fj
    (j) + 1
    = g(j) + 1
    =⇒ 0 = 1
    はい矛盾.g は計算可能ではありえない!
    7

    View Slide

  8. g は計算可能じゃない!
    わーい! 計算可能じゃなかった!
    8

    View Slide

  9. g は計算可能じゃない!
    わーい! 計算可能じゃなかった!
    なんかこれ
    計算できそうじゃね?
    9

    View Slide

  10. g(x) を計算してみる
    自然数 x が与えられたときに,この値を求めてみよう.
    1. 有限の長さの
    (カンマ,
    ピリオド,
    空白を含む)
    アルファ
     ベット列を並べた表を作る.この表は途中まで作って,
     必要に応じて適宜継ぎ足していけば OK.
    a, b, c, . . . , z, aa, ab, . . . , az, ba, bb, . . . , zz, aaa, aab, . . .
    2. この表の頭から順に計算手順になっていないものを
     除去して,x 番目の計算手順 fx を見つける.
    10

    View Slide

  11. g(x) を計算してみる
    3. fx に x を代入して,g(x) = fx
    (x) + 1 が求まる.
    パッと見では計算できてそうだが...?
    アルファベットを使ったのが悪い?
    代わりに C++ のコードでやっても同じことが起こる.
    11

    View Slide

  12. 何がいけなかったか
    1. 有限の長さのアルファベット列を並べる.
    a, b, c, . . . , z, aa, ab, . . . , az, ba, bb, . . . , zz, aaa, aab, . . .
    2. 頭から順に,計算手順になっていないものを除去して
      x 番目の計算手順 fx を見つける.
    3. x 番目の計算手順 fx に x を代入して 1 を足して,
      g(x) = fx
    (x) + 1 が計算できました.
    12

    View Slide

  13. 何がいけなかったか
    1. 有限の長さのアルファベット列を並べる.
    a, b, c, . . . , z, aa, ab, . . . , az, ba, bb, . . . , zz, aaa, aab, . . .
    2. 頭から順に,計算手順になっていないものを除去して
      x 番目の計算手順 fx を見つける.
    3. x 番目の計算手順 fx に x を代入して 1 を足して,
      g(x) = fx
    (x) + 1 が計算できました.
    13

    View Slide

  14. 停止性問題
    “計算可能である” なら,有限の手続きで答えが出る.
    しかし,ある計算手順が有限で終わるか機械的には
    判定できない.
    ゆえに,
    「計算可能か判定する関数」
    は計算可能ではない!
    (有限の手順で終わることを証明するのは簡単.
     有限な手順を具体的に示せばいい.

    14

    View Slide

  15. 参考文献
    M. Davis. 計算の理論. 岩波書店, 1966.
    神保町で叩き売られてた(400 円)
    ,神保町サイコー.
    15

    View Slide