comparison agda/deltaM/monad.agda @ 129:d57c88171f38

Prove assciation-law for DeltaM on (S O)
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Tue, 03 Feb 2015 12:42:28 +0900
parents d9a30f696933
children ac45d065cbf2
comparison
equal deleted inserted replaced
128:d9a30f696933 129:d57c88171f38
72 fmap-tailDeltaM-with-deltaM-mu {n = S n} (deltaM d) = refl 72 fmap-tailDeltaM-with-deltaM-mu {n = S n} (deltaM d) = refl
73 73
74 74
75 75
76 76
77 77 {-
78 -- main proofs 78 -- main proofs
79 79
80 deltaM-eta-is-nt : {l : Level} {A B : Set l} {n : Nat} 80 deltaM-eta-is-nt : {l : Level} {A B : Set l} {n : Nat}
81 {T : Set l -> Set l} {F : Functor T} {M : Monad T F} -> 81 {T : Set l -> Set l} {F : Functor T} {M : Monad T F} ->
82 (f : A -> B) -> (x : A) -> 82 (f : A -> B) -> (x : A) ->
184 ≡⟨ refl ⟩ 184 ≡⟨ refl ⟩
185 deltaM-mu (deltaM (delta (fmap F (deltaM-fmap f) x) (delta-fmap (fmap F (deltaM-fmap f)) d))) 185 deltaM-mu (deltaM (delta (fmap F (deltaM-fmap f) x) (delta-fmap (fmap F (deltaM-fmap f)) d)))
186 ≡⟨ refl ⟩ 186 ≡⟨ refl ⟩
187 deltaM-mu (deltaM-fmap (deltaM-fmap f) (deltaM (delta x d))) 187 deltaM-mu (deltaM-fmap (deltaM-fmap f) (deltaM (delta x d)))
188 188
189 {- 189
190 190
191 191
192 192
193 193
194 deltaM-right-unity-law : {l : Level} {A : Set l} {n : Nat} 194 deltaM-right-unity-law : {l : Level} {A : Set l} {n : Nat}
294 deltaM (delta x d) 294 deltaM (delta x d)
295 295
296 296
297 -} 297 -}
298 298
299 postulate deltaM-mu-is-nt : {l : Level} {A B : Set l} {n : Nat}
300 {T : Set l -> Set l} {F : Functor T} {M : Monad T F}
301 (f : A -> B) -> (d : DeltaM M (DeltaM M A (S n)) (S n)) ->
302 deltaM-fmap f (deltaM-mu d) ≡ deltaM-mu (deltaM-fmap (deltaM-fmap f) d)
299 303
300 deltaM-association-law : {l : Level} {A : Set l} {n : Nat} 304 deltaM-association-law : {l : Level} {A : Set l} {n : Nat}
301 {T : Set l -> Set l} {F : Functor T} {M : Monad T F} 305 {T : Set l -> Set l} {F : Functor T} {M : Monad T F}
302 (d : DeltaM M (DeltaM M (DeltaM M A (S n)) (S n)) (S n)) -> 306 (d : DeltaM M (DeltaM M (DeltaM M A (S n)) (S n)) (S n)) ->
303 deltaM-mu (deltaM-fmap deltaM-mu d) ≡ deltaM-mu (deltaM-mu d) 307 deltaM-mu (deltaM-fmap deltaM-mu d) ≡ deltaM-mu (deltaM-mu d)
304 deltaM-association-law {l} {A} {O} {T} {F} {M} (deltaM (mono x)) = {!!} 308 deltaM-association-law {l} {A} {O} {T} {F} {M} (deltaM (mono x)) = begin
309 deltaM-mu (deltaM-fmap deltaM-mu (deltaM (mono x)))
310 ≡⟨ refl ⟩
311 deltaM-mu (deltaM (mono (fmap F deltaM-mu x)))
312 ≡⟨ refl ⟩
313 deltaM (mono (mu M (fmap F (headDeltaM {M = M}) (headDeltaM {M = M} (deltaM (mono (fmap F deltaM-mu x)))))))
314 ≡⟨ refl ⟩
315 deltaM (mono (mu M (fmap F (headDeltaM {M = M}) (fmap F deltaM-mu x))))
316 ≡⟨ cong (\de -> deltaM (mono (mu M de))) (sym (covariant F deltaM-mu headDeltaM x)) ⟩
317 deltaM (mono (mu M (fmap F ((headDeltaM {M = M}) ∙ deltaM-mu) x)))
318 ≡⟨ refl ⟩
319 deltaM (mono (mu M (fmap F (((mu M) ∙ (fmap F headDeltaM)) ∙ headDeltaM) x)))
320 ≡⟨ cong (\de -> deltaM (mono (mu M de))) (covariant F headDeltaM ((mu M) ∙ (fmap F headDeltaM)) x) ⟩
321 deltaM (mono (mu M ((((fmap F (((mu M) ∙ (fmap F headDeltaM)))) ∙ (fmap F headDeltaM)) x))))
322 ≡⟨ refl ⟩
323 deltaM (mono (mu M ((((fmap F (((mu M) ∙ (fmap F headDeltaM)))) (fmap F headDeltaM x))))))
324 ≡⟨ cong (\de -> deltaM (mono (mu M de))) (covariant F (fmap F headDeltaM) (mu M) (fmap F headDeltaM x)) ⟩
325 deltaM (mono (mu M (((fmap F (mu M)) ∙ (fmap F (fmap F headDeltaM))) (fmap F headDeltaM x))))
326 ≡⟨ refl ⟩
327 deltaM (mono (mu M (fmap F (mu M) ((fmap F (fmap F headDeltaM) (fmap F headDeltaM x))))))
328 ≡⟨ cong (\de -> deltaM (mono de)) (association-law M (fmap F (fmap F headDeltaM) (fmap F headDeltaM x))) ⟩
329 deltaM (mono (mu M (mu M (fmap F (fmap F headDeltaM) (fmap F headDeltaM x)))))
330 ≡⟨ cong (\de -> deltaM (mono (mu M de))) (mu-is-nt M headDeltaM (fmap F headDeltaM x)) ⟩
331 deltaM (mono (mu M (fmap F (headDeltaM {M = M}) (mu M (fmap F (headDeltaM {M = M}) x)))))
332 ≡⟨ refl ⟩
333 deltaM (mono (mu M (fmap F (headDeltaM {M = M}) (headDeltaM {M = M} (deltaM (mono (mu M (fmap F (headDeltaM {M = M}) x))))))))
334 ≡⟨ refl ⟩
335 deltaM-mu (deltaM (mono (mu M (fmap F (headDeltaM {M = M}) x))))
336 ≡⟨ refl ⟩
337 deltaM-mu (deltaM (mono (mu M (fmap F (headDeltaM {M = M}) (headDeltaM {M = M} (deltaM (mono x)))))))
338 ≡⟨ refl ⟩
339 deltaM-mu (deltaM-mu (deltaM (mono x)))
340
341
342 deltaM-association-law {l} {A} {S n} {T} {F} {M} (deltaM (delta x d)) = {!!}
305 {- 343 {-
306 deltaM-association-law {l} {A} {S n} {T} {F} {M} (deltaM (delta x d)) = begin 344 deltaM-association-law {l} {A} {S n} {T} {F} {M} (deltaM (delta x d)) = begin
307 deltaM-mu (deltaM-fmap deltaM-mu (deltaM (delta x d))) 345 deltaM-mu (deltaM-fmap deltaM-mu (deltaM (delta x d)))
308 ≡⟨ refl ⟩ 346 ≡⟨ refl ⟩
309 deltaM-mu (deltaM (delta (fmap F deltaM-mu x) (delta-fmap (fmap F deltaM-mu) d))) 347 deltaM-mu (deltaM (delta (fmap F deltaM-mu x) (delta-fmap (fmap F deltaM-mu) d)))