Mercurial > hg > Members > atton > delta_monad
comparison agda/delta.agda @ 63:474ed34e4f02
proving monad-law-1 ...
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 25 Nov 2014 17:33:06 +0900 |
parents | 0f308ddd6136 |
children | 15eec529dfc4 |
comparison
equal
deleted
inserted
replaced
62:0f308ddd6136 | 63:474ed34e4f02 |
---|---|
89 ≡⟨ cong (\d -> delta (f x) d) (delta-append-natural-transfomation f d dd) ⟩ | 89 ≡⟨ cong (\d -> delta (f x) d) (delta-append-natural-transfomation f d dd) ⟩ |
90 delta (f x) (fmap f (deltaAppend d dd)) | 90 delta (f x) (fmap f (deltaAppend d dd)) |
91 ≡⟨ refl ⟩ | 91 ≡⟨ refl ⟩ |
92 fmap f (deltaAppend (delta x d) dd) | 92 fmap f (deltaAppend (delta x d) dd) |
93 ∎ | 93 ∎ |
94 | 94 {- |
95 | 95 |
96 mu-head-delta : {l : Level} {A : Set l} -> (d : Delta (Delta A)) -> mu (headDelta d) ≡ headDelta (mu d) | 96 mu-head-delta : {l : Level} {A : Set l} -> (d : Delta (Delta A)) -> mu (headDelta d) ≡ headDelta (mu d) |
97 mu-head-delta (mono (mono x)) = refl | 97 mu-head-delta (mono (mono x)) = refl |
98 mu-head-delta (mono (delta x (mono xx))) = begin | 98 mu-head-delta (mono (delta x (mono xx))) = begin |
99 mu (headDelta (mono (delta x (mono xx)))) | 99 mu (headDelta (mono (delta x (mono xx)))) |
118 ≡⟨ refl ⟩ | 118 ≡⟨ refl ⟩ |
119 headDelta (mu (mono (delta x (mono xx)))) | 119 headDelta (mu (mono (delta x (mono xx)))) |
120 ∎ | 120 ∎ |
121 mu-head-delta (mono (delta x (delta x₁ d))) = {!!} | 121 mu-head-delta (mono (delta x (delta x₁ d))) = {!!} |
122 mu-head-delta (delta d dd) = {!!} | 122 mu-head-delta (delta d dd) = {!!} |
123 | 123 -} |
124 -- Functor-laws | 124 -- Functor-laws |
125 | 125 |
126 -- Functor-law-1 : T(id) = id' | 126 -- Functor-law-1 : T(id) = id' |
127 functor-law-1 : {l : Level} {A : Set l} -> (d : Delta A) -> (fmap id) d ≡ id d | 127 functor-law-1 : {l : Level} {A : Set l} -> (d : Delta A) -> (fmap id) d ≡ id d |
128 functor-law-1 (mono x) = refl | 128 functor-law-1 (mono x) = refl |
134 (fmap (f ∙ g)) d ≡ ((fmap f) ∙ (fmap g)) d | 134 (fmap (f ∙ g)) d ≡ ((fmap f) ∙ (fmap g)) d |
135 functor-law-2 f g (mono x) = refl | 135 functor-law-2 f g (mono x) = refl |
136 functor-law-2 f g (delta x d) = cong (delta (f (g x))) (functor-law-2 f g d) | 136 functor-law-2 f g (delta x d) = cong (delta (f (g x))) (functor-law-2 f g d) |
137 | 137 |
138 -- Monad-laws (Category) | 138 -- Monad-laws (Category) |
139 {- | 139 |
140 monad-law-1-4 : {l : Level} {A : Set l} -> (ds : Delta (Delta A)) -> | |
141 tailDelta (bind ds (tailDelta ∙ id)) ≡ bind (tailDelta ds) (tailDelta ∙ tailDelta) | |
142 monad-law-1-4 (mono ds) = refl | |
143 monad-law-1-4 (delta (mono x) ds₁) = refl | |
144 monad-law-1-4 (delta (delta x (mono x₁)) ds₁) = refl | |
145 monad-law-1-4 (delta (delta x (delta x₁ ds)) ds₁) = refl | |
146 | |
147 monad-law-1-3 : {l : Level} {A : Set l} -> (ds : Delta (Delta A)) -> | |
148 tailDelta (bind ds tailDelta) ≡ bind (tailDelta ds) (tailDelta ∙ tailDelta) | |
149 monad-law-1-3 (mono ds) = refl | |
150 monad-law-1-3 (delta (mono x) ds) = refl | |
151 monad-law-1-3 (delta (delta x (mono x₁)) ds) = refl | |
152 monad-law-1-3 (delta (delta x (delta x₁ d)) ds) = refl | |
153 | |
154 monad-law-1-sub-sub : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> | |
155 bind (fmap mu d) (tailDelta ∙ tailDelta) ≡ bind (bind d (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
156 monad-law-1-sub-sub (mono (mono d)) = refl | |
157 monad-law-1-sub-sub (mono (delta (mono x) ds)) = begin | |
158 bind (fmap mu (mono (delta (mono x) ds))) (tailDelta ∙ tailDelta) | |
159 ≡⟨ refl ⟩ | |
160 bind (mono (mu (delta (mono x) ds))) (tailDelta ∙ tailDelta) | |
161 ≡⟨ refl ⟩ | |
162 bind (mono (bind (delta (mono x) ds) id)) (tailDelta ∙ tailDelta) | |
163 ≡⟨ refl ⟩ | |
164 bind (mono (deltaAppend (headDelta (mono x)) (bind ds tailDelta))) (tailDelta ∙ tailDelta) | |
165 ≡⟨ refl ⟩ | |
166 bind (mono (deltaAppend (mono x) (bind ds tailDelta))) (tailDelta ∙ tailDelta) | |
167 ≡⟨ refl ⟩ | |
168 bind (mono (delta x (bind ds tailDelta))) (tailDelta ∙ tailDelta) | |
169 ≡⟨ refl ⟩ | |
170 (tailDelta ∙ tailDelta) (delta x (bind ds tailDelta)) | |
171 ≡⟨ refl ⟩ | |
172 tailDelta (bind ds tailDelta) | |
173 ≡⟨ monad-law-1-3 ds ⟩ -- ? | |
174 bind (tailDelta ds) (tailDelta ∙ tailDelta) | |
175 ≡⟨ refl ⟩ | |
176 bind ((tailDelta ∙ tailDelta) (delta (mono x) ds)) (tailDelta ∙ tailDelta) | |
177 ≡⟨ refl ⟩ | |
178 bind (bind (mono (delta (mono x) ds)) (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
179 ≡⟨ refl ⟩ | |
180 bind (bind (headDelta (tailDelta (mono (delta (mono x) ds)))) (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
181 ≡⟨ refl ⟩ | |
182 bind (bind (mono (delta (mono x) ds)) (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
183 ∎ | |
184 monad-law-1-sub-sub (mono (delta (delta x (mono x₁)) ds)) = begin | |
185 bind (fmap mu (mono (delta (delta x (mono x₁)) ds))) (tailDelta ∙ tailDelta) | |
186 ≡⟨ refl ⟩ | |
187 bind (mono (mu (delta (delta x (mono x₁)) ds))) (tailDelta ∙ tailDelta) | |
188 ≡⟨ refl ⟩ | |
189 (tailDelta ∙ tailDelta) (mu (delta (delta x (mono x₁)) ds)) | |
190 ≡⟨ refl ⟩ | |
191 (tailDelta ∙ tailDelta) (bind (delta (delta x (mono x₁)) ds) id) | |
192 ≡⟨ refl ⟩ | |
193 (tailDelta ∙ tailDelta) (deltaAppend (headDelta (delta x (mono x₁))) (bind ds (tailDelta ∙ id))) | |
194 ≡⟨ refl ⟩ | |
195 (tailDelta ∙ tailDelta) (deltaAppend (mono x) (bind ds (tailDelta ∙ id))) | |
196 ≡⟨ refl ⟩ | |
197 (tailDelta ∙ tailDelta) (delta x (bind ds (tailDelta ∙ id))) | |
198 ≡⟨ refl ⟩ | |
199 tailDelta (bind ds (tailDelta ∙ id)) | |
200 ≡⟨ monad-law-1-4 ds ⟩ | |
201 bind (tailDelta ds) (tailDelta ∙ tailDelta) | |
202 ≡⟨ refl ⟩ | |
203 bind ((tailDelta ∙ tailDelta) (delta (delta x (mono x₁)) ds)) (tailDelta ∙ tailDelta) | |
204 ≡⟨ refl ⟩ | |
205 bind (bind (mono (delta (delta x (mono x₁)) ds)) (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
206 ∎ | |
207 monad-law-1-sub-sub (mono (delta (delta x (delta xx d)) ds)) = begin | |
208 bind (fmap mu (mono (delta (delta x (delta xx d)) ds))) (tailDelta ∙ tailDelta) | |
209 ≡⟨ refl ⟩ | |
210 bind (mono (mu (delta (delta x (delta xx d)) ds))) (tailDelta ∙ tailDelta) | |
211 ≡⟨ refl ⟩ | |
212 (tailDelta ∙ tailDelta) (mu (delta (delta x (delta xx d)) ds)) | |
213 ≡⟨ {!!} ⟩ -- ? | |
214 bind (bind (mono (delta (delta x (delta xx d)) ds)) (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta) | |
215 ∎ | |
216 monad-law-1-sub-sub (delta d ds) = {!!} | |
217 | |
218 | |
219 monad-law-1-sub : {l : Level } {A : Set l} -> (x : Delta (Delta A)) -> (d : Delta (Delta (Delta A))) -> | |
220 deltaAppend (headDelta (mu x)) (bind (fmap mu d) tailDelta) ≡ mu (deltaAppend (headDelta x) (bind d tailDelta)) | |
221 monad-law-1-sub (mono (mono _)) (mono (mono _)) = refl | |
222 monad-law-1-sub (mono (mono _)) (mono (delta (mono _) _)) = refl | |
223 monad-law-1-sub (mono (mono _)) (mono (delta (delta _ _) _)) = refl | |
224 monad-law-1-sub (mono (mono x)) (delta (mono (mono xx)) d) = begin | |
225 deltaAppend (headDelta (mu (mono (mono x)))) (bind (fmap mu (delta (mono (mono xx)) d)) tailDelta) | |
226 ≡⟨ refl ⟩ | |
227 deltaAppend (headDelta (mu (mono (mono x)))) (bind (delta (mu (mono (mono xx))) (fmap mu d)) tailDelta) | |
228 ≡⟨ refl ⟩ | |
229 deltaAppend (headDelta (bind (mono (mono x)) id)) (bind (delta (mu (mono (mono xx))) (fmap mu d)) tailDelta) | |
230 ≡⟨ refl ⟩ | |
231 deltaAppend (headDelta (mono x)) (bind (delta (mu (mono (mono xx))) (fmap mu d)) tailDelta) | |
232 ≡⟨ refl ⟩ | |
233 deltaAppend (headDelta (mono x)) (bind (delta (mono xx) (fmap mu d)) tailDelta) | |
234 ≡⟨ refl ⟩ | |
235 deltaAppend (mono x) (bind (delta (mono xx) (fmap mu d)) tailDelta) | |
236 ≡⟨ refl ⟩ | |
237 deltaAppend (mono x) (bind (delta (mono xx) (fmap mu d)) tailDelta) | |
238 ≡⟨ refl ⟩ | |
239 deltaAppend (mono x) (deltaAppend (tailDelta (mono xx)) (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
240 ≡⟨ refl ⟩ | |
241 deltaAppend (mono x) (deltaAppend (mono xx) (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
242 ≡⟨ refl ⟩ | |
243 deltaAppend (mono x) (deltaAppend (mu (mono (mono xx))) (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
244 ≡⟨ refl ⟩ | |
245 deltaAppend (mono x) (deltaAppend (mono xx) (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
246 ≡⟨ refl ⟩ | |
247 delta x (deltaAppend (mono xx) (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
248 ≡⟨ refl ⟩ | |
249 delta x (delta xx (bind (fmap mu d) (tailDelta ∙ tailDelta))) | |
250 ≡⟨ cong (\d -> (delta x (delta xx d))) (monad-law-1-sub-sub d) ⟩ -- ??? | |
251 delta x (delta xx (bind (bind d (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta))) | |
252 ≡⟨ refl ⟩ | |
253 delta x ((deltaAppend (mono xx) (bind (bind d (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta)))) | |
254 ≡⟨ refl ⟩ | |
255 delta x ((deltaAppend (tailDelta (mono xx)) (bind (bind d (tailDelta ∙ tailDelta)) (tailDelta ∙ tailDelta)))) | |
256 ≡⟨ refl ⟩ | |
257 delta x (bind (delta (mono xx) (bind d (tailDelta ∙ tailDelta))) tailDelta) | |
258 ≡⟨ refl ⟩ | |
259 delta x (bind (deltaAppend (mono (mono xx)) (bind d (tailDelta ∙ tailDelta))) tailDelta) | |
260 ≡⟨ refl ⟩ | |
261 delta x (bind (deltaAppend (headDelta (tailDelta (mono (mono xx)))) (bind d (tailDelta ∙ tailDelta))) tailDelta) | |
262 ≡⟨ refl ⟩ | |
263 delta x (bind (bind (delta (mono (mono xx)) d) tailDelta) tailDelta) | |
264 ≡⟨ refl ⟩ | |
265 deltaAppend (mono x) (bind (bind (delta (mono (mono xx)) d) tailDelta) tailDelta) | |
266 ≡⟨ refl ⟩ | |
267 bind (delta (mono x) (bind (delta (mono (mono xx)) d) tailDelta)) id | |
268 ≡⟨ refl ⟩ | |
269 mu (delta (mono x) (bind (delta (mono (mono xx)) d) tailDelta)) | |
270 ≡⟨ refl ⟩ | |
271 mu (deltaAppend (mono (mono x)) (bind (delta (mono (mono xx)) d) tailDelta)) | |
272 ≡⟨ refl ⟩ | |
273 mu (deltaAppend (headDelta (mono (mono x))) (bind (delta (mono (mono xx)) d) tailDelta)) | |
274 ∎ | |
275 monad-law-1-sub (mono (mono x)) (delta (mono (delta x₁ d)) d₁) = {!!} | |
276 monad-law-1-sub (mono (mono x)) (delta (delta d d₁) d₂) = {!!} | |
277 monad-law-1-sub (mono (delta x x₁)) d = {!!} | |
278 monad-law-1-sub (delta x x₁) d = {!!} | |
279 | |
140 -- monad-law-1 : join . fmap join = join . join | 280 -- monad-law-1 : join . fmap join = join . join |
141 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d) | 281 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d) |
142 monad-law-1 (mono d) = refl | 282 monad-law-1 (mono d) = refl |
283 monad-law-1 (delta x d) = begin | |
284 (mu ∙ (fmap mu)) (delta x d) | |
285 ≡⟨ refl ⟩ | |
286 mu (fmap mu (delta x d)) | |
287 ≡⟨ refl ⟩ | |
288 mu (delta (mu x) (fmap mu d)) | |
289 ≡⟨ refl ⟩ | |
290 bind (delta (mu x) (fmap mu d)) id | |
291 ≡⟨ refl ⟩ | |
292 deltaAppend (headDelta (mu x)) (bind (fmap mu d) tailDelta) | |
293 ≡⟨ monad-law-1-sub x d ⟩ | |
294 mu (deltaAppend (headDelta x) (bind d tailDelta)) | |
295 ≡⟨ refl ⟩ | |
296 mu (bind (delta x d) id) | |
297 ≡⟨ refl ⟩ | |
298 mu (mu (delta x d)) | |
299 ≡⟨ refl ⟩ | |
300 (mu ∙ mu) (delta x d) | |
301 ∎ | |
302 | |
303 -- split d | |
304 {- | |
143 monad-law-1 (delta x (mono d)) = begin | 305 monad-law-1 (delta x (mono d)) = begin |
306 | |
144 (mu ∙ fmap mu) (delta x (mono d)) | 307 (mu ∙ fmap mu) (delta x (mono d)) |
145 ≡⟨ refl ⟩ | 308 ≡⟨ refl ⟩ |
146 mu (fmap mu (delta x (mono d))) | 309 mu (fmap mu (delta x (mono d))) |
147 ≡⟨ refl ⟩ | 310 ≡⟨ refl ⟩ |
148 mu (delta (mu x) (mono (mu d))) | 311 mu (delta (mu x) (mono (mu d))) |
150 bind (delta (mu x) (mono (mu d))) id | 313 bind (delta (mu x) (mono (mu d))) id |
151 ≡⟨ refl ⟩ | 314 ≡⟨ refl ⟩ |
152 deltaAppend (headDelta (mu x)) (bind (mono (mu d)) tailDelta) | 315 deltaAppend (headDelta (mu x)) (bind (mono (mu d)) tailDelta) |
153 ≡⟨ refl ⟩ | 316 ≡⟨ refl ⟩ |
154 deltaAppend (headDelta (mu x)) (tailDelta (mu d)) | 317 deltaAppend (headDelta (mu x)) (tailDelta (mu d)) |
155 ≡⟨ cong (\de -> deltaAppend de (tailDelta (mu d))) (head-delta-natural-transformation {!!} {!!}) ⟩ | |
156 deltaAppend (mu (headDelta x)) (tailDelta (mu d)) | |
157 ≡⟨ {!!} ⟩ | 318 ≡⟨ {!!} ⟩ |
319 mu (deltaAppend (headDelta x) (tailDelta d)) | |
320 ≡⟨ refl ⟩ | |
321 mu (deltaAppend (headDelta x) (tailDelta (id d))) | |
322 ≡⟨ refl ⟩ | |
323 mu (deltaAppend (headDelta x) ((tailDelta ∙ id) d)) | |
324 ≡⟨ refl ⟩ | |
325 mu (deltaAppend (headDelta x) (bind (mono d) (tailDelta ∙ id))) | |
326 ≡⟨ refl ⟩ | |
327 mu (bind (delta x (mono d)) id) | |
328 ≡⟨ refl ⟩ | |
329 mu (mu (delta x (mono d))) | |
330 ≡⟨ refl ⟩ | |
158 (mu ∙ mu) (delta x (mono d)) | 331 (mu ∙ mu) (delta x (mono d)) |
159 ∎ | 332 ∎ |
160 monad-law-1 (delta x (delta d d₁)) = {!!} | 333 monad-law-1 (delta x (delta d ds)) = begin |
334 (mu ∙ fmap mu) (delta x (delta d ds)) | |
335 ≡⟨ refl ⟩ | |
336 mu (fmap mu (delta x (delta d ds))) | |
337 ≡⟨ refl ⟩ | |
338 mu (delta (mu x) (delta (mu d) (fmap mu ds))) | |
339 ≡⟨ refl ⟩ | |
340 bind (delta (mu x) (delta (mu d) (fmap mu ds))) id | |
341 ≡⟨ refl ⟩ | |
342 deltaAppend (headDelta (mu x)) (bind (delta (mu d) (fmap mu ds)) tailDelta) | |
343 ≡⟨ refl ⟩ | |
344 deltaAppend (headDelta (mu x)) (deltaAppend (headDelta (tailDelta (mu d))) (bind (fmap mu ds) (tailDelta ∙ tailDelta))) | |
345 | |
346 ≡⟨ {!!} ⟩ | |
347 (mu ∙ mu) (delta x (delta d ds)) | |
348 ∎ | |
161 -} | 349 -} |
162 | 350 |
163 | 351 |
164 {- | 352 {- |
165 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d) | 353 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d) |
204 mu (mu (delta x (mono d))) | 392 mu (mu (delta x (mono d))) |
205 ≡⟨ refl ⟩ | 393 ≡⟨ refl ⟩ |
206 (mu ∙ mu) (delta x (mono d)) | 394 (mu ∙ mu) (delta x (mono d)) |
207 ∎ | 395 ∎ |
208 monad-law-1 (delta x (delta xx d)) = {!!} | 396 monad-law-1 (delta x (delta xx d)) = {!!} |
209 {- | 397 |
210 monad-law-1 (delta x d) = begin | 398 monad-law-1 (delta x d) = begin |
211 (mu ∙ fmap mu) (delta x d) | 399 (mu ∙ fmap mu) (delta x d) |
212 ≡⟨ refl ⟩ | 400 ≡⟨ refl ⟩ |
213 mu ((fmap mu) (delta x d)) | 401 mu ((fmap mu) (delta x d)) |
214 ≡⟨ refl ⟩ | 402 ≡⟨ refl ⟩ |
220 ≡⟨ refl ⟩ | 408 ≡⟨ refl ⟩ |
221 deltaAppend (headDelta (mu x)) (bind (fmap mu d) (tailDelta ∙ id)) | 409 deltaAppend (headDelta (mu x)) (bind (fmap mu d) (tailDelta ∙ id)) |
222 ≡⟨ {!!} ⟩ | 410 ≡⟨ {!!} ⟩ |
223 (mu ∙ mu) (delta x d) | 411 (mu ∙ mu) (delta x d) |
224 ∎ | 412 ∎ |
225 -} | 413 |
226 -} | 414 |
227 | 415 |
228 {- | 416 |
229 -- monad-law-2-2 : join . return = id | 417 -- monad-law-2-2 : join . return = id |
230 monad-law-2-2 : {l : Level} {A : Set l } -> (s : Delta A) -> (mu ∙ eta) s ≡ id s | 418 monad-law-2-2 : {l : Level} {A : Set l } -> (s : Delta A) -> (mu ∙ eta) s ≡ id s |
231 monad-law-2-2 (similar lx x ly y) = refl | 419 monad-law-2-2 (similar lx x ly y) = refl |
232 | 420 |
233 -- monad-law-3 : return . f = fmap f . return | 421 -- monad-law-3 : return . f = fmap f . return |