Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Church vs Curry Typing といくつか型の概念の調査
Search
Yuki Otsuka
April 26, 2025
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Church vs Curry Typing といくつか型の概念の調査
OSunC-2025でのLT資料
Yuki Otsuka
April 26, 2025
More Decks by Yuki Otsuka
See All by Yuki Otsuka
Overview of Package Management in openSUSE MicroOS
akusto
0
220
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
580
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.3k
Being A Developer After 40
akosma
92
590k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Rails Girls Zürich Keynote
gr2m
96
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
How to build a perfect <img>
jonoalderson
1
6.1k
Prompt Engineering for Job Search
mfonobong
0
520
Accessibility Awareness
sabderemane
1
250
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
A Modern Web Designer's Workflow
chriscoyier
699
190k
Transcript
Church vs Curry Typing といくつか型の概念の調査 発表者:Yuki Otsuka Open Source un-Conference
2025 Kawagoe 1
発表者について OSS&プログラミング言語好きの大学生 らぐ的な立ち位置だとopenSUSE(MicroOS)を愛用してます。 Japan openSUSE User Group付近にもよく出没します。 今日はプログラミング言語の型と型理論の基礎っぽい話を勉強している過程で 気になったことがあったため、調べてまとめてみました。 2
アジェンダ • この話をするまでのきっかけ • 型付けスタイルと定義順序の違い • 単純型付きλ計算について • 型付きλ計算の説明を入れた背景 •
Church vs Curry の対比 • 篩型 (Refinement Types) と依存型 (Dependent Types) • 漸進的型付け (Gradual Typing) • まとめ 3
この話をするまでのきっかけ 型システム入門("The Types and Programming Languages")を読んでいる中で、 第9章で『Curryスタイル対Churchスタイル』という節に出会った。 そこでλ計算における型付けの〈方式〉として歴史的に異なる視点があることを知り、 その違いや用語について整理してみたいと思った。 4
型付けスタイルの定義順序の違い Curry‐style: まず項の意味論を定義し、後から型システムで不正な項を排除する。 → 項の振る舞いを優先してから型で制約をかける。 Church‐style: まず型付け可能な項を選別し、その上で意味論を与える。 → 型注釈を前提に意味論を制限して安全性を保証する。 5
歴史的背景と用語の混同 暗黙的型付けのラムダ計算は Curry-style と呼ばれがちで 明示的型付けの系統は Church-style として別名する流れがあった。 しかし学術文献や実装によって定義が揺らぎ、混乱が生じた。 6
単純型付きλ計算入門① 変数・抽象・適用 • 変数: x, y, z などで値を表現 • 抽象:
λx. M で引数 x に対する関数 M を定義 • 適用: 式 M N は関数 M を引数 N に適用 → 例: (λx. x) 42 は 42 と評価される。 7
単純型付きλ計算入門② 型付け • simply-typed λ-calculus: 型 A → B を持つ関数を導入
• 抽象: λx:A. M で x の型を A と明示 • 適用: 式 M N がある際、M の型 A→B と N の型 A をチェックし、結果型 B を得る。 → well-typedプログラムは型安全性*が保証される。 *型の進行性と保存性(Progress & Preservation) 8
型付け規則 (Typing Rules) 環境 Γ と型付け関係 ⊢ を用いて,次の3つの推論則で型を付ける • (Var)
Γ ⊢ x : A • ————————————— if (x : A) ∈ Γ • (Abs) Γ, x:A ⊢ M : B • ————————————————————— • Γ ⊢ λx:A. M : A → B • (App) Γ ⊢ M : A → B Γ ⊢ N : A • ————————————————————————————— • Γ ⊢ M N : B 9
型付きλ計算の話をした背景 いくらかの言語処理系に付随した型検査器ではλ計算(やその拡張)の式の簡約を アイデアにプログラムの型情報をを評価していくものがある。 MLファミリ、Haskell、Agda、Rocq、F*、Idris、ATS、Lean ... 型がつくということのイメージ共有のために単純型付きλ計算を導入した。 10
静的型と動的型の概念 ・静的型: 型は処理系が持つ型検査器の評価時に判明する。 型検査器の評価時に判明するため、プログラム実行時以前に型情報を知ることになる。 ・動的型: 型は実行時に判明する。 実行時に型情報が判明するため、事前に式が評価される静的型と比較して 実行時により、意味が異なってくる場合がある。 ・他にも、動的型付け言語に静的型検査を交えたものも存在する(漸進型付けと呼ばれる) 11
Church-style (ドメイン付き) 型付け ・λx:A. M により引数 x の型 (domain) を明示
– domain は関数の入力型(引数の型)、codomain は出力型(戻り値の型) ・Rocq や Agda, F*のような証明支援系で利用される(依存型, 後述) ・注釈が冗長でも仕様が明確 12
Curry-style (ドメイン無し) 型付け ・λx. M と記述し、文脈 Γ (コンテキスト) から型を推論 –
Γ は変数とその型の環境 (例: x:A, y:B) を保持 ・MLやHaskellなどの言語がこのスタイルも持つ印象、いわゆる型推論が機能する。 ・コードの簡潔さに寄与する。 13
Church vs Curry スタイルの比較 ・Church: 強い型検証 & 証明可能性 ↑/注釈負担 ↑
・Curry: 記述量 ↓ & 文脈による汎用性 ↑/文脈による推論依存 14
λ計算による恒等関数 id の例 Church: λx:α. x で型を明示し、型が付くことを保証 Curry: λx. x
とだけ記述し、α→α が推論される 15
篩型 (Refinement Types) の概要 ・基本型に条件を追加し、特定の値範囲を篩い分ける型 ・関数型にも適用し、ドメイン/コドメインに制約を付与 F*などには既定で備わっている。 Liquid HaskellやRefined Cなど外因的な型検査器実装も色々。
16
篩型の適用例 ・数値型: {x: Int | x > 0} など正の整数のみ受け入れる ・文字列型:
{s: String | matches(s, regex)} で入力フォーマットを保証 17
篩型はChurch-style的注釈の延長例 ・Church-style では λx:A. M のように明示的注釈を行う ・篩型は基本型の注釈に条件を追加し、より細かな仕様を型レベルで表現 ・型注釈の持つドメイン指定機能を強化する形と言える 18
依存型 (Dependent Types) の概要 ・型が値に依存して定義される強力な型 ・型レベルでプログラムの性質や不変条件を記述可能 ・Church-style の注釈機構を更に一般化し、型と値の一体化を実現 ・型推論の仕組みをうまく作るのが難しくなってくる。(半決定可能性) RocqやAgda、Leanなどの定理証明支援系や
Idris、ATSなど汎用プログラミング言語で既定で備わっている。 19
漸進的型付け (Gradual Typing) の概要 ・動的型付け言語に静的型検査を段階的に導入 ・型注釈をオプション化し、未注釈はランタイムタグにフォールバック(実行時に判明) 20
漸進的型付けの注意点 ・静的型検査と実行時挙動の乖離に注意する必要がある。 ・未注釈部分で runtime error が発生するリスクを孕む。 ・未注釈部分はCurryスタイルの型付けがされているわけではない*。 (*動的型部分と静的型部分は評価タイミングが違う話なのでややナンセンスではある) 21
まとめ ・Church vs Curry スタイルは型付きλ計算の型の表記法のスタイル。 ・篩型はChurchスタイルの延長線上の機能としてみることができそう。 ・λ計算に影響を受けた言語の型機能の整理に役立った。 ・λ計算から型付けを追うことで計算や評価の原理的な理解が深まる(ような気がする)。 ・漸進型付け、篩型、依存型などの関連しそうな概念の整理をした。 22
Appendix: 参考文献 ・ピアス, ベンジャミン C. 著; 住井英二郎 監訳・遠藤侑介, 酒井政裕, 今井敬吾,
黒木裕介, 今井宜洋, 才川隆文, 今井健男 訳.『型システム入門―プログラミング言語と型の理論』. 東京: オーム社, 2013年3月. pp. 75–84 • Jacques Garrigue “Typed λ-Calculus”: https://www.math.nagoya-u.ac.jp/~garrigue/lecture/2023_tenbo_en/typed_en.pdf • Eric Normand “Church vs Curry Types”: https://ericnormand.me/article/church-vs-curry-types 23