SlideShare a Scribd company logo
計算不可能な問題
B17727 福井敬徳
この章で学ぶこと
• 背理法
• 矛盾を導く証明方法
• カウンタブル
• 数えられるもの,数えられないもの
• 停止判定問題
• 絶対に作れないプログラム
背理法
矛盾を導く証明方法
背理法の証明手順
1. 「証明したい命題の否定」が成り立つと仮定
2. 仮定をもとに論証を進め,矛盾を導く
背理法
矛盾
最初の仮定が間違っている
証明したい命題の否定は間違っている
証明したい命題は正しい
「最大の整数は存在しない」:証明
1. 「証明したい命題の否定」が成り立つと仮定
証明したい命題 = 「最大の整数は存在しない」
証明したい命題の否定 = 「最大の整数は存在する」
2. 仮定をもとに論証を進め,矛盾を導く
①最大の整数を M とする
②Mは整数だから足し算できる
M + 1 最大の整数
M より大き
い数矛盾
背理法
⑴最大の整数 ⑵論証を進めて作り出し
た最大の整数
矛盾
M + 1M
最大の整数よりも最大の整数
2. 仮定をもとに論証を進め,矛盾を導く
背理法
「最大の整数は存在しない」:証明終了
「最大の整数は存在しない」は
は正しい!
矛盾 最初の仮定が間違っている
証明したい命題の否定は間違っている
証明したい命題は正しい
背理法
「素数は無数にある」:証明
1. 「証明したい命題の否定」が成り立つと仮定
証明したい命題 = 「素数は無数にある」
証明したい命題の否定 = 「素数は無数にない(有限個)」
2. 仮定をもとに論証を進め,矛盾を導く
①素数は有限個である
2, 5, 7, 9, 11, 13, 17, 19, … ,P
②最後の素数を
P とする
背理法
2, 5, 7, 9, 11, 13, 17, 19, … ,P
「素数は無数にある」:証明
2. 仮定をもとに論証を進め,矛盾を導く
背理法
最大の整数をMとした。
Mを使ってMより大きい整
数を導いた
最後の素数をPとした。
Pを使ってPより大きい素数を導く
素数の作り方
素数を順番にかけたものに1を足したものは素数である
2 × 3 × 5 × 7 + 1
= 211
2 × 3 × 5 + 1 = 31
2 × 3 + 1 = 7
どんな数で割っても
1余る
「素数は無数にある」:証明
2. 仮定をもとに論証を進め,矛盾を導く
2 × 3 × 5 × 7 × ⋯ × 𝑃 + 1 = 𝑄
素数を順番にかけたものに1を足したものは素数である
素数の作り方
2 × 3 × 5 × 7 + 1
= 211
2 × 3 × 5 + 1 = 31
2 × 3 + 1 = 7
⋮
最後の素数
P より
最後の素数矛盾
背理法
P < Q
「素数は無数にある」:証明
「素数は無数にある」は
は正しい!
⑴最後の素数 ⑵論証を進めて作り出した
最後の素数
QP 矛盾
背理法
カウンタブル
数えられるもの,数えられないもの
カウンタブル
要素をもれなく,ダブりなく数える
ルールを定められる
カウンタブル
有限集合は
すべてカウンタブル
無限集合には2種類ある
• カウンタブルな(数えられる)無限集合
• 0以上の偶数全体の集合...など
• カウンタブルでない(数えられない)無限集合
• 整数列全体の集合...など
0以上の偶数全体の集合
0 84 62
番号 1 2 3 4 5 ...
…
要素をもれなく,ダブりなく数える
ルールを定められる
ルール:偶数2 × (𝑘 − 1)に𝑘番と番号をつける
カウンタブル
1以上の奇数全体の集合
1 95 73
番号 1 2 3 4 5 ...
…
要素をもれなく,ダブりなく数える
ルールを定められる
ルール:奇数2 × 𝑘 − 1に𝑘番と番号をつける
カウンタブル
整数全体の集合
0 -2-1 21
番号 1 2 3 4 5 ...
…
なぜ正数と負数を交互
に?
カウンタブル
ルール:0から 正数 と 負数 を交互に数える
正数と負数を交互に数える理由
0 42 31
番号 1 2 3 4 5 ...
…
数え終わらないや!
正数を数えてから負数を数えれば?
カウンタブル
有理数全体の集合
0
2
1
1
1
2
0
1
−1
2
−1
1
−2
1
−2
2
−2
3
−1
3
0
3
1
3
整数
1以上の整数
の形で表すことができる数字
1 2 3 4 5
6 7 8 9
有理数
カウンタブル
+ と - を交互に!
有理数の数え方
分母
分子
0
2
1
1
1
2
0
1
−1
2
−1
1
−2
1
−2
2
−2
3
−1
3
0
3
1
3
2
3
2
2
3
1
4
1
Start
𝑦
𝑥
カウンタブルではないもの
カウンタブル
でないもの
ってあるの?
カウンタブル
整数列全体の集合
• 0以上の整数列
• 0以上の偶数列
• 1以上の奇数列
• フィボナッチ数列
• すべて0の数列
• 円周率の各桁の列
整数列
整数を無限に並べた数
例えば……
:
無限に考えられる
カウンタブル
無限集合
整数列全体の集合は
カウンタブルではない
1. 0以上の整数列
2. 0以上の偶数列
3. 1以上の奇数列
4. フィボナッチ数列
5. すべて0の数列
6. 円周率の各桁の列
7. ...
要素をもれなく,ダブりなく数える
ルールを定められる
カウンタブル
カウンタブル
「整数列全体の集合は
カウンタブルではない」:証明
1. 「証明したい命題の否定」が成り立つと仮定
2. 仮定をもとに論証を進め,矛盾を導く
証明したい命題 = 「整数列全体の集合は
カウンタブルではない」
証明したい命題の否定 = 「整数列全体の集合は
カウンタブルである」
①すべての整数列に番号付ができる
②すべての整数列は順番に並べられる
カウンタブル
すべての整数列の表
整数列 番号
0以上の整数列 1 0 1 2 3 4 5 6 7 …
0以上の偶数列 2 0 2 4 6 8 10 12 14 …
1以上の奇数列 3 1 3 5 7 9 11 13 15 …
フィボナッチ数列 4 0 1 1 2 3 5 8 13 …
すべて0の数列 5 0 0 0 0 0 0 0 0 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
矛盾この表にない整数列を作る
カウンタブル
すべての整数列の表にない整数列
すべての整数列の表
にない整数列なんて
ないでしょ?
カウンタブル
今までのやり方を思い出して…
最大の整数をMとした
Mを使ってMより大き
い整数を導いた
すべての整数列の表から
新しい整数列を作り出せば...?
カウンタブル
対角線論法
1. 表に含まれない数を作るために,表の対角線を通るように
して数を選んでいく
2. 選んだ数に1を足して新しい数列を作る
整数列 番号
0以上の整数列 1 0 1 2 3 4 5 6 7 …
0以上の偶数列 2 0 2 4 6 8 10 12 14 …
1以上の奇数列 3 1 3 5 7 9 11 13 15 …
フィボナッチ数列 4 0 1 1 2 3 5 8 13 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
新しい数列 K+1 1 3 6 3 . . . . .
カウンタブル
「整数列全体の集合は
カウンタブルではない」:証明
「整数列全体の集合はカウンタブルではない」
は正しい!
⑴すべての整数列の表 ⑵論証を進めて作り出した
「すべての整数列の表」
にない数列
矛盾
カウンタブル
「0以上1以下の実数は
カウンタブルではない」:証明
1. 「証明したい命題の否定」が成り立つと仮定
2. 仮定をもとに論証を進め,矛盾を導く
証明したい命題 = 「実数全体の集合は
カウンタブルではない」
証明したい命題の否定 = 「実数全体の集合は
カウンタブルである」
①すべての実数列に番号付ができる
②すべての実数列は順番に並べられる
カウンタブル
0以上1以下のすべての実数列の表
整数列 番号
0と1の繰り返し 1 0. 1 0 1 0 1 0 1 …
123の繰り返し 2 0. 1 2 3 1 2 3 1 …
√2 ÷ 10 3 0. 1 4 1 4 2 1 3 …
𝜋 ÷ 10 4 0. 3 1 4 1 5 9 2 …
0の繰り返し 5 0. 0 0 0 0 0 0 0 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
矛盾この表にない実数列を作る
カウンタブル
新しい数列を作り出す
整数列 番号
0と1の繰り返し 1 0. 1 0 1 0 1 0 1 …
123の繰り返し 2 0. 1 2 3 1 2 3 1 …
√2 ÷ 10 3 0. 1 4 1 4 2 1 3 …
𝜋 ÷ 10 4 0. 3 1 4 1 5 9 2 …
0の繰り返し 5 0. 0 0 0 0 0 0 0 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
新しい数列 K+1 0. 2 3 2 2 1 . . .
カウンタブル
矛盾
0以上1以下のすべての実数列は
カウンタブルではない
関数の集合もカウンタブルではない
整数列 番号
0 1 2 3 4 5 6 7 …
与えた整数に1
を加える関数
1 1 2 3 4 5 6 7 8 …
与えた整数を2
乗する関数
2 0 1 4 9 16 25 36 49 …
与えた整数が
素数である: 1
素数でない: 0
3 0 0 1 1 0 1 0 1 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
カウンタブル
対角線論法(補足)
整数列 番号
数列 1 0 1 2 3 4 5 6 7 …
数列 2 0 2 4 6 8 10 12 14 …
数列 3 1 3 5 7 9 11 13 15 …
… … …
(最後の数列) K ? ? ? ? ? ? ? ? ?
新しい数列 K+1 1 0 0 . . . . . .
1. 表の対角線を通るようにして数を選んでいく
2. 数に同じ処理を行い新しい数列を作る
ex: 0 なら 1,それ以外なら0に変換する
停止判定問題
絶対に作れないプログラム
次週
計算不可能な問題
プログラムで解くことが
原理的に不可能な問題
プログラムで解くことができる問題の集合に
含まれていない問題
• 解を求めるのにたくさん時間がかかる問題
• そもそも解が存在しない問題
• 現在は誰も解き方を知らない未解決の問題
次のプログラムは「計算可能」か?
• 1以上の整数nを入力すると,n+1を出力する関数
• 1以上の整数nを入力すると,nが素数なら1,素数でないなら0を出
力する関数
• 1以上の整数nを入力すると,2×n = 1 を満たすなら1,満たさない
なら0を出力する関数
• あるプログラムが1以上の整数nを入力すると整数を出力するか調
べる関数
• あるプログラムがどんな入力を受け取っても「Hello, world!」を出力
するかどうかを `実行せずに’ 判定する関数
クイズ:証明の間違いを探す
「プログラムで生成できる整数列全
体の集合」はカウンタブルではない
「整数列全体の集合」は
カウンタブルではない
ことは証明済み
「プログラムで生成できる整数列全体の
集合はカウンタブルではない」:証明
1. 「証明したい命題の否定」が成り立つと仮定
2. 仮定をもとに論証を進め,矛盾を導く
証明したい命題 = 「プログラム…は
カウンタブルではない」
証明したい命題の否定 = 「プログラム…は
カウンタブルである」
①すべての整数列に番号付ができる
②すべての整数列は順番に並べられる
新しい数列を作り出す
整数列 番号
生成した整数列 1 1 0 1 0 1 0 1 …
生成した整数列 2 1 2 3 1 2 3 1 …
... 3 1 4 1 4 2 1 3 …
.. 4 3 1 4 1 5 9 2 …
… …
(最後の数列) K ? ? ? ? ? ? ? ?
新しい数列 K+1 2 3 2 2 1 . . .
カウンタブル
矛盾
プログラムで生成できる整数列全体の集合は
カウンタブルではない
背理法の落とし穴
1. 表の対角線を通るようにして数を選んでいく
2. 数に同じ処理を行い新しい数列を作る
3. 新しい数列は表にない数列である
4. すべての表にない数列を作り出すことにって矛盾
が生じる
新しい数列は
「プログラムで生成できる整数列」
ではないかもしれない
新しい数列の妥当性

More Related Content

More from Takanori Fukui

2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料
Takanori Fukui
 
論文の書き方(研究室用)
論文の書き方(研究室用)論文の書き方(研究室用)
論文の書き方(研究室用)
Takanori Fukui
 
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
Takanori Fukui
 
人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類
Takanori Fukui
 
Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介
Takanori Fukui
 
Automatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBSAutomatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBS
Takanori Fukui
 
Up ai wolfプレゼン資料
Up ai wolfプレゼン資料Up ai wolfプレゼン資料
Up ai wolfプレゼン資料
Takanori Fukui
 

More from Takanori Fukui (7)

2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料
 
論文の書き方(研究室用)
論文の書き方(研究室用)論文の書き方(研究室用)
論文の書き方(研究室用)
 
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
 
人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類
 
Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介
 
Automatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBSAutomatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBS
 
Up ai wolfプレゼン資料
Up ai wolfプレゼン資料Up ai wolfプレゼン資料
Up ai wolfプレゼン資料
 

著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの

Editor's Notes

  1. タイトルのポイントがバラバラ
  2. 背理法による証明手順は次の2つの手順からなります 1,証明したい命題の’否定’が成立と仮定します 2.仮定をもとに論証を進めて,矛盾を導きます. 矛盾が生じるということは,最初の過程が間違っているからです. つまり,証明したい命題の否定は間違っている 証明したい命題は正しい というのが背理法の証明方法です
  3. ステップ1では証明したい命題の否定が成り立つと仮定します, 証明したい命題は「最大の整数は存在しない」ですから その否定は「最大の整数は存在する」です ステップ2では仮定をもとに論証を進め,矛盾を導きます 最大の整数は存在する と 仮定したため,最大の整数を Mとします. Mは整数ですから足し算できます.ですから,Mに1を足してM+1 という整数を新しく作ります. ここで,最大の整数Mよりも大きいM+1という整数が導かれました, これは矛盾です.
  4. 仮定をもとに最大の整数Mを定めて論証を進めた結果, 最大の整数Mより1大きいさらに最大の整数が導かれました.
  5. 論証を進め,矛盾が発生しているということは,最初の過程が間違ってる.つまり,証明したい命題の否定は間違っている 証明したい命題は正しい 最大の整数は存在しない という命題は正しい! と,なり 証明終了です
  6. 「素数は無数にある」ことを背理法を用いて証明します. 証明したい命題はなんでしょうか その否定は? では,過程をもとに論証を進めましょう. 素数は無数にはない つまり, 有限個であるため,最後の要素までかきだせます ここで,最後の素数をPとします
  7. 矛盾を導くためには,どうしたらいいでしょうか? 先ほどの問題では最大数Mとした後,そのMを使ってMより大きい整数を導きました. では今回では「質問させる」 最後の要素であるPよりも最後の素数を導く必要があります この新しいさらに最後の素数を作りましょう
  8. +1にすることで何で割っても1余ることがみそ
  9. 素数の作り方が甘い ここで新しい素数の作り方を提示します. 素数を順番にかけたものに1を足したものは素数である 例を出しましょう 2かける3たす一は7 素数です 2かける... それでは,すべての素数をかけて1を足しましょう.これをQとします. ここでQは必ずPよりも大きい数になります. 素数を掛け算し,1を足すわけですから当然です 上の例でもそのようになっています. これで最後の要素Pよりも最後の要素Qが導かれました. 矛盾です.
  10. 最後の素数Pをもとに論証を進めた結果,さらに最後の素数Qが導かれ,矛盾か生じました. これは,最初の過程が間違っていたからです. よって証明したい命題である素数は無数にあるは正しいと証明されます.
  11. 無限集合にはカウントできるものとできないものがあるよ と言わないといけない 無限集合は数え終わらないけど,⑴対1関係にできるものと そうでないものがあるよ という
  12. カウンタブルとは,要素をもれなく,ダブりなく数えるルールを定められるものです. 簡単に言ってしまえば,数えられれば,カウンタブルです. 有限集合は全て数えることができるため,カウンタブルです. では,無限集合はどうでしょうか 例を出しましょう
  13. 0以上の偶数全体の集合です. 偶数全体の集合は終わりのない無限集合ですが,要素をもれなくダブりなく数えるルールを定められるため,これはカウンタブルです. ルールは2かけるkマイナス1にK番と番号をつけていけば,カウンタぶるの条件を満たします
  14. 同じように0以上の奇数全体の集合です. 奇数全体の集合も,ルールを2かけるkマイナス1にK番と番号をつけていけば,カウンタぶるの条件を満たします
  15. 整数全体の集合も考えましょう. この時0からプラスとマイナスを交互に数えていきます. もちろんカウンタブルです. なぜ+とマイナスを交互にカウントするのでしょう? 「質問させる」
  16. 正数を数えてから負数を数えようと思っても,正数は無限集合のため,数え終わりません. そこで,正数と負数を交互にカウントし,もれなく数えらます.
  17. +とーを交互にやるのがミソ ってのを書き加える 最後に有理数全体の集合も考えましょう. 有理数とは1以上の整数文の整数の形で表すことができる数字です. これも整数全体の集合を数えた時と同じように,プラスとマイナスを交互に数えていきます ここで,点線の分数は,すでにカウントした有理数です.(同じ大きさ) 並べる順番がわかりづらいですね,次のスライドを見ましょう
  18. このようにx座標の方に分子数を,y座標の方に分母数をとって,有理数をグリッド乗に並べます. そしたら,このような順番でとっていくと,有理数をもれなくカウントすることができます.
  19. ここまでくると,カウンタブルでないものってあるの?と思うかもしれません. それではカウンタブルではないものを出しましょう
  20. 整数列全体の集合です 正数列とは,整数を無限に並べた数のことです. 例えば,,,, このように整数列全体の集合は終わりのない無限集合です
  21. この集合はカウンタブルではありません カウンタブルとは 要素をもれなく,ダブりなく数えるルールを定められることでした. 今,一列に整数列を並べても,もれなくダブりなく数えるルールは思いつきません. では,「整数列全体の集合はカウンタブルではない」ことを背理法を用いて証明しましょう
  22. ステップ一は証明したい命題の否定が成り立つと仮定することです 証明したい命題は 証明したい命題の否定は では,論証を進めましょう カウンタブルであるということはすべての整数列には番号付ができるということです. つまり,すべての整数列は順番に並べることができます.
  23. ここで,すべての整数列を表に並べましょう この表には最後の数列までのすべての整数列が並べられています. この表にない整数列を作ることで矛盾が導けそうです. どうしたら良いでしょうか
  24. ちょっと考えます すべての整数列の表にない整数列ってなんだよ? 簡単に思いつきませんね
  25. 今までのやり方を思い出しましょう 最大の整数をM... ですから今回は,すべての整数列表から新しい整数列を作り出せば良いのです
  26. このときに対角線論法というものを使います(カントール) 手順は2ステップです 表に含まれない数を作るために,表の対角線を通るようにして数を選んでいきます 選んだかずに1を足して新しい数列を作ります こうすることで,どの整数列とも必ず⑴箇所は異なる数列が完成します
  27. .さて,私たちは仮定をもとにすべての整数列の表を書きました,その後論証を進めた結果 すべてのせい数列の表にない数列を導きました これは矛盾です 背理法により,もとの命題である整数列全体の集合はカウンタブルではない は正しいことが証明されました
  28. 教科書とは少しちがう
  29. もう一つ例を出しましょう 0以上⑴以下のじっすはカウンタブルではないことを証明します
  30. 最後に関数の集合でさえもカウンタブルではありません. 例えば与えた整数に⑴を加える関数 ... これらを同じように数列に並べた後に対角線論法を使うことで
  31. ステップ一は証明したい命題の否定が成り立つと仮定することです 証明したい命題は 証明したい命題の否定は では,論証を進めましょう カウンタブルであるということはすべての整数列には番号付ができるということです. つまり,すべての整数列は順番に並べることができます.
  32. 2かけるn=1