情報処理(講義)2001-2学期

情報数学セミナー
チャーチの提唱の
周辺
亀山幸義
[email protected]
http://www.is.tsukuba.ac.jp/~kam
1学期補足資料「計算可能性の話」

N→N
– 自然数を1つ引数に取り、自然数を1つ返す関数
の全体(集合)

理想化されたプログラム言語
– たとえば、いくらでも大きな自然数を取り扱えるよう
に拡張されたC言語

対角線論法
– N→N の要素(つまり関数)すべてが、この言語の
プログラムとして記述できると仮定すると矛盾
– プログラムとしては記述できない関数が存在する
当然起きる疑問
この話は「理想化されたプログラム言語」として
何をとるかに依存するのではないか?
 つまり、「計算可能関数」という(一般的な)概念
には何の関係もないのではないか?
 単に、「C言語で記述可能なプログラム(関数)
の範囲がどうか」という話ではないか?

計算機科学の最も基本的な問い
計算とは何か?
答えはもちろん1つではない
計算機科学の永遠のテーマ
計算モデル

「計算」はいろいろな意味をもち、様々な形で
定義される
– 現代的な(フォンノイマン型)コンピュータでの計算
– 数学的な関数による計算、λ計算体系による計算
– 定理証明手続き
– 最近の話題
• 量子計算
• DNA計算、自然計算
自然な問い
さまざまな「計算」の定義の間の関係を知りた
い
 どの計算モデルが強力か?
 より強力な計算モデルにするのはどうしたらよ
いか?

計算機科学の創始者たち

1960年代のチャーチ、クリーニら
– 当時提案された様々な計算モデルは、外見上全く
違うにもかかわらず全て同等な表現力をもってい
ることがわかった
– これは偶然ではなく、非常に安定した概念がそこ
にあることを示すのだろう、と考えられた
– もっとも、「原始帰納的関数」など、弱すぎる計算モ
デルを考えて恥をかいた研究者もいた
– それぞれの計算モデルをどんどん強くしていってこ
れ以上は本質的に強くならない(広い範囲の関数
を定義できない)というポイントに来たとき、それは
実はどの計算モデルでも同等だった、ということ
チャーチの提唱 Church’s Thesis

計算可能関数とは、以下の同等な定義のいず
れか1つで与えられるものであると定義しよう
– 帰納的関数
– λ定義可能性
– Turing機械による計算可能性
(現代のプログラム言語を理想化したものを全部カバー)
– マルコフ過程による計算可能性

注意
– これは「定理」ではない
– 「定義をしようという呼びかけ」に過ぎない
λ定義可能性

λ計算(型なしλ計算)
– λ式の構成は3つの規則
• 変数 x
• 適用 MN
• λ抽象 λx.M
– 計算規則 (ベータ簡約): (λx.M)N⇒M[x:=N]

たったこれだけで、N→Nのものすごくたくさん
の関数を表現できてしまう(驚き!)
λ定義可能性

ある種のλ式を、自然数0,1,2,と見なす
– 0 = λxy. x
– 1 = λxy. yx
– 2 = λxy. y(yx)

自然数上のいろいろな演算を定義する
– 1を足す s = λa.λx.λy.y(axy)
– 足し算 + = λa.λb. ab s
– 再帰呼び出しだって何だってλ式として書けてしま
う!
Turing機械
1本の無限に長いテープ(読み書き可能)
 ヘッド(テープのどこか1か所を指す)
 状態は有限個

非常に原始的なコンピュータ
 実は、Turing機械をいくら拡張して現代のコンピュー
タに近づけても、記述できる関数の範囲は広がらな
い

– テープを複数本にしたり、両方向無限長にしたり、ヘッドを
増やしたり、ランダムアクセスにしても変わらない
– RAM: Random Access Machine
– もちろん、理想化したC言語で記述できるプログラムの範囲
もこれと同等
帰納的関数 recursive function
N×。。。×N → N (引数として自然数を0個以上
何個か取る関数)
 この集合の中で、以下の定義により、ある部分集合
を定める。それが帰納的関数の集合
 最初に「たね」になる関数たち

– いつでも「0」を返す関数
– 1を足す関数
– n個の引数をもらい、そのj番目を返す関数

関数を組み合わせる仕組み
– 関数合成
– 原始帰納法
– 最小化
討論

原理的な論点
– 「計算」とは何か?
– 計算モデルとしてもっと強力なものはないのか?
• 人間や神が介在する計算?

現実的な論点
– 計算モデルを考えることに何の意味があるか?
• 現実のコンピュータとはほど遠い数学的モデルをいじっ
ているのでは?
• 現代のコンピュータは「自然数から自然数への関数」を
計算するだけでなく、様々な情報処理を行っている。そ
の能力を反映したモデルを作るべきではないか?