Formative System Engineering 書き換え型プログラムの生成・検証 「左辺を右辺に書き換える」規則の集まりで構成される、抽象的なプログラム プログラムの安全性の検証、効率の良いプログラムの自動生成等の研究の土台 書き換え型プログラム x, xs は 変数 [] = 空リスト x:xs = 先頭がx、残りがxs であるリスト 例: [1] = 1:[] [1,2,3] = 1:(2:(3:[])) dbl(0) dbl(x+1) sum([x]) sum(x:xs) dup([]) dup(x:xs) → → → → → → 0 dbl(x) + 2 x x + sum(xs) [] x:x:dup(xs) プログラムの生成 sum([x]) dbl(2) → → sum([3,5]) → dup([3,5]) → → dbl(1) + 2 dbl(0) + 2 + 2 → 0 + 2 + 2 → 4 3 + sum([5]) → 3 + 5 → 8 3:3:dup([5]) 3:3:5:5:dup([]) → [3,3,5,5] プログラムの検証 x + sum([]) 規則の追加 sum([]) → 0 x プログラムの実行例 x + 0 実行結果が一通りに定まるよう、 適切な規則を自動的に追加(完備化手続き) 生成・検証の両方において、既存の手法では 適切な戦略を指定する必要があり、使いにくい プログラムがどのような入力に対しても満たすべき性質(帰納的定理)を検証 例: dbl(x+y) = dbl(x) + dbl(y) sum(dup(xs)) = dbl(sum(xs)) sum(dup([3,5])) dbl(sum([3,5])) = = sum([3,3,5,5]) = 16 = dbl(8) x,y や xs が どのような値であって も、 両辺の実行結果が 等しくなる 「どのような入力に対してもプログラムが停止する」性質を利用した 数学的帰納法(書き換え帰納法)に基づき、上記定理を自動証明 研究課題:適切な実行戦略を効率よく探索する、 より自動化された手続きの実現
© Copyright 2024 ExpyDoc