diff agda/deltaM.agda @ 118:53cb21845dea

Prove association-law for DeltaM
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Mon, 02 Feb 2015 11:54:23 +0900
parents f02c5ad4a327
children 0f9ecd118a03
line wrap: on
line diff
--- a/agda/deltaM.agda	Mon Feb 02 09:57:37 2015 +0900
+++ b/agda/deltaM.agda	Mon Feb 02 11:54:23 2015 +0900
@@ -21,6 +21,11 @@
 
 -- DeltaM utils
 
+unDeltaM : {l : Level} {A : Set l} {n : Nat}
+           {M : Set l -> Set l} {functorM : Functor M} {monadM : Monad M functorM} ->
+           (DeltaM M {functorM} {monadM} A (S n)) -> Delta (M A) (S n)
+unDeltaM (deltaM d) = d
+
 headDeltaM : {l : Level} {A : Set l} {n : Nat}
              {M : Set l -> Set l} {functorM : Functor M} {monadM : Monad M functorM}
              -> DeltaM M {functorM} {monadM} A (S n) -> M A
@@ -69,9 +74,9 @@
                         {M : Set l -> Set l} {functorM : Functor  M} {monadM   : Monad  M functorM} ->
                         DeltaM M {functorM} {monadM} (DeltaM M {functorM} {monadM} A (S n)) (S n)  ->
                         DeltaM M {functorM} {monadM} A (S n)
-deltaM-mu {n = O}   {functorM = fm} {monadM = mm} d = deltaM (mono (mu mm (fmap fm headDeltaM (headDeltaM d))))
-deltaM-mu {n = S n} {functorM = fm} {monadM = mm} d = appendDeltaM (deltaM (mono (mu mm (fmap fm headDeltaM (headDeltaM d)))))
-                                                                   (deltaM-mu (deltaM-fmap tailDeltaM (tailDeltaM d)))
+deltaM-mu {n = O}   {functorM = fm} {monadM = mm} d = deltaM (mono  (mu mm (fmap fm headDeltaM (headDeltaM d))))
+deltaM-mu {n = S n} {functorM = fm} {monadM = mm} d = deltaM (delta (mu mm (fmap fm headDeltaM (headDeltaM d)))
+                                                                    (unDeltaM (deltaM-mu (deltaM-fmap tailDeltaM (tailDeltaM d)))))
                                                   
 
 deltaM-bind : {l : Level} {A B : Set l}