comparison src/comparison-functor.agda @ 949:ac53803b3b2a

reorganization for apkg
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 21 Dec 2020 16:40:15 +0900
parents comparison-functor.agda@a5f2ca67e7c5
children 45de2b31bf02
comparison
equal deleted inserted replaced
948:dca4b29553cb 949:ac53803b3b2a
1 -- -- -- -- -- -- -- --
2 -- Comparison Functor of Kelisli Category
3 -- defines U_K and F_K as a resolution of Monad
4 -- checks Adjointness
5 --
6 -- Shinji KONO <kono@ie.u-ryukyu.ac.jp>
7 -- -- -- -- -- -- -- --
8
9 open import Category -- https://github.com/konn/category-agda
10 open import Level
11 --open import Category.HomReasoning
12 open import HomReasoning
13 open import cat-utility
14 open import Category.Cat
15 open import Relation.Binary.Core
16
17 module comparison-functor
18 { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ }
19 { T : Functor A A }
20 { η : NTrans A A identityFunctor T }
21 { μ : NTrans A A (T ○ T) T }
22 { M' : IsMonad A T η μ }
23 {c₁' c₂' ℓ' : Level} ( B : Category c₁' c₂' ℓ' )
24 { U_K : Functor B A } { F_K : Functor A B }
25 { η_K : NTrans A A identityFunctor ( U_K ○ F_K ) }
26 { ε_K : NTrans B B ( F_K ○ U_K ) identityFunctor }
27 { μ_K' : NTrans A A (( U_K ○ F_K ) ○ ( U_K ○ F_K )) ( U_K ○ F_K ) }
28 ( AdjK : IsAdjunction A B U_K F_K η_K ε_K )
29 where
30
31 open import adj-monad
32
33 T_K = U_K ○ F_K
34
35 μ_K : NTrans A A (( U_K ○ F_K ) ○ ( U_K ○ F_K )) ( U_K ○ F_K )
36 μ_K = UεF A B U_K F_K ε_K
37
38 M : IsMonad A (U_K ○ F_K ) η_K μ_K
39 M = Monad.isMonad ( Adj2Monad A B ( record { U = U_K; F = F_K ; η = η_K ; ε = ε_K ; isAdjunction = AdjK } ) )
40
41 open import kleisli {c₁} {c₂} {ℓ} {A} { U_K ○ F_K } { η_K } { μ_K } { M }
42
43 open Functor
44 open NTrans
45 open KleisliHom
46 open Adjunction
47 open MResolution
48
49 kfmap : {a b : Obj A} (f : KHom a b) → Hom B (FObj F_K a) (FObj F_K b)
50 kfmap {_} {b} f = B [ TMap ε_K (FObj F_K b) o FMap F_K (KMap f) ]
51
52 K_T : Functor KleisliCategory B
53 K_T = record {
54 FObj = FObj F_K
55 ; FMap = kfmap
56 ; isFunctor = record
57 { ≈-cong = ≈-cong
58 ; identity = identity
59 ; distr = distr1
60 }
61 } where
62 identity : {a : Obj A} → B [ kfmap (K-id {a}) ≈ id1 B (FObj F_K a) ]
63 identity {a} = let open ≈-Reasoning (B) in
64 begin
65 kfmap (K-id {a})
66 ≈⟨⟩
67 TMap ε_K (FObj F_K a) o FMap F_K (KMap (K-id {a}))
68 ≈⟨⟩
69 TMap ε_K (FObj F_K a) o FMap F_K (TMap η_K a)
70 ≈⟨ IsAdjunction.adjoint2 AdjK ⟩
71 id1 B (FObj F_K a)
72
73 ≈-cong : {a b : Obj A} → {f g : KHom a b} → A [ KMap f ≈ KMap g ] → B [ kfmap f ≈ kfmap g ]
74 ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (B) in
75 begin
76 kfmap f
77 ≈⟨⟩
78 TMap ε_K (FObj F_K b) o FMap F_K (KMap f)
79 ≈⟨ cdr ( fcong F_K f≈g) ⟩
80 TMap ε_K (FObj F_K b) o FMap F_K (KMap g)
81 ≈⟨⟩
82 kfmap g
83
84 distr1 : {a b c : Obj A} {f : KHom a b} {g : KHom b c} → B [ kfmap (g * f) ≈ (B [ kfmap g o kfmap f ] )]
85 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (B) in
86 begin
87 kfmap (g * f)
88 ≈⟨⟩
89 TMap ε_K (FObj F_K c) o FMap F_K (KMap (g * f))
90 ≈⟨⟩
91 TMap ε_K (FObj F_K c) o FMap F_K (A [ TMap μ_K c o A [ FMap ( U_K ○ F_K ) (KMap g) o KMap f ] ] )
92 ≈⟨ cdr ( distr F_K ) ⟩
93 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o ( FMap F_K (A [ FMap ( U_K ○ F_K ) (KMap g) o KMap f ])))
94 ≈⟨ cdr (cdr ( distr F_K )) ⟩
95 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o (( FMap F_K (FMap ( U_K ○ F_K ) (KMap g))) o (FMap F_K (KMap f))))
96 ≈⟨ cdr assoc ⟩
97 TMap ε_K (FObj F_K c) o ((( FMap F_K (TMap μ_K c) o ( FMap F_K (FMap (U_K ○ F_K) (KMap g))))) o (FMap F_K (KMap f)))
98 ≈⟨⟩
99 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )) o
100 ( FMap F_K (FMap (U_K ○ F_K) (KMap g)))) o (FMap F_K (KMap f)))
101 ≈⟨ sym (cdr assoc) ⟩
102 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) ))) o
103 (( FMap F_K (FMap (U_K ○ F_K) (KMap g))) o (FMap F_K (KMap f))))
104 ≈⟨ assoc ⟩
105 (TMap ε_K (FObj F_K c) o ( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )))) o
106 (( FMap F_K (FMap (U_K ○ F_K) (KMap g))) o (FMap F_K (KMap f)))
107 ≈⟨ car (sym (nat ε_K)) ⟩
108 (TMap ε_K (FObj F_K c) o ( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)))) o
109 (( FMap F_K (FMap (U_K ○ F_K) (KMap g))) o (FMap F_K (KMap f)))
110 ≈⟨ sym assoc ⟩
111 TMap ε_K (FObj F_K c) o (( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
112 ((( FMap F_K (FMap (U_K ○ F_K) (KMap g)))) o (FMap F_K (KMap f))))
113 ≈⟨ cdr assoc ⟩
114 TMap ε_K (FObj F_K c) o ((( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
115 (( FMap F_K (FMap (U_K ○ F_K) (KMap g))))) o (FMap F_K (KMap f)))
116 ≈⟨ cdr ( car (
117 begin
118 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o ((FMap F_K (FMap (U_K ○ F_K) (KMap g))))
119 ≈⟨⟩
120 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o (FMap (F_K ○ U_K) (FMap F_K (KMap g)))
121 ≈⟨ sym (nat ε_K) ⟩
122 ( FMap F_K (KMap g)) o (TMap ε_K (FObj F_K b))
123
124 )) ⟩
125 TMap ε_K (FObj F_K c) o ((( FMap F_K (KMap g)) o (TMap ε_K (FObj F_K b))) o FMap F_K (KMap f))
126 ≈⟨ cdr (sym assoc) ⟩
127 TMap ε_K (FObj F_K c) o (( FMap F_K (KMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (KMap f)))
128 ≈⟨ assoc ⟩
129 (TMap ε_K (FObj F_K c) o FMap F_K (KMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (KMap f))
130 ≈⟨⟩
131 kfmap g o kfmap f
132
133
134 Lemma-K1 : {a b : Obj A} ( f : Hom A a b ) → B [ FMap K_T ( FMap F_T f) ≈ FMap F_K f ]
135 Lemma-K1 {a} {b} f = let open ≈-Reasoning (B) in
136 begin
137 FMap K_T ( FMap F_T f)
138 ≈⟨⟩
139 TMap ε_K (FObj F_K b) o FMap F_K (KMap( FMap F_T f))
140 ≈⟨⟩
141 TMap ε_K (FObj F_K b) o FMap F_K (A [ TMap η_K b o f ])
142 ≈⟨ cdr ( distr F_K) ⟩
143 TMap ε_K (FObj F_K b) o (FMap F_K (TMap η_K b) o FMap F_K f )
144 ≈⟨ assoc ⟩
145 (TMap ε_K (FObj F_K b) o FMap F_K (TMap η_K b)) o FMap F_K f
146 ≈⟨ car ( IsAdjunction.adjoint2 AdjK) ⟩
147 id1 B (FObj F_K b) o FMap F_K f
148 ≈⟨ idL ⟩
149 FMap F_K f
150
151
152 Lemma-K2 : {a b : Obj A} ( f : KHom a b ) → A [ FMap U_K ( FMap K_T f) ≈ FMap U_T f ]
153 Lemma-K2 {a} {b} f = let open ≈-Reasoning (A) in
154 begin
155 FMap U_K ( FMap K_T f)
156 ≈⟨⟩
157 FMap U_K ( B [ TMap ε_K (FObj F_K b) o FMap F_K (KMap f) ] )
158 ≈⟨ distr U_K ⟩
159 FMap U_K ( TMap ε_K (FObj F_K b)) o FMap U_K (FMap F_K (KMap f) )
160 ≈⟨⟩
161 TMap μ_K b o FMap T_K (KMap f)
162 ≈⟨⟩ -- the definition
163 FMap U_T f
164
165
166 Lemma-K3 : (b : Obj A) → B [ FMap K_T (record { KMap = (TMap η_K b) }) ≈ id1 B (FObj F_K b) ]
167 Lemma-K3 b = let open ≈-Reasoning (B) in
168 begin
169 FMap K_T (record { KMap = (TMap η_K b) })
170 ≈⟨⟩
171 TMap ε_K (FObj F_K b) o FMap F_K (TMap η_K b)
172 ≈⟨ IsAdjunction.adjoint2 AdjK ⟩
173 id1 B (FObj F_K b)
174
175
176 Lemma-K4 : (b c : Obj A) (g : Hom A b (FObj T_K c)) →
177 B [ FMap K_T ( record { KMap = A [ (TMap η_K (FObj T_K c)) o g ] }) ≈ FMap F_K g ]
178 Lemma-K4 b c g = let open ≈-Reasoning (B) in
179 begin
180 FMap K_T ( record { KMap = A [ (TMap η_K (FObj T_K c)) o g ] })
181 ≈⟨⟩
182 TMap ε_K (FObj F_K (FObj T_K c)) o FMap F_K (A [ (TMap η_K (FObj T_K c)) o g ])
183 ≈⟨ cdr (distr F_K) ⟩
184 TMap ε_K (FObj F_K (FObj T_K c)) o ( FMap F_K (TMap η_K (FObj T_K c)) o FMap F_K g )
185 ≈⟨ assoc ⟩
186 (TMap ε_K (FObj F_K (FObj T_K c)) o ( FMap F_K (TMap η_K (FObj T_K c)))) o FMap F_K g
187 ≈⟨ car ( IsAdjunction.adjoint2 AdjK) ⟩
188 id1 B (FObj F_K (FObj T_K c)) o FMap F_K g
189 ≈⟨ idL ⟩
190 FMap F_K g
191
192
193 -- Lemma-K5 : (a : Obj A) → FObj U_K ( FObj K_T a ) = U_T a
194
195 Lemma-K6 : (b c : Obj A) (g : KHom b c) → A [ FMap U_K ( FMap K_T g ) ≈ FMap U_T g ]
196 Lemma-K6 b c g = let open ≈-Reasoning (A) in
197 begin
198 FMap U_K ( FMap K_T g )
199 ≈⟨⟩
200 FMap U_K ( B [ TMap ε_K ( FObj F_K c ) o FMap F_K (KMap g) ] )
201 ≈⟨ distr U_K ⟩
202 FMap U_K ( TMap ε_K ( FObj F_K c )) o FMap U_K ( FMap F_K (KMap g) )
203 ≈⟨⟩
204 TMap μ_K c o FMap U_K ( FMap F_K (KMap g) )
205 ≈⟨⟩
206 FMap U_T g
207
208
209