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

Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺についてKeisuke Hosaka
 
5分でわかるベイズ確率
5分でわかるベイズ確率5分でわかるベイズ確率
5分でわかるベイズ確率hoxo_m
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)narumikanno0918
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
技術者が知るべき Gröbner 基底
技術者が知るべき Gröbner 基底技術者が知るべき Gröbner 基底
技術者が知るべき Gröbner 基底Hiromi Ishii
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 Ken'ichi Matsui
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライドtozan gezan
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなしToru Imai
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理Taiji Suzuki
 
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学Ken'ichi Matsui
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介Masahiro Sakai
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 

What's hot (20)

Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
 
5分でわかるベイズ確率
5分でわかるベイズ確率5分でわかるベイズ確率
5分でわかるベイズ確率
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
技術者が知るべき Gröbner 基底
技術者が知るべき Gröbner 基底技術者が知るべき Gröbner 基底
技術者が知るべき Gröbner 基底
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライド
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 

Viewers also liked

ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)bleis tift
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)none_toka
 
安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのこと安全性を証明するために知っておくべき4つのこと
安全性を証明するために知っておくべき4つのことshibataka000
 
Emacs上のターミナルを最強に
Emacs上のターミナルを最強にEmacs上のターミナルを最強に
Emacs上のターミナルを最強にLintaro Ina
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionAkihiro Miyashita
 
TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2Keita Saitou
 
大学新入生のコンピュータ不安の長期定点観測
大学新入生のコンピュータ不安の長期定点観測大学新入生のコンピュータ不安の長期定点観測
大学新入生のコンピュータ不安の長期定点観測Takahiro Sumiya
 
Gradual Typing for Generics
Gradual Typing for GenericsGradual Typing for Generics
Gradual Typing for GenericsLintaro Ina
 
クロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おうクロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おうkitfactory
 
計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)Makoto SAKAI
 
開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作りKoichi ITO
 
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
 
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-10Kenji Aoyama
 
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 NagoyaKenji Aoyama
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
"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-12Kenji 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 型付きλ計算 (前半)

カステラ本勉強会 第三回
カステラ本勉強会 第三回カステラ本勉強会 第三回
カステラ本勉強会 第三回ke beck
 
統計的学習の基礎_3章
統計的学習の基礎_3章統計的学習の基礎_3章
統計的学習の基礎_3章Shoichi Taguchi
 
PRML輪読#3
PRML輪読#3PRML輪読#3
PRML輪読#3matsuolab
 
Simulation_Report1
Simulation_Report1Simulation_Report1
Simulation_Report1T2C_
 
Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル)Stanの紹介と応用事例(age heapingの統計モデル)
Stanの紹介と応用事例(age heapingの統計モデル). .
 
TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回Issei Kurahashi
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710Kazuya Nishina
 
Takuya Tsuchiya
Takuya TsuchiyaTakuya Tsuchiya
Takuya TsuchiyaSuurist
 
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.4Takeshi Sakaki
 
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)[PRML] パターン認識と機械学習(第3章:線形回帰モデル)
[PRML] パターン認識と機械学習(第3章:線形回帰モデル)Ryosuke Sasaki
 
Tpp2012 mwpl on_coq
Tpp2012 mwpl on_coqTpp2012 mwpl on_coq
Tpp2012 mwpl on_coqSUDA Keishi
 
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライドWataru Shito
 
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング
共和分ランクに依存した確率制御アプローチによる多資産間のダイナミックトレーディング東出 卓朗
 
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】
【招待講演】パラメータ制約付き行列分解のベイズ汎化誤差解析【StatsML若手シンポ2020】Naoki Hayashi
 
数理最適化と機械学習の 融合アプローチ -分類と新しい枠組み-
数理最適化と機械学習の融合アプローチ-分類と新しい枠組み-数理最適化と機械学習の融合アプローチ-分類と新しい枠組み-
数理最適化と機械学習の 融合アプローチ -分類と新しい枠組み-MIKIOKUBO3
 
Coursera Machine Learning Week2まとめ 
Coursera Machine Learning Week2まとめ Coursera Machine Learning Week2まとめ 
Coursera Machine Learning Week2まとめ Yuta Koga
 
パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムMiyoshi Yuya
 
自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slidesharewada, kazumi
 

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章 正則化とパス追跡アルゴリズム
 
自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare自然科学の統計学2.2 slideshare
自然科学の統計学2.2 slideshare
 

論理と計算のしくみ 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