卒論キックオフ 2002年10月16日 理工学部情報学科4年 圷 弘明 検証が必要な理由 安全性 プログラムの性質の把握 実際に証明しなければ安全であるとはいえない デバッグの際に役立つ 最適化への応用 コンパイラに検証系を用いる 項書き換えシステム 書き換え規則(単方向)の集合として定 義される さまざまな分野で広く用いられている 自動定理証明 関数型、論理型言語 代数的仕様記述 記号処理など 項書き換えシステムの例 自然数の加算(自然数:0,s(0),s(s(0)),・・・) 初期状態 s(0)+s(s(0)) の場合 x+0 → x x+s(y) → s(x+y) (1+2) s(0)+s(s(0)) → s(s(0)+s(0)) → s(s(s(0)+0)) → s(s(s(0))) 停止性、合流性を満たす(完備性) 停止性・合流性 停止性を証明する手段(実際は決定不能) データに対して自然数を返すある関数を定義し、デー タにルールを1回適応するたびにその関数の値が単 調に減少するようにする 前例の場合は Rank(n)=yに当てはまる数+1∨yに当てはまらない場合 0 合流性を証明する手段 Knuth-Bendixの合流条件 すべての危険対が収束する⇔合流性成立 前例の場合は危険対が存在しない 書き換えの合流性 乗算のルールを追加 x+0 → x x+s(y) → s(x+y) x*0 → 0 x*s(y) → (x*y)+x (s(0)*0)+(s(0)+0) 0+(s(0)+0) (s(0)*0)+s(0) 0+s(0) s((s(0)*0)+0) s(0+0) s(s(0)*0) s(0) ルールの適応の仕方が何通りもある 合流性が自明でない LMNtalの検証(やってみたこと) append(X0,Y,Z0),c(A,X,X0) :c(A,Z,Z0),append(X,Y,Z) append(X0,Y,Z0),n(X0) :- Y=Z0 a 1 2 3 4 c c c c c c c n 5 6 7 n appendの検証 初期状態 a(c(1,c(2,c(3,c(4,n)))),c(5,c(6,c(7,n)))) 書き換え規則 { a(c(A,X),Y) → c(a(X,Y),A) a(n,Y) → Y ※ これは自然数の加算の書き換えシステムと 同じである { n+x → x C(z,x)+y → c(z,x+y) 2次元グリッド grid(X,Y,*,*),grid(*,n,X,*),grid(n,*,*,Y) → grid(X,Y,*,*),grid(*,A,X,*),grid(B,*,*,Y),grid(n,n,B,A) ※nはNILLへのリンクを表す略記、*は重要でないリンクの略記 書き換え規則 目的状態 初期状態 2次元グリッドの検証 停止性証明のためのデータの定量化が難しい 要素の数で考えると失敗する 危険対が存在するので合流性は自明でない うまく定量化する方法を検討中 なるべくグラフであるという点を生かしたい 卒論のテーマ LMNtalにおいて停止性や合流性の一般的な 検証方法を模索する appendの結合則などの数学的に難しい証明 型体系の理論 わかりやすい証明 参考文献 Termination of CHR Constraint Solvers Thom Fruhwirth (1999) プログラム検証論 情報数学講座8 共立出版 林晋 完備化による等式証明 人工知能学会誌16巻5号 外山芳人
© Copyright 2025 ExpyDoc