comparison agda/delta.agda @ 56:bfb6be9a689d

Trying redefine monad-laws-1
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 19 Nov 2014 21:09:45 +0900
parents 9c8c09334e32
children dfcd72dc697e
comparison
equal deleted inserted replaced
55:9c8c09334e32 56:bfb6be9a689d
62 x >>= f = mu (fmap f x) 62 x >>= f = mu (fmap f x)
63 63
64 64
65 65
66 -- proofs 66 -- proofs
67
68 -- sub proofs
69 twice-log-append : {l : Level} {A : Set l} -> (l : List String) -> (ll : List String) -> (d : Delta A) ->
70 logAppend l (logAppend ll d) ≡ logAppend (l ++ ll) d
71 twice-log-append l ll (mono lx x) = begin
72 mono (l ++ (ll ++ lx)) x
73 ≡⟨ cong (\l -> mono l x) (list-associative l ll lx) ⟩
74 mono (l ++ ll ++ lx) x
75
76 twice-log-append l ll (delta lx x d) = begin
77 delta (l ++ (ll ++ lx)) x (logAppend l (logAppend ll d))
78 ≡⟨ cong (\lx -> delta lx x (logAppend l (logAppend ll d))) (list-associative l ll lx) ⟩
79 delta (l ++ ll ++ lx) x (logAppend l (logAppend ll d))
80 ≡⟨ cong (delta (l ++ ll ++ lx) x) (twice-log-append l ll d) ⟩
81 delta (l ++ ll ++ lx) x (logAppend (l ++ ll) d)
82
67 83
68 84
69 -- Functor-laws 85 -- Functor-laws
70 86
71 -- Functor-law-1 : T(id) = id' 87 -- Functor-law-1 : T(id) = id'
79 (fmap (f ∙ g)) d ≡ ((fmap f) ∙ (fmap g)) d 95 (fmap (f ∙ g)) d ≡ ((fmap f) ∙ (fmap g)) d
80 functor-law-2 f g (mono lx x) = refl 96 functor-law-2 f g (mono lx x) = refl
81 functor-law-2 f g (delta lx x d) = cong (delta lx (f (g x))) (functor-law-2 f g d) 97 functor-law-2 f g (delta lx x d) = cong (delta lx (f (g x))) (functor-law-2 f g d)
82 98
83 99
100
101 -- Monad-laws (Category)
102
103 -- monad-law-1 : join . fmap join = join . join
104 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d)
105 monad-law-1 (mono lx (mono llx (mono lllx x))) = begin
106 mono (lx ++ (llx ++ lllx)) x
107 ≡⟨ cong (\l -> mono l x) (list-associative lx llx lllx) ⟩
108 mono (lx ++ llx ++ lllx) x
109
110 monad-law-1 (mono lx (mono llx (delta lllx x d))) = begin
111 delta (lx ++ (llx ++ lllx)) x (logAppend lx (logAppend llx d))
112 ≡⟨ cong (\l -> delta l x (logAppend lx (logAppend llx d))) (list-associative lx llx lllx) ⟩
113 delta (lx ++ llx ++ lllx) x (logAppend lx (logAppend llx d))
114 ≡⟨ cong (\d -> delta (lx ++ llx ++ lllx) x d) (twice-log-append lx llx d) ⟩
115 delta (lx ++ llx ++ lllx) x (logAppend (lx ++ llx) d)
116
117 monad-law-1 (mono lx (delta ld (mono x x₁) (mono x₂ (mono x₃ x₄)))) = begin
118 delta (lx ++ (ld ++ x)) x₁ (mono (lx ++ (x₂ ++ x₃)) x₄)
119 ≡⟨ cong (\l -> delta l x₁(mono (lx ++ (x₂ ++ x₃)) x₄)) (list-associative lx ld x) ⟩
120 delta (lx ++ ld ++ x) x₁ (mono (lx ++ (x₂ ++ x₃)) x₄)
121 ≡⟨ cong (\l -> delta (lx ++ ld ++ x) x₁ (mono l x₄)) (list-associative lx x₂ x₃) ⟩
122 delta (lx ++ ld ++ x) x₁ (mono (lx ++ x₂ ++ x₃) x₄)
123
124 monad-law-1 (mono lx (delta ld (mono x x₁) (mono x₂ (delta x₃ x₄ ds)))) = begin
125 delta (lx ++ (ld ++ x)) x₁ (logAppend lx (logAppend x₂ ds))
126 ≡⟨ cong (\l -> delta l x₁ (logAppend lx (logAppend x₂ ds))) (list-associative lx ld x) ⟩
127 delta (lx ++ ld ++ x) x₁ (logAppend lx (logAppend x₂ ds))
128 ≡⟨ cong (\d -> delta (lx ++ ld ++ x) x₁ d) (twice-log-append lx x₂ ds) ⟩
129 delta (lx ++ ld ++ x) x₁ (logAppend (lx ++ x₂) ds)
130
131 monad-law-1 (mono lx (delta ld (delta x x₁ (mono x₂ x₃)) (mono x₄ (mono x₅ x₆)))) = begin
132 delta (lx ++ (ld ++ x)) x₁ (mono (lx ++ (x₄ ++ x₅)) x₆)
133 ≡⟨ cong (\l -> delta l x₁ (mono (lx ++ (x₄ ++ x₅)) x₆)) (list-associative lx ld x ) ⟩
134 delta (lx ++ ld ++ x) x₁ (mono (lx ++ (x₄ ++ x₅)) x₆)
135 ≡⟨ cong (\l -> delta (lx ++ ld ++ x) x₁ (mono l x₆)) (list-associative lx x₄ x₅)⟩
136 delta (lx ++ ld ++ x) x₁ (mono (lx ++ x₄ ++ x₅) x₆)
137
138 monad-law-1 (mono lx (delta ld (delta x x₁ (mono x₂ x₃)) (mono x₄ (delta x₅ x₆ ds)))) = begin
139 delta (lx ++ (ld ++ x)) x₁ (logAppend lx (logAppend x₄ ds))
140 ≡⟨ cong (\l -> delta l x₁(logAppend lx (logAppend x₄ ds))) (list-associative lx ld x ) ⟩
141 delta (lx ++ ld ++ x) x₁ (logAppend lx (logAppend x₄ ds))
142 ≡⟨ cong (\d -> delta (lx ++ ld ++ x) x₁ d) (twice-log-append lx x₄ ds ) ⟩
143 delta (lx ++ ld ++ x) x₁ (logAppend (lx ++ x₄) ds)
144
145
146 monad-law-1 (mono lx (delta ld (delta x x₁ (delta ly y (mono x₂ x₃))) (mono x₄ (mono x₅ x₆)))) = begin
147 delta (lx ++ (ld ++ x)) x₁ (mono (lx ++ (x₄ ++ x₅)) x₆)
148 ≡⟨ {!!} ⟩
149 delta (lx ++ ld ++ x) x₁ (mono (lx ++ x₄ ++ x₅) x₆)
150
151 monad-law-1 (mono lx (delta ld (delta x x₁ (delta ly y (mono x₂ x₃))) (mono x₄ (delta x₅ x₆ ds)))) = begin
152 delta (lx ++ (ld ++ x)) x₁ (logAppend lx (logAppend x₄ ds))
153 ≡⟨ {!!} ⟩
154 delta (lx ++ ld ++ x) x₁ (logAppend (lx ++ x₄) ds)
155
156 monad-law-1 (mono lx (delta ld (delta x x₁ (delta ly y (delta x₂ x₃ d))) (mono x₄ (mono x₅ x₆)))) = begin
157 delta (lx ++ (ld ++ x)) x₁ (mono (lx ++ (x₄ ++ x₅)) x₆)
158 ≡⟨ {!!} ⟩
159 delta (lx ++ ld ++ x) x₁ (mono (lx ++ x₄ ++ x₅) x₆)
160
161 monad-law-1 (mono lx (delta ld (delta x x₁ (delta ly y (delta x₂ x₃ d))) (mono x₄ (delta x₅ x₆ ds)))) = begin
162 delta (lx ++ (ld ++ x)) x₁ (logAppend lx (logAppend x₄ ds))
163 ≡⟨ {!!} ⟩
164 delta (lx ++ ld ++ x) x₁ (logAppend (lx ++ x₄) ds)
165
166
167
168
169
170 monad-law-1 (mono lx (delta ld d (delta x ds ds₁))) = {!!}
171
172
173
174 monad-law-1 (delta lx x d) = {!!}
175
84 {- 176 {-
85 -- Monad-laws (Category)
86
87 -- monad-law-1 : join . fmap join = join . join
88 monad-law-1 : {l : Level} {A : Set l} -> (s : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) s) ≡ ((mu ∙ mu) s)
89 monad-law-1 (similar lx (similar llx (similar lllx x _ _) _ (similar _ _ _ _))
90 ly (similar _ (similar _ _ _ _) lly (similar _ _ llly y))) = begin
91 similar (lx ++ (llx ++ lllx)) x (ly ++ (lly ++ llly)) y
92 ≡⟨ cong (\left-list -> similar left-list x (ly ++ (lly ++ llly)) y) (list-associative lx llx lllx) ⟩
93 similar (lx ++ llx ++ lllx) x (ly ++ (lly ++ llly)) y
94 ≡⟨ cong (\right-list -> similar (lx ++ llx ++ lllx) x right-list y ) (list-associative ly lly llly) ⟩
95 similar (lx ++ llx ++ lllx) x (ly ++ lly ++ llly) y
96
97
98
99 -- monad-law-2 : join . fmap return = join . return = id 177 -- monad-law-2 : join . fmap return = join . return = id
100 -- monad-law-2-1 join . fmap return = join . return 178 -- monad-law-2-1 join . fmap return = join . return
101 monad-law-2-1 : {l : Level} {A : Set l} -> (s : Delta A) -> 179 monad-law-2-1 : {l : Level} {A : Set l} -> (s : Delta A) ->
102 (mu ∙ fmap eta) s ≡ (mu ∙ eta) s 180 (mu ∙ fmap eta) s ≡ (mu ∙ eta) s
103 monad-law-2-1 (similar lx x ly y) = begin 181 monad-law-2-1 (similar lx x ly y) = begin