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
井上亜星
June 15, 2025
Programming
120
1
Share
Lean言語は新世代の純粋関数型言語になれるか?
関数型まつり2025で発表したスライドです。
井上亜星
June 15, 2025
More Decks by 井上亜星
See All by 井上亜星
Lean プロジェクトの依存関係を 自動更新する
inoueasei
1
41
Leanで本を執筆する
inoueasei
0
86
Other Decks in Programming
See All in Programming
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
350
Road to RubyKaigi: Play Hard(ware)
makicamel
1
550
Agentic Elixir
whatyouhide
0
440
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
340
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
190
書き換えて学ぶTemporal #fukts
pirosikick
2
360
Back to the roots of date
jinroq
0
740
20260514_its_the_context_window_stupid.pdf
heita
0
620
Firefoxにコントリビューションして得られた学び
ken7253
2
160
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
660
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
110
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
2.9k
Featured
See All Featured
Fireside Chat
paigeccino
42
3.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
How to train your dragon (web standard)
notwaldorf
97
6.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building the Perfect Custom Keyboard
takai
2
750
How GitHub (no longer) Works
holman
316
150k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Paper Plane (Part 1)
katiecoart
PRO
0
7.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
180
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サーバ)もあります。 ご興味があればぜひ。
ご清聴ありがとうございました