comparison agda/deltaM/functor.agda @ 110:cd058dd89864

Rewrite Functor-laws for DeltaM
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 28 Jan 2015 22:36:34 +0900
parents ebd0d6e2772c
children 0a3b6cb91a05
comparison
equal deleted inserted replaced
109:5bd5f4a7ce8d 110:cd058dd89864
5 open import basic 5 open import basic
6 open import delta 6 open import delta
7 open import delta.functor 7 open import delta.functor
8 open import deltaM 8 open import deltaM
9 open import nat 9 open import nat
10 open import revision
11 open import laws 10 open import laws
12 open Functor 11 open Functor
13 12
14 module deltaM.functor where 13 module deltaM.functor where
15 14
16 15
17 deltaM-preserve-id : {l : Level} {A : Set l} {n : Rev} 16 deltaM-preserve-id : {l : Level} {A : Set l} {n : Nat}
18 {M : {l' : Level} -> Set l' -> Set l'} 17 {M : {l' : Level} -> Set l' -> Set l'}
19 (functorM : {l' : Level} -> Functor {l'} M) 18 (functorM : {l' : Level} -> Functor {l'} M)
20 {monadM : {l' : Level} -> Monad {l'} M functorM} 19 {monadM : {l' : Level} -> Monad {l'} M functorM}
21 -> (d : DeltaM M {functorM} {monadM} A n) -> deltaM-fmap id d ≡ id d 20 -> (d : DeltaM M {functorM} {monadM} A (S n)) -> deltaM-fmap id d ≡ id d
22 deltaM-preserve-id functorM (deltaM (mono x)) = begin 21 deltaM-preserve-id functorM (deltaM (mono x)) = begin
23 deltaM-fmap id (deltaM (mono x)) ≡⟨ refl ⟩ 22 deltaM-fmap id (deltaM (mono x)) ≡⟨ refl ⟩
24 deltaM (fmap delta-is-functor (fmap functorM id) (mono x)) ≡⟨ refl ⟩ 23 deltaM (fmap delta-is-functor (fmap functorM id) (mono x)) ≡⟨ refl ⟩
25 deltaM (mono (fmap functorM id x)) ≡⟨ cong (\x -> deltaM (mono x)) (preserve-id functorM x) ⟩ 24 deltaM (mono (fmap functorM id x)) ≡⟨ cong (\x -> deltaM (mono x)) (preserve-id functorM x) ⟩
26 deltaM (mono (id x)) ≡⟨ cong (\x -> deltaM (mono x)) refl ⟩ 25 deltaM (mono (id x)) ≡⟨ cong (\x -> deltaM (mono x)) refl ⟩
27 deltaM (mono x) ∎ 26 deltaM (mono x) ∎
28 deltaM-preserve-id functorM (deltaM (delta x d)) = begin 27 deltaM-preserve-id functorM (deltaM (delta x d)) = begin
29 deltaM-fmap id (deltaM (delta x d)) 28 deltaM-fmap id (deltaM (delta x d))
30 ≡⟨ refl ⟩ 29 ≡⟨ refl ⟩
31 deltaM (fmap delta-is-functor (fmap functorM id) (delta x d)) 30 deltaM (fmap delta-is-functor (fmap functorM id) (delta x d))
32 ≡⟨ refl ⟩ 31 ≡⟨ refl ⟩
33 deltaM (delta (fmap functorM id x) (fmap delta-is-functor (fmap functorM id) d)) 32 deltaM (delta (fmap functorM id x) (fmap delta-is-functor (fmap functorM id) d))
34 ≡⟨ cong (\x -> deltaM (delta x (fmap delta-is-functor (fmap functorM id) d))) (preserve-id functorM x) ⟩ 33 ≡⟨ cong (\x -> deltaM (delta x (fmap delta-is-functor (fmap functorM id) d))) (preserve-id functorM x) ⟩
35 deltaM (delta x (fmap delta-is-functor (fmap functorM id) d)) 34 deltaM (delta x (fmap delta-is-functor (fmap functorM id) d))
42 ≡⟨ refl ⟩ 41 ≡⟨ refl ⟩
43 deltaM (delta x d) 42 deltaM (delta x d)
44 43
45 44
46 45
47 deltaM-covariant : {l : Level} {A B C : Set l} {n : Rev} -> 46 deltaM-covariant : {l : Level} {A B C : Set l} {n : Nat} ->
48 {M : {l' : Level} -> Set l' -> Set l'} 47 {M : {l' : Level} -> Set l' -> Set l'}
49 (functorM : {l' : Level} -> Functor {l'} M) 48 (functorM : {l' : Level} -> Functor {l'} M)
50 {monadM : {l' : Level} -> Monad {l'} M functorM} 49 {monadM : {l' : Level} -> Monad {l'} M functorM}
51 (f : B -> C) -> (g : A -> B) -> (d : DeltaM M {functorM} {monadM} A n) -> 50 (f : B -> C) -> (g : A -> B) -> (d : DeltaM M {functorM} {monadM} A (S n)) ->
52 (deltaM-fmap (f ∙ g)) d ≡ ((deltaM-fmap f) ∙ (deltaM-fmap g)) d 51 (deltaM-fmap (f ∙ g)) d ≡ ((deltaM-fmap f) ∙ (deltaM-fmap g)) d
53 deltaM-covariant functorM f g (deltaM (mono x)) = begin 52 deltaM-covariant functorM f g (deltaM (mono x)) = begin
54 deltaM-fmap (f ∙ g) (deltaM (mono x)) ≡⟨ refl ⟩ 53 deltaM-fmap (f ∙ g) (deltaM (mono x)) ≡⟨ refl ⟩
55 deltaM (delta-fmap (fmap functorM (f ∙ g)) (mono x)) ≡⟨ refl ⟩ 54 deltaM (delta-fmap (fmap functorM (f ∙ g)) (mono x)) ≡⟨ refl ⟩
56 deltaM (mono (fmap functorM (f ∙ g) x)) ≡⟨ cong (\x -> (deltaM (mono x))) (covariant functorM g f x) ⟩ 55 deltaM (mono (fmap functorM (f ∙ g) x)) ≡⟨ cong (\x -> (deltaM (mono x))) (covariant functorM g f x) ⟩
57 deltaM (mono (((fmap functorM f) ∙ (fmap functorM g)) x)) ≡⟨ refl ⟩ 56 deltaM (mono (((fmap functorM f) ∙ (fmap functorM g)) x)) ≡⟨ refl ⟩
58 deltaM-fmap f (deltaM-fmap g (deltaM (mono x))) ∎ 57 deltaM-fmap f (deltaM-fmap g (deltaM (mono x))) ∎
59 deltaM-covariant functorM f g (deltaM (delta x d)) = begin 58 deltaM-covariant functorM f g (deltaM (delta x d)) = begin
60 deltaM-fmap (f ∙ g) (deltaM (delta x d)) 59 deltaM-fmap (f ∙ g) (deltaM (delta x d))
61 ≡⟨ refl ⟩ 60 ≡⟨ refl ⟩
62 deltaM (delta-fmap (fmap functorM (f ∙ g)) (delta x d)) 61 deltaM (delta-fmap (fmap functorM (f ∙ g)) (delta x d))
63 ≡⟨ refl ⟩ 62 ≡⟨ refl ⟩
64 deltaM (delta (fmap functorM (f ∙ g) x) (delta-fmap (fmap functorM (f ∙ g)) d)) 63 deltaM (delta (fmap functorM (f ∙ g) x) (delta-fmap (fmap functorM (f ∙ g)) d))
65 ≡⟨ refl ⟩ 64 ≡⟨ refl ⟩
79 ≡⟨ refl ⟩ 78 ≡⟨ refl ⟩
80 (deltaM-fmap f ∙ deltaM-fmap g) (deltaM (delta x d)) 79 (deltaM-fmap f ∙ deltaM-fmap g) (deltaM (delta x d))
81 80
82 81
83 82
84 deltaM-is-functor : {l : Level} {n : Rev} 83 deltaM-is-functor : {l : Level} {n : Nat}
85 {M : {l' : Level} -> Set l' -> Set l'} 84 {M : {l' : Level} -> Set l' -> Set l'}
86 {functorM : {l' : Level} -> Functor {l'} M } 85 {functorM : {l' : Level} -> Functor {l'} M }
87 {monadM : {l' : Level} -> Monad {l'} M functorM} 86 {monadM : {l' : Level} -> Monad {l'} M functorM}
88 -> Functor {l} (\A -> DeltaM M {functorM} {monadM} A n) 87 -> Functor {l} (\A -> DeltaM M {functorM} {monadM} A (S n))
89 deltaM-is-functor {_} {_} {_} {functorM} = record { fmap = deltaM-fmap ; 88 deltaM-is-functor {_} {_} {_} {functorM} = record { fmap = deltaM-fmap ;
90 preserve-id = deltaM-preserve-id functorM ; 89 preserve-id = deltaM-preserve-id functorM ;
91 covariant = (\f g -> deltaM-covariant functorM g f)} 90 covariant = (\f g -> deltaM-covariant functorM g f)}