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
Lean言語は新世代の純粋関数型言語になれるか?
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
井上亜星
June 15, 2025
Programming
94
1
Share
Lean言語は新世代の純粋関数型言語になれるか?
関数型まつり2025で発表したスライドです。
井上亜星
June 15, 2025
More Decks by 井上亜星
See All by 井上亜星
Lean プロジェクトの依存関係を 自動更新する
inoueasei
1
36
Leanで本を執筆する
inoueasei
0
76
Other Decks in Programming
See All in Programming
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
230
Don't Prompt Harder, Structure Better
kitasuke
0
630
Swift Concurrency Type System
inamiy
0
400
おれのAgentic Coding 2026/03
tsukasagr
1
140
How Swift's Type System Guides AI Agents
koher
0
190
CDK Deployのための ”反響定位”
watany
1
530
RSAが破られる前に知っておきたい 耐量子計算機暗号(PQC)入門 / Intro to PQC: Preparing for the Post-RSA Era
mackey0225
3
120
Running Swift without an OS
kishikawakatsumi
0
690
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
140
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
610
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
実践CRDT
tamadeveloper
0
400
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
440
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
350
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
500
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
97
Building an army of robots
kneath
306
46k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
Lean言語は 新世代の純粋関数型言語になれるか? Proxima Technology 井上亜星
Lean 言語ってなに? 2013年ごろに当時 Microsoft Research に在籍し ていた Leonardo de Moura
氏により開発が始め られた定理証明支援系。 Rocq(旧Coq) や Agda と同様に、依存型という 強力な型システムのパワーによって命題を表現 し、証明することを可能にしている。 現在、Lean 4 がアクティブに開発中。
他の定理証明支援系とどう違うの? 大きく分けて2つの特徴があります 1.依存型に基づく定理証明支援系であると同時に、 純粋関数型言語でもある (プログラミングと証明を両立するための工夫もある) 2.強力なメタプログラミングフレームワークを備えている
純粋?Haskell みたいな言語ってこと? 確かに Haskell にかなり影響を受けている (モナドや do 構文もある) しかし、Haskell にはなかったおもしろい機能がある:
・notebook なしでもフィードバックが即座に得られる ・do 構文が強力で、for ループや while ループも書ける ・フィールド記法があって、関数適用をフィールドアクセスのように書ける ・効率的に計算ができるようにする Functional but in-place という仕様がある
フィードバックが即座に得られる エディタ上で編集するごとに実行結果を確認できる 画像では Error Lens 拡張機能を使用しています
強力な do 構文 ・for ループと while ループ ・let mut で可変なローカル変数
・continue と break 詳細は ‘do’ unchained という論文を参照
フィールド記法 T が e の型であるときに、関数適用 T.f e を e.f と書くことができる
Functional but in-place 他で参照されていない値を更新するとき、自動で破壊的な更新が行われる (参照カウントに基づく)
他の定理証明支援系とどう違うの? 大きく分けて2つの特徴があります 1.定理証明支援系であると同時に、純粋関数型言語でもある (プログラミングと証明を両立するための工夫もある) 2.強力なメタプログラミングフレームワークを備えている
プログラミングと証明を両立するために 実装と論理モデルを分離することができる ・自然数 Nat は、論理モデルはペアノの公理で与えられているが、 実際の計算は別の高速な方法で行われる ・文字列 String は Char
のリストとして定義されているが、 実際の計算は別の高速な方法で行われる などなど…。 正当性の証明付きで置換することもできるし、証明なしで置換することもできる
他の定理証明支援系とどう違うの? 大きく分けて2つの特徴があります 1.定理証明支援系であると同時に、純粋関数型言語でもある (プログラミングと証明を両立するための工夫もある) 2.強力なメタプログラミングフレームワークを備えている
強力なメタプログラミングフレームワークとは? syntax コマンドと declare_syntax_cat コマンドでパーサを書き換えて新しい構文を定義す ることができるほか、macro_rules コマンドでマクロも自由に書ける
実際にプログラムを書けるのか? 実際に Lean で書かれた(広く使われている)プログラムの例として、 ドキュメント生成ツール doc-gen4 や文書作成ツール verso がある。 実際、Lean
の公式マニュアルは verso を使って書かれている。
まとめ Lean 言語というプログラミング言語があって、 • Rocq (旧 Coq) のように定理証明支援系として使える • Haskell
のように純粋関数型言語としても使える 後発言語らしい工夫もあり • 定理証明とプログラミングを両立する工夫 • 純粋関数型言語のパフォーマンス面・UI面双方の欠点を改善
自己紹介 名前:井上亜星 所属:Proxima Technology GitHub 等ネットでは 北窓(きたまど) という名前でやってます
自己紹介 n 月刊ラムダノートに記事を寄稿したほか、 Lean by Example というオンラインリファレンスを書いてます
おわりに lean-ja という Lean の日本語コミュニティ (Discordサーバ)もあります。 ご興味があればぜひ。
ご清聴ありがとうございました