2. (A→B) → (B→C) → A → Cを例に
• 自然演繹の証明はこんな感じ
[A→B]1 [A]3
→E
[B→C]2 B
→E
C
→I3
A→C
→I2
(B→C) → A → C
→I1
(A→B) → (B→C) → A → C
3. 型だと思う
• λ計算におけるA→BはAを引数にしてBを返
す関数の型だから、→Iはlam(関数抽象)、
→Eはapp(関数適用)に対応
[A→B]1 [A]3 [A→B]1 [A]3
→E app
[B→C]2 B [B→C]2 B
→E app
C C
→I3 lam3
A→C A→C
→I2 lam2
(B→C) → A → C (B→C) → A → C
→I1 lam1
(A→B) → (B→C) → A → C (A→B) → (B→C) → A → C
4. 1とか2とか3じゃまずいから
• 変数っぽくする。1をfに、2をgに、3をxに
する。
– この「ラベル=変数」のため、ラベル部分は
idに相当。
[A→B]1 [A]3 f : A→B x:A
app app
[B→C]2 B g : B→C B
app app
C C
lam3 lam3
A→C A→C
lam2 lam2
(B→C) → A → C (B→C) → A → C
lam1 lam1
(A→B) → (B→C) → A → C (A→B) → (B→C) → A → C
5. 対応してる関数抽象の引数を書
く
• →I1をfを引数にとる関数抽象だと思う。
– 1はfと対応してたから。2はg、3はxに対応さ
せる。
– 1,2,3のラベルはここで完全消滅。
f : A→B x:A f : A→B x:A
app app
g : B→C B g : B→C B
app app
C C
lam3 lam
A→C λx:A. ? : A → C
lam2 lam
(B→C) → A → C λg:B→C. ? : (B→C) → A → C
lam1 lam
(A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
6. 関数適用の形を作る
• 上から作る。右上のBに具体的な項が定ま
る。
f : A→B x:A f : A→B x:A
app app
g : B→C B g : B→C fx:B
app app
C C
lam lam
λx:A. ? : A → C λx:A. ? : A → C
lam lam
λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C
lam lam
λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
7. 同様に、上から順にルールと整合
するように項を構成する。
• Cの項をつけた。
f : A→B x:A f : A→B x:A
app app
g : B→C fx:B g : B→C fx:B
app app
C g (f x) : C
lam lam
λx:A. ? : A → C λx:A. ? : A → C
lam lam
λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C
lam lam
λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
8. • 一番上のlamの本体はその上にある項。
f : A→B x:A f : A→B x:A
app app
g : B→C fx:B g : B→C fx:B
app app
g (f x) : C g (f x) : C
lam lam
λx:A. ? : A → C λx:A. g (f x) : A → C
lam lam
λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C
lam lam
λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
9. もう遷移にはしない。
• 二番目のlamの本体が確定。
f : A→B x:A
app
g : B→C fx:B
app
g (f x) : C
lam
λx:A. (g (f x)) : A → C
lam
λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
lam
λf:A→B. ? : (A→B) → (B→C) → A → C
10. もう遷移にはしない。
• 最後のlamの本体が確定。
f : A→B x:A
app
g : B→C fx:B
app
g (f x) : C
lam
λx:A. (g (f x)) : A → C
lam
λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
lam
λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C
11. 完成
• λf:A→B. λg:B→C. λx:A. (g (f x))が求める項。
– 型環境が必要な場合は、lamなどの規則に対応
するものを下から順に作る。
f : A→B x:A
app
g : B→C fx:B
app
g (f x) : C
lam
λx:A. (g (f x)) : A → C
lam
λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
lam
λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C