12

Click here to load reader

Curry-Howard同型から単純型付ラムダ計算の項を作る

Embed Size (px)

Citation preview

Page 1: Curry-Howard同型から単純型付ラムダ計算の項を作る

Curry-Howard同型を使って自然演繹からλ計算の項を作る

chiguri

Page 2: Curry-Howard同型から単純型付ラムダ計算の項を作る

(A→B) → (B→C) → A → Cを例に

• 自然演繹の証明はこんな感じ

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

[B→C]2 B

[A→B]1 [A]3

→I1

→I2

→I3

→E

→E

Page 3: Curry-Howard同型から単純型付ラムダ計算の項を作る

型だと思う

• λ計算におけるA→BはAを引数にしてBを返す関数の型だから、→Iはlam(関数抽象)、→Eはapp(関数適用)に対応

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

[B→C]2 B

[A→B]1 [A]3

→I1

→I2

→I3

→E

→E

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

[B→C]2 B

[A→B]1 [A]3

lam1

lam2

lam3

app

app

Page 4: Curry-Howard同型から単純型付ラムダ計算の項を作る

1とか2とか3じゃまずいから

• 変数っぽくする。1をfに、2をgに、3をxにする。

– この「ラベル=変数」のため、ラベル部分はidに相当。

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

[B→C]2 B

[A→B]1 [A]3

lam1

lam2

lam3

app

app

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

g : B→C B

f : A→B x : A

lam1

lam2

lam3

app

app

Page 5: Curry-Howard同型から単純型付ラムダ計算の項を作る

対応してる関数抽象の引数を書く

• →I1をfを引数にとる関数抽象だと思う。

– 1はfと対応してたから。2はg、3はxに対応させる。

– 1,2,3のラベルはここで完全消滅。

(A→B) → (B→C) → A → C

(B→C) → A → C

A → C

C

g : B→C B

f : A→B x : A

lam1

lam2

lam3

app

app

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

C

g : B→C B

f : A→B x : A

lam

lam

lam

app

app

Page 6: Curry-Howard同型から単純型付ラムダ計算の項を作る

関数適用の形を作る

• 上から作る。右上のBに具体的な項が定まる。

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

C

g : B→C B

f : A→B x : A

lam

lam

lam

app

app

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 7: Curry-Howard同型から単純型付ラムダ計算の項を作る

同様に、上から順にルールと整合するように項を構成する。

• Cの項をつけた。

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 8: Curry-Howard同型から単純型付ラムダ計算の項を作る

• 一番上のlamの本体はその上にある項。

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. ? : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. ? : (B→C) → A → C

λx:A. g (f x) : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 9: Curry-Howard同型から単純型付ラムダ計算の項を作る

もう遷移にはしない。

• 二番目のlamの本体が確定。

λf:A→B. ? : (A→B) → (B→C) → A → C

λg:B→C. λx:A. (g (f x)) : (B→C) → A → C

λx:A. (g (f x)) : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 10: Curry-Howard同型から単純型付ラムダ計算の項を作る

もう遷移にはしない。

• 最後のlamの本体が確定。

λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C

λg:B→C. λx:A. (g (f x)) : (B→C) → A → C

λx:A. (g (f x)) : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 11: Curry-Howard同型から単純型付ラムダ計算の項を作る

完成

• λf:A→B. λg:B→C. λx:A. (g (f x))が求める項。

– 型環境が必要な場合は、lamなどの規則に対応するものを下から順に作る。

λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C

λg:B→C. λx:A. (g (f x)) : (B→C) → A → C

λx:A. (g (f x)) : A → C

g (f x) : C

g : B→C f x : B

f : A→B x : A

lam

lam

lam

app

app

Page 12: Curry-Howard同型から単純型付ラムダ計算の項を作る

ちょっと補足

• 変数は、関数の形をしていたらfやgをつけることが慣習上多い。

– 別に強制ではない。a,b,cでも可。

• 逆に、関数の形をしていない場合はxやyをつけることが多い。

– これまたあくまで多いだけ。