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. 計算可能じゃないって? (以下,自然数(0 含む)のみを考える. ) 「計算可能な関数」は,よく知ってるやつら. +, −, ×, π の

    n 桁目の値, . . . などなど. 計算の仕方を示せば「確かに計算できますね」と言えそう. じゃあ「計算可能でない」ってどういうこと? たとえば? ためしに “計算可能でない関数” を作ってみよう. 4
  2. “計算可能でない関数” を作る 計算可能な関数は,具体的な計算方法を備えている. 計算方法を記号列で表したとしよう(例えば英語で) . 例えば,f(x) = x + 1

    の計算方法 E は E = “add one” 計算方法をアルファベット順に並べて,番号をつける. E0 , E1 , E2 , . . . これで計算可能な関数に自然数の番号がつく. f0 , f1 , f2 , . . . 5
  3. g は “計算可能” か? g が計算可能と仮定すると,g には番号が振られる. つまり,ある自然数 j について

    g = fj. そのような自然数 j について g(j) を考えると...? g(j) = fj (j) + 1 = g(j) + 1 =⇒ 0 = 1 はい矛盾.g は計算可能ではありえない! 7
  4. g(x) を計算してみる 自然数 x が与えられたときに,この値を求めてみよう. 1. 有限の長さの (カンマ, ピリオド, 空白を含む)

    アルファ  ベット列を並べた表を作る.この表は途中まで作って,  必要に応じて適宜継ぎ足していけば OK. a, b, c, . . . , z, aa, ab, . . . , az, ba, bb, . . . , zz, aaa, aab, . . . 2. この表の頭から順に計算手順になっていないものを  除去して,x 番目の計算手順 fx を見つける. 10
  5. g(x) を計算してみる 3. fx に x を代入して,g(x) = fx (x)

    + 1 が求まる. パッと見では計算できてそうだが...? アルファベットを使ったのが悪い? 代わりに C++ のコードでやっても同じことが起こる. 11
  6. 何がいけなかったか 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
  7. 何がいけなかったか 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