講演資料


講義資料スライドの表紙

講義資料スライドの表紙です。スライド画像、または下の要約文中の青いページ番号リンクをクリックすると、別のタブで無駄なノイズのない、純粋なPDFビューア画面が起動し、指定されたページへ直接ジャンプして快適に閲覧できます。

全体概要

本セミナーが中心に据える「問い」は、「ソフトウェアとハードウェアの正しさを、どのようにして数学的に保証できるか」というものです。現代のITシステムは社会インフラとして深く浸透しており、航空機・金融・医療・軍事といったあらゆる領域で大規模かつ複雑な分散システムが稼働しています。しかし現状では、そのほとんどのコードは信頼性の数学的チェックを受けていません [p.78]。「テスト・デバッグ・コードレビュー」という開発者中心のサイクルだけでは、潜在的なバグや脆弱性への根本的な対応は不可能であるというのが、本セミナーの出発点となる問題意識です [p.78]

この問題意識を深掘りするために、第一部では航空機事故(ボーイング737MAXの墜落)[p.16]、分散システムのトラブル(みずほ銀行・ニューヨーク証券取引所)[p.29]、CPUの脆弱性(SpectreとMeltdown)[p.37]、開発コストの高騰 [p.44]、そしてCコンパイラー自身のバグ [p.65] といった現実の問題群が丁寧に提示されます。これらは単なる事故の羅列ではなく、「仕様のバグか実装のバグか」「人間と機械の時間のギャップ」「ツール自体の信頼性」という、ソフトウェア・エンジニアリングの本質的弱点を多角的に照射するための布石です。

第二部では、これらの問題への根本的な応答として「Deep Specification」という新潮流が紹介されます。これは、Coq証明支援システムを中核言語(Lingua Franca)として、ハードウェア・コンパイラー・OSカーネル・ネットワーク・アプリケーションにわたる検証済みコンポーネントを、「豊かで(rich)、二面を持ち(two-sided)、形式的で(formal)、コンピュータで証明可能な(live)」仕様によって結合することを目指す試みです [p.90], [p.91]。CertiKOS、CompCert、Kami、Verdiといった具体的なプロジェクトが走っており、単なるアカデミックな理論実験に留まらない実践的な成果を上げています。

第三部では、「形式的手法」の方法論的起源が計算機科学(ホーア、ダイクストラ)と論理学・数学(ハワード、マーチン・レフ)の二つに遡ることが示され [p.182]、20世紀に「プログラム検証は必ず失敗する」と断じた論争の歴史を経て [p.186]、ダイクストラの「証明が与えられているとき、そこからプログラムを導く方が、プログラムから証明を構成するよりはるかに簡単だ」という遺言的洞察 [p.199] が、Deep Specificationの精神的基盤として再確認されます。1980年代に萌芽した形式的手法の夢が、Coqというツールとともに21世紀に復活しつつあるという歴史的位置づけが、本セミナーの大きな結論となっています [p.6]


講義のロードマップ

■ Part 1: 大規模システム開発の問題

  • この部の核心:

現代の大規模システム開発が内包するリスクを、航空・金融・ハードウェア・コスト・速度・ツールの六つの観点から具体的に提示します。これらの事例は「大規模化・分散化・複雑化」というシステムの構造的変化が、既存の開発手法では対処しきれない本質的な問題を生み出していることを示す証拠として機能しています。「仕様のバグか実装のバグか」という問い [p.21] が、第二部への橋渡しとなります。

  • 論理展開:
  • ボーイング737MAXの墜落はMCAS(操縦特性補正システム)のAoAセンサー故障時の処理設計という「仕様」レベルの問題を示唆し、開発の外注体制とも絡んで「仕様と実装の責任分界」を問います [p.16], [p.18], [p.21]
  • 分散システムの本質的難しさとして、Partial Failure(一部ノードの死亡・メッセージ未達)への正確な対処が不可欠であり、一般企業も意図せず分散システムを構築している現代の危うさが指摘されます [p.25], [p.28], [p.32]
  • CPUのSpectre/Meltdown脆弱性は、投機的実行という性能最適化実装の副作用を検証しきれなかった結果であり、「仕様の正当性チェックの不在」という問題の深刻さを象徴します [p.37], [p.38], [p.41]
  • Cコンパイラー全てにバグが存在することを示したCsmith [p.65] と、Coqで検証されCompCertが唯一バグを発見されなかったという事実 [p.70] が、「開発ツール自体の信頼性」という問題と形式的手法の有効性を鮮やかに対比させます。


■ Part 2: Deep Specificationの世界

  • この部の核心:

第一部の問題群への根本的応答として、「プログラムの正しさを機械がチェックする数学的証明によって保証する」という新しい開発パラダイム「Deep Specification」を紹介します。個別コンポーネントの検証に留まらず、コンポーネント間の仕様を「二面(two-sided)」で接続し、システム全体の正しさを証明可能にするという点が従来の形式的手法との決定的な違いです [p.89], [p.96]

  • 論理展開:
  • 近未来の開発者は「テスト→デバッグ→コードレビュー」サイクルを、「仕様の形式記述→証明エンジンによる証明→証明チェッカーによる検証」に置き換えるというビジョンが示されます [p.82], [p.83], [p.84]
  • Deep Specの四条件(rich / two-sided / formal / live)[p.91] のうち「two-sided」が特に重要であり、CertiKOSとCompCertが別々に証明されても、双方が使うC言語仕様が不整合では全体の証明が成立しないというCompositionの難しさ [p.97], [p.98], [p.102] が核心的課題として示されます。
  • 具体的プロジェクトとして、Coqベースのハードウェア検証フレームワークKami(RISC-V仕様から動作するBlueSpecコードを生成・証明)[p.131]、分散システムの形式検証フレームワークVerdi [p.137]、検証済みWebサーバー構築プロジェクトDeepSpec Web Server [p.153] が紹介されます。
  • Feit-Thompson定理のCoq証明(15,000の定義、17万行、6年間の作業)[p.162] との比較を交えつつ、Software Foundations(全4巻)[p.207], [p.208] という学習基盤の整備により、Deep Specアプローチが産業界へ広がる準備が整いつつあることが示されます。


■ Part 3: プログラムと論理

  • この部の核心:

現代の形式的手法の知的系譜を、計算機科学(ホーア・ダイクストラ・ランポート)と論理学・数学(ハワード・マーチン・レフ)という二つの起源から辿ります [p.182]。20世紀の「プログラム検証は必ず失敗する」という論争の歴史を振り返りつつ、ダイクストラの遺言的文書が指し示す原則が、Deep Specificationの精神的基盤と完全に一致することを確認します。

  • 論理展開:
  • 1979年のDe Millo, Lipton, Perlisによる論文が「プログラム検証は社会的プロセスを欠くがゆえに失敗する」と断じ [p.186], [p.191]、ランポートが即座に抗議したという論争が、形式的手法への根強い懐疑論の歴史的背景を示します [p.187], [p.188]
  • ダイクストラの最晩年(2001年)の文書「ライプニッツの夢の魔力の下で」[p.196] から、「全ての場合を尽くすテストが不可能な時、信頼は証明の上にのみ基礎付けられる」「証明から出発してプログラムを導く方が逆より遥かに簡単だ」という四つの命題 [p.199] が、Deep Specの設計哲学の直接的な先駆けとして再評価されます。
  • Coqは1984年にINRIAで開発が開始され [p.201]、四色問題(2004年)[p.162] やFeit-Thompson定理(2013年)[p.162] の証明を達成した実績を持ち、Deep Specificationプロジェクト全体の共通基盤(Lingua Franca)として機能しています [p.200]