自動証明・検証技術 • 論理(基礎) – 高階述語論理、ロジカル・フレームワーク – 時相論理 • 検証技術 – 証明支援系 – モデル検査系 計算システムの「正しさ」を 保証する理論や技術 • 対象(応用) – – – – ハードウェア プロトコル(セキュリティ関連を含む) ソフトウェア・アルゴリズム(特に並列・分散) プログラミング言語(例えばコンパイラ) 論理(基礎) • 高階述語論理 – ∀f. --- 任意の関数 f について… – 関数や述語に関する量化(∀∃)が可能な論理 • ロジカル・フレームワーク – 型付きλ計算 – カリー・ハワードの対応に従って、 証明をλ項で表現する。 – 依存型(dependent type)があると、 高階述語論理を表現することができる。 – 様々な論理を表現する枠組 論理の論理 カリー・ハワードの対応 • 命題 … 型 A⊃B … A→B AならばB … AからBへの関数の型 • 命題Aの証明 … Aを型として持つ項 A⊃Bの証明 … Aの証明をもらって Bの証明を返す関数 • 構成的な証明の考えに基づいている。 • 直観主義論理 依存型 • int[n]を大きさnの整数の配列の型とする。 • 例えば、非負整数nをもらって、 大きさnの整数の配列を返す関数の型? • int→int[n] … nが浮いている。 • Πn:int. int[n] … 関数をタプルと考えると自然。 • カリー・ハワードの対応では、 ∀n:int. int[n] に対応する。 • 依存関数型(依存直積) • 依存直和: Σn:int. int[n] … ∃n:int. int[n] 帰納的定義 • 多くの証明支援系には、 帰納的定義によって論理を拡張する機能が 備わっている。 • 型の帰納的定義 … 再帰的データ型 • 述語の帰納的定義 • カリー・ハワードの対応のもとでは同じ原理 再帰的データ型 • 自然数 – Oは自然数である。 – xが(既に作られた)自然数ならば、 s(x)も自然数である。 – 以上のようにして作られるもののみが 自然数である。 datatype NAT = O | s of NAT; ML load "Datatype"; open Datatype; Hol_datatype `NAT = O | s of NAT`; HOL 再帰的データ型 • 自然数を葉に持つ二分木 datatype BINTREE = leaf of NAT | cons of BINTREE*BINTREE; ML Hol_datatype `BINTREE = leaf of NAT | cons of BINTREE=>BINTREE`; HOL 述語の帰納的定義 • even(x)の定義 – even(O)が成り立つ。 – even(x)が成り立てば、 even(s(s(x)))も成り立つ。 – 以上のようにしてevenが導かれるときのみ、 evenが成り立つ。 load "IndDefLib"; open IndDefLib; new_simple_inductive_definition [ ``T ==> even O``, ``even x ==> even (s (s x))``]; HOL 帰納的述語の証明 • even(x)の証明 – even0はeven(O)の証明である。 – Xがeven(x)の証明ならば、 even1(x, X) – より正確にはeven1(x)(X) – は、 even(s(s(x)))の証明である。 – 以上のようにして作られるもののみが、 even(x)の証明である。 • even1の型は、 Πx:NAT. even(x) → even(s(s(x))) 再帰的データの構成に関する帰納法 • P(x)を自然数に関する述語とする。 – P(O)が成り立ち、 – 任意の自然数xに対して、 P(x)ならばP(s(x))が成り立てば、 任意の自然数xに対してP(x)が成り立つ。 • P(x)を二分木xに関する述語とする。 – 任意の自然数iに対してP(leaf(i))が成り立ち、 – 二分木xとyに対してP(x)かつP(y)ならば P(cons(x,y))も成り立てば、 任意の二分木xに対してP(x)が成り立つ。 帰納的述語の導出に関する帰納法 • 自然数の述語Pに関して、 – P(O)が成り立つ。 – P(x)が成り立つならば、P(s(s(x)))が成り立つ。 の二つの条件が満たされているならば、 任意の自然数xに対して、 even(x) ⊃ P(x) が成り立つ。 • even(x)の証明の構成に関する帰納法 論理(基礎) • 時相論理 – – – – – 時間の概念の入った論理 様相論理の一種 状態遷移系に関する言明 ◇P --- 将来、いつか必ず、P が成り立つ。 P until Q … Qが成り立つまで P が成り立ち続ける。 • 分類 – – – – 線形時間 --- ある決まった実行経路に関する言明 分岐時間 --- 実行経路全体に関する言明 実時間を扱える時相論理もある。 ハイブリッド系 確率的な状態遷移系を扱える時相論理もある。 線形時間と分岐時間 • 線形時間 – – – – ある決まった実行経路に関する言明 π: 実行経路 φ: 時相論理式 π|= φ: πにおいてφが成り立つ。 • 分岐時間 – – – – 各状態から始まる実行経路全体に関する言明 s : 状態 φ: 時相論理式 s |= EGφ: s から始まる実行経路が存在して、 その経路上の任意の状態においてφが成り立つ。 検証技術 • 証明支援系 – – – – – – 証明チェッカ 人間が書いた形式的な証明をチェックする。 半自動の自動証明機能 --- tactic 主として高階述語論理やロジカル・フレームワーク 汎用 --- 記述力は大きい。 システム例: • HOL、Isabelle、PVS • Coq、Mizar • 実はML(meta language)は、証明支援系を 実装するための言語なのであった。 検証技術 • 状態探索系 – 状態遷移系の全数探索を行うことにより、 安全性や活性(liveness)の検証を行う。全自動 – システム例: • Murφ • モデル検査系 – 時相論理の論理式が検証できる状態探索系 – 様々な時相論理 – システム例: • SMV … 分岐時間、記号モデル検査 • SPIN … 線形時間 状態遷移系の記述 • そもそも、状態遷移系を記述する枠組みは、 実に様々。 – 各種オートマトン – プロセス計算 • • • • CSP、Promela(SPINの記述言語) CCS、π計算 Ambient calculus --- 移動コード Spi calculus --- セキュリティ – 代数的枠組、カテゴリー理論 • coalgebra、hidden algebra、… – 多重集合書き換え(multiset rewriting) 記号モデル検査 • モデル検査の効率化技術 – 主として、分岐時間の時相論理 • 状態をブール変数の組で表す。 – 状態遷移は、遷移前状態の変数の組と、 遷移後状態の変数の組に関する述語: R(x,y) – 初期状態を表す述語: I(x) – すると、状態xで時相論理式φが成立することを表す 述語を、R と I とから構成できる。 • さらに、論理式をBDDで表現する。 – 類似した状態の計算を共有することができる。 対象(応用) • ハードウェア – 順序回路 • 分岐時間の時相論理 • モデル検査、特に記号モデル検査 – 非同期回路 • 実時間の入った時相論理 • 実時間記号モデル検査 対象(応用) • プロトコル・ソフトウェア・アルゴリズム (特に並列・分散) – – – – 状態遷移系としてモデル化 プロセス計算などを用いた記述 状態探索による検証・モデル検査 有限化の必要性 • 単純に大きさを制限する。 • 抽象化技術 対象(応用) • プログラミング言語 – 型システム • 例えば、型安全性、型保存性 • 証明支援系+帰納的定義 • 帰納的定義によって、意味論や型システムを定義。 – プログラム変換 • 変換前と変換後の等価性 • 上と同様 – コンパイラ • これも、広い意味でプログラム変換 事例 --- 並行ゴミ集め • 計算プロセスとゴミ集めのプロセスが、 並行に動く。 • On The Fly (Dijkstra '78) • Snapshot (Yuasa '90) • Very Concurrent GC (Huelsbergen and Winterbottom, ISMM'98) 事例 --- 並行ゴミ集め • モデル化 – システム全体の状態 • ヒープ – 各セルの内容 • プロセスの状態 – プログラム・カウンタ、レジスタ、… – 状態の変化の仕方 … 状態遷移 • 各プロセスがどのようにヒープを書き換え、 • どのようにその状態を変化させるか。 事例 --- 並行ゴミ集め • 検証条件 – 使用中のセルがゴミにならない。 – ゴミは必ずいつかは回収される。 • 検証 – 有限モデルの状態を網羅する。 – 完全に自動的な証明 • 資料 – http://nicosia.is.s.u-tokyo.ac.jp/members/hagiya.html – check.c – 並行ゴミ集めの簡単な検証プログラム 並行ゴミ集めのモデル C[4]F[4] R[0] R[1] 7 7 C[7]F[7] 6 C[6]F[6] R[2] 0 registers C[9]F[9] cells Heap 並行ゴミ集めのモデル • Registers – R : register_index → cell_index∪{0} • Heap – C : cell_index → colors – F : cell_index → cell_index∪{0} register_index = {1,2,…,m} cell_index = {1,2,…,n} colors = {Black,Gray,White,Free} The Mutator • R[i] := • R[i] := • R[i] := • R[i] := • F[R[i]] j (if C[j]=Free) 0 R[j] F[R[j]] := R[j] The Mutator R[i] := F[R[j]] (On The Fly) R[i] R[j] The Mutator F[R[i]] := R[j] (Snapshot) R[i] R[j] Side Effects • R[i] := j – C[j] = Gray (On The Fly) – C[j] = Black (Snapshot, VCGC) • R[i] := F[R[j]] – C[F[R[j]]] = Gray (On The Fly) • F[R[i]] := R[j] – C[F[R[i]]] = Gray (Snapshot) – M = M ∪ {R[i]} (VCGC) The Collector • collector のステップ collector_step = {shade, mark, append, unmark} •shade ルートから直接に指されているWhiteのセルを Grayにする。 •mark Grayのセルがあれば一つ選んでBlackに。 そこから指されているセルはGrayに。 Grayのセルがなければappendへ。 •append WhiteのセルをFreeに。 Whiteのセルがなければunmarkへ。 •unmark BlackかGrayのセルをWhiteに。 なければshadeへ。 The Collector • shade • mark 検証事項 • 安全性(safety) 『ルートから到達可能なセルが 回収される(Freeになる)ことはない。 』 • 活性(liveness) 『ルートから到達可能でなくなった セルは、いつかは回収される。 』 有限モデル検査 • Havelund (’96) • Bruns (’97) • 萩谷 (’98) ー 安全性 cell_index = {1, 2, 3} register_index = {1, 2, 3} 状態: 2 + 2 * 3 + (2 + 2) * 3 = 20 bits 到達可能状態: on the fly 257,730 snapshot 227,285 状態の抽象化 ー on the fly の安全性 • セルの抽象化 ー 抽象セル – – – – (セル自身の)色 ルートからの直接的な到達可能性 ルートからの到達可能性 参照しているセルの色 • 状態の抽象化 – collector のステップ – 抽象セルの(有限)集合 F T 抽象遷移 register T R0 T register T F T nil T abs_R0 F F F T F T nil F F nil 抽象化の正当性 具体遷移 s0 → s1 → s2 → … → sn 抽象遷移 t0 → t1 → t2 → … → tn If t is an abstraction of s and s → s’ , there exists t’ such that t’ is an abstraction of s’ and t → t’ . 抽象化の正当性を 証明支援系(HOL)で検証する試み • レジスタからの到達可能性の形式化 – 帰納的定義の利用 val direct_reachable_DEF = Define `direct_reachable (r:num->num option) (h:num->color#num option) k = ?i. (r i = SOME k)`; val (REACHABLE_thm1,REACHABLE_thm2,REACHABLE_thm3) = IndDefLib.new_simple_inductive_definition [ ``direct_reachable r h k ==> reachable r h k``, ``reachable (r:num->num option) (h:num->color#num option) k ∧ IS_SOME (field (h k)) ==> reachable r h (THE (field (h k)))``]; 抽象遷移の正当性の検証 val R0_safe = STORE_THM("R0_safe", ``!(s:step) (r:num->num option) (h:num->color#num option) s' r' h' i (as:step) (ah:color->color option->bool->bool->bool) as' ah'. R0 s r h s' r' h' i ∧ abs_R0 as ah as' ah' ∧ abstract_relation s r h as ah ==> abstract_relation s' r' h' as' ah'``, REPEAT GEN_TAC THEN STRIP_TAC THEN REWRITE_TAC [abstract_relation_DEF] THEN STRIP_TAC ... ... ... ... ... 事例 --- コンパイラ • モデル化 – – – – – ソース言語 ターゲット言語(機械語) 構文論 意味論 型システム • 帰納的定義 – SOS (Structured Operational Semantics) 事例 --- コンパイラ • 検証条件 – ソース・プログラムとターゲット・プログラムの 意味が同じ。 – 帰納的な述語を含む高階述語論理 • 検証 – 帰納的定義から導出される帰納法を用いた証明 – 高階述語論理の証明支援系(HOL) 小さなコンパイラの検証 • 資料 – http://nicosia.is.s.u-tokyo.ac.jp/members/hagiya.html – indnew • 帰納的定義と数学的帰納法の解説 • コンパイラの形式化 – theory_compiler.txt • 山本光晴氏によるHOLを用いた実際の検証 演習III課題(自動証明・検証) (1)自動証明・検証 – 計算システムの正しさを保証する技術に関して学びます. cf.計算機言語論 – 証明支援系(高階論理やλ計算をもとにした半自動的な証明 系) • 高階論理やλ計算,証明支援系の基礎に関する学習(文献購読など) • 適当な対象に対する証明の実験(コンパイラなど) – モデル検査(状態の全数探索による自動的な証明手法) • モデル検査の基礎(時相論理など)に関する学習(文献購読など) • 検証の実験 • 分散・並列アルゴリズム,ハードウェア(cache coherenceなど) – 検証系を利用したアルゴリズム探索の実験 – ハイブリッド系 • 実時間に依存するシステムの検証技術と応用例,検証の実験 • 確率的に振舞うシステムの検証技術と応用例,検証の実験 演習III課題(セキュリティ技術) (2)セキュリティ技術 – 検証技術の応用として,プログラミング言語のセキュリティや ネットワーク・セキュリティに関連した技術について学びます. cf.計算機言語論 – ネットワーク・セキュリティ • セキュリティ・プロトコルの検証技術に関する文献の購読 • 実際のプロトコルの解析や検証 – SSH、SSL、Kerberos、e-Commerce(SETなど)、Smart Card、… – SPKI、… – Anonymizer、… – Javaセキュリティ • Javaセキュリティに関する文献の購読 • バイトコード検証,ローディング制約,アクセス制御,情報漏洩 • 簡単なモデル上での検証の実験 認証プロトコルの解析と検証のための 形式的手法 • 有限状態解析(finite state analysis) – 計算機による自動的な解析 – 攻撃の可能性の探索 – 自動的な解析のために状態空間を有限に限定。 • 帰納的定義(inductive definition)に基づく証明 – プロトコルの実行の可能性を帰納的に定義 – 高階論理の証明支援系を用いて半自動化 • 様相論理(modal)を用いた分析 – BAN論理などのbelief logic – 直感的な議論を適切に表現可能 – モデルが明らかでない。完全性は成り立たない。 • 型とeffectによる解析 Needham-Schroederのプロトコルと その修正版 AB : {A,NA}KB BA : {NA,NB}KA AB : {NA}KB AB : {A,NA}KB BA : {B,NA,NB}KA AB : {NA}KB 色々なプロトコル AB : {A,NA}KB BA : {NA,NB}KA AB : {B,NA}KA -1 AB : {A,NA}KB BA : {{NA}KA, {B,NB}KA} AB : {NA,NB}KB BA : {Ack}NA 演習III課題(分子計算) (3)生命情報(分子計算) – 生物の持つ計算能力の解析,および,生物を用いた 新しい計算機(計算する人工生物)の可能性につい て探求します.cf.生命情報論 – 分子計算(DNA計算)に関する論文購読,シミュレー ション,実験? – 「検証・自動証明」との関連は小さいが、 • 並行計算としての分子反応のモデル化 • その解析・予測 • そのシミュレーション … ハイブリッド系 演習III課題(分子計算) • 最近のNatureやScienceなどの論文を読む。 • 実験技術に関して調べる。 – CRESTのプロジェクトに関連した実験 • 実験? – 希望があれば。見学は毎年やっている。 • 配列の設計 – 符号理論に基づく配列セットの設計 – 与えられた構造をとるような配列の設計 (inverse folding) CRESTのプロジェクトに関連 • 分子計算のシミュレーション
© Copyright 2024 ExpyDoc