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
F*でプログラムの正しさを証明する
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ushitora Anqou
August 08, 2021
Technology
1.2k
1
Share
F*でプログラムの正しさを証明する
セキュリティ・キャンプ全国大会2021 オンラインで行われたLT用のスライド資料です
Ushitora Anqou
August 08, 2021
More Decks by Ushitora Anqou
See All by Ushitora Anqou
Oblivious Online Monitoring for Safety LTL Specification via Fully Homomorphic Encryption
anqou
1
1k
「自作CPUでサイゼリヤ問題」を支える技術
anqou
2
380
ぼくのかんがえたさいきょうのマリオAI
anqou
1
620
10ステップで作るお手軽インタプリタ開発
anqou
3
1.1k
seccamp2018でセルフホストCコンパイラをつくった
anqou
8
5.8k
Other Decks in Technology
See All in Technology
分断された OT と IT を繋ぐ架け橋 -Kubernetes が切り拓く 産業用組み込み製品の現在地 -
yudaiono
1
120
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
570
可視化から活用へ — Mesh化・Segmentation・アライメントの研究動向
gpuunite_official
0
230
AI全盛の今だからこそ、あえてもう一度振り返るAPIの基礎
smt7174
3
130
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
1k
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
200
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
830
生成AI時代に信頼性をどう保ち続けるか - Policy as Code の実践
akitok_
1
490
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
ESP32 IoTを動かしながらメモリ使用量を観測してみた話
zozotech
PRO
0
150
20260516_SecJAWS_Days
takuyay0ne
2
470
Redmine次期バージョン7.0の注目新機能解説 — UI/UX強化と連携強化を中心に
vividtone
1
170
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
A better future with KSS
kneath
240
18k
KATA
mclloyd
PRO
35
15k
Designing for Timeless Needs
cassininazir
1
220
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
New Earth Scene 8
popppiees
3
2.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
700
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
570
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
520
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
F⋆ でプログラムの正しさを証明する 艮 鮟鱇(@ushitora_anqou) 2021 年 8 月 9 日
1
あなたが書いたそのプログラム、正しいですか? テストはプログラムの正しさを保証しない • テストした値では正しいと言える(かも) • テストしていない値では? • 入力値は加算無限個ある プログラムが「数学的に」正しいことを示したい •
プログラムの正しさを「証明」する • どんな入力に対しても正しく動作することを保証する プログラムの証明を人力でチェックする⋯⋯? 2
形式証明 証明の正しさを機械的に検証する • 証明を特殊なプログラムとして記述し、コンパイラに入力 • (コンパイラが間違っていなければ)コンパイルが通ると証 明が正しいことが分かる • こういうコンパイラを「証明支援系」と呼ぶ 背後には
Curry-Howard 同型対応などの理論がある⋯⋯ • ⋯⋯が今回は省略 • 気になる人は「計算と論理」で検索して五十嵐先生のスライ ドとかをチェック 3
F⋆ 最近出てきた証明支援系 • Microsoft Research や INRIA が作っている(2016 年~) •
依存型・篩型・エフェクトなどの格好いい機能がある • 証明をある程度省略して書いてもいい感じに推論して検証 してくれる • プログラミング言語 OCaml に酷似した文法 今日の主役 4
F⋆ 使われています HACL*:F⋆ で検証された暗号ライブラリ • TLS の実装を F⋆ で検証することを目標にしている(Project Everest)
• Firefox(ブラウザ)や Wireguard(VPN)や Tezos(暗号通 貨)に組み込まれている Plebeia:暗号通貨 Tezos 用のストレージシステム • F⋆ で実装が正しいことを保証 • 現在絶賛開発中 5
本日のお題:フィボナッチ数列 前項と前々項の和でできる数列 an =
1 (n = 0, 1) an−1 + an−2 (n ≥ 2) an = 1, 1, 2, 3, 5, 8, 13, . . . (n = 0, 1, 2, . . . ) 定理 n = 2, 3, 4, . . . について an ≥ n 6
日本語での証明 n に関する数学的帰納法により証明する。すなわち 1. a2 ≥ 2 かつ a3 ≥
3 を示す。 • 定義より a2 = 2 ≥ 2 かつ a3 = 3 ≥ 3 なのでこれは成り立つ。 2. 任意に n = 4, 5, 6, . . . をとり、an−2 ≥ n − 2 かつ an−1 ≥ n − 1 を仮定して an ≥ n を示す。 an = an−1 + an−2 (定義より) ≥ (n − 1) + (n − 2) (帰納法の仮定より) = (n + 1) + (n − 4) ≥ n + 1 (n ≥ 4 より) 7
F⋆ で証明する:fibの定義 まずフィボナッチ数列を計算する関数 fib を定義 8
F⋆ で証明する:定理の宣言 続いて示したい定理を宣言 定理 n = 2, 3, 4, .
. . について an ≥ n 9
F⋆ で証明する:証明をプログラムとして定義 何を書けばよいか • F⋆ は証明のかなりの部分を自動化してくれる • しかし帰納法をどう行えばよいかはまるっきり分からない • より具体的には「帰納法の仮定をどう使うか」
• 人間がヒントとして帰納法の仮定の使い方を教える必要 • プログラム上では再帰関数呼び出しとして表現される 10
F⋆ で証明する:証明をプログラムとして定義 11
F⋆ で証明する:検証結果 fstar.exe に食わせると証明が正しいことを検証できる F⋆ コードを OCaml コードに変換(コード抽出)することで、検 証された fib
関数を実行することができる • 今回は省略 12
Let’s write F⋆! 13