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.
→
井上亜星
December 03, 2025
Programming
76
0
Share
Leanで本を執筆する
井上亜星
December 03, 2025
More Decks by 井上亜星
See All by 井上亜星
Lean プロジェクトの依存関係を 自動更新する
inoueasei
1
36
Lean言語は新世代の純粋関数型言語になれるか?
inoueasei
1
94
Other Decks in Programming
See All in Programming
Radical Imagining - LIFT 2025-2027 Policy Agenda
lift1998
0
250
Coding as Prompting Since 2025
ragingwind
0
770
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
850
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
450
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
990
3分でわかるatama plusのQA/about atama plus QA
atamaplus
0
130
Vibe하게 만드는 Flutter GenUI App With ADK , 박제창, BWAI Incheon 2026
itsmedreamwalker
0
540
Running Swift without an OS
kishikawakatsumi
0
690
「速くなった気がする」をデータで疑う
senleaf24
0
150
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
550
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
250
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
96
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
330
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Crafting Experiences
bethany
1
110
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
250
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
680
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
300
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
290
How to build a perfect <img>
jonoalderson
1
5.4k
Transcript
Lean で本を執筆する 井上亜星 Proxima Technology 2025-11-30
はじめに
自己紹介 はじめに • Proxima Technology 所属のソフトウェアエン ジニア ‣ 仕事では Python
等を書いている ‣ 趣味で Lean を勉強している • Lean by Example という日本語リファレンスを 書いてます ‣ おそらく日本語圏では最大規模 • 今年の 9 月に Lean の入門書をラムダノートか ら出版しました 井上亜星 Lean で本を執筆する 2025-11-30 2 / 22
Proxima Technology について はじめに 制御の会社で、数学科卒を積極採用する謎のスタートアップとし て知られています 今回は業務として参加させていただいているので、宣伝です 井上亜星 Lean で本を執筆する
2025-11-30 3 / 22
今回の目的 はじめに • Lean の紹介 • Lean の書籍や Lean by
Example の執筆の背景 ‣ どういう問題があったか ‣ それをどういう風に解決したか • みなさんも Lean の本や記事を書こう 井上亜星 Lean で本を執筆する 2025-11-30 4 / 22
Lean の紹介
そもそも Lean とは Lean の紹介 • 依存型に基づく定理証明支援系 • 汎用プログラミング言語としても使うことが可能 •
既存の著名な定理証明支援系と比較すると… ‣ Isabelle と違って依存型ベース ‣ Agda と違ってタクティクフレームワークがある ‣ Rocq (旧 Coq)と違って汎用プログラミング言語でもある 井上亜星 Lean で本を執筆する 2025-11-30 6 / 22
なんで Lean? Lean の紹介 • プログラムも書けて、その証明も書けるのおもしろいよね • do 構文が強力で、手続き的プログラムが書きやすい •
Mathlib という大規模な数学ライブラリがあって、 たいていそれでなんとかなる • 今年 grind という冗談みたいに強力なタクティクが登場。 しかも高速。 • 手続き的プログラムについて証明を書くためのフレームワーク が近日登場予定。 登場したら Dafny の代替ができるかも? 井上亜星 Lean で本を執筆する 2025-11-30 7 / 22
内容のチェックの問題
markdown で書きたい 内容のチェックの問題 • 便利なので markdown で書きたい ‣ web ページとして公開したければ
mdbook 等が使える ‣ ラムダノートでは markdown で納品する • 当然 Lean コードはコードブロックとして書くことになる 井上亜星 Lean で本を執筆する 2025-11-30 9 / 22
markdown で書きたい 内容のチェックの問題 • しかし、コードブロックに書いてしまうと Lean コードとして実 行することができない • Lean
の場合毎月リリースがあるので、頻繁にバージョンを更新 してみて「まだ動くかどうか」をチェックしたい • 自動的にチェックできる仕組みがないと大変! 井上亜星 Lean で本を執筆する 2025-11-30 10 / 22
解決策 内容のチェックの問題 Lean のソースコードから markdown ファイルを生成するのはどう か? つまり左から右のような変換を行う: /- コメントに地の文を書く
-/ /-- ドキュメントコメント -/ def foo := "hogehoge" コメントに地の文を書く ```lean /-- ドキュメントコメント -/ def foo := "hogehoge" ``` これで、Lean のソースと markdown を自動的に同期させられる 井上亜星 Lean で本を執筆する 2025-11-30 11 / 22
演習問題の管理問題
演習問題の解答をどこに置くか? 演習問題の管理問題 • 本や記事には演習問題が必要 ‣ 演習問題には解答も付けておきたい ‣ しかし解答は読者から隠したい • 結果、
「演習問題」と「演習問題の解答」をどう同期させるか? という問題が発生する ‣「問題 A の解答」が「問題 A」の解答として正しく機能してい るのかチェックする必要がある ‣ それでいて解答は読者から隠して、本文の最後におきたい 井上亜星 Lean で本を執筆する 2025-11-30 13 / 22
解決策 演習問題の管理問題 解答ファイルから、演習問題を生成するのはどうか? つまり左か ら右のような変換を行う: example : 1 + 1
= 2 := by -- sorry decide -- sorry example : 1 + 1 = 2 := by sorry そして「sorry の部分を埋めてください」という形で演習問題を作 る。 そうすれば、問題と解答が同期していることは自動的に保証され るし、解答が実行できることも自動的に保証される。 井上亜星 Lean で本を執筆する 2025-11-30 14 / 22
mdgen
ツールを作った mdgen 上記のようなことを実行する mdgen というツールを Lean で書き、 それを使って記事や本を書いた 井上亜星 Lean
で本を執筆する 2025-11-30 16 / 22
裏話: 歴史的経緯 mdgen • lean2md というツールが先にあって、そのコンセプトを真似て 作った ‣「Lean ファイルを markdown
に変える」という基本コンセプト はそこから借りた ‣ lean2md はあまり実用的でなかったので機能追加して実用に耐 えるようにした • 演習問題を抜き出すのも、Patrick Massot さんの GlimpseOfLean から拝借したアイデア • 私の貢献は「これは記事や本を書くのに便利だ」と気づいて ツールとして完成させたこと、mdbook を Lean 用にセットアッ プする方法も見つけたこと 井上亜星 Lean で本を執筆する 2025-11-30 17 / 22
裏話: なんで Lean で書いたか ❓ mdgen 実際、もともとの lean2md は Python
スクリプトだった。 また mdgen は依存型を一切使っておらず、他の言語でも同じものは作 れるはず。 井上亜星 Lean で本を執筆する 2025-11-30 18 / 22
裏話: なんで Lean で書いたか? mdgen •「Lean はプログラムも書ける」ことを体感したかった • プロジェクトに依存関係を追加しなくて済む •
少なくとも Lean には CLI ツールを書くライブラリは既にあった • Lean なら保守できる気がした ‣ 実際、 「互換性を維持しつつ新たな機能を追加する」というの を 2 年も続けられたのは Lean のおかげという側面がありそう。 他の言語だったらダメだったかもしれない。 井上亜星 Lean で本を執筆する 2025-11-30 19 / 22
課題 mdgen • mdgen で解答から問題を生成するのはいいが、そのあと「解答 から読者に見せるための解答説明を生成する」のはラムダノー トの編集者にやっていただいた。つまり手動 • 書籍のコードをまとめてサポートサイトを作る作業は手動でや る必要がある
井上亜星 Lean で本を執筆する 2025-11-30 20 / 22
最後にひとこと mdgen みなさんも、Lean の記事や本を書きましょう! 井上亜星 Lean で本を執筆する 2025-11-30 21 /
22
ご清聴ありがとうござい ました