Submit Search
ソフトウェアの自動証明
•
Download as PPT, PDF
•
1 like
•
1,479 views
Yu Kobayashi
Follow
2011年3月8日のShibuya.jsで使用したスライド。詳細は http://d.hatena.ne.jp/yukoba/20110308/p1
Read less
Read more
1 of 21
Download now
Download to read offline
More Related Content
ソフトウェアの自動証明
1.
ソフトウェアの自動証明 @ 数学的厳密に
yukoba (小林 悠)
2.
挿入ソート 26315|4 2631|45
263|145 26|1345 2|13456 |123456
3.
sortInner if (ary.length
< 2) { return ary; } else { if (head(ary) < head(tail(ary))) { return ary; } else { return append(head(tail(ary)), sortInner(tail(swap(ary))); } }
4.
ソートの判定条件 左 <
右 : 今回はこれだけ証明 「ソート前」「ソート後」1対1対応
5.
isSorted if (ary.length
< 2) { return true; } else { return head(ary) < head(tail(ary)) && isSorted(head(ary)); }
6.
証明すること isSorted(sortInner(ARY)) =
true 前提条件 isSorted(tail(ARY)) = true 数学的帰納法 isSorted(sortInner(tail(ARY)))
7.
コードの表現方法 純粋関数型言語にした 副作用なし
コードは木構造になる ひたすら式を変形
8.
DOM & XPath
上手く行った戦略 木構造を DOM で表現 XPath を使ったら、楽にできるようになった!
9.
デモ
10.
証明戦略 指数関数的に分岐すると思ったら、一直線だった 優先順位
ノード数が減る変形。if 条件の伝搬。 if の親関数の繰り込み ノード数が増える変形(定義の代入)
11.
時間不足により ここからのスライドは未使用
12.
定義&公理 head(tail(swap(ary))) =
head(ary) tail(tail(swap(ary))) = tail(tail(ary)) tail(append(ary, v)) = ary head(append(ary, v)) = v if(true, a, b) = a if(false, a, b) = b if(a, b, b) = b a && true = a true && a = a
13.
定義のような定理(ズル) len(append(ary, v))
< 2 = false 連結すると長さは 2 以上になる
14.
前提条件 isSorted(tail(ARY)) =
true お尻はソート済み
15.
数学的帰納法 isSorted(sortInner(tail(ARY))) 長さ
n – 1 は証明済み
16.
上手く扱えなかった 数学的帰納法より head(tail(ARY))
< head(tail(tail(ARY))) tail(ARY) はソート済みだから tail(ARY)[0] < tail(ARY)[1] という事。 isSorted(sortInner(head(swap(ARY)))) head(swap(ARY)) は長さ n – 1 だから、数学的帰納法により証明済み
17.
if 条件の伝搬 if
(A, B, C) で Bの中でAを使っていたら、A = true Cの中でAを使っていたら、A = false 否定形も必要だった Bの中でnot Aを使っていたら、not A = false Cの中でnot Aを使っていたら、not A = true
18.
if の繰り込み f(A
? B : C) = A ? f(B) : f(C) ノードは複雑化する
19.
時間があれば 冒頭でしゃべりたかったスライド
20.
課題 JavaScript テスト
ネタ担当! 処理系関係
21.
全てのテストは サンプリングテストである by
@t_wada さん
Download