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
76
0
Share
型システムを学ぼうとした結果
名著と呼ばれる「型システム入門」を読もうとしました。
xorphitus
June 16, 2016
More Decks by xorphitus
See All by xorphitus
オリジナリティのあるGitLabを標準に近づける
xorphitus
1
780
マイクロサービスを作ろう
xorphitus
0
150
コンテナ起動への道
xorphitus
0
160
M-x doctor
xorphitus
0
160
型で数を表そう
xorphitus
0
100
AOT と direct linking
xorphitus
0
81
CFS入門
xorphitus
0
83
HyperLogLog
xorphitus
0
120
immutable database
xorphitus
0
310
Other Decks in Programming
See All in Programming
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
770
Making the RBS Parser Faster
soutaro
0
680
2026-04-15 Spring IO - I Can See Clearly Now
jonatan_ivanov
1
190
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.2k
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
350
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
認証統合から始めるフロントエンドの機能単位開発 — マイクロサービス思想の適用
koukimiura
0
100
Agent Skills を社内で育てる仕組み作り
jackchuka
1
1.8k
JCON - Create Agentic AI Apps, The Easy Way!
kdubois
1
100
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.5k
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
4.9k
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
150
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
690
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
370
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Building a Scalable Design System with Sketch
lauravandoore
463
34k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.6k
Google's AI Overviews - The New Search
badams
0
1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
440
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
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の基盤となる論理らしいので。 あと、型システムに入門できないと、タイトルが太宰治っぽくなる。