comparison agda/delta.agda @ 78:f02391a7402f

Prove monad-law-2, 3
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Mon, 01 Dec 2014 12:23:26 +0900
parents 4b16b485a4b2
children 7307e43a3c76
comparison
equal deleted inserted replaced
77:4b16b485a4b2 78:f02391a7402f
118 functor-law-2 f g (mono x) = refl 118 functor-law-2 f g (mono x) = refl
119 functor-law-2 f g (delta x d) = cong (delta (f (g x))) (functor-law-2 f g d) 119 functor-law-2 f g (delta x d) = cong (delta (f (g x))) (functor-law-2 f g d)
120 120
121 121
122 -- Monad-laws (Category) 122 -- Monad-laws (Category)
123 123 {-
124 124
125 monad-law-1-5 : {l : Level} {A : Set l} -> (m : Nat) (n : Nat) -> (ds : Delta (Delta A)) -> 125 monad-law-1-5 : {l : Level} {A : Set l} -> (m : Nat) (n : Nat) -> (ds : Delta (Delta A)) ->
126 n-tail n (bind ds (n-tail m)) ≡ bind (n-tail n ds) (n-tail (m + n)) 126 n-tail n (bind ds (n-tail m)) ≡ bind (n-tail n ds) (n-tail (m + n))
127 monad-law-1-5 O O ds = refl 127 monad-law-1-5 O O ds = refl
128 monad-law-1-5 O (S n) (mono ds) = begin 128 monad-law-1-5 O (S n) (mono ds) = begin
327 ≡⟨ refl ⟩ 327 ≡⟨ refl ⟩
328 (mu ∙ mu) (delta x d) 328 (mu ∙ mu) (delta x d)
329 329
330 330
331 331
332 332 -}
333 {- 333
334 monad-law-2-1 : {l : Level} {A : Set l} -> (n : Nat) -> (d : Delta A) -> (bind (fmap eta d) (n-tail n)) ≡ d
335 monad-law-2-1 O (mono x) = refl
336 monad-law-2-1 O (delta x d) = begin
337 bind (fmap eta (delta x d)) (n-tail O) ≡⟨ refl ⟩
338 bind (delta (eta x) (fmap eta d)) id ≡⟨ refl ⟩
339 delta (headDelta (eta x)) (bind (fmap eta d) tailDelta) ≡⟨ refl ⟩
340 delta x (bind (fmap eta d) tailDelta) ≡⟨ cong (\de -> delta x de) (monad-law-2-1 (S O) d) ⟩
341 delta x d ∎
342 monad-law-2-1 (S n) (mono x) = begin
343 bind (fmap eta (mono x)) (n-tail (S n)) ≡⟨ refl ⟩
344 bind (mono (mono x)) (n-tail (S n)) ≡⟨ refl ⟩
345 n-tail (S n) (mono x) ≡⟨ tail-delta-to-mono (S n) x ⟩
346 mono x ∎
347 monad-law-2-1 (S n) (delta x d) = begin
348 bind (fmap eta (delta x d)) (n-tail (S n)) ≡⟨ refl ⟩
349 bind (delta (eta x) (fmap eta d)) (n-tail (S n)) ≡⟨ refl ⟩
350 delta (headDelta ((n-tail (S n) (eta x)))) (bind (fmap eta d) (tailDelta ∙ (n-tail (S n)))) ≡⟨ refl ⟩
351 delta (headDelta ((n-tail (S n) (eta x)))) (bind (fmap eta d) (n-tail (S (S n)))) ≡⟨ cong (\de -> delta (headDelta (de)) (bind (fmap eta d) (n-tail (S (S n))))) (tail-delta-to-mono (S n) x) ⟩
352 delta (headDelta (eta x)) (bind (fmap eta d) (n-tail (S (S n)))) ≡⟨ refl ⟩
353 delta x (bind (fmap eta d) (n-tail (S (S n)))) ≡⟨ cong (\d -> delta x d) (monad-law-2-1 (S (S n)) d) ⟩
354 delta x d
355
356
357
334 -- monad-law-2 : join . fmap return = join . return = id 358 -- monad-law-2 : join . fmap return = join . return = id
335 -- monad-law-2-1 join . fmap return = join . return 359 -- monad-law-2 join . fmap return = join . return
336 monad-law-2-1 : {l : Level} {A : Set l} -> (d : Delta A) -> 360 monad-law-2 : {l : Level} {A : Set l} -> (d : Delta A) ->
337 (mu ∙ fmap eta) d ≡ (mu ∙ eta) d 361 (mu ∙ fmap eta) d ≡ (mu ∙ eta) d
338 monad-law-2-1 (mono x) = refl 362 monad-law-2 (mono x) = refl
339 monad-law-2-1 (delta x d) = {!!} 363 monad-law-2 (delta x d) = begin
340 364 (mu ∙ fmap eta) (delta x d) ≡⟨ refl ⟩
341 365 mu (fmap eta (delta x d)) ≡⟨ refl ⟩
342 -- monad-law-2-2 : join . return = id 366 mu (delta (mono x) (fmap eta d)) ≡⟨ refl ⟩
343 monad-law-2-2 : {l : Level} {A : Set l } -> (d : Delta A) -> (mu ∙ eta) d ≡ id d 367 delta (headDelta (mono x)) (bind (fmap eta d) tailDelta) ≡⟨ refl ⟩
344 monad-law-2-2 d = refl 368 delta x (bind (fmap eta d) tailDelta) ≡⟨ cong (\d -> delta x d) (monad-law-2-1 (S O) d) ⟩
369 (delta x d) ≡⟨ refl ⟩
370 mu (mono (delta x d)) ≡⟨ refl ⟩
371 mu (eta (delta x d)) ≡⟨ refl ⟩
372 (mu ∙ eta) (delta x d)
373
374
375
376 -- monad-law-2' : join . return = id
377 monad-law-2' : {l : Level} {A : Set l} -> (d : Delta A) -> (mu ∙ eta) d ≡ id d
378 monad-law-2' d = refl
345 379
346 380
347 -- monad-law-3 : return . f = fmap f . return 381 -- monad-law-3 : return . f = fmap f . return
348 monad-law-3 : {l : Level} {A B : Set l} (f : A -> B) (x : A) -> (eta ∙ f) x ≡ (fmap f ∙ eta) x 382 monad-law-3 : {l : Level} {A B : Set l} (f : A -> B) (x : A) -> (eta ∙ f) x ≡ (fmap f ∙ eta) x
349 monad-law-3 f x = refl 383 monad-law-3 f x = refl
350 384
351 385 {-
352 -- monad-law-4 : join . fmap (fmap f) = fmap f . join 386 -- monad-law-4 : join . fmap (fmap f) = fmap f . join
353 monad-law-4 : {l ll : Level} {A : Set l} {B : Set ll} (f : A -> B) (d : Delta (Delta A)) -> 387 monad-law-4 : {l ll : Level} {A : Set l} {B : Set ll} (f : A -> B) (d : Delta (Delta A)) ->
354 (mu ∙ fmap (fmap f)) d ≡ (fmap f ∙ mu) d 388 (mu ∙ fmap (fmap f)) d ≡ (fmap f ∙ mu) d
355 monad-law-4 f d = {!!} 389 monad-law-4 f d = {!!}
356 390