comparison agda/delta.agda @ 54:9bb7c9bee94f

Trying redefine delta for infinite changes
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 19 Nov 2014 14:01:17 +0900
parents 90b171e3a73e
children 9c8c09334e32
comparison
equal deleted inserted replaced
53:1e6fecb54f1f 54:9bb7c9bee94f
5 open import Relation.Binary.PropositionalEquality 5 open import Relation.Binary.PropositionalEquality
6 open ≡-Reasoning 6 open ≡-Reasoning
7 7
8 module delta where 8 module delta where
9 9
10 DeltaLog : Set
11 DeltaLog = List String
12
10 data Delta {l : Level} (A : Set l) : (Set (suc l)) where 13 data Delta {l : Level} (A : Set l) : (Set (suc l)) where
11 similar : List String -> A -> List String -> A -> Delta A 14 mono : DeltaLog -> A -> Delta A
15 delta : DeltaLog -> A -> Delta A -> Delta A
16
17 logAppend : {l : Level} {A : Set l} -> DeltaLog -> Delta A -> Delta A
18 logAppend l (mono lx x) = mono (l ++ lx) x
19 logAppend l (delta lx x d) = delta (l ++ lx) x (logAppend l d)
20
21 deltaAppend : {l : Level} {A : Set l} -> Delta A -> Delta A -> Delta A
22 deltaAppend (mono lx x) d = delta lx x d
23 deltaAppend (delta lx x d) ds = delta lx x (deltaAppend d ds)
24
25 headDelta : {l : Level} {A : Set l} -> Delta A -> Delta A
26 headDelta (mono lx x) = mono lx x
27 headDelta (delta lx x _) = mono lx x
28
29 tailDelta : {l : Level} {A : Set l} -> Delta A -> Delta A
30 tailDelta (mono lx x) = mono lx x
31 tailDelta (delta _ _ d) = d
12 32
13 33
14 -- Functor 34 -- Functor
15 fmap : {l ll : Level} {A : Set l} {B : Set ll} -> (A -> B) -> (Delta A) -> (Delta B) 35 fmap : {l ll : Level} {A : Set l} {B : Set ll} -> (A -> B) -> (Delta A) -> (Delta B)
16 fmap f (similar xs x ys y) = similar xs (f x) ys (f y) 36 fmap f (mono lx x) = mono lx (f x)
37 fmap f (delta lx x d) = delta lx (f x) (fmap f d)
17 38
18 39
19 -- Monad (Category) 40 -- Monad (Category)
20 mu : {l : Level} {A : Set l} -> Delta (Delta A) -> Delta A 41 mu : {l : Level} {A : Set l} -> Delta (Delta A) -> Delta A
21 mu (similar lx (similar llx x _ _) ly (similar _ _ lly y)) = similar (lx ++ llx) x (ly ++ lly) y 42 mu (mono ld d) = logAppend ld d
43 mu (delta ld d ds) = deltaAppend (logAppend ld (headDelta d)) (mu (fmap tailDelta ds))
22 44
45 {-
23 eta : {l : Level} {A : Set l} -> A -> Delta A 46 eta : {l : Level} {A : Set l} -> A -> Delta A
24 eta x = similar [] x [] x 47 eta x = similar [] x [] x
25 48
26 returnS : {l : Level} {A : Set l} -> A -> Delta A 49 returnS : {l : Level} {A : Set l} -> A -> Delta A
27 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x 50 returnS x = similar [[ (show x) ]] x [[ (show x) ]] x
162 ≡⟨ refl ⟩ 185 ≡⟨ refl ⟩
163 (mu (fmap k (similar lx x ly y))) >>= h 186 (mu (fmap k (similar lx x ly y))) >>= h
164 ≡⟨ refl ⟩ 187 ≡⟨ refl ⟩
165 ((similar lx x ly y) >>= k) >>= h 188 ((similar lx x ly y) >>= k) >>= h
166 189
190 -}