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
74
0
Share
型システムを学ぼうとした結果
名著と呼ばれる「型システム入門」を読もうとしました。
xorphitus
June 16, 2016
More Decks by xorphitus
See All by xorphitus
オリジナリティのあるGitLabを標準に近づける
xorphitus
1
770
マイクロサービスを作ろう
xorphitus
0
150
コンテナ起動への道
xorphitus
0
160
M-x doctor
xorphitus
0
160
型で数を表そう
xorphitus
0
100
AOT と direct linking
xorphitus
0
81
CFS入門
xorphitus
0
79
HyperLogLog
xorphitus
0
120
immutable database
xorphitus
0
310
Other Decks in Programming
See All in Programming
ファインチューニングせずメインコンペを解く方法
pokutuna
0
310
Alternatives to JPA 2026
debop
0
110
Coding as Prompting Since 2025
ragingwind
0
830
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
250
おれのAgentic Coding 2026/03
tsukasagr
1
150
ハンズオンで学ぶクラウドネイティブ
tatsukiminami
0
130
Swift Concurrency Type System
inamiy
0
530
Google Nest CamとApple Vision frameworkと猫🐈🐈⬛ / onishi50
yutailang0119
0
110
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
Radical Imagining - LIFT 2025-2027 Policy Agenda
lift1998
0
350
Vibe NLP for Applied NLP
inesmontani
PRO
0
430
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
270
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
160
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
170
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
Skip the Path - Find Your Career Trail
mkilby
1
110
Code Review Best Practice
trishagee
74
20k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
350
HDC tutorial
michielstock
2
630
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の基盤となる論理らしいので。 あと、型システムに入門できないと、タイトルが太宰治っぽくなる。