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.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
390
ぼくのかんがえたさいきょうのマリオAI
anqou
1
630
10ステップで作るお手軽インタプリタ開発
anqou
3
1.2k
seccamp2018でセルフホストCコンパイラをつくった
anqou
8
5.8k
Other Decks in Technology
See All in Technology
plamo-3-translateの開発
pfn
PRO
0
280
モダンフロントエンド 開発研修
recruitengineers
PRO
1
300
SmartHR Engineering Team Deck
smarthr
0
190
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
3
380
Atlassian Cloudサポート業務でのAIエージェント活用事例
smt7174
0
410
ラジオの科学
frievea
0
200
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
440
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
200
事業価値と Engineering 2026年度版
recruitengineers
PRO
28
15k
第3回しろおびセキュリティスポンサーセッション
log0417
0
140
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
460
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
710
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building the Perfect Custom Keyboard
takai
2
830
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
290
Typedesign – Prime Four
hannesfritz
42
3.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
GraphQLとの向き合い方2022年版
quramy
50
15k
Exploring anti-patterns in Rails
aemeredith
3
450
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
ラッコキーワード サービス紹介資料
rakko
1
4.2M
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
420
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
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