Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5分でわかる Curry–Howard 同型対応
Search
Susisu
May 28, 2017
Programming
0
910
5分でわかる Curry–Howard 同型対応
5分で伝えることが無茶だとわかりました
https://connpass.com/event/54292/
Susisu
May 28, 2017
Tweet
Share
More Decks by Susisu
See All by Susisu
null or undefined
susisu
25
6.9k
Mackerel のフロントエンドフレームワーク移行 序章 / Hatena Engineer Seminar #13
susisu
0
2k
スクリーンショット撮影のために Puppeteer を操る / Kyoto.js 16
susisu
0
800
BuckleScript 使ってみた
susisu
0
290
Atom パッケージ開発のすゝめ
susisu
1
2.1k
ジェネレータを有効活用し隊 / Kyoto.js 11 LT
susisu
2
2.1k
遅延評価と健康
susisu
0
580
楽しく学ぶ難解プログラミング言語
susisu
0
740
多分これが一番早いと思います
susisu
0
400
Other Decks in Programming
See All in Programming
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
630
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.2k
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
Jakarta EE meets AI
ivargrimstad
0
580
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Fireside Chat
paigeccino
34
3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
97
Six Lessons from altMBA
skipperchong
27
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Embracing the Ebb and Flow
colly
84
4.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Bash Introduction
62gerente
608
210k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Producing Creativity
orderedlist
PRO
341
39k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
It's Worth the Effort
3n
183
27k
Transcript
Ͱ Θ ͔ Δ C u r
r y – H o w a rd ಉ ܕ ର Ԡ 2 0 1 7 - 0 5 - 2 8 ୈ 6 ճ O U CC LT ձ
͓ લ ୭ ͩ susisu / @susisu2413 • JavaScript
• Haskell • きんいろモザ イク
͢͜ͱ ୯७ܕ͖ϥϜμܭࢉ ࣗવԋ៷ʢ໋ཧʣ Curry–HowardಉܕରԠ System
F ͤͳ͍͜ͱʢ࣌ؒతʹʣ w ϥϜμܭࢉͷৄࡉ w ड़ޠཧ w ݹయཧͱ؍ओٛཧ
୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ
୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ w
ϥϜμܭࢉʜ୯७ͳϓϩάϥϛϯάݴޠΈ͍ͨͳͷ w ม w ؔ w ؔద༻ͷͭͷΈ w ؔܕϓϩάϥϛϯάͷཧతͳج൫ w ୯७ܕ͖ϥϜμܭࢉͦΕʹܕΛ͚ͭͨͷͷɺ ࠷؆୯ͳͷ
୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ t
::= -- ߲ x -- ม λx: T. t -- λநʢؔʣ t t -- ؔద༻ T ::= -- ܕ X -- ܕม T → T -- ؔͷܕ
୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ w
ܕ͚نଇ࣍ͷΑ͏ͳܗͰॻ͘ ʮલఏ͕ͯ͢Γཱͭͱ͖ɺ݁Γཱͭʯ w લఏ݁࣍ͷΑ͏ͳܗࣜ ʮจ຺ΓͷԼͰɺ߲ tTͱ͍͏ܕΛͭʯ ৈଥ (0 ڎΤࣣ) ٗ ` t : T
୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ x
: A 2 ` x : A , x : A ` t : B ` x : A. t : A ! B ` t1 : A ! B ` t2 : A ` t1 t2 : B
ࣗ વ ԋ ៷
ࣗ વ ԋ ៷ w ཧֶͷܗࣜମܥͷͻͱͭ w ཧతʹਖ਼໋͍͠ʢఆཧʣ จ຺ʹΑΒͣ߃ʹਅͳ໋ w
ܗࣜମܥͦͷΑ͏ͳఆཧΛಋͨ͘Ίͷͷ w ͳΜ͔ࣗવͬΆ͍ʢਓ͕ؒߦ͏ਪʹࣅ͍ͯΔʣ w ͜ͷεϥΠυͰ໋ཧͷൣғΈߟ͑·͢
ࣗ વ ԋ ៷ P ::= -- ໋ X --
໋ม P → P -- ཧแؚʮͳΒʯ P ∧ P -- ཧੵʮ͔ͭʯ P ∨ P -- ཧʮ·ͨʯ ¬P -- ൱ఆ
ࣗ વ ԋ ៷ w ಋग़نଇ࣍ͷΑ͏ͳܗͰॻ͘ ʮલఏ͕ͯ͢Γཱͭͱ͖ɺ݁Γཱͭʯ w લఏ݁࣍ͷΑ͏ͳܗࣜ ʮจ຺ΓͷԼͰɺP߃ʹਅʯ
ৈଥ (0 ڎΤࣣ) ٗ ` P
ࣗ વ ԋ ៷ A 2 ` A , A
` B ` A ! B ` A ! B ` A ` B
ࣗ વ ԋ ៷ A 2 ` A , A
` B ` A ! B ` A ! B ` A ` B x : A 2 ` x : A , x : A ` t : B ` x : A. t : A ! B ` t1 : A ! B ` t2 : A ` t1 t2 : B ୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ
ࣗ વ ԋ ៷ A 2 ` A , A
` B ` A ! B ` A ! B ` A ` B x : A 2 ` x : A , x : A ` t : B ` x : A. t : A ! B ` t1 : A ! B ` t2 : A ` t1 t2 : B ୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ ໋㱻ܕ
ࣗ વ ԋ ៷ A 2 ` A , A
` B ` A ! B ` A ! B ` A ` B x : A 2 ` x : A , x : A ` t : B ` x : A. t : A ! B ` t1 : A ! B ` t2 : A ` t1 t2 : B ୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ Curry–Howard ಉܕରԠ
ࣗ વ ԋ ៷ A 2 ` A , A
` B ` A ! B ` A ! B ` A ` B x : A 2 ` x : A , x : A ` t : B ` x : A. t : A ! B ` t1 : A ! B ` t2 : A ` t1 t2 : B ୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ ͱΜ͔ͭDJ
C u r r y – H o w a
rd ಉ ܕ ର Ԡ ଞͷཧԋࢉࢠʹؔͯ͠ରԠΛߟ͑Δ͜ͱͰ͖Δ ࣗ વ ԋ ៷ ୯ ७ ܕ ͖ ϥϜ μ ܭ ࢉ ໋ ܕ ఆ ཧ ߲ ͕ ଘ ࡏ ͢ Δ ܕ ཧ แ ؚ → ؔ ͷ ܕ →
C u r r y – H o w a
rd ಉ ܕ ର Ԡ ϥϜμܭࢉͰɺ͋Δܕͷ߲͕ଘࡏ͢Δ͜ͱΛࣔ͢ ରԠ͢Δ໋ʢఆཧʣͷূ໌ → ূ໌ࢧԉγεςϜʢ$PRͳͲʣ ϥϜμܭࢉͷ߲ʢϓϩάϥϜʣΛॻ͘ ίϯϐϡʔλʔ͕ܕΛ֬ೝ ఆཧ͕ূ໌Ͱ͖ͨ
Sy s t e m F
Sy s t e m F w ֊ͷܕ͖ϥϜμܭࢉ ୯७ܕ͖ϥϜμܭࢉ ܕʹؔ͢Δந
w ໋ཧͷൣғΛશͯΧόʔͰ͖Δ ܕʹؔ͢ΔநͰཧԋࢉࢠΛΤϯίʔυՄೳ
Sy s t e m F t ::= -- ߲
x -- ม λx: T. t -- λநʢؔʣ t t -- ؔద༻ ΛX. t -- ܕʹؔ͢Δநʢؔʣ t [T] -- ܕͷద༻ T ::= -- ܕ X -- ܕม T → T -- ௨ৗͷؔͷܕ ∀X. T -- શশྔԽ͞Εͨܕ
Sy s t e m F , X ` t
: A ` ⇤X. t : 8X. A ` t : 8X. A ` t [B] : [X 7! B]A
Sy s t e m F ֤छཧԋࢉࢠͷΤϯίʔυҎԼͷͱ͓Γ A ^ B
⌘ 8X. ((A ! B ! X) ! X) ! X A _ B ⌘ 8X. ((A ! X) ! (B ! X) ! X) ! X ? ⌘ 8X. X ¬A ⌘ A ! ? 9X. A ⌘ 8Y. (8X. A ! Y ) ! Y
Sy s t e m F w ূ໌ࢧԉγεςϜͬΆ͍ͷΛ࣮ͯ͠Έͨ IUUQTHJUIVCDPNTVTJTVTZTUFNGKTJNQM w
σϞʢ͕࣌ؒ͋ΕʣʢͨͿΜ࣌ؒͳ͍ʣ
· ͱ Ί
· ͱ Ί w Curry–HowardಉܕରԠཧֶͱϓϩάϥϜͷؒͷ ରԠؔ w System FΛ࣮͢Δͷָ͔ͬͨ͠ʢंྠͷ࠶ൃ໌ʣ ࣗ
વ ԋ ៷ ܕ ͖ ϥϜ μ ܭ ࢉ ໋ ܕ ఆ ཧ ߲ ͕ ଘ ࡏ ͢ Δ ܕ
λ→ λ2 λω λ ω λP λPω λP2 λC
λ→ λ2 λω λ ω λP λPω λP2 λC ୯७ܕ͖ϥϜμܭࢉ
System F System Fω (Haskell) CoC (Coq)
λ→ λ2 λω λ ω λP λPω λP2 λC ୯७ܕ͖ϥϜμܭࢉ
System F System Fω (Haskell) CoC (Coq) :zenzenyowai:
ࢀ ߟ จ ݙ • ஜେֶͷܭࢉཧֶͷߨٛࢿྉ http://www.cs.tsukuba.ac.jp/~kam/complogic/ • ޒेཛྷ ३,
ϓϩάϥϛϯάݴޠͷجૅ֓೦, αΠΤϯε ࣾ, 2011 • B. C. Pierce, Types and Programming Languages, The MIT press, 2002 ʢຊޠ༁͋Δʣ