comparison agda/delta/monad.agda @ 104:ebd0d6e2772c

Trying redenition Delta with length constraints
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Mon, 26 Jan 2015 23:00:05 +0900
parents a271f3ff1922
children e6499a50ccbd
comparison
equal deleted inserted replaced
103:a271f3ff1922 104:ebd0d6e2772c
1 open import basic 1 open import basic
2 open import delta 2 open import delta
3 open import delta.functor 3 open import delta.functor
4 open import nat 4 open import nat
5 open import laws 5 open import laws
6 open import revision
6 7
7 8
8 open import Level 9 open import Level
9 open import Relation.Binary.PropositionalEquality 10 open import Relation.Binary.PropositionalEquality
10 open ≡-Reasoning 11 open ≡-Reasoning
11 12
12 module delta.monad where 13 module delta.monad where
13 14
14 15
15 -- Monad-laws (Category) 16 -- Monad-laws (Category)
17 {-
16 18
17 monad-law-1-5 : {l : Level} {A : Set l} -> (m : Nat) (n : Nat) -> (ds : Delta (Delta A)) -> 19 monad-law-1-5 : {l : Level} {A : Set l} -> (m : Nat) (n : Nat) -> (ds : Delta (Delta A)) ->
18 n-tail n (delta-bind ds (n-tail m)) ≡ delta-bind (n-tail n ds) (n-tail (m + n)) 20 n-tail n (delta-bind ds (n-tail m)) ≡ delta-bind (n-tail n ds) (n-tail (m + n))
19 monad-law-1-5 O O ds = refl 21 monad-law-1-5 O O ds = refl
20 monad-law-1-5 O (S n) (mono ds) = begin 22 monad-law-1-5 O (S n) (mono ds) = begin
320 delta-fmap f (delta x (delta-bind ds tailDelta)) ≡⟨ refl ⟩ 322 delta-fmap f (delta x (delta-bind ds tailDelta)) ≡⟨ refl ⟩
321 delta-fmap f (delta (headDelta (delta x d)) (delta-bind ds tailDelta)) ≡⟨ refl ⟩ 323 delta-fmap f (delta (headDelta (delta x d)) (delta-bind ds tailDelta)) ≡⟨ refl ⟩
322 delta-fmap f (delta-mu (delta (delta x d) ds)) ≡⟨ refl ⟩ 324 delta-fmap f (delta-mu (delta (delta x d) ds)) ≡⟨ refl ⟩
323 (delta-fmap f ∙ delta-mu) (delta (delta x d) ds) ∎ 325 (delta-fmap f ∙ delta-mu) (delta (delta x d) ds) ∎
324 326
325 delta-is-monad : {l : Level} -> Monad {l} Delta delta-is-functor 327 -}
328 -- monad-law-1 : join . delta-fmap join = join . join
329 monad-law-1 : {l : Level} {A : Set l} {a : Rev} -> (d : Delta (Delta (Delta A a) a) a) ->
330 ((delta-mu ∙ (delta-fmap delta-mu)) d) ≡ ((delta-mu ∙ delta-mu) d)
331 monad-law-1 (mono d) = refl
332 monad-law-1 (delta d ds) = {!!}
333
334 delta-is-monad : {l : Level} {v : Rev} -> Monad {l} (\A -> Delta A v) delta-is-functor
335
336
326 delta-is-monad = record { eta = delta-eta; 337 delta-is-monad = record { eta = delta-eta;
327 mu = delta-mu; 338 mu = delta-mu;
328 return = delta-eta; 339 return = delta-eta;
329 bind = delta-bind; 340 bind = delta-bind;
330 association-law = monad-law-1; 341 association-law = monad-law-1 }
331 left-unity-law = monad-law-2; 342 -- left-unity-law = monad-law-2;
332 right-unity-law = monad-law-2' } 343 -- right-unity-law = monad-law-2' }
344
345
333 346
334 347
335 348
336 {- 349 {-
337 350