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
型システムを学ぼうとした結果
Search
xorphitus
June 16, 2016
Programming
0
72
型システムを学ぼうとした結果
名著と呼ばれる「型システム入門」を読もうとしました。
xorphitus
June 16, 2016
Tweet
Share
More Decks by xorphitus
See All by xorphitus
オリジナリティのあるGitLabを標準に近づける
xorphitus
1
760
マイクロサービスを作ろう
xorphitus
0
150
コンテナ起動への道
xorphitus
0
160
M-x doctor
xorphitus
0
160
型で数を表そう
xorphitus
0
100
AOT と direct linking
xorphitus
0
79
CFS入門
xorphitus
0
79
HyperLogLog
xorphitus
0
110
immutable database
xorphitus
0
310
Other Decks in Programming
See All in Programming
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
400
Codex の「自走力」を高める
yorifuji
0
1.3k
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
150
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.6k
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
160
How to stabilize UI tests using XCTest
akkeylab
0
140
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
150
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.4k
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
180
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
290
OTP を自動で入力する裏技
megabitsenmzq
0
130
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.8k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
The Invisible Side of Design
smashingmag
302
51k
How to Ace a Technical Interview
jacobian
281
24k
Darren the Foodie - Storyboard
khoart
PRO
3
3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.2k
GitHub's CSS Performance
jonrohan
1032
470k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Leo the Paperboy
mayatellez
4
1.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
830
Transcript
型システムを 学ぼうとした結果 @xorphitus (2016-06)
型と言えば?
型システム 入門失格
型システム 入門失格
入門失格
System F lambda cube 単純型付 λ計算 いまここ
道のり長すぎ 無理、読むの疲れた ってか時間足りん
はい、では開き直って 型付きλ計算の話しまーす
そもそも型とは? OOPやFPが多義的であるように、型というのも多義的であるように思う が、TaPLの最初の方でそうした事象も包括して以下のように述べられている > 型システムとはプログラムの各部分を > それが計算する種類の値に沿って分類することにより > プログラムがある種の振る舞いを起こさないことを保証する >
計算量的に扱いやすい構文的手法である 例えば、λ計算は型なんかなくてもチューリング完全である そのことからも分かるように、計算能力と型とは直行する概念なのだと思う
まずは、型なしλ計算を拡張するところから 型の前に。 • そもそも、なぜλ計算? ◦ それ自体がプログラミング言語として振る舞える ◦ 数学モデルであるため、計算に対する証明を数学的に行える ◦ →
CTMCPで言うところの核言語としてうってつけ • どう拡張するの? ◦ ブール値と自然数のプリミティブを導入する ◦ だって全部チャーチ数とかで表したら大変じゃん! ◦ これらは、チャーチブール値、チャーチ数と相互に変換可能
プリミティブを導入したはいいけど こういう妙な関数適用が作れちゃう succ true 計算ルール上は簡約可能でありながら、 後者関数はブール値に対して未定義なため、簡約がストップする (「行き詰まり状態」と呼ばれる) 型とは、こうした行き詰まり状態を回避し、計算の安全性を担保する仕組み …というのがどの言語でも最低限共通する部分と思われる 言われなくてもみんな経験的に知っているようなものでもある
λ計算に型を導入する まずは単なる記法のルールから : に続けて型を書くというのと、関数の型は右アローで書く λx:T x : T→T まあ直感的に分かる さらに、型環境Γ(各自由変数がどんな型を持つか)を導入すると
Γ⊢y:T2 λx:T1 y : T1→T2 eval/applyでevalに渡す環境と似たようなもんか
なぜ型付けされると行き詰まり状態にならないのか 最初の話に戻り、例えば succ true のような項は未定義であるため簡約できずに計算が行き詰まる ということで、それを回避するために型の話が出てきた 正しく型付けされていればこのような項は発生しない 直感的にそれは分かるのだが…なぜか?
行き詰まり状態を回避できる理由 それは進行、保存という2つの定理より導出される 分かりやすさのため、少々砕けた表現で記述すると • 進行定理 ◦ tが正しく型付けされた項であるならば、 tは値であるか簡約が可能である • 保存定理
◦ t:Tの時、tを簡約した項t’の型も同じくTとなる これらより tが正しく型付けされているのであれば値になるまで簡約が可能と言える (なお、両定理とも帰納法で証明が可能である)
折角なので型検査を実装してみようとした TaPL本では、OCamlによる実装例がちょいちょい入っている。 曰く > (これを実装するプログラミング言語についての)最も重要な要求は > 自動メモリ管理と、構造データ型に対するパターンマッチを用いて > 再帰関数を容易に定義できる機能である ※注釈では「好みは様々だしどの言語でもできるけど、手動メモリ管理はダルい」とも言っている
というわけで、学習も兼ねてHaskellで作ってみることにしたが、間に合わず https://gist.github.com/xorphitus/cba339951a4aab83cf0ca4f8f9f799d8
最後に 辛かった。 とりあえずSystem Fまではたどり着きたい。 ML、Haskellの基盤となる論理らしいので。 あと、型システムに入門できないと、タイトルが太宰治っぽくなる。