Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. ·...

39
Kiz 2010 2 7 概要 Data (Theory of computation), 何のために学ぶのか うして するか いう をずっ おいつづける きて がストップしてくる。 したんだけ うしてか いう プロジェクトに するため プロジェクトが れた きに を引き ける いった意 あった。 さて、幹 する を学んだんだけ 々あって えたい する をさせるに他 いんだ づいた。 っていう 変えてみる いう I オートマトンと言語理論 1 用語の定義 1.1 オートマトン Automaton (Pl. Automata) automation stands for “automatic operation.” ‘automate’ Automaton だけ える。また、 Automaton ( ) つこ る。す わち、 に依 する。 1

Transcript of Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. ·...

Page 1: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

計算論

Kiz

2010年 2月 7日

概要

Data

計算論 (Theory of computation),近山

何のために学ぶのか

この様な抽象的なものをどうして勉強するかというと、具体的なものをずっとおいつづけると飽

きて思考がストップしてくる。

私は富士通へ就職したんだけど、どうしてかというと国のプロジェクトに加盟するためで、もし

プロジェクトが倒れたときには富士通が身元を引き受けるといった意味であった。

さて、幹部職へ昇進する際には発想法を学んだんだけど、結局色々あっても全部考えたい物事に

関連する作業をさせるに他ならないんだと気づいた。今回の計算論っていうのは考え方の切り口を

変えてみるというのに重要。

第 I部

オートマトンと言語理論

1 用語の定義

1.1 オートマトン

Automaton (Pl. Automata)自動機械。

automation stands for “automatic operation.” ‘automate’は逆成。

Automaton は入力と出力を伴う機械だけど、入出力ともに離散的なものを考える。また、

Automatonは記憶 (状態)を持つことが出来る。すなわち、出力は入力の履歴に依存する。

1

Page 2: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

1.2Language

言語 1 用語の定義

1.2Language

言語

オートマトンの入力セットを決めるもの。有限種の記号の集合 Σからなる有限長の並びの集合と

定義できる。オートマトンは記号列が言語に属すか否かを判定するのが基本的動作。

注意 1じゃあ計算できないじゃないかと思うかもしれないけど、2進数の計算をするんだから一番下の桁

が 1になるか否か、次の桁が 1になるか否か…とやっていけば計算も出来る。

アルファベット Σ

記号の有限集合。word, string

記号列

記号の有限個の並び。empty string

空 列 ε

長さ 0の記号列。length

長さ

|w|:記号列 wを構成する記号の数。

例 |abcd| = 4, |ε| = 0

Σ上の記号列すべてを含む集合 Σ∗

例 Σ = aの時 Σ∗ = ε, a, aa, . . .

補足 1 (冪集合)

冪集合の記法はWikipediaによると [1] P(Σ),P(Σ)の様に記述するようだ。

cocatenation

連 接 二つの記号列を並べて出来る記号列。単に書き並べて表す。

w = abc, v = def (1.1)→ wv = abcdef (1.2)

言語の連接 L1L2 = xy | x ∈ L1, y ∈ L2 closure

閉包

Ln = LLL . . . L︸ ︷︷ ︸n 個

(1.3)

としたとき

L∗ =∞⋃

i=0

Li = L0 ∪ L1 ∪ L2 ∪ . . . Lの closure (1.4)

L+ =∞⋃

i=1

Li = L1 ∪ L2 ∪ . . . Lの positive closure (1.5)

2

Page 3: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

2 有限状態オートマトン

2 有限状態オートマトン

有限 (状態)オートマトン, finite (state) automatonを FAと略すことにするよ。

有限 (状態)オートマトンは状態数 (=記憶)が有限であるオートマトンで、コンピュータは有限の

メモリしか持たないので FAと言える。ただし、通常は無限であるかの様に扱う。というのは無限

と考えたほうが理論的にはやさしいから。メモリが足りなくなる様ならその時に工夫する方針。

状態q0, q1, q2, . . .

入力a0, a1, a2, . . .

この様な状態と入力があったときにとりあえず状態遷移図を書こうということになる。

2.1 定式化

FA M = (Q,Σ, δ, q0, F)

Q : 状態の有限集合

Σ : 入力アルファベット

q0 :initial state

初期状態 ∈ Q

F :final state

最終状態 ⊂ Q

入力が終わったときに F の一つに状態があれば入力をaccept

受理したという。

δ :transition function

遷移関数

δ : Q現在の状態

× Σ入力信号

−→ Q次状態

オートマトンを決めると受理する記号列の集合が決まる。

定義 1 (受理言語)

オートマトンが受理する記号列の集合。

例 1入力アルファベット Σ = 0, 1状態遷移図は図 1に示すとおり。

これは 3で割れる数を判定するオートマトンだ?

オートマトンが受理するかどうかで言語に属するかどうかを決定できる。オートマトンのクラス

は言語のクラス、文法のクラスと対応する。

3

Page 4: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

3 正則表現,正規表現 (regular expression)

図 1 状態遷移図

• Logos

• Pathos

• Ethos

3 正則表現,正規表現 (regular expression)

3.1 定義

現在ではregular grammer

正則(正規)文法とも呼ぶ。

アルファベット Σ上の正則表現とは

1. ∅の表す言語は空集合。2. εの表す言語は ε.3. a ∈ Σの表す言語は “a”

4. rと sが言語 Rと Sを表す正規表現のとき、

(r + s) : R ∪ S (3.1)

(rs) : RS 言語の連接 (3.2)

(r∗) : R∗ 言語の閉包=繰り返し (3.3)

一般的な正規表現リテラルで言うと、例えば a?は (a + ε)と書ける。

命題 1有限オートマトンと正規表現は等価である。つまり、FA の受理集合は RE で表せるし、逆に RE

の表す言語を受理する FAを作れる。

4

Page 5: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

4undeterminitic

非決定性有限オートマトン

4undeterminitic

非決定性有限オートマトン

4.1 非決定性有限オートマトンの定義

同じ状態、同じ入力に対して次状態が複数ある。遷移関数が

決定的 δ : Q × Σ→ Q (4.1)

非決定的 δ : Q × Σ→ 2Q (4.2)

NFAが受理する記号列とは、入力終了時の状態が最終状態にある可能性がある記号列と定義で

きる。じゃあ最終状態に到達するかどうかが分からなくなるよねといわれるけど、複数の次状態が

ある時はその数だけ別の FAを用意すればいい。バックトラッキングで実現も。

命題 2 (NFAと FAの等価性)

非決定的有限オートマトンは決定的有限オートマトンと等価。NFAと同じ受理集合を持つ決定性

FAを作れる。

NFA M = (Q,Σ, δ, q0, F)に対して (4.3)

DFA M′ = (Q′,Σ, δ′, q′0, F′) (4.4)

を以下のように構成すればいい。

Q′ = 2Q (4.5)

可能性のある状態の集合を状態とする。有限状態だから出来ること

q′0 = q0 (4.6)

F′ = S ⊂ Q | ∃x(x ∈ F ∧ x ∈ S ) (4.7)

δ′ : Q′ × Σ→ Q′ (4.8)

⇔ 2Q × Σ→ 2Q (4.9)

δ′(S , a) :⋃q∈Sδ(q, a) (4.10)

4.2 有限オートマトンの限界

内部状態が有限=有限の記憶量しか持たないことが足枷となって有限オートマトンで受理できな

い言語が存在する。

例 2 (括弧の対応)

開き括弧と閉じ括弧の数が同じかどうか。有限の記憶量である限り、必ず記憶できない数 N が存

在する。

5

Page 6: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

5context free grammer, CFG

文脈自由文法

例 3 (polindrome

回文 )

竹薮焼けた。Madam, I’m Adam. Was it a cat I saw? Able was I ere*1 I saw Elba.

これも括弧と同じで対応付けできなくなる。

5context free grammer, CFG

文脈自由文法

これの対義語はgenerative grammer

生成文法(Avram Noam Chomsky)である。

元々自然言語の文法記述のために考案された。

例 4 (文の分解)

次のように英語を文法から解析できる。

• <文>→<名詞句><動詞句>• <名詞句>→<形容詞句><名詞句>• <名詞句>→<名詞>• <名詞>→birds

• <形容詞句>→<形容詞>• <形容詞>→little

• <形容詞>→blue

• <動詞句>→<動詞>• <動詞>→fly

つまり、文法から文を導出できる。

5.1 定式化

C.F.G. G = (V,T, P, S ) (5.1)

Vvariable

変数=nonterminal symbol

非終端記号の集合。例として文や句など。

Tterminal symbol

終端記号の集合。例として bird, fly, . . .

Pproduction rule

生成規則の集合

Sstart symbol

開始記号∈ V 文

*1 means before.

6

Page 7: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

5.2context-free language

CFGが定義する言語 5context free grammer, CFG

文脈自由文法

生成規則

A −→ αと言う形式 (5.2)A ∈ V (5.3)

α ∈ (V ∪ T )∗ (5.4)

例 5xの可算と乗算からなる式

E → x (5.5)E → E + E (5.6)E → E ∗ E (5.7)E → (E) (5.8)

同じ非終端記号についての生成規則をまとめて

E → x | E + E | E ∗ E | (E) (5.9)

例 6 (回文)

回文は次のように表せる

S → ε | a | · · · | z | aS a | · · · | zS z (5.10)

5.2context-free language

CFGが定義する言語

5.2.1derivation

導出

G = (V, T, P, S )において (V ∪ T )∗ の要素の二つの記号列の関係は

αAγ =⇒Gαβγ (5.11)

⇐⇒det

(A→ β) ∈ P (5.12)

α1, α2, . . . , αm ∈ (V ∪ T )∗ について

α1m−1=⇒

Gαm (5.13)

⇐⇒det

(α1 ⇒Gα2) ∧ · · · ∧ (αm−1 ⇒

Gαm) (5.14)

α1 から m − 1ステップで αm を導ける

α∗=⇒

Gβ (5.15)

⇐⇒det∃k α

k=⇒

Gβ (5.16)

7

Page 8: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

5.3derivation tree

導出木 5context free grammer, CFG

文脈自由文法

5.2.2 CFGの生成する言語 L(G)

L(G) =def

w∣∣∣∣ w ∈ T ∗かつ S

∗=⇒

Gw

(5.17)

5.3derivation tree

導出木

導出の過程を表す木構造。syntax tree, parse tree

構 文 木と言ったりもする。Sを根に、Tを葉に、Vを節に持つ木

構造。親子関係は Pに依る。

5.4 CFGの標準形

どんな CFGも以下の形に置き換えられる。

1. Gのどの非終端記号、終端記号も言語 L(G)のいずれかの言語の導出に現れる。

2. 非終端記号を置き換えるだけの規則 (A→ B)は存在しない。

3. さらに空列 εを生成しない文法については (A→ ε)と言うかたちの規則は存在しない。

5.4.1 Chomskyの標準形

すべての生成規則を

A→ BC (5.18)

または

A→ a (5.19)

の形にできる。ただし、A, B,C ∈ V, a ∈ T

5.4.2 Greibachの標準形

すべての生成規則を

A→ aα (5.20)

の形にできる。ただし、

a ∈ T A ∈ V α ∈ V∗

5.4.3 BNF, Backus Normal Form

Algol 60(Algorithmic Language)の文法定義に用いた CFG

8

Page 9: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

6pushdown automaton

プッシュダウンオートマトン

6pushdown automaton

プッシュダウンオートマトン

これは finite automaton に pushdown stack(LIFO) の記憶領域を持ったオートマトン。入力記号

列を FAで処理してスタックに入れる。

FAの動作 状態 ×入力記号→次状態PDAの状態 状態 ×入力記号 ×スタックトップの記号 (必ず popする)→次状態 ×プッシュする

記号列 (負でない個数)

無限の記憶を持つが、実は一時に見られるスタックが限られているので context freeなプログラ

ムしか書けない。

6.1 定式化

PDA M = (Q,Σ,Γ, δ, q0, z0, F)

Q : 状態の有限集合

Σ : 入力アルファベット

Γ : スタックアルファベット

δ :transition function

遷移関数

δ : Q現在の状態

× Σ入力信号

× Γスタックトップ

−→ Q次状態

× Γ∗

スタックの有限部分集合=非決定的

q0 :initial state

初期状態 ∈ Q

z0 : 初期記号 ∈ Γ スタックの底

F :final state

最終状態 ⊂ Q

6.2 動作

状態 q にある PDA はスタックの記号が z であるとき入力記号 a を読み込むと状態 pi (i =

1, . . . ,m)に移りスタックトップをポップした後で記号列 γi をプッシュする。ちなみにスタックは

底に z0 が無限に詰まっているとする。

6.3 PDAが受理する言語

6.3.1 最終状態で受理される言語

L(M) =

w ∈ Q∗ | 状態 q0 から F の一つに至りうる M の入力記号列

(6.1)

9

Page 10: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

6.4 PDAは CFGと等価 6pushdown automaton

プッシュダウンオートマトン

6.3.2 空スタックで受理する言語

N(M) =

w ∈ Q∗ | 状態 q0 から始めて入力終了時にスタックが空になりうる M の入力記号列

(6.2)

実は両者は等価。まあ同じマシンで成り立つわけじゃなくて、一方の受理言語を満たすようなオー

トマトンが存在する。

6.4 PDAは CFGと等価

• どんな CFGに対してもその生成する言語を受理言語とする PDAを構成できる。

• どんな PDAに対してもその受理言語を生成する CFGを構成できる。

証明

CFG⇒PDA CFGが空列を生成しないなら、CFGは Greibachの標準型にできる。

A→a1γ11 | a1γ12 | · · · | a1γ1m1 (6.3)a2γ21 | a2γ22 | · · · | a2γ2m2 (6.4)

...

ただし、γi j は非終端記号の空かもしれない並び、ai は終端記号。

PDAのスタック記号として CFGの非終端記号に対応するものを用意。上述の正規形のルールに

対して

δ(q, a1, A) =(q, γ11), (q, γ12), . . . , (q, γ1m1 )

(6.5)

δ(q, a2, A) =(q, γ21), (q, γ22), . . . , (q, γ2m1 )

(6.6)

...

のように遷移関数を定義する。スタックにはこれから処理しなければならない非終端記号が push

されている。ある非終端記号 Aの処理は Aがスタックトップのときに行い、Aの展開結果の先頭

が ai で入力記号が ai の時展開結果の残り γik をスタックにプッシュ。kは非決定的に決まる。

最初に開始記号 S を pushする動き

10

Page 11: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

6.4 PDAは CFGと等価 6pushdown automaton

プッシュダウンオートマトン

S →a1γ11 | a1γ12 | . . . (6.7)a2γ21 | a2γ22 | . . . (6.8)

...

δ(q0, a1, z0) = δ(q, a1, S ) (6.9)δ(q0, a2, z0) = δ(q, a2, S ) (6.10)

...

文法中に A→ akγと言う形の規則がない ak に対しては

δ(q, ak, A) =( q1エラー状態

, Eエラーを示す非終端記号

) (6.11)

として

∀i δ(q1, ai, E) = (q1, E) (6.12)

とすれば入力の終わりには状態 q1 にいてスタックトップは E つまり受理しない。

PDA⇒CFG 非終端記号として PDAのすべての状態 p, qの組とすべてのスタック記号 A ∈ Γに対応した非終端記号

[a, A, p] (6.13)

を用意する。また、

S → [q0, z0, q]

(6.14)

と言う規則をすべての qについて用意する。

ここで、δ(q, a, A)が (q1, B1B2 . . . Bm)を含むとき任意の q1, . . . , qm+1 ∈ Qに対して

[q1, A, qm+1]→ a[q1, B1, q2][q2, B2, q3] . . . [qm, Bm, qm+1] (6.15)

と言う文法規則を設ける。

例 7奇数文字の回文

G = (S , a, b, P, S ) (6.16)P = S → a | b | aS a | bS b (6.17)

Greibachの標準形に直して

S → a | b | aS A | bS B (6.18)A→ a (6.19)B→ b (6.20)

11

Page 12: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

6.5 決定的動作をする Push-down Automaton 7Turing Machine

チューリングマシン

これを受理する PDAは

M = (q0, q, a, b, S , A, B, z0, q0, z0, F) (6.21)δ(q, a, S ) = δ(q0, a, z0) = (q, ε), (q, S A) (6.22)δ(q, b, S ) = δ(q0, b, z0) = (q, ε), (q, S B) (6.23)δ(q, a, A) = (q, ε) (6.24)δ(q, a, B) = (q, ε) (6.25)

と表される。abaの受理を表 1で考えてみる。

状態 入力残り スタック 備考

q0 aba ε

q ba ε 行き詰まり

q ba S A

q a A

q ε ε 受理

q ε S B 不受理

表 1 プッシュダウンオートマトンの文脈自由文法との等価性

6.5 決定的動作をする Push-down Automaton

プッシュダウンオートマトンは FA + stackで実装されるが、非決定的動作なしでは CFGと等価

にならない。これを計算機上では backtrakingで simulateするがどうも非効率。

ここで、決定的動作をする PDA を考える。PDA の遷移関数を決定的にしたものだが、全ての

CFGを扱えるわけではない。ただし、かなり有用な CFGの部分集合を扱える。対応できる文法は

種々ある。実際コンパイラコンパイラとして yaccなど有名なものがある。しかし、理論的には綺

麗に出来ないところがある。

7Turing Machine

チューリングマシン

Alan M Turing (1912–1954)が理論を確立したのがチューリングマシン (TM)。FCに左右に動く

読み書き可能な半無限テープが取り付けられている。FCの状態とヘッド位置の記号から

• 次の状態• ヘッド位置の記号の書き換え• ヘッドの左右いずれかに一コマ分動く

12

Page 13: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.1 定式化 7Turing Machine

チューリングマシン

を決定する。ちなみに同じ記号を「書き換え」すると記号を書き換えないことと等価で、より上位

の概念で吸収できて数学的に洗練された物になっている。

脇道にそれるけど学会いろいろ。

• the Association for Computing Machinery(ACM)チューリング賞で有名

• the Institute of Electrical and Electronics Engineers(IEEE)電気系

• 電気学会• 電子情報通信学会• 情報処理学会

7.1 定式化

TM M = (Q,Σ,Γ, δ, q0, B, F) (7.1)

Q : 状態の有限集合 (7.2)

Σ : 入力アルファベット (7.3)

Γ : テープアルファベット ⊂ Σ (7.4)

δ : 動作関数 Q × Γ→ Q × Γ × L,R (7.5)

q0 : 初期状態 ∈ Q (7.6)

B : 初期記号 ∈ Γ (7.7)

q0 で入力記号列以外のテープ上に書かれてる記号=blank

F : 最終状態 ⊂ Q (7.8)

7.2 TMの受理する言語

L(M) ⊂ Σ∗ (7.9)

• 入力記号列をテープに左詰めして置く• テープヘッドはテープの左端に• 状態は q0

ここから始めて動作関数に従って動作して Fの要素に至るときMは入力を受理するという。

TMの重要な点は、PDAや FAと異なり、有限ステップで動作が終了する保証はない。

13

Page 14: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.2 TMの受理する言語 7Turing Machine

チューリングマシン

7.2.1instantaneous description

時 点 表 示

ある時点での TMの状態を表す。

α1︸︷︷︸ヘッドの左の記号列

q︸︷︷︸FC の状態

α2︸︷︷︸ヘッド位置及び右の記号列

(7.10)

ただし α2 において右端 Bの並びは省略

例 8

L = anbn | n ≥ 1 (7.11)

を受理する TM。方針として aを X に、bを Y に書き換える動作を繰り返す。

0. ヘッド位置の aを X に

1. 右にヘッドを動かして bを見つけて Y に

2. 左にヘッドを動かして X を見つけ、その右を見る

3. それが aなら X に書き換えて 1に戻る

4. それが Y なら、右に Y を読み飛ばしていき Bが見つかれば OK

状態/記号 a b X Y B

q0 (q1, X,R) — — — —

q1 (q1, a,R) (q2,Y, L) — (q1,Y,R) —

q2 (q1, a, L) — (q3, X,R) (q2,Y, L) —

q3 (q1, X,R) — — (q4,Y,R) —

q4 — — — (q4,Y,R) (q f , B,R)

q f

入力が aabbのときは

1. q0aabb

2. Xq1abb

3. Xaq1bb

4. Xq2aYb

5. q2XaYb

6. Xq3aYb

7. XXq1Yb

8. XXYq1b

9. XXq2YY

10. Xq2XYY

14

Page 15: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.3 TMのプログラミング 7Turing Machine

チューリングマシン

11. XXq3YY

12. XXYq4Y

13. XXYYq4

14. XXYYBq f

7.3 TMのプログラミング

FCでの記憶 FCの状態数は有限だが、上限はないので*2状態数を n倍にすることはいつでも可

能、つまり n 種の値を持つ変数を持てるのと同じ。その変数の値によって動作を決められる。有

限種の値を持つ変数を有限個保持しそれらの値も動作の決定に影響するようなマシンは通常の TM

に変換できる。

7.3.1 多トラックを持つ TM

テープに複数のトラックを持つ TMは通常の TMに変換できる。|Γ|k 種のテープアルファベットを持つ TMに変換できる。

7.3.2marking

印づけ

テープ上の任意の位置に印をつけてその場所を探すような動作をさせることが出来る。多トラッ

クにすればよい。

7.3.3 テープ上への記号の挿入・削除

α1 q α2 ↔ α1 q aα2 挿入の手順は下記のとおり。

1. テープ記号は有限種だからそれを FCに覚える(∵有限種の値の変数一つ)

2. 覚えていた挿入したい記号を描いて右へ。

3. これを Bになるまで繰り返す。

必要なステップ数はテープ上の Bでない記号数程度で多項式時間。

7.4 拡張してもパワーは不変

元の TMで結局シミュレートできる。

7.4.1 双方向無限テープを持つ TM

2 トラックの TM でシミュレートできる。FC にどちらのトラックをみているかを記録すれば

よい。

*2 数学的な表現ではない

15

Page 16: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.4 拡張してもパワーは不変 7Turing Machine

チューリングマシン

7.4.2 独立にヘッドを動かせる多テープを持つ TM

k本のテープがあった場合、2kトラックの TMでシミュレートする。多テープの TMのヘッド

位置に印づけをして、印の位置までヘッドを動かして読み取り、書き込みをする。テープ上の記号

の組み合わせは∣∣∣Γk∣∣∣なので有限で FCで覚えられる。

7.4.3 非決定性 TM

有限制御部の動作が非決定的。複数の動作可能性があり、そのいずれかが最終状態に至れば受

理。これを決定性 TMでシミュレートする。

1ステップで可能な動作の種類の最大値を rとする。NTMの有限ステップでの動作は、i ∈ [0, r]

を満たす数の有限列の集合の部分集合となる。ここで 3 本のテープを持つ TM でシミュレート

する。

1. 入力記号列 (read only)

2. [0, r]の有限列を生成していく作業用

3. 本来の NTMのテープ

• テープ 2 に長さ 1 から始めて徐々に長い [1, r] の有限列を系統的に生成する。

(1, 2, . . . , r, 11, 12, . . . のように.) NTMのある可能な動きを指定。

• テープ 1の内容を 3にコピー。

• テープ 2の内容にしたがって NTMのある動作をシミュレート。

7.4.4random access machine

ランダムアクセスマシン

任意の整数値を保持できる。記憶領域は次のとおり。

• 1, . . . , rと名づけられたレジスタ (有限長)

• 0, 1, . . . と番号付けられたメモリ。

また命令セットが存在し、個々の命令は TMで実現できるもの (加減乗除、条件判定など)とする。

これは現実のコンピュータを理想化したものですね!

しかし、random access machineもまた多テープ TMでシミュレート可能である。テープは次の

ように割り振る。

1. 番地とメモリ内容のペアを記録する。ただ、内容は可変長である。いくら任意の整数値を保

持しても有限値なのだから問題はない。

2. プログラムカウンタ。番地一つを保持。

3. レジスタの内容。

実行時の順序は次のように。

16

Page 17: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.5Church’s hypothesis/thesis

Churchの仮説 7Turing Machine

チューリングマシン

Fetch プログラムカウンタと一致するメモリ番地の内容をテープ 1の上で探す。

Execute その内容にしたがって実行。

Write レジスタ用のテープまたはメモリ用のテープに書き込み。

メモリアクセス 読み出しは Fetchと同様。書き込みは既存の記録内容を消して(番地を参照され

ない番地へ)テープ 1の末尾に書く。

7.5Church’s hypothesis/thesis

Churchの仮説

Church-Turing thesisとも言われる。計算できることは TMで処理できることと等価であるとい

う仮説。数学的には

「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと

同一視しようという主張

である。[2]

TMと同じ計算能力を持つ仕組みを Turing completeであるという。

7.6 単純化した計算機構

7.6.1 テープ記号の制限

テープ記号を 0, 1, Bのみとしても計算できる問題は変わらない。|Γ|種の記号を ⌈log2 |Γ|⌉の長

さの 0, 1列にエンコードすればよい。

7.6.2 2スタックマシン

各スタックはヘッドより左/右のテープ内容を保持すればよい。こうなると、わざわざ非決定オー

トマトンを採用した Push-down Automatonはなんなんだ。

7.6.3counter machine

計数機械

read-onlyな入力に対して任意の自然数を保持する n本のカウンタがある。動作は

• カウンタのゼロ/ノンゼロ• 入力

に応じて

• カウンタの ±1

• ヘッドの左右への動き

ができるだけである。

17

Page 18: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

7.7 万能 (Universal) Turing Machine 7Turing Machine

チューリングマシン

加算

しかしこれでも足し算が出来る。例えば、カウンタ Aが 0になるまで--A,++Bすればよい。

乗算

2本のカウンタで定数倍の乗算も可能である。定数を kとすると、

1. 結果のカウンタが 0になるまで −1

2. 元の値のカウンタを −1して結果のカウンタを k回 +1する。

3. これを元の値が 0になるまで繰り返す。

除算

2本のカウンタで定数 kで割った商を求めるには

1. 結果のカウンタを 0にする。

2. 元の値のカウンタを k回 −1し途中で 0になったら終了。

3. 結果のカウンタを +1して 2に戻る。

とすればよく、剰余は 2のデクリメントのどの状態で 0になったかで分かる。

4本のカウンタを持つ計数機械で 2スタックマシンをシミュレートできる⇐⇒TMをシミュレート

できる。

2本のカウンタを持つ計数機械で 4本のものをシミュレートできる。

7.7 万能 (Universal) Turing Machine

どんな TM でも simulate できる TM を考える。テープには、対象となる TM の記述と、入力、

初期記号列がある。

7.7.1 対象 TMのテープ記号集合

未定なので、適宜複数記号の列にエンコードする。

7.7.2 対象 TMの記述

• テープ記号の種類の数• FCの状態数

• 動作関数(状態、ヘッド位置記号、次状態、書き込む記号、ヘッドの動作)の組を表として与える。

• この表に従った動作

7.7.3 万能 TMの構成

多テープで考える。テープは次のとおり。

A) 入力のテープ(対象 TMと入力)

B) 対象 TMのテープの内容を保持するテープ(適宜エンコード)

18

Page 19: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

8recursive function theory

帰納関数論

C) 対象 TMの FCの状態を持つテープ

7.7.4 万能 TMの動作

1. 入力を Aから Bにコピー

2. Cを初期化

3. Cの内容(対象 TMの状態)と Bのヘッド位置の記号列(対象 TMのテープ)を keyとし

て Aの動作関数表を検索

4. その内容に従って動作

7.7.5 万能 TMの意味すること

計算の機構自体(対象 TM)をデータとして取り扱うことができる。これは von Neumann型コ

ンピューター (stored program computer)

8recursive function theory

帰納関数論

8.1primitive (recursive) function

原始(再帰)関数

定義 2 (原始関数)

以下のいずれかで定義された関数。

•zero function

ゼロ関数

•successor function

後者関数

•projection function

射影関数

• 関数の合成•

primitive recursion

原始帰納法による合成

zero(x) = 0 (8.1)succ(x) = x + 1 (8.2)

projk(x1, . . . , xn) = xk(k = 1, . . . , n) (8.3)

原始的関数 fk, gに対して、

h(x1, . . . , xn) = g( f1(x1, . . . , xn),f2(x1, . . . , xn),

...

fk(x1, . . . , xn))

(8.4)

19

Page 20: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

8.1primitive (recursive) function

原始(再帰)関数 8recursive function theory

帰納関数論

f , gが原始的関数の時、

h(x1, . . . , xn, 0) = f (x1, . . . , xn) (8.5)h(x1, . . . , xn, y + 1) = g(x1, . . . , xn, y, h(x1, . . . , xn, y)) (8.6)

命題 3原始的関数の計算は必ず有限ステップで終わる。

• 原始帰納法以外については自明• 原始帰納法の場合は hの再帰呼び出しの最後の引数が必ず 1小さくなるので、0の場合に有

限時間で到達する。

ここで、TMは計算が有限時間内で終わる保証は無かった。FAは入力が有限なら必ず終わるけ

ど、ここで原始帰納的関数で TM戸同じことが出来るとうれしい。

例 9 (原始帰納的関数の例)

原始帰納的関数には次のようなものがある。

(a) 定数関数

任意の定数は、有限回の succと zeroで表現可能である。

3 = succ(succ(succ(zero(x)

)))(8.7)

(b) 引数の順序の変更

g(x, y) = f(proj2(x, y), proj1(x, y)

)= f (y, x) (8.8)

(c) 加算、乗算

add(x, 0) = proj1(x, 0) = x (8.9)add(x, y + 1) = succ(add(x, y)) (8.10)

mult(x, 0) = zero(x) = 0 (8.11)mult(x, y + 1) = add(x,mult(x, y)) (8.12)

(d)predecessor

前者関数

pred(0) = 0 (8.13)pred(y + 1) = proj1(y) (8.14)

(e) 減算もどき

減算は自然数に対して閉じてないので、負数になるような場合は 0が返ってくる。これ駒場

の記号論理でやったなぁ。

sub(x, 0) = x (8.15)sub(x, y + 1) = pred(sub(x, y)) (8.16)

20

Page 21: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

8.1primitive (recursive) function

原始(再帰)関数 8recursive function theory

帰納関数論

以上で見たように通常用いる関数のほとんどは原始再帰的である。

例 10 (原始的でない帰納的関数の例)

原始的でない帰納的関数の例としてア ッ カ ー マ ン

Ackermann関数があげられる。

定義 3 (Ackermann function)

A(0, y) = y + 1 (8.17)A(x + 1, 0) = A(x, 1) (8.18)

A(x + 1, y + 1) = A(x, A(x + 1, y)) (8.19)

計算は有限ステップで終わるが原始再帰的ではない。

Ackermann関数の値を表 2で見てみよう。

x \ y 0 1 2 3

0 1 2 3 4

1 2 3 4 5

3 5 13 29 61

4 13 65533 · · ·5 65533 · · · 巨大!

表 2 アッカーマン関数の値

命題 4アッカーマン関数は第一引数の増大と共にいかなる再帰的関数よりも急速に値が増大する。

証明. どんな原始的関数 gに対しても∃c g(x1, . . . , xn) < A(c,max(x1, . . . , xn)) (8.20)

が成り立つ。

x + y + 1 < A(x, y) (8.21)A(x, y) < A(x, y + 1) ≤ A(x + 1, y) (8.22)∀a, b∃cs.t.A(a, A(b, y)) < A(c, y) (8.23)

8.1.1 原始帰納的述語

定義 4 (原始帰納的述語)

真偽値を返す述語。原始的関数 f に対して

21

Page 22: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

8.2recursive function

帰納的関数 9 問題の種類と計算可能性

p(x) =def

f (x) = 0 (8.24)

これは有限ステップで計算できるが、一般に解があるかないかを知る方法はない。

8.2recursive function

帰納的関数

原始的関数の定義形式に加えて最小解関数を許す。最小解関数は原始的関数 f に対して

f (n, x1, . . . , xm) が 0 となる最小の n を返す関数 g(x1, . . . , xm) で、解があれば有限時間で停止す

るが、解がなければ停止しない。これを加えてようやく TMと同じ計算能力を持つ。

第 II部Computability

計算可能性

9 問題の種類と計算可能性

特定の問題、例として「宇宙は有限か?」などについては解を書き出すプログラムを作れる。入

力に応じて出力が変わる問題にだけ、計算可能性を論じる意味がある。ここで入力の種類が有限で

あれば入力と出力の対応関係は加算で、一つずつ数え上げていけば、必ず正解する。これに対し

て、入力記号集合が可算無限である場合、入力→出力の写像は非可算無限である。

証明. 対角線論法の典型である。

program \入力 i0 i1 i2 i3 · · ·P0 O0,0 O0,1 O0,2 O0,3 · · ·P1 O1,0 O1,1 O1,2 · · ·P2 O2,0 O2,1 O2,2 · · ·...

.... . .

表 3 プログラムと入力の関係

可算無限な入力 in に対する任意の出力を再現するプログラムが Pm で網羅できたとする。ここで

表 3の対角線を見て、各入力 ik に対して出力が Ok,k ではない問題を考えると、この出力はいかな

るプログラム Pm の出力系列とも異なる。故にすべての問題に対するプログラムを網羅することは

できない。

そこで、本当に扱うべき問題は、「記述できる仕様=有限長の問題で、有限長のプログラムを作

れない問題はあるか?」という問題。

22

Page 23: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

9.1 帰納的可算集合 11 プログラムの停止性判定

9.1 帰納的可算集合

1体 1の帰納的関数の値域である集合。可算無限。自然数の部分集合は連続体濃度なので*3だい

ぶ違う。帰納的可算集合は TMで受理できる。この様な集合をcomputable

計算可能という。

10Goedel function

ゲーデル関数

定義 5 (ゲーデル関数)

関数 G : Nm → N が 1 体 1 写像(全単射)の時、G は数列 x1, . . . , xm をエンコードできるとみな

せる。

これに対してさらに Gi(G(x1, . . . , xm)) = xi となる関数 G1, . . . ,Gm があれば、これらの関数でデ

コードできる。

G 及び G1, . . . ,Gm が原始帰納的関数の時、G をゲーデル関数と呼び、G1, . . . ,Gm はその逆関数

とする。また、G(x1, . . . , xm)を x1, . . . , xm のゲーデル数と呼ぶ*4。

例 11有名な構成例として、素因数分解を用いた物がある。

G(x1, . . . , xm) =n∏

k=1

pxkk (10.1)

ただし、pk は k番目の素数。この時、例えば

〈5, 2, 6〉 7→ 25 × 32 × 56 (10.2)

これからゲーデル関数を使って計算機構(プログラム)を数として扱えることがわかる。

11 プログラムの停止性判定

プログラムをエンコードした物とそれに対する入力データを入力し、そのプログラムがそのデー

タ入力に対して停止するかを出力する。有限時間で停止する場合はもちろん有限時間で答えがわか

るが、停止しない時にそれが本当に止まらないのかを判定するのは難しい。

定理 1プログラムの停止性を有限時間で判定するプログラムを作ることはできない。

証明. 仮にそのようなプログラムを作ることが出来たとすると、それを stops(p, d)(p:プログラ

*3 自然数は可算無限なので、おそらく自然数の冪集合が連続体濃度ということ?*4 本来のゲーデル数はゲーデルの不完全性定理で用いられている論理式を自然数へ対応付けるものである

23

Page 24: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

12lambda-expression

λ 式

ム,d:入力データ)という真偽値を返すルーチンを作ることができる。これを使って

if (stops(p, d))無限ループ else停止 (11.1)

というプログラムを作ることができる。

このプログラムをエンコードした値が Pであるとき、stops(P, P)の返す値を考える。

1. 仮に真を返すとすると、先のプログラム Pは P自身を入力にとった場合停止すると判定さ

れたことになるが、実際には無限ループして停止しない。

2. 仮に偽を返すとすると、先のプログラム Pは P自身を入力にとった場合停止しないと判定

されたことになるが、実際には停止する。

以上から最初の仮定の元で矛盾が生じたので仮定が誤っていたことになる。よって任意のプログラ

ムの停止性を有限時間で判定するプログラムを与えることはできない。

系 1万能 Turing Machineのプログラムテープと入力テープが与えられたとき、そのプログラムテープに

記述された Turing Machineが入力テープを与えられたときに停止するかを判定するような Turing

Machineを構成することはできない。

以上で見たとおり停止性の判定は計算不能である。もちろん特定のプログラム・特定のデータに

対する停止性判定がいつもできないというわけではない。例えば、停止するプログラム/データに

対してそれが停止することは有限ステップでわかるし、nステップ以内で停止するかの判定も実行

してみればわかる。

第 III部lambda calculus

λ 計 算

12lambda-expression

λ 式

関数その物を表す記法が欲しいという需要に答える物。

f (x) = 3x + 2 (12.1)g(y) = 3y + 2 (12.2)

h(x, y) = 3x + 2 (12.3)

はすべて同じ事をいっているが…これを直接的に書き表すには、

λx.expression (12.4)

のように表す。

24

Page 25: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

12.1 高階関数 12lambda-expression

λ 式

例 12

f = λx.3x + 2 (12.5)

λ式を導入する事で関数を値として使用できる。これをlambda abstraction

ラムダ抽象化という。

12.1 高階関数

定義 6 (higher-order function

高階関数)

高階関数とは関数を引数としたり、関数を結果とする関数のことである。

例 13引数として与えられた関数を 2回適用する関数を返す。

twice( f ) = g (12.6)

g(x) = f(f (x))

(12.7)

これを λ式で表すと、

twice( f ) = λx. f ( f (x)) (12.8)twice = λ f .λx. f f x (12.9)

12.2Currying

カリー化

多引数の関数を高階関数を用いることで 1 引数の関数のみで表現する。C++ でいうと

boost::bindみたいな感じだ。

定義 7 (カリー化)

カリー化の記法はつぎのように表される。

λx1 . . . xn.M = λx1.(λx2.· · · (λxn.M)) (12.10)M1M2 . . .Mn = (· · · ((M1M2)M3) · · ·Mn) (12.11)

ex.

λxy.M1M2M3 = λx.(λy.((M1M2)M3)) (12.12)

定義 8Identity function, constant function is defined as

I ≡ λx.x , (12.13)K ≡ λxy.x = λx.(λy.x) . (12.14)

25

Page 26: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

12.3beta reduction

β変換 12lambda-expression

λ 式

12.3beta reduction

β変換

定義 9 (β変換(簡約))

式 M の中の xの自由な出現全てを N で置き換えた結果を M[x = N]と表す。この時 β変換はつぎ

のように分類される。

(λx.M)N −→β

M[x = N] (12.15)

M −→β

N ならば

λx.M −→

βλx.N

MP −→β

NP

PM −→β

PN

(12.16)

β変換の対象になる (λx.M)N の形の式をβ-radix

β基という。式 Pから有限回の β変換で

P ≡ P1 −→β

P2 −→β. . . −→

βPn ≡ Q (12.17)

であるとき、P1, . . . , Pn を β変換列といい、

P∗−→β

Q (12.18)

と書く。

12.4 Church-Rosserの定理

定理 2 (Church-Rosserの定理)

一般に式中に複数の β基がある時、β基の変換順序に結果が依存する。

例 14一例として次のような式を簡約化する事を考える。

β−radix#2︷ ︸︸ ︷(λx.xx)( (λy.y)z︸ ︷︷ ︸

β−radix#1

) (12.19)

この時、

−→β#1

(λx.xx)z −→β

zz (12.20)

−→β#2

((λy.y)z)((λy.y)z) −→β

zz (12.21)

このとき、同じ λ式から∗−→βで導かれた 2つの式からは

∗−→βで同じ式を導くことができる。こ

れをconfluence

合流性という。

26

Page 27: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

12.5normal form

正規形 13 λ計算

12.5normal form

正規形

定義 10 (正規形)

β基を含まない式を正規形であるという。β変換の結果が正規形になればそれで計算が終了する。

例 15正規形を持たないような式も存在する。

(λx.xx)(λx.xx) −→β

(λx.xx)(λx.xx) (12.22)

また、計算順序に依存する場合もある。

(︷ ︸︸ ︷(λxy.y)((λx.xx)(λx.xx)︸ ︷︷ ︸))(λx.x) (12.23)

内側の β-reductionが何度やっても同じかたちになるのは上で見たとおり。ここで λxy.y = λx.(λy.y)

に留意して外側から β-reductionすると

−→β

(λy.y)(λx.x) −→βλx.x (12.24)

と正規形に変形できる。

ここでどんな順序で β簡約化しても正規形に至るとき、正規形はこれ以上 β簡約化できないので

合流性によりその λ式はいかなる順序で β簡約化しても同じ形の正規形に至る。

13 λ計算

13.1 導入

関数︷ ︸︸ ︷(λx.Body)

引数︷︸︸︷Arg︸ ︷︷ ︸

β 基

(13.1)

これは Body中の xを Argで置換したもの。

Body[x := Arg] (13.2)

λ式は下のような関数に名前をつけずに表現した物 f (x)Bodyf (Arg)

(13.3)

ここで β基を含まない形の λ式を考える。

27

Page 28: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

13.2 λ式による表現 13 λ計算

λx.x (13.4)λx.(λy.x) (13.5)

λx.(λy.x)略記−→ λxy.x = K (13.6)

• 引数 xを持つ関数。

• 返す値は関数である(高階関数)。– その関数は引数 yを取る

– ただし返り値は yに関わらず x

• つまりこれは定数関数を作る関数だ。

13.2 λ式による表現

ある概念 xを λ式で表現したものを ~xと書くことにする。

13.2.1 論理演算

定義 11 (真偽値)

~true = λxy.x = T (13.7)~false = λxy.y = F (13.8)

もちろん前者は「第一引数を返す関数を返す関数」すなわち K と考えられるし、後者は「第二引数

を返す関数= I」を返す関数と考えることもできる。

この定義によれば式 Pの真偽によって場合分けが出来る。

PMN −→β

M : Pが真のときN : Pが偽のとき

(13.9)

Pに試しに T = λxy.x, F = λxy.yを代入してみればよい。

定義 12 (論理演算)

~not = λpxy.pyx (13.10)

例 (λpxy.pyx)P = λxy.Pyx (13.11)

28

Page 29: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

13.2 λ式による表現 13 λ計算

これを (13.9) に代入してみれば、M と N が逆転して、結果的に if パートと else パートの入れ替え、つまり notの働きができたことがわかる。

~and = λpq.pqp (13.12)

例Pが真なら(λpq.pqp)T → Tqp→ q

Pが偽なら(λpq.pqp)F → FqF → F(13.13)

~or = λpq.ppq (13.14)

13.2.2 数論

定義 13 (自然数:Church numerals

チャーチ数)

参考までに数そのものは number で、これは抽象的な概念である。一方数字は digit で、数を表す

物、数詞は numeralである。

自然数を 2引数の高階関数として表現する。

引数 1 何らかの関数 f

引数 2 その関数 f に渡す引数 x

結果 f を xに n回適用した結果

~0 = λ f x.x (13.15)~1 = λ f x. f x (13.16)~2 = λ f x. f ( f x) (13.17)

~3 = λ f x. f(f ( f x)

)(13.18)

これがペアノの公理を満たせばよい。

定義 14 (ペアノ公理)

この時 iszero, successorが必要となる。

~iszero = λn.n(λx.F)T (13.19)

例 ~iszero(0) = (λn.n(λx.F)T )(λ f x.x) (13.20)= (λ f x.x)(λx.F)

fTx

(13.21)

= T (13.22)

例 ~iszero(1) = (λn.n(λx.F)T )(λ f x. f x) (13.23)= (λ f x. f x)(λx.F)T (13.24)= (λx.F)T = F (13.25)

~succ = λn f x. f (n f x) (13.26)

例 ~succ(3) = (λn f x. f (n f x))~3 (13.27)= λ f x. f (~3 f x) (13.28)= λ f x. f ( f ( f ( f x))) (13.29)= ~4 (13.30)

29

Page 30: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

13.2 λ式による表現 13 λ計算

定義 15 (数値演算)

~plus = λmn f x.m f (n f x) (13.31)

これは f を xに n回適用した物にさらに f を m回適用したもので、つまり ~m + nである。

~mult = λmn.m(~plusn)~0 (13.32)

定義 16 (集合による自然数の定義 (Zermelo-Fraenkel公理系))

参考までに集合による自然数の定義を示す。

~0 = (13.33)~succ(n) = ~n ∪ ~n (13.34)

~1 = ∪ = (13.35)

~2 = ∪ = , (13.36)

13.2.3 データ構造

定義 17 (データ構造)

pairによる list表現(表 2)を考える。ここでの f は firstの頭文字なので注意。

a b c d

図 2 リスト構造

~pair = λ f sb.b f s (13.37)~first = λp.pT (13.38)

~second = λp.pF (13.39)

例を考える

~pair(A, B) = (λ f sb.b f s)AB (13.40)= λb.bAB (13.41)

~first(pair(A, B)) = (λp.pT )(λb.bAB) (13.42)= (λb.bAB)T = T AB = A (13.43)

13.2.4 再帰呼び出し

関数に名前をつけないので関数の Bodyで関数自身を参照できず、再帰呼び出しできない。つま

り何らかの方法で名前をつければいい。

30

Page 31: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

13.3Undecidability of Equivalence

同値性の決定不能性 13 λ計算

g = λ f m.~m = 0なら 1さもなくば m × f (m − 1) (13.44)

このような gに f にあたる物を引数として渡したものが定義したい f で、

g( f ) = f (13.45)

となるような f を gのfixed point

不動点という。この様な不動点を返す関数が欲しい。

定理 3 (不動点関数)

不動点関数 (Y combinator, fixed-point operator, paradoxical operator)は次のように示される。

Y = λ f .(λx. f (xx))(λx. f (xx)) (13.46)

証明.

Yg = (λ f .(λx. f (xx))(λx. f (xx)))g (13.47)= (λx.g(xx))(λx.g(xx)) (13.48)

= g((λx.g(xx)

)(λx.g(xx)

))(13.49)

= g(g((λx.g(xx))(λx.g(xx))

))= g(Yg) (13.50)

例 16 (階乗)

g = λ f n.~... (13.51)~fact(5) = g(Yg)5 (13.52)

= (λn.~if(n = 0)1 else n × (Yg)(n − 1))5 (13.53)= 5 × (Yg)4 (13.54)= 5 × g(Yg)4 (13.55)= · · ·

13.3Undecidability of Equivalence

同値性の決定不能性

二つの λ式が等価(任意の引数に対して同じ結果を返すということ)であるということは決定不

能。個別に同値かどうかを決定することはできるが、それを一般に決定するアルゴリズムがないと

いうこと。

命題 5λ計算は万能 Turing Machineと同等の計算能力を持つ。

31

Page 32: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

14Combinatory Logic

組み合わせ論理

14Combinatory Logic

組み合わせ論理

Moses Sohonfinkel (—1920)から Haskell Curryに至る流れ。チューリング完全な計算モデルで、

関数抽象化をしない枠組み。

14.1Combinatory Term

組み合わせ項

定義 18 (組み合わせ項)combinatory term

組み合わせ項は以下のいずれかに分類される。

• 変数 x

• primitive combinator S ,K, I

• E1, E2 を組み合わせ項とするとき (E1 E2)も組み合わせ項

これから二分木構造も作ることができる。(E1 E2 . . . En) = (· · · ((E1 E2) E3) · · · En)

評価順序は左から右 (left associative)

14.2reduction

簡約化

定義 19 (簡約化)

次のように式を簡約化することができる。

(I x) = x Identity (14.1)

(K x y) = ((K x) y) = x 定数関数 (14.2)(S x y z) = ((x z) (y z)) (14.3)

実は I は不要である。

(S K K x) = ((K x) (K x)) (14.4)= (K x (K x)) (14.5)= x (14.6)

より S KK は I と等価。

14.3 組み合わせ論理はラムダ計算と等価

λ式は組み合わせ項に変換可能。t[L]を λ式から組み合わせ項への変換とする。

t[x]⇒ x (14.7)t[(L1 L2)]⇒ (t[L1] t[L2]) (14.8)

32

Page 33: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

L中に自由な xの出現が無いとき

t[λx.L]⇒ (K t[L]) (14.9)t[λx.x]⇒ I (14.10)

t[λx.λy.L]⇒ t[λx.t[λy.L]

](14.11)

t[λx.(L1 L2)]⇒ (S t[λx.L1] t[λx.L2]) (14.12)

例をあげる。

t[λx.λy.(y x)]⇒ t[λx.t[λy.(y x)]

](14.13)

⇒ t[λx.(S t[λy.y] t[λy.x])

](14.14)

⇒ t[λx.(S I t[λy.x])

](14.15)

⇒ t[λx.(S I (K x))

](14.16)

⇒ (S t[λx.(S I)] t[λx.(K x)])

(14.17)

⇒ (S (K (S I)) t[λx.(K x)])

(14.18)⇒ (S (K (S I)) (S t[λx.K] t[λx.x])) (14.19)⇒ (S (K (S I)) (S (K K) I)) (14.20)

これに対して実際に x, yを適用してみる。

(S (K (S I)) (S (K K) I) x y) (14.21)= ((K (S I) x) (S (K K) I x) y) (14.22)= (S I (S (K K) I x) y) (14.23)= (I y ((S (K K) I x) y)) (14.24)= (y (S (K K) I x y)) (14.25)= (y ((K K) x) (I x) y) (14.26)= (y (K (I x) y)) (14.27)= (y (I x)) (14.28)= (y x) (14.29)

定理 4これ以上簡約化できない項を正規形と呼ぶと、正規形の存在は決定不能。

例 17正規形が存在しない例をあげる。

(S I I (S I I)) = ((I (S I I)) (I (S I I))) (14.30)= (S I I (S I I)) (14.31)

reductionで元の形に戻ってしまった。

33

Page 34: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

15Pi Calculus

π計算

第 IV部Process Calculus

プロセス計算

並行システムの形式的なモデル

CSP Communicating Sequential Processes. Designed by Tony Hoare (Sir Charles Antony Richard

Hoare,) known for his discovery of ‘Quick sort,’ ‘Hoare Logic.’

CCS Calculus of Communicating Systems(Robin Milner, 1980.) He is known for ‘Pi Calculus.’

ACP Algebra of Communicating Processes(Jan Bergstra & Jan Willem Klop, 1982.)

代数モデルに重点をおいている。

Ambient Calculus Lura Cardelli & Andrew D. Gordon, 1998.

Mobilityに重点(機器、コード)

15Pi Calculus

π計算

Robin Milnerによって発明されたプロセス計算の一種。

15.1 構成

並行プロセス P | QPと Qは並行に動作する。

プロセス間通信

メッセージ交換による情報の授受を行う。

受信 c(x).P

プロセス Pは通信チャネル cからのメッセージを街、到着したらそのメッセージを xとし

て Pの実行を開始。

送信 c 〈y〉 .PPは通信チャネル cにメッセージ yを送ってから実行を開始。

プロセスの複製 !P

Pのコピーを作って実行する。

新たなチャネルの生成 (ν x)P

新たな通信チャネル xを作ってから Pを実行開始。

終了 ∅何もしないで終わるプロセス

例 18

34

Page 35: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

16 計算量

(ν x)(x 〈z〉 .∅︸ ︷︷ ︸#1

| x(y).y 〈x〉 .x(y).∅︸ ︷︷ ︸#2

) | z(v).v 〈v〉 .∅︸ ︷︷ ︸#3

(15.1)

#1はチャネル xにメッセージ zを送信する。#2はチャネル xからメッセージ yを受信するまで

待つ。よって次の状態は

(ν x)(∅ | z 〈x〉 .x(z).∅) | z(v).v 〈v〉 .∅ (15.2)

次にチャネル zに#2が xを送信するので#3はチャネル zから xを受信して、

(ν x)(∅ | x(z).∅ | x 〈x〉 .∅) (15.3)

#3は通信によってチャネル xを受け取って xを使えるようになる。xは#1,#2で閉じていた物が

#3にも広まった。

第 V部

計算量の理論

16 計算量

16.1 計算量の持つ意味

プログラムの性質とは一般に次に定義される二つである。

• 正しさ(結果の正当性、停止性)• 処理効率、

Computational complexity

計 算 量

しかし、計算量は入力データに依存するので、問題のサイズ n の関数 T (n) として表現される。

ここで問題のサイズとは必ずしも入力データの量とは限らず、一般には問題の難しさの指標で定義

され、アルゴリズム依存である。

16.2 計算量の解析対象

計算量の解析対象には一般に次のようなものがある。

計算時間

演算ステップ数time complexity

時間計算量

必要なメモリ量space/memory complexity

空間計算量

通信量

35

Page 36: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

16.3big-O notation

オーダー記法 16 計算量

16.3big-O notation

オーダー記法

「このアルゴリズムは、入力データ数 nに対して、O(n)の時間計算量を持つ」のようにして用い

られる。

16.4asymptotic complexity

漸近的計算量

大きな問題は多くの計算量を消費するが、小さな問題は計算量を問題にする必要が無い。ここ

で、漸近的計算量が f (n)であるとは?

n→ ∞のとき、計算量→ f (n) (16.1)

より正確には、実際の計算量 T (n)に対して漸近的計算量 f (n)は次を満たす。

∃c∃n0 s.t.∀n ≥ n0 ⇒ T (n) ≤ c f (n) (16.2)

問題サイズ nに対する実際の計算量 f (n)はある大きさ n0 以上のサイズの問題については漸近的計

算量 f (n)の定数倍を越えない。このことを、計算量が O( f (n))であるという。

この記法は計算量の上界を表すので、あるアルゴリズムが O(n log n)なら O(n2)でもある。より

小さな T (n)がより精度の高い見積りである。

また、定数倍は意味を持たない。同じく次数の低い項は意味を持たない。

ここで計算量についての記法の一覧を表 4に示す。

O記法 計算量の上界が問題サイズ nの関数 f (n)程度

Ω記法 計算の下界

Θ記法 上界かつ下界。Θ( f (n))とは O( f (n))かつ Ω( f (n))で違いは定数倍程度

表 4 計算量の指標の比較

16.5 単純でない計算量指標

入力データの性質に依存する場合もある。

•worst case complexity

最悪の場合の計算量

•average case complexity

平均計算量

– 入力データにある確率分布を仮定– 計算量の期待値

•almost always complexity

ほとんどいつも計算量

– 確率 1で実現できる計算量。例えば「コイントスで裏がいつかは出る」といったもの。

•amortized complexity

償却計算量

36

Page 37: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

16.6 計算量のクラス 16 計算量

16.6 計算量のクラス

問題の難しさを計算量によって分類が可能である。

polynomial

クラスP 決定性 TMにおいて問題サイズの多項式時間で解ける問題。non-deterministic polynomial

ク ラ ス NP 非決定性 TMにおいて問題サイズの多項式時間で解ける問題。探索問題の多くが

属する。また P ⊂ NPNP-hard

NP困難 どんな NP 問題でも多項式時間でこの問題に帰着できる、という問題。この問題が NP

であるとは限らない。NP-complete

NP完全 NPかつ NP困難な問題。

現時点で P,NPかどうかは未解決である*5。また、素因数分解やグラフ同型問題は P問題か NP

問題かもわかっていない。

定理 5 (Time Hierarchy Theorem

時間階層定理)

Richard Stearns & Juris Hartmanis, 1965.

どんな時間計算量のクラスに対してもそれより複雑な計算量を持つ問題クラスが存在する。

16.7 償却計算量

例として多倍長自然数を考える。1wordで表すことができない自然数を表現するに当たって(仮

に 1wordが 32bitとすると)、配列 a[n]を用いて

n−1∑k=0

(232)k · a[k]

(16.3)

仮に 1bit/wordと考えると、

n−1∑k=0

2k · a[k] (16.4)

これは普通の 2進表現。この表現でのカウンタのインクリメントをする計算量は?時々 carryがた

くさん伝搬し、最悪計算量は O(n)になる。でも、普段はそう多くないので平均計算量は O(1)にな

る。ここで、最初の数回が最悪ということがあると、途中 m回までのインクリメントの計算量は

O(m2)になるのか?これに対して次のような考え方を導入する。

• 一旦たくさんの carryが出ると、0の連続が下位に並ぶのでしばらくは carryは出ない。こ

れは償却資産を買ったような場合に相当する。

*5 だが、多くの研究者はそうであると予想しているし、その証明には多額の懸賞金すら掛けられている。

37

Page 38: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

16.7 償却計算量 16 計算量

• 逆に carryがあまり出ない時は、今後の carryを出やすくしているので将来必要になるコス

トの引き当てが必要(積立, reserved fund)。

ここで、カウンタの場合の引き当てるべき計算量とは?

• 0から 1へ変更するのはコスト 1

• ただし、1のビットを作ると将来 carryがそのビットで発生するのでそのコストを 1と引き

当てる。

• 逆に carryの計算は引き当て済みなのでコストとして計算しない。

これを実際に 6まで適用したのが表 5だが、引当分を含めたコストは 1回あたり 2。

数 二進表記 コスト 累計コスト 累計引当計算量 残りの計算量

0 000

→1 000 1 1 2 1

→2 001 2 3 4 1

→3 010 1 4 6 2

→4 011 3 7 8 1

→5 100 1 8 10 2

→6 101 2 10 12 2

表 5 6までのインクリメントにおける計算量

他の例として自動拡張する配列を考える。有名どころでは STLの std::vectorなどはこれに属す

るが、残りの容量が無いときに要素を追加するとサイズを倍にするというもの。

この時 n→ 2nにサイズを拡張する時の操作コストは

• メモリ割付のコスト ∼2n

• 配列要素のコピー ∼n

で、最悪計算量は O(n)だが、拡張が必要なのは nが 2の幅の時だけ。そのため拡張時に必要なコ

ストを要素追加時に毎回 2ずつ引当てる。これを 6個目まで要素を追加したときの結果が表 6で

ある。

38

Page 39: Kiz - 東京大学alumni/liquid/... · 2010. 4. 16. · 非決定的有限オートマトンは決定的有限オートマトンと等価。nfa と同じ受理集合を持つ決定性

参考文献 参考文献

データ数 コスト 拡張コスト 累計 引当含めたコスト 残

1 1 0 1 3 2

2 1 2 3 6 3

3 1 0 4 9 5

4 1 4 9 12 3

5 1 0 10 15 5

6 1 0 11 18 7

表 6 自動拡張する配列におけるコスト

参考文献

[1]「冪集合 - Wikipedia」http://ja.wikipedia.org/wiki/%E5%86%AA%E9%9B%86%E5%90%88

[2]「チャーチ=チューリングのテーゼ - Wikipedia」http://ja.wikipedia.org/wiki/%E3%83%

81%E3%83%A3%E3%83%BC%E3%83%81%EF%BC%9D%E3%83%81%E3%83%A5%E3%83%BC%E3%83%

AA%E3%83%B3%E3%82%B0%E3%81%AE%E3%83%86%E3%83%BC%E3%82%BC

39