comparison agda/delta/monad.agda @ 96:dfe8c67390bd

Unify Levels in delta
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Tue, 20 Jan 2015 16:25:53 +0900
parents bcd4fe52a504
children a271f3ff1922
comparison
equal deleted inserted replaced
95:cf372fbcebd8 96:dfe8c67390bd
126 headDelta (n-tail (S m + S n) (headDelta (((n-tail n) ∙ tailDelta) (delta d ds)))) ≡⟨ cong (\t -> headDelta (n-tail (S m + S n) (headDelta (t (delta d ds))))) (n-tail-plus n) ⟩ 126 headDelta (n-tail (S m + S n) (headDelta (((n-tail n) ∙ tailDelta) (delta d ds)))) ≡⟨ cong (\t -> headDelta (n-tail (S m + S n) (headDelta (t (delta d ds))))) (n-tail-plus n) ⟩
127 headDelta (n-tail (S m + S n) (headDelta (n-tail (S n) (delta d ds)))) 127 headDelta (n-tail (S m + S n) (headDelta (n-tail (S n) (delta d ds))))
128 128
129 129
130 monad-law-1-2 : {l : Level} {A : Set l} -> (d : Delta (Delta A)) -> headDelta (delta-mu d) ≡ (headDelta (headDelta d)) 130 monad-law-1-2 : {l : Level} {A : Set l} -> (d : Delta (Delta A)) -> headDelta (delta-mu d) ≡ (headDelta (headDelta d))
131 monad-law-1-2 (mono _) = refl 131 monad-law-1-2 (mono _) = refl
132 monad-law-1-2 (delta _ _) = refl 132 monad-law-1-2 (delta _ _) = refl
133 133
134 monad-law-1-3 : {l : Level} {A : Set l} -> (n : Nat) -> (d : Delta (Delta (Delta A))) -> 134 monad-law-1-3 : {l : Level} {A : Set l} -> (n : Nat) -> (d : Delta (Delta (Delta A))) ->
135 delta-bind (delta-fmap delta-mu d) (n-tail n) ≡ delta-bind (delta-bind d (n-tail n)) (n-tail n) 135 delta-bind (delta-fmap delta-mu d) (n-tail n) ≡ delta-bind (delta-bind d (n-tail n)) (n-tail n)
136 monad-law-1-3 O (mono d) = refl 136 monad-law-1-3 O (mono d) = refl
263 -- monad-law-3 : return . f = delta-fmap f . return 263 -- monad-law-3 : return . f = delta-fmap f . return
264 monad-law-3 : {l : Level} {A B : Set l} (f : A -> B) (x : A) -> (delta-eta ∙ f) x ≡ (delta-fmap f ∙ delta-eta) x 264 monad-law-3 : {l : Level} {A B : Set l} (f : A -> B) (x : A) -> (delta-eta ∙ f) x ≡ (delta-fmap f ∙ delta-eta) x
265 monad-law-3 f x = refl 265 monad-law-3 f x = refl
266 266
267 267
268 monad-law-4-1 : {l ll : Level} {A : Set l} {B : Set ll} -> (n : Nat) -> (f : A -> B) -> (ds : Delta (Delta A)) -> 268 monad-law-4-1 : {l : Level} {A B : Set l} -> (n : Nat) -> (f : A -> B) -> (ds : Delta (Delta A)) ->
269 delta-bind (delta-fmap (delta-fmap f) ds) (n-tail n) ≡ delta-fmap f (delta-bind ds (n-tail n)) 269 delta-bind (delta-fmap (delta-fmap f) ds) (n-tail n) ≡ delta-fmap f (delta-bind ds (n-tail n))
270 monad-law-4-1 O f (mono d) = refl 270 monad-law-4-1 O f (mono d) = refl
271 monad-law-4-1 O f (delta d ds) = begin 271 monad-law-4-1 O f (delta d ds) = begin
272 delta-bind (delta-fmap (delta-fmap f) (delta d ds)) (n-tail O) ≡⟨ refl ⟩ 272 delta-bind (delta-fmap (delta-fmap f) (delta d ds)) (n-tail O) ≡⟨ refl ⟩
273 delta-bind (delta (delta-fmap f d) (delta-fmap (delta-fmap f) ds)) (n-tail O) ≡⟨ refl ⟩ 273 delta-bind (delta (delta-fmap f d) (delta-fmap (delta-fmap f) ds)) (n-tail O) ≡⟨ refl ⟩
330 association-law = monad-law-1; 330 association-law = monad-law-1;
331 left-unity-law = monad-law-2; 331 left-unity-law = monad-law-2;
332 right-unity-law = monad-law-2' } 332 right-unity-law = monad-law-2' }
333 333
334 334
335
335 {- 336 {-
337
336 -- Monad-laws (Haskell) 338 -- Monad-laws (Haskell)
337 -- monad-law-h-1 : return a >>= k = k a 339 -- monad-law-h-1 : return a >>= k = k a
338 monad-law-h-1 : {l ll : Level} {A : Set l} {B : Set ll} -> 340 monad-law-h-1 : {l : Level} {A B : Set l} ->
339 (a : A) -> (k : A -> (Delta B)) -> 341 (a : A) -> (k : A -> (Delta B)) ->
340 (return a >>= k) ≡ (k a) 342 (delta-return a >>= k) ≡ (k a)
341 monad-law-h-1 a k = refl 343 monad-law-h-1 a k = refl
342 344
343 345
344 346
345 -- monad-law-h-2 : m >>= return = m 347 -- monad-law-h-2 : m >>= return = m
346 monad-law-h-2 : {l : Level}{A : Set l} -> (m : Delta A) -> (m >>= return) ≡ m 348 monad-law-h-2 : {l : Level}{A : Set l} -> (m : Delta A) -> (m >>= delta-return) ≡ m
347 monad-law-h-2 (mono x) = refl 349 monad-law-h-2 (mono x) = refl
348 monad-law-h-2 (delta x d) = cong (delta x) (monad-law-h-2 d) 350 monad-law-h-2 (delta x d) = cong (delta x) (monad-law-h-2 d)
349 351
350 352
351 -- monad-law-h-3 : m >>= (\x -> k x >>= h) = (m >>= k) >>= h 353
352 monad-law-h-3 : {l ll lll : Level} {A : Set l} {B : Set ll} {C : Set lll} -> 354 -- monad-law-h-3 : m >>= (\x -> f x >>= g) = (m >>= f) >>= g
353 (m : Delta A) -> (k : A -> (Delta B)) -> (h : B -> (Delta C)) -> 355 monad-law-h-3 : {l : Level} {A B C : Set l} ->
354 (m >>= (\x -> k x >>= h)) ≡ ((m >>= k) >>= h) 356 (m : Delta A) -> (f : A -> (Delta B)) -> (g : B -> (Delta C)) ->
355 monad-law-h-3 (mono x) k h = refl 357 (delta-bind m (\x -> delta-bind (f x) g)) ≡ (delta-bind (delta-bind m f) g)
356 monad-law-h-3 (delta x d) k h = {!!} 358 monad-law-h-3 (mono x) f g = refl
359 monad-law-h-3 (delta x d) f g = begin
360 (delta-bind (delta x d) (\x -> delta-bind (f x) g)) ≡⟨ {!!} ⟩
361 (delta-bind (delta-bind (delta x d) f) g) ∎
362
363
364
357 365
358 -} 366 -}
359