ハンドアウト

5.1,5.2 コンピュータ・CPU の動作原理
5 計算のモデル
• 機械語
5.1,5.2 コンピュータ・CPU の動作原理
• レジスタ
5.3 計算の数学的モデル
ストアードメモリ方式 : プログラムもデータとして格納
3
2
1
5.3.1 チューリング機械
5.3 計算の数学的モデル
チューリング機械 (TM) :
• 無限テープ
• テープの記号と状態から動作を (非決定的に) 決める
• チューリング機械
• 動作は、次の状態・テープに書き込む記号・ヘッドの移動
• レジスタ機械、
M = (Q, Σ, Γ, δ, q0)
• Q: 状態の有限集合
• Σ: 入出力記号の有限集合
• λ 計算、
• Γ: テープ記号の有限集合 (Γ ⊇ Σ ∪ {B})
• 項書換え系、
• δ: 遷移関数 (δ : Q × Γ → Q × (Γ ∪ {L, R}))
などなど
• q0: 初期状態 (q0 ∈ Q)
4
5
6
5.3.2 帰納的関数
時点表示 : 状態が q でヘッドの位置が以下のとき、
例 : f (x, y) = x + y を満たす f : N2 → N を計算する
チューリング機械
原始帰納的関数 : 自然数 N 上の関数のクラス
原始帰納的関数の定義
• 零関数、次者関数、射影関数
def
zero: N0 → N ただし、zero() = 0
a1qa2 · · · an
def
suc: N → N ただし、suc(x) = x + 1
と書く
def
n
n
pn
i : N → N ただし、pi (x1, . . . , xn) = xi
• 合成関数、すなわち、g : Nm → N と gj : Nn → N が原
• 入力 1011 に対する動作
q01011 ⊢ 1q0011 ⊢ 1q1111 ⊢ 11q111 ⊢
111q11 ⊢ 1111q1 ⊢ 111q21 ⊢ 111q2 ⊢
11q31 ⊢ 1q311 ⊢ q3111 ⊢ q3B111 ⊢
q4111
チューリング機械が定義する自然数上の計算 :
q01k1 01k2 0 · · · 01kn ⊢∗ q1m
は f (k1, . . . , kn) = m
始帰納的関数のとき、
f (~
x) = g(g1(~
x), . . . , gm(~
x))
で定義される関数 f : Nn → N は原始帰納的関数
7
原始帰納的関数の例 (続き)
(
· y = x − y if x >= y
• x−
0
otherwise
を計算する関数 sub(x, y) なぜなら
原始帰納的関数の例
def
• one() = 1 なぜなら 1 = suc(zero())
原始帰納的関数の定義 (続き)
def
• two() = 2 なぜなら 2 = suc(one())
• 原始帰納法で定義された関数、すなわち、
sub(x, 0) = x
sub(x, y + 1) = prod(sub(x, y))
def
g : Nn → N と h : nn+2 → N が原始帰納的関数のと
き、
f (~
x, 0) = g(~
x)
· 1 なぜなら
• pred(x) = x −
pred(0) = 0 (= zero())
pred(y + 1) = y (= p2
1(y, pred(y)))
• x × y を計算する関数 mult(x, y) なぜなら
mult(x, 0) = 0
mult(x, y + 1) = add(x, mult(x, y))
def
• add(x, y) = x + y なぜなら
f (~
x, y + 1) = h(~
x, y, f (~
x, y))
で定義される関数 f : Nn+1 → N は原始帰納的関数
add(x, 0) = x (= p1
1(x))
add(x, y + 1) = suc(add(x, y))
(= h(x, y, add(x, y)))
問 : 関数 exp(x, y) = xy 、fact(x) = x!、min(x, y)
が原始帰納的であることを示せ。(ここで 00 の値は問わ
ここで、h(x, y, z) = suc(p3
3(x, y, z)) は原始帰納的
10
9
8
11
ない)
12
補題 : 原始帰納的関数 f (~
x, y) を利用して次のように定義
される f ′(~
x, y) と f ′′(~
x, y) は原始帰納的関数である
f ′(~
x, y) =
f ′′(~
x, y) =
X
z<y
Y
f (~
x, z) = f (~
x, 0)+· · ·+f (~
x, y−1)
z<y
f (~
x, z) = f (~
x, 0)×· · ·×f (~
x, y−1)
証明 : f ′ のみ示し、f ′′ は省略
定理 原始帰納的関数はチューリング機械で計算できる
略証 (続き)
略証 : 原始帰納的関数の構成に関する帰納法
• zero(), suc(), pn
i (x1, . . . , xn) はチューリング機械
で計算できる
• 合成
g : Nm → N と gj : Nn → N を計算するチューリング
f ′(~
x, 0) = 0
f ′(~
x, y + 1) = f ′(~
x, y) + f (~
x, y)
機械があると仮定し、g(g1(~
x), . . . , gm(~
x)) はチューリ
ング機械で計算できることを示す
13
• 原始帰納法
g : Nn → N と h : Nn+2 → N を計算するチューリング
機械があると仮定し、以下で定義される f がチューリン
グ機械で計算できることを示す



f (~
x, 0) = g(~
x)
f (~
x, y + 1) = h(~
x, y, f (~
x, y))
15
14
補題 p(~
x), q(~
x), r(~
x, y) が原始帰納的述語なら、次の述
例 : 述語「=0」 (=0(x) を x = 0 と書くことにする)
原始帰納的述語
c=0(x) =  0 · · · x が 0 のとき
1 · · · x が 0 でないとき
·
· x) と書けるので、c
c=0(x) = 1 − (1 −
=0 は原始帰納


• (n 変数) 述語: p : Nn → { 真, 偽 }
• 述語 p の特徴関数 cp : Nn → N
的関数である。よって「=0」は原始帰納的述語
x) = 真のとき
cp(~
x) =  0 · · · p(~
1 · · · p(~
x) = 偽のとき


例 : 述語「x = y 」、「x ≤ y 」は原始帰納的。なぜなら、
· y) + (y −
· x))
c=(x, y) = c=0((x −
def
• 述語 p が原始帰納的 ⇐⇒ cp が原始帰納的
c≥(x, y) = c=0
語も原始帰納的
(1) ¬p(~
x)
(2) p(~
x) ∨ q(~
x)
(4) (∃z < y) r(~
x, z)
(3) p(~
x) ∧ q(~
x)
(5) (∀z < y) r(~
x, z)
(6) p(f1(~
x), . . . , fn(~
x)) (ここで fi は原始帰納的)
証明 : (3),(5) はそれぞれ (2),(4) で表せる
· c (~
(1) c¬p(~
x) = 1 −
p x)
(2) cp∨q (~
x) = cp(~
x) × cq (~
x)
(4) 述語を s(~
x, y) とかく。cs(~
x, y) =
· y)
(x −
(6) 述語を p′(~
x) とかく。
Y
z<y
cr (~
x, z)
cp′ (~
x) = cp(f1(~
x), . . . , fn(~
x))
16
17
18
p(~
x, y) の限定最小解関数 : y 未満で p(~
x, z) を満たす z ∈
N があればその最小の z を返し、そうでなければ y を返
例 : 次の述語は原始帰納的
す関数
µz<y p(~
x, z)
def
= min({z ∈ N | z < y, p(~
x, z)} ∪ {y})
•x<y
• x×y =z
(x > 1) ∧ (¬(∃u < x)(∃v < x) (u × v = x))
と書く。
Y
z≤v
cp(~
x, z) を g(~
x, v)
def
• pr(x) = x 番目の素数
• 合成関数 (帰納的関数の合成)
∵ (原始帰納的帰納関数は全域的だが、fM は一般には
• 原始帰納法 (帰納的関数を用いた原始帰納法)
部分関数)
• 原始帰納的述語の最小解関数
関数のクラスと一致する
は原始帰納的。なぜなら
pr(0) = 2
pr(x + 1) =
µz<pr(x)!+2((pr(x) < z) ∧ prime(z))
• 部分関数 f と g は以下を満たすとき等価である (f = g)
という
- 同一の引数を与えたとき、一方が未定義なら他方も未
定義であり、そうでなければ結果が一致する
22
• 原始帰納的関数
M が存在
• 帰納的関数のクラスは、チューリング機械で計算できる
(例:pr(0) = 2, pr(1) = 3)
21
帰納的関数の定義
• 原始帰納的でない関数 fM を計算するチューリング機械
x ÷ y = µz<x(x < (y × (z + 1)))
ii) y 未満では p(~
x, z) を満たす z がないとき
v
0 1 ··· y − 1
cp(~
x, v) 1 1 · · · 1
g(~
x, v) 1 1 · · · 1
X
よって、
g(~
x, v) = y
v<y
帰納的関数
• x ÷ y は原始帰納的。なぜなら
g(~
x, v) = m
20
19
例:
X
v<y
始帰納的関数
証明 : (∃z ≤ v) p(~
x, z) の特徴関数
v
0 1 ··· m − 1 m m + 1 ··· y − 1
cp(~
x, v) 1 1 · · ·
1
0
∗
··· ∗
1
0
0
··· 0
g(~
x, v) 1 1 · · ·
ここで ∗ は 0 または 1
よって、
補題 p(~
x, y) が原始帰納的述語ならば、µz<y p(~
x, z) は原
def
• prime(x) ⇐⇒
i) p(~
x, z) を満たす最小の z が m (< y) のとき
23
述語 p の最小解関数 :
µz p(~
 x, z)

· · · p(~
x, y) を満たす z ∈ N が存在するとき
=z
未定義 · · · それ以外のとき
帰納的関数の例 : f (x) = µz (z 2 = x)
x 0 1 2 3 4 5 ···
f (x) 0 1 未 未 2 未 · · ·
24
5.3.3 計算モデルの同等性
アッカーマン関数 : 帰納的だが原始帰納的でない関数
定理 帰納的関数はチューリング機械で計算できる
証明 : 帰納的関数の構成に関する帰納法
• 14 ページの定理 [原始帰納的関数は TM で計算できる]
• 原始的述語 p の最小解関数 µz p(~
x, z) がチューリング機
A(0, y) = y + 1
A(x + 1, 0) = A(x, 1)
A(x + 1, y + 1) = A(x, A(x + 1, y))
問 5.5 (text p.141) 急激に大きくなる関数で、限定最
小解関数では書けない
械で計算できることを示す
• 上の定理の逆も成立する
25
26