Upgrade to Pro — share decks privately, control downloads, hide ads and more …

F*でプログラムの正しさを証明する

 F*でプログラムの正しさを証明する

セキュリティ・キャンプ全国大会2021 オンラインで行われたLT用のスライド資料です

Ushitora Anqou

August 08, 2021
Tweet

More Decks by Ushitora Anqou

Other Decks in Technology

Transcript

  1. F⋆ 最近出てきた証明支援系 • Microsoft Research や INRIA が作っている(2016 年~) •

    依存型・篩型・エフェクトなどの格好いい機能がある • 証明をある程度省略して書いてもいい感じに推論して検証 してくれる • プログラミング言語 OCaml に酷似した文法 今日の主役 4
  2. F⋆ 使われています HACL*:F⋆ で検証された暗号ライブラリ • TLS の実装を F⋆ で検証することを目標にしている(Project Everest)

    • Firefox(ブラウザ)や Wireguard(VPN)や Tezos(暗号通 貨)に組み込まれている Plebeia:暗号通貨 Tezos 用のストレージシステム • F⋆ で実装が正しいことを保証 • 現在絶賛開発中 5
  3. 本日のお題:フィボナッチ数列 前項と前々項の和でできる数列 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
  4. 日本語での証明 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