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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ushitora Anqou
August 08, 2021
Technology
1
1.2k
F*でプログラムの正しさを証明する
セキュリティ・キャンプ全国大会2021 オンラインで行われたLT用のスライド資料です
Ushitora Anqou
August 08, 2021
Tweet
Share
More Decks by Ushitora Anqou
See All by Ushitora Anqou
Oblivious Online Monitoring for Safety LTL Specification via Fully Homomorphic Encryption
anqou
1
970
「自作CPUでサイゼリヤ問題」を支える技術
anqou
2
370
ぼくのかんがえたさいきょうのマリオAI
anqou
1
610
10ステップで作るお手軽インタプリタ開発
anqou
3
1.1k
seccamp2018でセルフホストCコンパイラをつくった
anqou
8
5.7k
Other Decks in Technology
See All in Technology
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
120
Phase10_組織浸透_データ活用
overflowinc
0
1.8k
AI時代のオンプレ-クラウドキャリアチェンジ考
yuu0w0yuu
0
240
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
110
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
150
Phase09_自動化_仕組み化
overflowinc
0
1.8k
CREがSLOを握ると 何が変わるのか
nekomaho
0
120
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
140
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
2
1.7k
ThetaOS - A Mythical Machine comes Alive
aslander
0
200
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
450
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
330
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
210
Code Review Best Practice
trishagee
74
20k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
280
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
980
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
470
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