comparison slide/slide.md @ 53:65391f6321a8

Add description for Delta
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Thu, 22 Jan 2015 10:49:27 +0900
parents 780eab85e724
children 40344cc2c590
comparison
equal deleted inserted replaced
52:780eab85e724 53:65391f6321a8
77 * Coq, ... 77 * Coq, ...
78 * 他の理論 78 * 他の理論
79 * Hoare Logic, Computational Tree Logic, ... 79 * Hoare Logic, Computational Tree Logic, ...
80 * どのようなカリキュラムが良いか? 80 * どのようなカリキュラムが良いか?
81 81
82 # Delta の詳細 82 # データ構造 Delta の定義
83 * TODO... 83 * Monad によってプログラムの変更を表す
84 * データ構造としては長さ1以上のリスト
85 * nil に相当するものが元のプログラムの値
86 * プログラムの変更は変更した後の値を List に追加する
87 * 全ての関数は Delta を返し、値は Delta によって定義する
88
89 ```
90 data Delta a = Mono a | Delta a (Delta a)
91 ```
92
93 # Delta に対する Monad の instance 定義
94 * return はバージョンが無いプログラムをバージョン1とする
95 * ``>>=`` は同じバージョンの値に対する計算を同時に行なう
96
97 ```
98 instance Monad Delta where
99 return x = Mono x
100 (Mono x) >>= f = f x
101 (Delta x d) >>= f = Delta (headDelta (f x))
102 (d >>= (tailDelta . f))
103 ```
104
105 # 元のプログラムとプログラムの変更
106 ![original_program](pictures/original_program.svg)
107
108 # Delta によって記述されたプログラムの実行
109 ![delta_program](pictures/delta_program.svg)
110
111 # Delta のメリット
112 * 全てのバージョンを同時に実行できる
113 * 任意のバージョンの組み合せを同時に実行できる
114 * デバッグに利用したり 通常系/検証系 として動かす
115 * Monad なので Category との対応がある
116 * 2 つのバージョンを選ぶことは Delta が持つプログラムの product
117 * 任意のバージョンを生成できる Colimit は Program の Repository
84 118
85 <style> 119 <style>
86 .slide.cover H2 { 120 .slide.cover H2 {
87 margin-top:72px; 121 margin-top:72px;
88 font-size:72px; 122 font-size:72px;