comparison agda/similar.agda @ 33:0bc402f970b3

Proof Monad-law 1
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Sat, 18 Oct 2014 14:04:33 +0900
parents 71906644d206
children b7c4e6276bcf
comparison
equal deleted inserted replaced
32:71906644d206 33:0bc402f970b3
23 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x 23 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x
24 24
25 returnSS : {A : Set} -> A -> A -> Similar A 25 returnSS : {A : Set} -> A -> A -> Similar A
26 returnSS x y = similar [[ (show x) ]] x [[ (show y) ]] y 26 returnSS x y = similar [[ (show x) ]] x [[ (show y) ]] y
27 27
28
28 --monad-law-1 : mu ∙ (fmap mu) ≡ mu ∙ mu 29 --monad-law-1 : mu ∙ (fmap mu) ≡ mu ∙ mu
29
30
31 monad-law-1 : {l : Level} {A : Set l} -> (s : Similar (Similar (Similar A))) -> ((mu ∙ (fmap mu)) s) ≡ ((mu ∙ mu) s) 30 monad-law-1 : {l : Level} {A : Set l} -> (s : Similar (Similar (Similar A))) -> ((mu ∙ (fmap mu)) s) ≡ ((mu ∙ mu) s)
32 monad-law-1 (similar lx (similar llx (similar lllx x _ _) _ (similar _ _ _ _)) 31 monad-law-1 (similar lx (similar llx (similar lllx x _ _) _ (similar _ _ _ _))
33 ly (similar _ (similar _ _ _ _) lly (similar _ _ llly y))) = begin 32 ly (similar _ (similar _ _ _ _) lly (similar _ _ llly y))) = begin
34 similar (lx ++ (llx ++ lllx)) x (ly ++ (lly ++ llly)) y 33 similar (lx ++ (llx ++ lllx)) x (ly ++ (lly ++ llly)) y
35 ≡⟨ {!!} ⟩ 34 ≡⟨ cong (\left-list -> similar left-list x (ly ++ (lly ++ llly)) y) (list-associative lx llx lllx) ⟩
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 similar (lx ++ llx ++ lllx) x (ly ++ lly ++ llly) y 37 similar (lx ++ llx ++ lllx) x (ly ++ lly ++ llly) y
37 38
38 39
39 {- 40 {-
40 --monad-law-2 : mu ∙ fmap return ≡ mu ∙ return ≡id 41 --monad-law-2 : mu ∙ fmap return ≡ mu ∙ return ≡id