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
定理証明をやろう
Search
Hiroki Tokunaga
July 22, 2025
Programming
0
74
定理証明をやろう
24th Dev #3 ~好きな技術シェア会~ のLTのスライドです。
Hiroki Tokunaga
July 22, 2025
Tweet
Share
More Decks by Hiroki Tokunaga
See All by Hiroki Tokunaga
RocqのProgram機構の紹介 〜型を活用した安全なプログラミング〜
_toku_san
0
6
Other Decks in Programming
See All in Programming
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
CSC307 Lecture 04
javiergs
PRO
0
660
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
並行開発のためのコードレビュー
miyukiw
0
1.1k
AtCoder Conference 2025
shindannin
0
1.1k
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
220
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
250
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
sira's awesome portfolio website redesign presentation
elsirapls
0
150
RailsConf 2023
tenderlove
30
1.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
So, you think you're a good person
axbom
PRO
2
1.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
How STYLIGHT went responsive
nonsquared
100
6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
定理証明をやろう Hiroki Tokunaga
自己紹介 名前 :Hiroki Tokunaga 仕事 :セキュリティエンジニア@DeNA 趣味 :Haskell、OCaml、Rocq、Lean 関数型まつり2025で登壇した X
:_toku_san GitHub :toku-sa-n 2
定理証明で「何」ができる? プログラムも数学も 形式化して ⇨ 証明できる! 3 ➕ 🗺 🛡 ⾜し算 四⾊定理 型安全性
▼ 機械的に確認できる例
どうやって? 定理証明⽀援系を使う 4
定理証明支援系? 定理証明を⾏うための ソフトウェア 5 例:Lean, Agda, Isabelle, F*, Rocq(旧称Coq)
スクリーンショット 6
Leanのコード例:リストを逆順にする def reverse : List α → List α |
[] => [] | h :: t => reverse t ++ [h] 7
Leanのコード例:2つのリストの結合の逆順 theorem reverse_app : ∀ (xs ys : List α),
reverse (xs ++ ys) = reverse ys ++ reverse xs := by intro xs ys induction xs with | nil => rewrite [List.nil_append, reverse, List.append_nil] rfl | cons h t ih => rewrite [reverse, ← List.append_assoc, ← ih] rfl 8
証明の流れ (1/13) theorem reverse_app : ∀ (xs ys : List
α), reverse (xs ++ ys) = reverse ys ++ reverse xs := by 9 α : Type u_1 ⊢ ∀ (xs ys : List α), reverse (xs ++ ys) = reverse ys ++ reverse xs
証明の流れ (2/13) intro xs ys 10 α : Type u_1
xs ys : List α ⊢ reverse (xs ++ ys) = reverse ys ++ reverse xs
証明の流れ (3/13) induction xs with 11 α : Type u_1
xs ys : List α ⊢ reverse (xs ++ ys) = reverse ys ++ reverse xs
証明の流れ (4/13) | nil => 12 α : Type u_1
ys : List α ⊢ reverse ([] ++ ys) = reverse ys ++ reverse []
証明の流れ (5/13) rewrite [List.nil_append, reverse, List.append_nil] 13 case nil α
: Type u_1 ys : List α ⊢ reverse ys = reverse ys ++ reverse [] List.nil_append : ∀ as, [] ++ as = as
証明の流れ (6/13) rewrite [List.nil_append, reverse, List.append_nil] 14 case nil α
: Type u_1 ys : List α ⊢ reverse ys = reverse ys ++ []
証明の流れ (7/13) rewrite [List.nil_append, reverse, List.append_nil] 15 case nil α
: Type u_1 ys : List α ⊢ reverse ys = reverse ys List.append_nil : ∀ as, as ++ [] = as
証明の流れ (8/13) rfl 16 Goals accomplished 🎉
証明の流れ (9/13) | cons h t ih => 17 case
cons α : Type u_1 ys : List α h : α t : List α ih : reverse (t ++ ys) = reverse ys ++ reverse t ⊢ reverse (h :: t ++ ys) = reverse ys ++ reverse (h :: t)
証明の流れ (10/13) rewrite [reverse, ← List.append_assoc, ← ih] 18 case
cons α : Type u_1 ys : List α h : α t : List α ih : reverse (t ++ ys) = reverse ys ++ reverse t ⊢ reverse (h :: t ++ ys) = reverse ys ++ (reverse t ++ [h])
証明の流れ (11/13) rewrite [reverse, ← List.append_assoc, ← ih] 19 case
cons α : Type u_1 ys : List α h : α t : List α ih : reverse (t ++ ys) = reverse ys ++ reverse t ⊢ reverse (h :: t ++ ys) = reverse ys ++ reverse t ++ [h] List.append_assoc : ∀ (as bs cs : List α), as ++ bs ++ cs = as ++ (bs ++ cs)
証明の流れ (12/13) rewrite [reverse, ← List.append_assoc, ← ih] 20 case
cons α : Type u_1 ys : List α h : α t : List α ih : reverse (t ++ ys) = reverse ys ++ reverse t ⊢ reverse (h :: t ++ ys) = reverse (t ++ ys) ++ [h]
証明の流れ (13/13) rfl 21 Goals accomplished 🎉
定理証明の活用例 22 🔒 HACL*[1] 🔨 seL4[3] - 暗号化ライブラリ - FirefoxのCurve25519実装で
使用[2] - F*で実装[1] - OS - 自動車などで使用[4] - Isabelleで実装[5] [1] https://github.com/hacl-star/hacl-star [2] https://blog.mozilla.org/security/2020/07/06/performance-improvements-via-formally-verified-cryptography-in-firefox/ [3] https://sel4.systems/ [4] https://sel4.systems/use.html [5] https://sel4.systems/Verification/proofs.html
定理証明をやってみたい? Rocq Software Foundations (特に第⼀巻のLogical Foundations ) Lean Theorem Proving
in Lean 4 Functional Programming in Lean 23