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
Lean言語は新世代の純粋関数型言語になれるか?
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
井上亜星
June 15, 2025
Programming
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Lean言語は新世代の純粋関数型言語になれるか?
関数型まつり2025で発表したスライドです。
井上亜星
June 15, 2025
More Decks by 井上亜星
See All by 井上亜星
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
320
Lean プロジェクトの依存関係を 自動更新する
inoueasei
1
120
Leanで本を執筆する
inoueasei
0
230
Other Decks in Programming
See All in Programming
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
180
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.6k
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
140
残高管理から台帳サービスへの進化
artoy
0
140
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
150
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
140
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Domain-Driven Transformation
hschwentner
2
2.3k
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
Google's AI Overviews - The New Search
badams
0
1.6k
Skip the Path - Find Your Career Trail
mkilby
1
240
What's in a price? How to price your products and services
michaelherold
247
13k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
300
We Have a Design System, Now What?
morganepeng
55
8.4k
Typedesign – Prime Four
hannesfritz
42
3.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Six Lessons from altMBA
skipperchong
29
4.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Chasing Engaging Ingredients in Design
codingconduct
0
340
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
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サーバ)もあります。 ご興味があればぜひ。
ご清聴ありがとうございました