comparison agda/similar.agda @ 34:b7c4e6276bcf

Proof Monad-law-2-1
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Sat, 18 Oct 2014 14:13:00 +0900
parents 0bc402f970b3
children c5cdbedc68ad
comparison
equal deleted inserted replaced
33:0bc402f970b3 34:b7c4e6276bcf
14 fmap f (similar xs x ys y) = similar xs (f x) ys (f y) 14 fmap f (similar xs x ys y) = similar xs (f x) ys (f y)
15 15
16 mu : {l : Level} {A : Set l} -> Similar (Similar A) -> Similar A 16 mu : {l : Level} {A : Set l} -> Similar (Similar A) -> Similar A
17 mu (similar lx (similar llx x _ _) ly (similar _ _ lly y)) = similar (lx ++ llx) x (ly ++ lly) y 17 mu (similar lx (similar llx x _ _) ly (similar _ _ lly y)) = similar (lx ++ llx) x (ly ++ lly) y
18 18
19 return : {A : Set} -> A -> Similar A 19 return : {l : Level} {A : Set l} -> A -> Similar A
20 return x = similar [] x [] x 20 return x = similar [] x [] x
21 21
22 returnS : {A : Set} -> A -> Similar A 22 returnS : {A : Set} -> A -> Similar A
23 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x 23 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x
24 24
35 similar (lx ++ llx ++ lllx) x (ly ++ (lly ++ llly)) y 35 similar (lx ++ llx ++ lllx) x (ly ++ (lly ++ llly)) y
36 ≡⟨ cong (\right-list -> similar (lx ++ llx ++ lllx) x right-list y ) (list-associative ly lly llly) ⟩ 36 ≡⟨ cong (\right-list -> similar (lx ++ llx ++ lllx) x right-list y ) (list-associative ly lly llly) ⟩
37 similar (lx ++ llx ++ lllx) x (ly ++ lly ++ llly) y 37 similar (lx ++ llx ++ lllx) x (ly ++ lly ++ llly) y
38 38
39 39
40
41 --monad-law-2 : mu ∙ fmap return ≡ mu ∙ return ≡ id
42 monad-law-2-1 : {l : Level} {A : Set l} -> (s : Similar A) ->
43 (mu ∙ fmap return) s ≡ (mu ∙ return) s
44 monad-law-2-1 (similar lx x ly y) = begin
45 similar (lx ++ []) x (ly ++ []) y
46 ≡⟨ cong (\left-list -> similar left-list x (ly ++ []) y) (empty-append lx)⟩
47 similar lx x (ly ++ []) y
48 ≡⟨ cong (\right-list -> similar lx x right-list y) (empty-append ly) ⟩
49 similar lx x ly y
50
51
40 {- 52 {-
41 --monad-law-2 : mu ∙ fmap return ≡ mu ∙ return ≡id
42 monad-law-2-1 : mu ∙ fmap return ≡ mu ∙ return
43 monad-law-2-1 = {!!}
44
45 monad-law-2-2 : mu ∙ return ≡ id 53 monad-law-2-2 : mu ∙ return ≡ id
46 monad-law-2-2 = {!!} 54 monad-law-2-2 = {!!}
47 55
48 monad-law-3 : ∀{f} -> return ∙ f ≡ fmap f ∙ return 56 monad-law-3 : ∀{f} -> return ∙ f ≡ fmap f ∙ return
49 monad-law-3 = {!!} 57 monad-law-3 = {!!}