SlideShare a Scribd company logo
1 of 60
Download to read offline
輪講 — 論理と計算のしくみ
5.3 型付きλ計算 (前半)
伊奈 林太郎 (id:tarao)
京都大学 大学院情報学研究科
2012-01-26
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 1
参考文献
萩谷, 西崎.
論理と計算のしくみ.
岩波書店, 2007.
J. C. Mitchell.
Foundations for Programming Languages.
MIT Press, 1996.
B. C. Pierce.
Types and Programming Languages.
MIT Press, 2002.
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 2
型理論のアイディア
(λx.xx)(λx.xx)
◮ x は関数のはず
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
◮ 受け取るのは集合 A の要素
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
◮ 受け取るのは集合 A の要素
◮ 渡しているのは関数 A → B (A × B の部分集合)
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
◮ 受け取るのは集合 A の要素
◮ 渡しているのは関数 A → B (A × B の部分集合)
◮ A → B ∈ A なの? おかしくね?
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
◮ 受け取るのは集合 A の要素
◮ 渡しているのは関数 A → B (A × B の部分集合)
◮ A → B ∈ A なの? おかしくね?
⇒ 実際おかしいから無限ループする
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論のアイディア
(λxA→B
.xx)(λx.xx)
◮ x は関数のはず
数学のように A → B の関数だと思ってみる
◮ 受け取るのは集合 A の要素
◮ 渡しているのは関数 A → B (A × B の部分集合)
◮ A → B ∈ A なの? おかしくね?
⇒ 実際おかしいから無限ループする
おかしいものを排除すれば
無限ループしないのでは?
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
型理論 [1/3] は抽象的な枠組
型を付ける
◮ 式の使われ方に応じて種類分けする
◮ この種類のことを型と呼ぶ
型の整合性
◮ 型の付け方は整合していないといけない
◮ 同じ式を異なる型として使ってはダメ等
整合性による恩恵
◮ 使われ方が整合しているので
おかしなことが起きない
◮ ということを数学的に証明できる
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 4
型理論 [2/3] の具体例
何を型だと思うか
◮ 関数, 変数の別
◮ メモリ, プロセス, ロックなどの情報
◮ セキュリティ上のアクセスレベル
◮ エスケープ, エンコードされているかどうか
防げるおかしなこと
◮ 無限ループ, 関数以外の適用
◮ メモリリーク, デッドロック
◮ 情報漏洩
◮ XSS, 文字化け
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 5
型理論 [3/3] は魔法ではない
ただし制限もある
◮ 単純型付 λ 計算は再帰関数を一切書けない
(ループ禁止だから無限ループしないのは当然)
制限を緩めるには
◮ 複雑にして頑張る
◮ G¨odel の System T, Coq
◮ 部分型, 多相型, 依存型
◮ プログラムの一部にだけ性質を保証する
◮ OCaml の let rec
◮ Gradual Typing
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 6
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 7
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 8
型
基本型 (α, β, γ)
◮ プリミティブな型 (int とか)
◮ どんなものがあるかは予め定めておく
単純型 (A, B, C)
A ::= α | A → A
単純型に含めることもある
A ::= α | A → A | A × A | A + A
→ 右結合
×, + 左結合
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 9
型付け [1/2]
各変数の型は固定
xA
と書く
型判断
⊢ M : A 「M の型は A」
型付け規則
⊢ xA
: A
⊢ M : B
⊢ λxA
.M : A → B
⊢ M : A → B ⊢ N : A
⊢ MN : B
⊢ M : A ⊢ N : B
⊢ (M, N) : A × B
⊢ L : A × B
π1(L) : A
⊢ L : A × B
π2(L) : B
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 10
型付け [2/2] — 型の整合性
M は型が付く (M is well-typed)
◮ 型付け規則で ⊢ M : A が導ける
型が付かない例
λxA
.xA
xA
型付けの一意性
◮ 各変数の型が固定なら型付けは一意
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 11
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 12
型保存性 — 示したいこと
◮ 最終的には「型が付けば○○」と言いたい
◮ 「○○」は正規化等 →β に関すること
◮ →β の前後で型の付き方は変わらないでほしい
Theorem (主部簡約定理 (subject reduction))
⊢ M : A かつ M →β N ならば ⊢ N : A
Theorem (関係 R で一般化版)
⊢ M : A かつ M →β N ならば, ⊢ N : B かつ
BRA.
◮ 上は R が = の場合の話
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 13
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 14
代入補題 [1/2]
Lemma (代入補題)
⊢ M : A かつ xB
かつ ⊢ N : B ならば
⊢ M[x := N] : A.
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 15
代入補題 [2/2] — 証明 [1/3]
証明: M の構造に関する帰納法による
◮ M = y のとき
◮ y = x の場合
1 型付け規則と y = x から ⊢ yB
: B
2 ⊢ M : A なので B = A
3 M[x := N] = N
4 補題の前提条件と B = A より ⊢ N : A
◮ y = x の場合
1 型付け規則から yA
のはず
2 M[x := N] = y
3 変数の型付け規則を使って ⊢ yA
: A
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 16
代入補題 [2/2] — 証明 [2/3]
証明: M の構造に関する帰納法による
◮ M = M1M2 のとき
1 型付け規則から ⊢ M1 : C → A かつ ⊢ M2 : C
2 IH より ⊢ M1[x := N] : C → A
3 IH より ⊢ M2[x := N] : C
4 M1[x := N]M2[x := N] = (M1M2)[x := N]
5 適用の型付け規則を使って
⊢ (M1M2)[x := N] : A
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 17
代入補題 [2/2] — 証明 [3/3]
証明: M の構造に関する帰納法による
◮ M = λyA1
.L のとき
1 型付け規則から A = A1 → A2 かつ ⊢ L : A2
2 λzA1
.L[y := z] =α λyA1
.L とできるので
y = x かつ y は N に自由に出現しないとして
も一般性を失わない
3 λyA1
.L[x := N] = (λyA1
.L)[x := N]
4 IH より ⊢ L[x := N] : A2
5 抽象の型付け規則を使って
⊢ (λyA1
.L)[x := N] : A1 → A2
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 18
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 19
主部簡約定理 [1/2]
Theorem (主部簡約定理 (subject reduction))
⊢ M : A かつ M →β N ならば ⊢ N : A
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 20
主部簡約定理 [2/2] — 証明 [1/2]
証明: M →β N の導出に関する帰納法による
◮ Beta のとき
1 M = (λxB
.M1)M2 →β M1[x := M2] = N
2 型付け規則から ⊢ M1 : A かつ ⊢ M2 : B
3 代入補題より ⊢ M1[x := M2] : A
◮ Lam のとき
1 M = λxB
.L →β λxB
.L′
= N かつ L →β L′
2 型付け規則から A = B → C かつ ⊢ L : C
3 IH より ⊢ L′
: C
4 抽象の型付け規則を使って ⊢ λxB
.L′
: B → C
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 21
主部簡約定理 [2/2] — 証明 [2/2]
証明: M →β N の導出に関する帰納法による
◮ AppL のとき
1 M = M1M2 →β M′
1M2 = N かつ M1 →β M′
1
2 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B
3 IH より ⊢ M′
1 : B → A
4 適用の型付け規則を使って ⊢ M′
1M2 : A
◮ AppR のとき
1 M = M1M2 →β M1M′
2 = N かつ M2 →β M′
2
2 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B
3 IH より ⊢ M′
2 : B
4 適用の型付け規則を使って ⊢ M1M′
2 : A
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 22
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 23
やりたいこと [1/4]
すべての無限ループを
生まれる前に消し去りたい
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 24
やりたいこと [2/4]
(λx.xx)(λx.xx)
◮ 「型が付いたら無限ループしない」と言いたい
◮ 上の例に限れば型が付かないことは既に見た
◮ 止まらない項すべてに関して示すには?
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 25
やりたいこと [2/4]
(λx.xx)(λx.xx)
◮ 「型が付いたら無限ループしない」と言いたい
◮ 上の例に限れば型が付かないことは既に見た
◮ 止まらない項すべてに関して示すには?
◮ そもそも「無限ループ」って何?
◮ 無限簡約列があること
◮ 評価戦略によってあったりなかったり
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 25
やりたいこと [3/4] — 定義 [1/2]
β 正規形
M ∈ NFβ ⇐⇒ M は β 簡約で正規形
β 正規形への有限簡約
M ⇓β N ⇐⇒
M = M0 →β M1 →β · · · →β Mn = N ∈ NFβ
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 26
やりたいこと [3/4] — 定義 [2/2]
Definition (弱正規化可能)
型の付いた項 M に対して, ある N が存在して
M ⇓β N.
◮ 有限簡約列が少なくとも 1 つあるということ
◮ うまい評価戦略では止まるということ
Definition (強正規化可能 SN)
型の付いた項 M に対して, M から始まる無限簡約
列 M →β M1 →β M2 →β · · · が存在しない.
◮ どんな評価戦略でも止まるということ
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 27
やりたいこと [4/4]
評価戦略を固定した場合の正規化可能性
◮ 簡約列は一通りしかない
◮ 弱正規化可能 ⇐⇒ 強正規化可能
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 28
やりたいこと [4/4]
評価戦略を固定した場合の正規化可能性
◮ 簡約列は一通りしかない
◮ 弱正規化可能 ⇐⇒ 強正規化可能
でもせっかくなので一般の場合で証明
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 28
勘所 [1/2]
帰納法で証明できる?
◮ M, N がともに SN のとき MN は SN?
◮ M = λx.xx と N = λx.xx はともに SN
◮ Ω = MN なので適用すると SN ではない
◮ M, N は型が付かないから大丈夫では?
◮ 危険な項すべて型が付かないと言えれば OK
◮ 「危険な項は型が付かない」こそが強正規化性
⇒ 堂々巡り
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 29
勘所 [2/2]
問題点の分析
◮ M = λx.xx 自体は SN でも MN は SN でない
◮ 組み合わせると止まらない項は除外したい
組み合わせても止まる項
◮ M が “止まる項” である条件: MN も “止まる項”
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 30
証明方法
1 “止まる項” を項の形で見分ける
◮ 制限された形の項はすべて SN
◮ どんな項も制限された項に変換できる
◮ 型付き項なら変換が SN を保存する
2 “止まる項” を帰納的に集める
◮ 集めた項全体 = 型付き項全体を示す
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 31
証明方法
1 “止まる項” を項の形で見分ける
◮ 制限された形の項はすべて SN
◮ どんな項も制限された項に変換できる
◮ 型付き項なら変換が SN を保存する
2 “止まる項” を帰納的に集める
◮ 集めた項全体 = 型付き項全体を示す
今回は2つ目の方法
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 31
証明の流れ
1 “止まる項” であることを表す述語を定義
2 “止まる項” の性質を証明
◮ 変数は “止まる”
◮ “止まる項” は →β しても “止まる”
◮ →β して “止まる” なら元の項も “止まる”
◮ ただし元の項の形を制限
3 すべての型付き項は “止まる”
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 32
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 33
論理関係 [1/6] — 定義
述語 RA
⊢ M : α M は SN
Rα(M)
⊢ M : A → B M は SN
∀N.RA(N) ⇒ RB(MN)
RA→B(M)
◮ RA を満たす項は明らかに SN
◮ RA を満たす項の集合と
型 A の項全体の集合が一致すればよい
◮ cbv に固定するなら
「M は SN」の代わりに「M ⇓cbv
∃
N」
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 34
論理関係 [2/6] — 補題5.16 [1/2]
Lemma (5.16)
0 ≤ i ≤ n.RAi
(Mi) ならば
RA(xA1→···→An→A
M1 · · · Mn).
◮ 大雑把には RA(xA
) が成り立つということ
◮ “止まる項” の条件を反映した強い形
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 35
論理関係 [2/6] — 補題5.16 [2/2]
証明: 型 A の構造に関する帰納法
1 RAi
(Mi) より Mi は SN
2 xA1→···→An→A
M1 · · · Mn は明らかに SN
3 RAi
(Mi) より ⊢ Mi : Ai
4 型付け規則より ⊢ xA1→···→An→α
M1 · · · Mn : A
5 ◮ A = α のとき
◮ ただちに RA(xA1→···→An→A
M1 · · · Mn)
◮ A = B → C のとき
1 任意の RB(N) なる N について
2 IH より RC(xA1→···→An→B→C
M1 · · · MnN)
3 ゆえに RB→C(xA1→···→An→B→C
M1 · · · Mn)
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 36
論理関係 [3/6] — 補題5.15 [1/3]
Lemma (5.15’)
M →β M′
のとき RA(M) ならば RA(M′
)
◮ ⇐= は成り立たない
(反例: M = (λxy.y)(λz.Ω) →β λy.y = M′
)
◮ ⇐= なしでもこの後の証明は可能
◮ 教科書は ⇐= も成り立つと書いてあるので誤り
◮ →cbv では ⊢ M : A を前提に加えれば OK [3]
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 37
論理関係 [3/6] — 補題5.15 [2/3]
証明: 型 A の構造に関する帰納法
◮ A = α のとき
1 Rα(M) かつ M →β M′
2 Rα(M) より ⊢ M : α かつ M は SN
3 M′
は SN(さもないと M が SN でなくなる)
◮ cbv では簡約の一意性をここで使う
4 主部簡約定理より ⊢ M′
: α
5 よって Rα(M′
)
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 38
論理関係 [3/6] — 補題5.15 [3/3]
証明: 型 A の構造に関する帰納法
◮ A = B → C のとき
1 RB→C(M) かつ M →β M′
2 N を RB(N) を満たす項とする
3 RB→C(M) より RC(MN)
4 MN →β M′
N なので IH より RB(M′
N)
5 RB(M′
N) なので M′
N は SN
6 M′
は SN(さもないと M′
N が SN でなくなる)
7 主部簡約定理より ⊢ M′
: B → C
8 よって RB→C(M′
)
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 39
論理関係 [4/6] — 補題5.17a [1/2]
Lemma (5.17a)
⊢ M0 : A1 → · · · An → α かつ RB(L), RAi
(Ni) か
つ Rα(M0[xB
:= L]N1 · · · Nn) ならば
Rα((λxB
.M0)LN1 · · · Nn).
◮ 教科書には無い補題
◮ (λxB
.M0)LN1 · · · Nn を (λxB
.M0)LN と略記
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 40
論理関係 [4/6] — 補題5.17a [2/2]
証明
1 RB(L), RAi
(Ni) より ⊢ L : B, ⊢ Ni : Ai
2 型付け規則を使って ⊢ (λxB
.M0)LN : α
3 RB(L), RAi
(Ni) より L, Ni は SN
4 Rα(M0[xB
:= L]N) より M0[xB
:= L]N は SN
5 M0, λxB
.M0 も SN(さもないと矛盾)
6 M0 →∗
β M′
0, L →∗
β L′
, Ni →∗
β N′
i なる
任意の M′
0, L′
, N′
i について
◮ M′
0[x := L′
]N′ は SN
◮ (λxB
.M0)LN →∗
β M′
0[x := L′
]N′ は有限簡約
7 なので (λxB
M0)LN も SN
8 ゆえに Rα((λxB
.M0)LN)
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 41
論理関係 [5/6] — 補題5.17b [1/3]
Lemma (5.17b)
⊢ M0 : A1 → · · · An → A かつ RB(L), RAi
(Ni) か
つ RA(M0[xB
:= L]N1 · · · Nn) ならば
RA((λxB
.M0)LN1 · · · Nn)
◮ 教科書には無い補題
◮ 補題 5.17a の型 α が A に一般化されたもの
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 42
論理関係 [5/6] — 補題5.17b [2/3]
証明: 型 A に関する帰納法
◮ A = α のとき
◮ 補題 5.17a より OK
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 43
論理関係 [5/6] — 補題5.17b [3/3]
証明: 型 A に関する帰納法
◮ A = C1 → C2 のとき
1 M1 を RC1
(M1) を満たす任意の項とする
2 RC1→C2
(M0[x := L]N) より
◮ ⊢ M0[x := L]N : C1 → C2
◮ RC2
(M0[x := L]NM1)
3 IH より RC2
((λxB
.M0)LNM1)
◮ ⊢ (λxB
.M0)LNM1 : C2
◮ (λxB
.M0)LNM1 は SN
4 主部簡約補題より ⊢ (λxB
.M0)LN : C1 → C2
5 (λxB
.M0)LN も SN
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 44
論理関係 [6/6] — 補題5.17 [1/4]
Lemma (5.17)
⊢ M : A かつ RA1
(N1), . . . , RAn
(Nn) ならば
RA(M[xA1
1 := N1, . . . , xAn
n := Nn]).
◮ xA1
1 := N1, . . . , xAn
n := Nn を x := N と書く
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 45
論理関係 [6/6] — 補題5.17 [2/4]
項 M の構造に関する帰納法
◮ M = xi のとき
1 M[x := N] = Ni
2 RAi
(Ni) なので成立
◮ M = y = xi のとき
1 M[x := N] = yA
2 補題 5.16 より成立
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 46
論理関係 [6/6] — 補題5.17 [3/4]
項 M の構造に関する帰納法
◮ M = M1M2 のとき
1 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B
2 IH より RB→A(M1[x := N]) かつ
RB(M2[x := N])
3 RB→A の定義より
RA(M1[x := N]M2[x := N])
4 M1[x := N]M2[x := N] = (M1M2)[x := N]
5 よって RA((M1M2)[x := N])
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 47
論理関係 [6/6] — 補題5.17 [4/4]
項 M の構造に関する帰納法
◮ M = λxB
.M0 のとき
1 型付け規則から ⊢ M0 : C かつ A = B → C
2 代入補題より ⊢ M0[x := N] : C
3 L を RB(L) なる任意の項とする
4 IH より RC(M0[x := N, xB
:= L])
5 補題 5.17b より RC((λxB
.M0[x := N])L)
6 M0[x := N, xB
:= L] は SN なので
λxB
.M0[x := N] も SN
7 ゆえに RB→C(λxB
.M0[x := N])
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 48
単純型付きλ計算
◮ 型の整合性 (a), (b)
◮ 型
◮ 型付け
◮ 性質 1 — 型保存性 (c)
◮ 代入補題
◮ 主部簡約定理
◮ 性質 2 — 正規化可能性 (d)
◮ 論理関係
◮ 強正規化可能性
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 49
強正規化可能性
Theorem (5.18)
正しく型付けされた λ 項は強正規化可能
証明
1 M を ⊢ M : A なる項とする
2 補題 5.17 より RA(M) が成り立つ
3 ゆえに M は SN
伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 50
おわり

More Related Content

What's hot

プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
 
inversion counting
inversion countinginversion counting
inversion counting
tmaehara
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 

What's hot (20)

プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
inversion counting
inversion countinginversion counting
inversion counting
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
色々な確率分布とその応用
色々な確率分布とその応用色々な確率分布とその応用
色々な確率分布とその応用
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
 
人それぞれの競プロとの向き合い方
人それぞれの競プロとの向き合い方人それぞれの競プロとの向き合い方
人それぞれの競プロとの向き合い方
 
BigQuery MLの行列分解モデルを 用いた推薦システムの基礎
BigQuery MLの行列分解モデルを 用いた推薦システムの基礎BigQuery MLの行列分解モデルを 用いた推薦システムの基礎
BigQuery MLの行列分解モデルを 用いた推薦システムの基礎
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
π計算
π計算π計算
π計算
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 

Viewers also liked

TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
none_toka
 
安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのこと安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのこと
shibataka000
 
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Kenji Aoyama
 

Viewers also liked (20)

ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
計算可能実数とは
計算可能実数とは計算可能実数とは
計算可能実数とは
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
 
安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのこと安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのこと
 
Emacs上のターミナルを最強に
Emacs上のターミナルを最強にEmacs上のターミナルを最強に
Emacs上のターミナルを最強に
 
すごいスライド(Lazy K 紹介)
すごいスライド(Lazy K 紹介)すごいスライド(Lazy K 紹介)
すごいスライド(Lazy K 紹介)
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 Exception
 
Hoare論理
Hoare論理Hoare論理
Hoare論理
 
TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2
 
大学新入生のコンピュータ不安の長期定点観測
大学新入生のコンピュータ不安の長期定点観測大学新入生のコンピュータ不安の長期定点観測
大学新入生のコンピュータ不安の長期定点観測
 
Gradual Typing for Generics
Gradual Typing for GenericsGradual Typing for Generics
Gradual Typing for Generics
 
クロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おうクロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おう
 
計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)
 
開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り
 
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
 
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
 
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 NagoyaOpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
 

Similar to 論理と計算のしくみ 5.3 型付きλ計算 (前半)

Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル)Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル)
. .
 
TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回
Issei Kurahashi
 
パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズム
Miyoshi Yuya
 

Similar to 論理と計算のしくみ 5.3 型付きλ計算 (前半) (20)

カステラ本勉強会 第三回
カステラ本勉強会 第三回カステラ本勉強会 第三回
カステラ本勉強会 第三回
 
統計的学習の基礎_3章
統計的学習の基礎_3章統計的学習の基礎_3章
統計的学習の基礎_3章
 
PRML輪読#3
PRML輪読#3PRML輪読#3
PRML輪読#3
 
Simulation_Report1
Simulation_Report1Simulation_Report1
Simulation_Report1
 
Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル)Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル)
 
TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710
 
Takuya Tsuchiya
Takuya TsuchiyaTakuya Tsuchiya
Takuya Tsuchiya
 
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.42013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
 
PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
 
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)[PRML] パターン認識と機械学習(第3章:線形回帰モデル)
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)
 
Tpp2012 mwpl on_coq
Tpp2012 mwpl on_coqTpp2012 mwpl on_coq
Tpp2012 mwpl on_coq
 
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
 
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング
 
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】
 
数理最適化と機械学習の 融合アプローチ -分類と新しい枠組み-
数理最適化と機械学習の融合アプローチ-分類と新しい枠組み-数理最適化と機械学習の融合アプローチ-分類と新しい枠組み-
数理最適化と機械学習の 融合アプローチ -分類と新しい枠組み-
 
Rで学ぶロバスト推定
Rで学ぶロバスト推定Rで学ぶロバスト推定
Rで学ぶロバスト推定
 
Coursera Machine Learning Week2まとめ 
Coursera Machine Learning Week2まとめ Coursera Machine Learning Week2まとめ 
Coursera Machine Learning Week2まとめ 
 
パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズム
 

論理と計算のしくみ 5.3 型付きλ計算 (前半)

  • 1. 輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半) 伊奈 林太郎 (id:tarao) 京都大学 大学院情報学研究科 2012-01-26 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 1
  • 2. 参考文献 萩谷, 西崎. 論理と計算のしくみ. 岩波書店, 2007. J. C. Mitchell. Foundations for Programming Languages. MIT Press, 1996. B. C. Pierce. Types and Programming Languages. MIT Press, 2002. 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 2
  • 3. 型理論のアイディア (λx.xx)(λx.xx) ◮ x は関数のはず 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 4. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 5. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる ◮ 受け取るのは集合 A の要素 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 6. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる ◮ 受け取るのは集合 A の要素 ◮ 渡しているのは関数 A → B (A × B の部分集合) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 7. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる ◮ 受け取るのは集合 A の要素 ◮ 渡しているのは関数 A → B (A × B の部分集合) ◮ A → B ∈ A なの? おかしくね? 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 8. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる ◮ 受け取るのは集合 A の要素 ◮ 渡しているのは関数 A → B (A × B の部分集合) ◮ A → B ∈ A なの? おかしくね? ⇒ 実際おかしいから無限ループする 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 9. 型理論のアイディア (λxA→B .xx)(λx.xx) ◮ x は関数のはず 数学のように A → B の関数だと思ってみる ◮ 受け取るのは集合 A の要素 ◮ 渡しているのは関数 A → B (A × B の部分集合) ◮ A → B ∈ A なの? おかしくね? ⇒ 実際おかしいから無限ループする おかしいものを排除すれば 無限ループしないのでは? 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 3
  • 10. 型理論 [1/3] は抽象的な枠組 型を付ける ◮ 式の使われ方に応じて種類分けする ◮ この種類のことを型と呼ぶ 型の整合性 ◮ 型の付け方は整合していないといけない ◮ 同じ式を異なる型として使ってはダメ等 整合性による恩恵 ◮ 使われ方が整合しているので おかしなことが起きない ◮ ということを数学的に証明できる 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 4
  • 11. 型理論 [2/3] の具体例 何を型だと思うか ◮ 関数, 変数の別 ◮ メモリ, プロセス, ロックなどの情報 ◮ セキュリティ上のアクセスレベル ◮ エスケープ, エンコードされているかどうか 防げるおかしなこと ◮ 無限ループ, 関数以外の適用 ◮ メモリリーク, デッドロック ◮ 情報漏洩 ◮ XSS, 文字化け 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 5
  • 12. 型理論 [3/3] は魔法ではない ただし制限もある ◮ 単純型付 λ 計算は再帰関数を一切書けない (ループ禁止だから無限ループしないのは当然) 制限を緩めるには ◮ 複雑にして頑張る ◮ G¨odel の System T, Coq ◮ 部分型, 多相型, 依存型 ◮ プログラムの一部にだけ性質を保証する ◮ OCaml の let rec ◮ Gradual Typing 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 6
  • 13. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 7
  • 14. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 8
  • 15. 型 基本型 (α, β, γ) ◮ プリミティブな型 (int とか) ◮ どんなものがあるかは予め定めておく 単純型 (A, B, C) A ::= α | A → A 単純型に含めることもある A ::= α | A → A | A × A | A + A → 右結合 ×, + 左結合 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 9
  • 16. 型付け [1/2] 各変数の型は固定 xA と書く 型判断 ⊢ M : A 「M の型は A」 型付け規則 ⊢ xA : A ⊢ M : B ⊢ λxA .M : A → B ⊢ M : A → B ⊢ N : A ⊢ MN : B ⊢ M : A ⊢ N : B ⊢ (M, N) : A × B ⊢ L : A × B π1(L) : A ⊢ L : A × B π2(L) : B 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 10
  • 17. 型付け [2/2] — 型の整合性 M は型が付く (M is well-typed) ◮ 型付け規則で ⊢ M : A が導ける 型が付かない例 λxA .xA xA 型付けの一意性 ◮ 各変数の型が固定なら型付けは一意 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 11
  • 18. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 12
  • 19. 型保存性 — 示したいこと ◮ 最終的には「型が付けば○○」と言いたい ◮ 「○○」は正規化等 →β に関すること ◮ →β の前後で型の付き方は変わらないでほしい Theorem (主部簡約定理 (subject reduction)) ⊢ M : A かつ M →β N ならば ⊢ N : A Theorem (関係 R で一般化版) ⊢ M : A かつ M →β N ならば, ⊢ N : B かつ BRA. ◮ 上は R が = の場合の話 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 13
  • 20. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 14
  • 21. 代入補題 [1/2] Lemma (代入補題) ⊢ M : A かつ xB かつ ⊢ N : B ならば ⊢ M[x := N] : A. 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 15
  • 22. 代入補題 [2/2] — 証明 [1/3] 証明: M の構造に関する帰納法による ◮ M = y のとき ◮ y = x の場合 1 型付け規則と y = x から ⊢ yB : B 2 ⊢ M : A なので B = A 3 M[x := N] = N 4 補題の前提条件と B = A より ⊢ N : A ◮ y = x の場合 1 型付け規則から yA のはず 2 M[x := N] = y 3 変数の型付け規則を使って ⊢ yA : A 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 16
  • 23. 代入補題 [2/2] — 証明 [2/3] 証明: M の構造に関する帰納法による ◮ M = M1M2 のとき 1 型付け規則から ⊢ M1 : C → A かつ ⊢ M2 : C 2 IH より ⊢ M1[x := N] : C → A 3 IH より ⊢ M2[x := N] : C 4 M1[x := N]M2[x := N] = (M1M2)[x := N] 5 適用の型付け規則を使って ⊢ (M1M2)[x := N] : A 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 17
  • 24. 代入補題 [2/2] — 証明 [3/3] 証明: M の構造に関する帰納法による ◮ M = λyA1 .L のとき 1 型付け規則から A = A1 → A2 かつ ⊢ L : A2 2 λzA1 .L[y := z] =α λyA1 .L とできるので y = x かつ y は N に自由に出現しないとして も一般性を失わない 3 λyA1 .L[x := N] = (λyA1 .L)[x := N] 4 IH より ⊢ L[x := N] : A2 5 抽象の型付け規則を使って ⊢ (λyA1 .L)[x := N] : A1 → A2 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 18
  • 25. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 19
  • 26. 主部簡約定理 [1/2] Theorem (主部簡約定理 (subject reduction)) ⊢ M : A かつ M →β N ならば ⊢ N : A 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 20
  • 27. 主部簡約定理 [2/2] — 証明 [1/2] 証明: M →β N の導出に関する帰納法による ◮ Beta のとき 1 M = (λxB .M1)M2 →β M1[x := M2] = N 2 型付け規則から ⊢ M1 : A かつ ⊢ M2 : B 3 代入補題より ⊢ M1[x := M2] : A ◮ Lam のとき 1 M = λxB .L →β λxB .L′ = N かつ L →β L′ 2 型付け規則から A = B → C かつ ⊢ L : C 3 IH より ⊢ L′ : C 4 抽象の型付け規則を使って ⊢ λxB .L′ : B → C 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 21
  • 28. 主部簡約定理 [2/2] — 証明 [2/2] 証明: M →β N の導出に関する帰納法による ◮ AppL のとき 1 M = M1M2 →β M′ 1M2 = N かつ M1 →β M′ 1 2 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B 3 IH より ⊢ M′ 1 : B → A 4 適用の型付け規則を使って ⊢ M′ 1M2 : A ◮ AppR のとき 1 M = M1M2 →β M1M′ 2 = N かつ M2 →β M′ 2 2 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B 3 IH より ⊢ M′ 2 : B 4 適用の型付け規則を使って ⊢ M1M′ 2 : A 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 22
  • 29. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 23
  • 30. やりたいこと [1/4] すべての無限ループを 生まれる前に消し去りたい 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 24
  • 31. やりたいこと [2/4] (λx.xx)(λx.xx) ◮ 「型が付いたら無限ループしない」と言いたい ◮ 上の例に限れば型が付かないことは既に見た ◮ 止まらない項すべてに関して示すには? 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 25
  • 32. やりたいこと [2/4] (λx.xx)(λx.xx) ◮ 「型が付いたら無限ループしない」と言いたい ◮ 上の例に限れば型が付かないことは既に見た ◮ 止まらない項すべてに関して示すには? ◮ そもそも「無限ループ」って何? ◮ 無限簡約列があること ◮ 評価戦略によってあったりなかったり 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 25
  • 33. やりたいこと [3/4] — 定義 [1/2] β 正規形 M ∈ NFβ ⇐⇒ M は β 簡約で正規形 β 正規形への有限簡約 M ⇓β N ⇐⇒ M = M0 →β M1 →β · · · →β Mn = N ∈ NFβ 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 26
  • 34. やりたいこと [3/4] — 定義 [2/2] Definition (弱正規化可能) 型の付いた項 M に対して, ある N が存在して M ⇓β N. ◮ 有限簡約列が少なくとも 1 つあるということ ◮ うまい評価戦略では止まるということ Definition (強正規化可能 SN) 型の付いた項 M に対して, M から始まる無限簡約 列 M →β M1 →β M2 →β · · · が存在しない. ◮ どんな評価戦略でも止まるということ 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 27
  • 35. やりたいこと [4/4] 評価戦略を固定した場合の正規化可能性 ◮ 簡約列は一通りしかない ◮ 弱正規化可能 ⇐⇒ 強正規化可能 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 28
  • 36. やりたいこと [4/4] 評価戦略を固定した場合の正規化可能性 ◮ 簡約列は一通りしかない ◮ 弱正規化可能 ⇐⇒ 強正規化可能 でもせっかくなので一般の場合で証明 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 28
  • 37. 勘所 [1/2] 帰納法で証明できる? ◮ M, N がともに SN のとき MN は SN? ◮ M = λx.xx と N = λx.xx はともに SN ◮ Ω = MN なので適用すると SN ではない ◮ M, N は型が付かないから大丈夫では? ◮ 危険な項すべて型が付かないと言えれば OK ◮ 「危険な項は型が付かない」こそが強正規化性 ⇒ 堂々巡り 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 29
  • 38. 勘所 [2/2] 問題点の分析 ◮ M = λx.xx 自体は SN でも MN は SN でない ◮ 組み合わせると止まらない項は除外したい 組み合わせても止まる項 ◮ M が “止まる項” である条件: MN も “止まる項” 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 30
  • 39. 証明方法 1 “止まる項” を項の形で見分ける ◮ 制限された形の項はすべて SN ◮ どんな項も制限された項に変換できる ◮ 型付き項なら変換が SN を保存する 2 “止まる項” を帰納的に集める ◮ 集めた項全体 = 型付き項全体を示す 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 31
  • 40. 証明方法 1 “止まる項” を項の形で見分ける ◮ 制限された形の項はすべて SN ◮ どんな項も制限された項に変換できる ◮ 型付き項なら変換が SN を保存する 2 “止まる項” を帰納的に集める ◮ 集めた項全体 = 型付き項全体を示す 今回は2つ目の方法 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 31
  • 41. 証明の流れ 1 “止まる項” であることを表す述語を定義 2 “止まる項” の性質を証明 ◮ 変数は “止まる” ◮ “止まる項” は →β しても “止まる” ◮ →β して “止まる” なら元の項も “止まる” ◮ ただし元の項の形を制限 3 すべての型付き項は “止まる” 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 32
  • 42. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 33
  • 43. 論理関係 [1/6] — 定義 述語 RA ⊢ M : α M は SN Rα(M) ⊢ M : A → B M は SN ∀N.RA(N) ⇒ RB(MN) RA→B(M) ◮ RA を満たす項は明らかに SN ◮ RA を満たす項の集合と 型 A の項全体の集合が一致すればよい ◮ cbv に固定するなら 「M は SN」の代わりに「M ⇓cbv ∃ N」 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 34
  • 44. 論理関係 [2/6] — 補題5.16 [1/2] Lemma (5.16) 0 ≤ i ≤ n.RAi (Mi) ならば RA(xA1→···→An→A M1 · · · Mn). ◮ 大雑把には RA(xA ) が成り立つということ ◮ “止まる項” の条件を反映した強い形 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 35
  • 45. 論理関係 [2/6] — 補題5.16 [2/2] 証明: 型 A の構造に関する帰納法 1 RAi (Mi) より Mi は SN 2 xA1→···→An→A M1 · · · Mn は明らかに SN 3 RAi (Mi) より ⊢ Mi : Ai 4 型付け規則より ⊢ xA1→···→An→α M1 · · · Mn : A 5 ◮ A = α のとき ◮ ただちに RA(xA1→···→An→A M1 · · · Mn) ◮ A = B → C のとき 1 任意の RB(N) なる N について 2 IH より RC(xA1→···→An→B→C M1 · · · MnN) 3 ゆえに RB→C(xA1→···→An→B→C M1 · · · Mn) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 36
  • 46. 論理関係 [3/6] — 補題5.15 [1/3] Lemma (5.15’) M →β M′ のとき RA(M) ならば RA(M′ ) ◮ ⇐= は成り立たない (反例: M = (λxy.y)(λz.Ω) →β λy.y = M′ ) ◮ ⇐= なしでもこの後の証明は可能 ◮ 教科書は ⇐= も成り立つと書いてあるので誤り ◮ →cbv では ⊢ M : A を前提に加えれば OK [3] 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 37
  • 47. 論理関係 [3/6] — 補題5.15 [2/3] 証明: 型 A の構造に関する帰納法 ◮ A = α のとき 1 Rα(M) かつ M →β M′ 2 Rα(M) より ⊢ M : α かつ M は SN 3 M′ は SN(さもないと M が SN でなくなる) ◮ cbv では簡約の一意性をここで使う 4 主部簡約定理より ⊢ M′ : α 5 よって Rα(M′ ) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 38
  • 48. 論理関係 [3/6] — 補題5.15 [3/3] 証明: 型 A の構造に関する帰納法 ◮ A = B → C のとき 1 RB→C(M) かつ M →β M′ 2 N を RB(N) を満たす項とする 3 RB→C(M) より RC(MN) 4 MN →β M′ N なので IH より RB(M′ N) 5 RB(M′ N) なので M′ N は SN 6 M′ は SN(さもないと M′ N が SN でなくなる) 7 主部簡約定理より ⊢ M′ : B → C 8 よって RB→C(M′ ) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 39
  • 49. 論理関係 [4/6] — 補題5.17a [1/2] Lemma (5.17a) ⊢ M0 : A1 → · · · An → α かつ RB(L), RAi (Ni) か つ Rα(M0[xB := L]N1 · · · Nn) ならば Rα((λxB .M0)LN1 · · · Nn). ◮ 教科書には無い補題 ◮ (λxB .M0)LN1 · · · Nn を (λxB .M0)LN と略記 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 40
  • 50. 論理関係 [4/6] — 補題5.17a [2/2] 証明 1 RB(L), RAi (Ni) より ⊢ L : B, ⊢ Ni : Ai 2 型付け規則を使って ⊢ (λxB .M0)LN : α 3 RB(L), RAi (Ni) より L, Ni は SN 4 Rα(M0[xB := L]N) より M0[xB := L]N は SN 5 M0, λxB .M0 も SN(さもないと矛盾) 6 M0 →∗ β M′ 0, L →∗ β L′ , Ni →∗ β N′ i なる 任意の M′ 0, L′ , N′ i について ◮ M′ 0[x := L′ ]N′ は SN ◮ (λxB .M0)LN →∗ β M′ 0[x := L′ ]N′ は有限簡約 7 なので (λxB M0)LN も SN 8 ゆえに Rα((λxB .M0)LN) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 41
  • 51. 論理関係 [5/6] — 補題5.17b [1/3] Lemma (5.17b) ⊢ M0 : A1 → · · · An → A かつ RB(L), RAi (Ni) か つ RA(M0[xB := L]N1 · · · Nn) ならば RA((λxB .M0)LN1 · · · Nn) ◮ 教科書には無い補題 ◮ 補題 5.17a の型 α が A に一般化されたもの 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 42
  • 52. 論理関係 [5/6] — 補題5.17b [2/3] 証明: 型 A に関する帰納法 ◮ A = α のとき ◮ 補題 5.17a より OK 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 43
  • 53. 論理関係 [5/6] — 補題5.17b [3/3] 証明: 型 A に関する帰納法 ◮ A = C1 → C2 のとき 1 M1 を RC1 (M1) を満たす任意の項とする 2 RC1→C2 (M0[x := L]N) より ◮ ⊢ M0[x := L]N : C1 → C2 ◮ RC2 (M0[x := L]NM1) 3 IH より RC2 ((λxB .M0)LNM1) ◮ ⊢ (λxB .M0)LNM1 : C2 ◮ (λxB .M0)LNM1 は SN 4 主部簡約補題より ⊢ (λxB .M0)LN : C1 → C2 5 (λxB .M0)LN も SN 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 44
  • 54. 論理関係 [6/6] — 補題5.17 [1/4] Lemma (5.17) ⊢ M : A かつ RA1 (N1), . . . , RAn (Nn) ならば RA(M[xA1 1 := N1, . . . , xAn n := Nn]). ◮ xA1 1 := N1, . . . , xAn n := Nn を x := N と書く 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 45
  • 55. 論理関係 [6/6] — 補題5.17 [2/4] 項 M の構造に関する帰納法 ◮ M = xi のとき 1 M[x := N] = Ni 2 RAi (Ni) なので成立 ◮ M = y = xi のとき 1 M[x := N] = yA 2 補題 5.16 より成立 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 46
  • 56. 論理関係 [6/6] — 補題5.17 [3/4] 項 M の構造に関する帰納法 ◮ M = M1M2 のとき 1 型付け規則から ⊢ M1 : B → A かつ ⊢ M2 : B 2 IH より RB→A(M1[x := N]) かつ RB(M2[x := N]) 3 RB→A の定義より RA(M1[x := N]M2[x := N]) 4 M1[x := N]M2[x := N] = (M1M2)[x := N] 5 よって RA((M1M2)[x := N]) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 47
  • 57. 論理関係 [6/6] — 補題5.17 [4/4] 項 M の構造に関する帰納法 ◮ M = λxB .M0 のとき 1 型付け規則から ⊢ M0 : C かつ A = B → C 2 代入補題より ⊢ M0[x := N] : C 3 L を RB(L) なる任意の項とする 4 IH より RC(M0[x := N, xB := L]) 5 補題 5.17b より RC((λxB .M0[x := N])L) 6 M0[x := N, xB := L] は SN なので λxB .M0[x := N] も SN 7 ゆえに RB→C(λxB .M0[x := N]) 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 48
  • 58. 単純型付きλ計算 ◮ 型の整合性 (a), (b) ◮ 型 ◮ 型付け ◮ 性質 1 — 型保存性 (c) ◮ 代入補題 ◮ 主部簡約定理 ◮ 性質 2 — 正規化可能性 (d) ◮ 論理関係 ◮ 強正規化可能性 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 49
  • 59. 強正規化可能性 Theorem (5.18) 正しく型付けされた λ 項は強正規化可能 証明 1 M を ⊢ M : A なる項とする 2 補題 5.17 より RA(M) が成り立つ 3 ゆえに M は SN 伊奈 林太郎 (id:tarao) 輪講 — 論理と計算のしくみ 5.3 型付き λ 計算 (前半) 50