Mercurial > hg > Members > kono > Proof > category
annotate nat.agda @ 77:528c7e27af91
Resolution U_T, F_T
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 26 Jul 2013 22:07:21 +0900 |
parents | 6c6c3dd8ef12 |
children | b3c023f7c929 |
rev | line source |
---|---|
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
1 |
0 | 2 |
3 -- Monad | |
4 -- Category A | |
5 -- A = Category | |
22 | 6 -- Functor T : A → A |
0 | 7 --T(a) = t(a) |
8 --T(f) = tf(f) | |
9 | |
2 | 10 open import Category -- https://github.com/konn/category-agda |
0 | 11 open import Level |
56 | 12 --open import Category.HomReasoning |
13 open import HomReasoning | |
14 open import cat-utility | |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
15 open import Category.Cat |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
16 |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
17 module nat { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
18 { T : Functor A A } |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
19 { η : NTrans A A identityFunctor T } |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
20 { μ : NTrans A A (T ○ T) T } |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
21 { M : Monad A T η μ } |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
22 { K : Kleisli A T η μ M } where |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
23 |
0 | 24 |
1 | 25 --T(g f) = T(g) T(f) |
26 | |
31 | 27 open Functor |
22 | 28 Lemma1 : {c₁ c₂ l : Level} {A : Category c₁ c₂ l} (T : Functor A A) → {a b c : Obj A} {g : Hom A b c} { f : Hom A a b } |
29 → A [ ( FMap T (A [ g o f ] )) ≈ (A [ FMap T g o FMap T f ]) ] | |
30 Lemma1 = \t → IsFunctor.distr ( isFunctor t ) | |
0 | 31 |
32 | |
7 | 33 open NTrans |
1 | 34 Lemma2 : {c₁ c₂ l : Level} {A : Category c₁ c₂ l} {F G : Functor A A} |
22 | 35 → (μ : NTrans A A F G) → {a b : Obj A} { f : Hom A a b } |
30 | 36 → A [ A [ FMap G f o TMap μ a ] ≈ A [ TMap μ b o FMap F f ] ] |
22 | 37 Lemma2 = \n → IsNTrans.naturality ( isNTrans n ) |
0 | 38 |
22 | 39 -- η : 1_A → T |
40 -- μ : TT → T | |
0 | 41 -- μ(a)η(T(a)) = a |
42 -- μ(a)T(η(a)) = a | |
43 -- μ(a)(μ(T(a))) = μ(a)T(μ(a)) | |
44 | |
45 | |
2 | 46 open Monad |
47 Lemma3 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ} | |
48 { T : Functor A A } | |
7 | 49 { η : NTrans A A identityFunctor T } |
50 { μ : NTrans A A (T ○ T) T } | |
22 | 51 { a : Obj A } → |
2 | 52 ( M : Monad A T η μ ) |
30 | 53 → A [ A [ TMap μ a o TMap μ ( FObj T a ) ] ≈ A [ TMap μ a o FMap T (TMap μ a) ] ] |
22 | 54 Lemma3 = \m → IsMonad.assoc ( isMonad m ) |
2 | 55 |
56 | |
57 Lemma4 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) {a b : Obj A } { f : Hom A a b} | |
22 | 58 → A [ A [ Id {_} {_} {_} {A} b o f ] ≈ f ] |
59 Lemma4 = \a → IsCategory.identityL ( Category.isCategory a ) | |
0 | 60 |
3 | 61 Lemma5 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ} |
62 { T : Functor A A } | |
7 | 63 { η : NTrans A A identityFunctor T } |
64 { μ : NTrans A A (T ○ T) T } | |
22 | 65 { a : Obj A } → |
3 | 66 ( M : Monad A T η μ ) |
30 | 67 → A [ A [ TMap μ a o TMap η ( FObj T a ) ] ≈ Id {_} {_} {_} {A} (FObj T a) ] |
22 | 68 Lemma5 = \m → IsMonad.unity1 ( isMonad m ) |
3 | 69 |
70 Lemma6 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ} | |
71 { T : Functor A A } | |
7 | 72 { η : NTrans A A identityFunctor T } |
73 { μ : NTrans A A (T ○ T) T } | |
22 | 74 { a : Obj A } → |
3 | 75 ( M : Monad A T η μ ) |
30 | 76 → A [ A [ TMap μ a o (FMap T (TMap η a )) ] ≈ Id {_} {_} {_} {A} (FObj T a) ] |
22 | 77 Lemma6 = \m → IsMonad.unity2 ( isMonad m ) |
3 | 78 |
79 -- T = M x A | |
0 | 80 -- nat of η |
81 -- g ○ f = μ(c) T(g) f | |
82 -- η(b) ○ f = f | |
83 -- f ○ η(a) = f | |
22 | 84 -- h ○ (g ○ f) = (h ○ g) ○ f |
0 | 85 |
7 | 86 |
22 | 87 lemma12 : {c₁ c₂ ℓ : Level} (L : Category c₁ c₂ ℓ) { a b c : Obj L } → |
88 ( x : Hom L c a ) → ( y : Hom L b c ) → L [ L [ x o y ] ≈ L [ x o y ] ] | |
18 | 89 lemma12 L x y = |
90 let open ≈-Reasoning ( L ) in | |
91 begin L [ x o y ] ∎ | |
11 | 92 |
4 | 93 open Kleisli |
22 | 94 -- η(b) ○ f = f |
73 | 95 Lemma7 : { a : Obj A } { b : Obj A } ( f : Hom A a ( FObj T b) ) |
96 → A [ join K (TMap η b) f ≈ f ] | |
97 Lemma7 {_} {b} f = | |
98 let open ≈-Reasoning (A) in | |
21 | 99 begin |
73 | 100 join K (TMap η b) f |
21 | 101 ≈⟨ refl-hom ⟩ |
73 | 102 A [ TMap μ b o A [ FMap T ((TMap η b)) o f ] ] |
103 ≈⟨ IsCategory.associative (Category.isCategory A) ⟩ | |
104 A [ A [ TMap μ b o FMap T ((TMap η b)) ] o f ] | |
105 ≈⟨ car ( IsMonad.unity2 ( isMonad ( monad K )) ) ⟩ | |
106 A [ id (FObj T b) o f ] | |
107 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩ | |
21 | 108 f |
109 ∎ | |
7 | 110 |
22 | 111 -- f ○ η(a) = f |
73 | 112 Lemma8 : { a : Obj A } { b : Obj A } |
22 | 113 ( f : Hom A a ( FObj T b) ) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
114 → A [ join K f (TMap η a) ≈ f ] |
73 | 115 Lemma8 {a} {b} f = |
22 | 116 begin |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
117 join K f (TMap η a) |
22 | 118 ≈⟨ refl-hom ⟩ |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
119 A [ TMap μ b o A [ FMap T f o (TMap η a) ] ] |
66 | 120 ≈⟨ cdr ( nat η ) ⟩ |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
121 A [ TMap μ b o A [ (TMap η ( FObj T b)) o f ] ] |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
122 ≈⟨ IsCategory.associative (Category.isCategory A) ⟩ |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
123 A [ A [ TMap μ b o (TMap η ( FObj T b)) ] o f ] |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
124 ≈⟨ car ( IsMonad.unity1 ( isMonad ( monad K )) ) ⟩ |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
125 A [ id (FObj T b) o f ] |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
126 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩ |
22 | 127 f |
128 ∎ where | |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
129 open ≈-Reasoning (A) |
5 | 130 |
22 | 131 -- h ○ (g ○ f) = (h ○ g) ○ f |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
132 Lemma9 : { a b c d : Obj A } |
73 | 133 ( h : Hom A c ( FObj T d) ) |
23 | 134 ( g : Hom A b ( FObj T c) ) |
73 | 135 ( f : Hom A a ( FObj T b) ) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
136 → A [ join K h (join K g f) ≈ join K ( join K h g) f ] |
73 | 137 Lemma9 {a} {b} {c} {d} h g f = |
24 | 138 begin |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
139 join K h (join K g f) |
30 | 140 ≈⟨⟩ |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
141 join K h ( ( TMap μ c o ( FMap T g o f ) ) ) |
28 | 142 ≈⟨ refl-hom ⟩ |
30 | 143 ( TMap μ d o ( FMap T h o ( TMap μ c o ( FMap T g o f ) ) ) ) |
28 | 144 ≈⟨ cdr ( cdr ( assoc )) ⟩ |
30 | 145 ( TMap μ d o ( FMap T h o ( ( TMap μ c o FMap T g ) o f ) ) ) |
28 | 146 ≈⟨ assoc ⟩ --- ( f o ( g o h ) ) = ( ( f o g ) o h ) |
30 | 147 ( ( TMap μ d o FMap T h ) o ( (TMap μ c o FMap T g ) o f ) ) |
25 | 148 ≈⟨ assoc ⟩ |
30 | 149 ( ( ( TMap μ d o FMap T h ) o (TMap μ c o FMap T g ) ) o f ) |
28 | 150 ≈⟨ car (sym assoc) ⟩ |
30 | 151 ( ( TMap μ d o ( FMap T h o ( TMap μ c o FMap T g ) ) ) o f ) |
28 | 152 ≈⟨ car ( cdr (assoc) ) ⟩ |
30 | 153 ( ( TMap μ d o ( ( FMap T h o TMap μ c ) o FMap T g ) ) o f ) |
28 | 154 ≈⟨ car assoc ⟩ |
30 | 155 ( ( ( TMap μ d o ( FMap T h o TMap μ c ) ) o FMap T g ) o f ) |
28 | 156 ≈⟨ car (car ( cdr ( begin |
30 | 157 ( FMap T h o TMap μ c ) |
66 | 158 ≈⟨ nat μ ⟩ |
30 | 159 ( TMap μ (FObj T d) o FMap T (FMap T h) ) |
25 | 160 ∎ |
161 ))) ⟩ | |
30 | 162 ( ( ( TMap μ d o ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) ) o FMap T g ) o f ) |
28 | 163 ≈⟨ car (sym assoc) ⟩ |
30 | 164 ( ( TMap μ d o ( ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) o FMap T g ) ) o f ) |
28 | 165 ≈⟨ car ( cdr (sym assoc) ) ⟩ |
30 | 166 ( ( TMap μ d o ( TMap μ ( FObj T d) o ( FMap T ( FMap T h ) o FMap T g ) ) ) o f ) |
28 | 167 ≈⟨ car ( cdr (cdr (sym (distr T )))) ⟩ |
30 | 168 ( ( TMap μ d o ( TMap μ ( FObj T d) o FMap T ( ( FMap T h o g ) ) ) ) o f ) |
28 | 169 ≈⟨ car assoc ⟩ |
30 | 170 ( ( ( TMap μ d o TMap μ ( FObj T d) ) o FMap T ( ( FMap T h o g ) ) ) o f ) |
28 | 171 ≈⟨ car ( car ( |
27 | 172 begin |
30 | 173 ( TMap μ d o TMap μ (FObj T d) ) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
174 ≈⟨ IsMonad.assoc ( isMonad M) ⟩ |
30 | 175 ( TMap μ d o FMap T (TMap μ d) ) |
27 | 176 ∎ |
177 )) ⟩ | |
30 | 178 ( ( ( TMap μ d o FMap T ( TMap μ d) ) o FMap T ( ( FMap T h o g ) ) ) o f ) |
28 | 179 ≈⟨ car (sym assoc) ⟩ |
30 | 180 ( ( TMap μ d o ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) ) o f ) |
24 | 181 ≈⟨ sym assoc ⟩ |
30 | 182 ( TMap μ d o ( ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) o f ) ) |
28 | 183 ≈⟨ cdr ( car ( sym ( distr T ))) ⟩ |
30 | 184 ( TMap μ d o ( FMap T ( ( ( TMap μ d ) o ( FMap T h o g ) ) ) o f ) ) |
23 | 185 ≈⟨ refl-hom ⟩ |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
186 join K ( ( TMap μ d o ( FMap T h o g ) ) ) f |
23 | 187 ≈⟨ refl-hom ⟩ |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
188 join K ( join K h g) f |
24 | 189 ∎ where open ≈-Reasoning (A) |
3 | 190 |
74
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
191 Lemma10 : {a b c : Obj A} -> (f g : Hom A a (FObj T b) ) → (h i : Hom A b (FObj T c) ) → |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
192 A [ f ≈ g ] → A [ h ≈ i ] → A [ (join K h f) ≈ (join K i g) ] |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
193 Lemma10 {a} {b} {c} f g h i eq-fg eq-hi = let open ≈-Reasoning (A) in |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
194 begin |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
195 join K h f |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
196 ≈⟨⟩ |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
197 TMap μ c o ( FMap T h o f ) |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
198 ≈⟨ cdr ( IsCategory.o-resp-≈ (Category.isCategory A) eq-fg ((IsFunctor.≈-cong (isFunctor T)) eq-hi )) ⟩ |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
199 TMap μ c o ( FMap T i o g ) |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
200 ≈⟨⟩ |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
201 join K i g |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
202 ∎ |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
203 |
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
204 |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
205 record KHom (a : Obj A) (b : Obj A) |
70 | 206 : Set (suc (c₂ ⊔ c₁)) where |
207 field | |
208 KMap : Hom A a ( FObj T b ) | |
69
84a150c980ce
generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
68
diff
changeset
|
209 |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
210 K-id : {a : Obj A} → KHom a a |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
211 K-id {a = a} = record { KMap = TMap η a } |
56 | 212 |
69
84a150c980ce
generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
68
diff
changeset
|
213 open import Relation.Binary.Core |
73 | 214 open KHom |
56 | 215 |
74
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
216 _⋍_ : { a : Obj A } { b : Obj A } (f g : KHom a b ) -> Set ℓ |
73 | 217 _⋍_ {a} {b} f g = A [ KMap f ≈ KMap g ] |
71
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
218 |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
219 _*_ : { a b : Obj A } → { c : Obj A } → |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
220 ( KHom b c) → ( KHom a b) → KHom a c |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
221 _*_ {a} {b} {c} g f = record { KMap = join K {a} {b} {c} (KMap g) (KMap f) } |
70 | 222 |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
223 isKleisliCategory : IsCategory ( Obj A ) KHom _⋍_ _*_ K-id |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
224 isKleisliCategory = record { isEquivalence = isEquivalence |
71
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
225 ; identityL = KidL |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
226 ; identityR = KidR |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
227 ; o-resp-≈ = Ko-resp |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
228 ; associative = Kassoc |
69
84a150c980ce
generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
68
diff
changeset
|
229 } |
84a150c980ce
generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
68
diff
changeset
|
230 where |
73 | 231 open ≈-Reasoning (A) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
232 isEquivalence : { a b : Obj A } -> |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
233 IsEquivalence {_} {_} {KHom a b} _⋍_ |
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
234 isEquivalence {C} {D} = |
71
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
235 record { refl = λ {F} → ⋍-refl {F} |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
236 ; sym = λ {F} {G} → ⋍-sym {F} {G} |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
237 ; trans = λ {F} {G} {H} → ⋍-trans {F} {G} {H} |
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
238 } where |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
239 ⋍-refl : {F : KHom C D} → F ⋍ F |
73 | 240 ⋍-refl = refl-hom |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
241 ⋍-sym : {F G : KHom C D} → F ⋍ G → G ⋍ F |
73 | 242 ⋍-sym = sym |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
243 ⋍-trans : {F G H : KHom C D} → F ⋍ G → G ⋍ H → F ⋍ H |
73 | 244 ⋍-trans = trans-hom |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
245 KidL : {C D : Obj A} -> {f : KHom C D} → (K-id * f) ⋍ f |
73 | 246 KidL {_} {_} {f} = Lemma7 (KMap f) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
247 KidR : {C D : Obj A} -> {f : KHom C D} → (f * K-id) ⋍ f |
73 | 248 KidR {_} {_} {f} = Lemma8 (KMap f) |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
249 Ko-resp : {a b c : Obj A} -> {f g : KHom a b } → {h i : KHom b c } → |
71
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
250 f ⋍ g → h ⋍ i → (h * f) ⋍ (i * g) |
74
49e6eb3ef9c0
Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
73
diff
changeset
|
251 Ko-resp {a} {b} {c} {f} {g} {h} {i} eq-fg eq-hi = Lemma10 {a} {b} {c} (KMap f) (KMap g) (KMap h) (KMap i) eq-fg eq-hi |
72
cbc30519e961
stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
71
diff
changeset
|
252 Kassoc : {a b c d : Obj A} -> {f : KHom c d } → {g : KHom b c } → {h : KHom a b } → |
71
709c1bde54dc
Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
253 (f * (g * h)) ⋍ ((f * g) * h) |
73 | 254 Kassoc {_} {_} {_} {_} {f} {g} {h} = Lemma9 (KMap f) (KMap g) (KMap h) |
3 | 255 |
75 | 256 KleisliCategory : Category c₁ (suc (c₂ ⊔ c₁)) ℓ |
257 KleisliCategory = | |
258 record { Obj = Obj A | |
259 ; Hom = KHom | |
260 ; _o_ = _*_ | |
261 ; _≈_ = _⋍_ | |
262 ; Id = K-id | |
263 ; isCategory = isKleisliCategory | |
264 } | |
56 | 265 |
75 | 266 U_T : Functor KleisliCategory A |
267 U_T = record { | |
268 FObj = FObj T | |
269 ; FMap = ufmap | |
270 ; isFunctor = record | |
271 { ≈-cong = ≈-cong | |
272 ; identity = identity | |
76 | 273 ; distr = distr1 |
75 | 274 } |
275 } where | |
276 ufmap : {a b : Obj A} (f : KHom a b ) -> Hom A (FObj T a) (FObj T b) | |
277 ufmap {a} {b} f = A [ TMap μ (b) o FMap T (KMap f) ] | |
278 identity : {a : Obj A} → A [ ufmap (K-id {a}) ≈ id1 A (FObj T a) ] | |
279 identity {a} = let open ≈-Reasoning (A) in | |
280 begin | |
281 TMap μ (a) o FMap T (TMap η a) | |
282 ≈⟨ IsMonad.unity2 (isMonad M) ⟩ | |
283 id1 A (FObj T a) | |
284 ∎ | |
285 ≈-cong : {a b : Obj A} {f g : KHom a b} → A [ KMap f ≈ KMap g ] → A [ ufmap f ≈ ufmap g ] | |
286 ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (A) in | |
287 begin | |
288 TMap μ (b) o FMap T (KMap f) | |
289 ≈⟨ cdr (fcong T f≈g) ⟩ | |
290 TMap μ (b) o FMap T (KMap g) | |
291 ∎ | |
76 | 292 distr1 : {a b c : Obj A} {f : KHom a b} {g : KHom b c} → A [ ufmap (g * f) ≈ (A [ ufmap g o ufmap f ] )] |
293 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (A) in | |
75 | 294 begin |
295 ufmap (g * f) | |
76 | 296 ≈⟨⟩ |
297 ufmap {a} {c} ( record { KMap = TMap μ (c) o (FMap T (KMap g) o (KMap f)) } ) | |
298 ≈⟨⟩ | |
299 TMap μ (c) o FMap T ( TMap μ (c) o (FMap T (KMap g) o (KMap f))) | |
300 ≈⟨ cdr ( distr T) ⟩ | |
301 TMap μ (c) o (( FMap T ( TMap μ (c)) o FMap T (FMap T (KMap g) o (KMap f)))) | |
302 ≈⟨ assoc ⟩ | |
303 (TMap μ (c) o ( FMap T ( TMap μ (c)))) o FMap T (FMap T (KMap g) o (KMap f)) | |
304 ≈⟨ car (sym (IsMonad.assoc (isMonad M))) ⟩ | |
305 (TMap μ (c) o ( TMap μ (FObj T c))) o FMap T (FMap T (KMap g) o (KMap f)) | |
306 ≈⟨ sym assoc ⟩ | |
307 TMap μ (c) o (( TMap μ (FObj T c)) o FMap T (FMap T (KMap g) o (KMap f))) | |
308 ≈⟨ cdr (cdr (distr T)) ⟩ | |
309 TMap μ (c) o (( TMap μ (FObj T c)) o (FMap T (FMap T (KMap g)) o FMap T (KMap f))) | |
310 ≈⟨ cdr (assoc) ⟩ | |
311 TMap μ (c) o ((( TMap μ (FObj T c)) o (FMap T (FMap T (KMap g)))) o FMap T (KMap f)) | |
312 ≈⟨ sym (cdr (car (nat μ ))) ⟩ | |
313 TMap μ (c) o ((FMap T (KMap g ) o TMap μ (b)) o FMap T (KMap f )) | |
314 ≈⟨ cdr (sym assoc) ⟩ | |
315 TMap μ (c) o (FMap T (KMap g ) o ( TMap μ (b) o FMap T (KMap f ))) | |
316 ≈⟨ assoc ⟩ | |
317 ( TMap μ (c) o FMap T (KMap g ) ) o ( TMap μ (b) o FMap T (KMap f ) ) | |
318 ≈⟨⟩ | |
75 | 319 ufmap g o ufmap f |
320 ∎ | |
321 | |
322 | |
323 ffmap : {a b : Obj A} (f : Hom A a b) -> KHom a b | |
324 ffmap f = record { KMap = A [ TMap η (Category.cod A f) o f ] } | |
325 | |
326 F_T : Functor A KleisliCategory | |
327 F_T = record { | |
328 FObj = \a -> a | |
329 ; FMap = ffmap | |
330 ; isFunctor = record | |
331 { ≈-cong = ≈-cong | |
332 ; identity = identity | |
76 | 333 ; distr = distr1 |
75 | 334 } |
335 } where | |
336 identity : {a : Obj A} → A [ A [ TMap η a o id1 A a ] ≈ TMap η a ] | |
337 identity {a} = IsCategory.identityR ( Category.isCategory A) | |
338 lemma1 : {a b : Obj A} {f g : Hom A a b} → A [ f ≈ g ] → A [ TMap η b ≈ TMap η b ] | |
339 lemma1 f≈g = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory A )) | |
340 ≈-cong : {a b : Obj A} {f g : Hom A a b} → A [ f ≈ g ] → A [ A [ TMap η (Category.cod A f) o f ] ≈ A [ TMap η (Category.cod A g) o g ] ] | |
341 ≈-cong f≈g = (IsCategory.o-resp-≈ (Category.isCategory A)) f≈g ( lemma1 f≈g ) | |
76 | 342 distr1 : {a b c : Obj A} {f : Hom A a b} {g : Hom A b c} → |
75 | 343 ( ffmap (A [ g o f ]) ⋍ ( ffmap g * ffmap f ) ) |
77 | 344 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (A) in |
75 | 345 begin |
346 KMap (ffmap (A [ g o f ])) | |
77 | 347 ≈⟨⟩ |
348 TMap η (c) o (g o f) | |
349 ≈⟨ assoc ⟩ | |
350 (TMap η (c) o g) o f | |
351 ≈⟨ car (sym (nat η)) ⟩ | |
352 (FMap T g o TMap η (b)) o f | |
353 ≈⟨ sym idL ⟩ | |
354 id1 A (FObj T c) o ((FMap T g o TMap η (b)) o f) | |
355 ≈⟨ sym (car (IsMonad.unity2 (isMonad M))) ⟩ | |
356 (TMap μ c o FMap T (TMap η c)) o ((FMap T g o TMap η (b)) o f) | |
357 ≈⟨ sym assoc ⟩ | |
358 TMap μ c o ( FMap T (TMap η c) o ((FMap T g o TMap η (b)) o f) ) | |
359 ≈⟨ cdr (cdr (sym assoc)) ⟩ | |
360 TMap μ c o ( FMap T (TMap η c) o (FMap T g o (TMap η (b) o f))) | |
361 ≈⟨ cdr assoc ⟩ | |
362 TMap μ c o ( ( FMap T (TMap η c) o FMap T g ) o (TMap η (b) o f) ) | |
363 ≈⟨ sym (cdr ( car ( distr T ))) ⟩ | |
364 TMap μ c o ( ( FMap T (TMap η c o g)) o (TMap η (b) o f)) | |
365 ≈⟨ assoc ⟩ | |
366 (TMap μ c o ( FMap T (TMap η c o g))) o (TMap η (b) o f) | |
367 ≈⟨ assoc ⟩ | |
368 ((TMap μ c o (FMap T (TMap η c o g))) o TMap η b) o f | |
369 ≈⟨ sym assoc ⟩ | |
370 (TMap μ c o (FMap T (TMap η c o g))) o (TMap η b o f) | |
371 ≈⟨ sym assoc ⟩ | |
372 TMap μ c o ( (FMap T (TMap η c o g)) o (TMap η b o f) ) | |
373 ≈⟨⟩ | |
374 join K (TMap η c o g) (TMap η b o f) | |
375 ≈⟨⟩ | |
75 | 376 KMap ( ffmap g * ffmap f ) |
377 ∎ | |
378 | |
77 | 379 nat-ε : NTrans KleisliCategory KleisliCategory identityFunctor ( F_T ○ U_T ) |
380 nat-ε = record { TMap = \a -> id1 A ( FObj T a ) ; isNTrans = isNTrans } where | |
381 naturality : ? | |
382 naturality = ? | |
383 isNtrans : IsNTrans KleisliCategory KleisliCategory identityFunctor ( F_T ○ U_T ) | |
384 isNtrans = record { naturality = naturality } | |
385 | |
386 Lemma11 : {a : Obj A } -> A [ TMap μ a ≈ FMap U_T ( TMap nat-ε ( FObj F_T a ) ) ] | |
387 Lemma11 = ? | |
388 | |
389 --Lemma12 : T = F_T ○ U_T | |
390 --Lemma12 = ? | |
391 | |
392 Resoution_T : Adjunction A KleisliCategory U_T F_T η nat-ε | |
393 Resoution_T = record { | |
394 isAdjunction = record { | |
395 adjoint1 = adjoint1 ; | |
396 adjoint2 = adjoint2 | |
397 } | |
398 } where | |
399 adjoint1 : ? | |
400 adjoint1 = ? | |
401 adjoint2 : ? | |
402 adjoint2 = ? | |
403 | |
75 | 404 |
405 | |
406 | |
407 |