comparison comparison-functor-conv.agda @ 97:2feec58bb02d

seprate comparison functor
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 29 Jul 2013 15:54:58 +0900
parents
children b0ba34a27783
comparison
equal deleted inserted replaced
96:85425bd12835 97:2feec58bb02d
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
18 module comparison-functor
19 { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ }
20 { T : Functor A A }
21 { η : NTrans A A identityFunctor T }
22 { μ : NTrans A A (T ○ T) T }
23 { M' : Monad A T η μ }
24 { K' : Kleisli A T η μ M' }
25 {c₁' c₂' ℓ' : Level} ( B : Category c₁' c₂' ℓ' )
26 { U_K : Functor B A } { F_K : Functor A B }
27 { η_K : NTrans A A identityFunctor ( U_K ○ F_K ) }
28 { ε_K : NTrans B B ( F_K ○ U_K ) identityFunctor }
29 { μ_K : NTrans A A (( U_K ○ F_K ) ○ ( U_K ○ F_K )) ( U_K ○ F_K ) }
30 ( M : Monad A (U_K ○ F_K) η_K μ_K )
31 ( AdjK : Adjunction A B U_K F_K η_K ε_K )
32 ( RK : MResolution A B T U_K F_K {η_K} {ε_K} {μ_K} AdjK )
33 where
34
35 open import nat {c₁} {c₂} {ℓ} {A} { T } { η } { μ } { M' } { K' }
36 open Functor
37 open NTrans
38 open Category.Cat.[_]_~_
39 open MResolution
40
41 ≃-sym : {c₁ c₂ ℓ : Level} { C : Category c₁ c₂ ℓ } {c₁' c₂' ℓ' : Level} { D : Category c₁' c₂' ℓ' }
42 {F G : Functor C D} → F ≃ G → G ≃ F
43 ≃-sym {_} {_} {_} {C} {_} {_} {_} {D} {F} {G} F≃G f = helper (F≃G f)
44 where
45 helper : ∀{a b c d} {f : Hom D a b} {g : Hom D c d} → [ D ] f ~ g → [ D ] g ~ f
46 helper (Category.Cat.refl Ff≈Gf) =
47 Category.Cat.refl {C = D} (IsEquivalence.sym (IsCategory.isEquivalence (Category.isCategory D)) Ff≈Gf)
48
49 -- to T=UF constraints happy
50 hoge : {c₁ c₂ ℓ : Level} { C : Category c₁ c₂ ℓ } {c₁' c₂' ℓ' : Level} { D : Category c₁' c₂' ℓ' }
51 {F G : Functor C D} → F ≃ G → F ≃ G
52 hoge {_} {_} {_} {C} {_} {_} {_} {D} {F} {G} F≃G f = helper (F≃G f)
53 where
54 helper : ∀{a b c d} {f : Hom D a b} {g : Hom D c d} → [ D ] f ~ g → [ D ] f ~ g
55 helper (Category.Cat.refl Ff≈Gf) = Category.Cat.refl Ff≈Gf
56
57 open KleisliHom
58
59 RHom = \(a b : Obj A) -> KleisliHom {c₁} {c₂} {ℓ} {A} { U_K ○ F_K } a b
60 TtoK : (a b : Obj A) -> (KHom a b) -> {g h : Hom A (FObj T b) (FObj ( U_K ○ F_K) b) } ->
61 ([ A ] g ~ h) -> Hom A a (FObj ( U_K ○ F_K ) b)
62 TtoK _ _ f {g} (Category.Cat.refl _) = A [ g o (KMap f) ]
63 TKMap : {a b : Obj A} -> (f : KHom a b) -> Hom A a (FObj ( U_K ○ F_K ) b)
64 TKMap {a} {b} f = TtoK a b f {_} {_} ((hoge (T=UF RK)) (id1 A b))
65
66 KtoT : (a b : Obj A) -> (RHom a b) -> {g h : Hom A (FObj ( U_K ○ F_K ) b) (FObj T b) } ->
67 ([ A ] g ~ h) -> Hom A a (FObj T b)
68 KtoT _ _ f {g} {h} (Category.Cat.refl eq) = A [ g o (KMap f) ]
69 KTMap : {a b : Obj A} -> (f : RHom a b) -> Hom A a (FObj T b)
70 KTMap {a} {b} f = KtoT a b f {_} {_} (( ≃-sym (T=UF RK)) (id1 A b))
71
72 TKMap-cong : {a b : Obj A} {f g : KHom a b} -> A [ KMap f ≈ KMap g ] -> A [ TKMap f ≈ TKMap g ]
73 TKMap-cong {a} {b} {f} {g} eq = helper a b f g eq ((hoge (T=UF RK))( id1 A b ))
74 where
75 open ≈-Reasoning (A)
76 helper : (a b : Obj A) (f g : KHom a b) -> A [ KMap f ≈ KMap g ] ->
77 {conv : Hom A (FObj T b) (FObj ( U_K ○ F_K ) b) } -> ([ A ] conv ~ conv) -> A [ TKMap f ≈ TKMap g ]
78 helper _ _ _ _ eq (Category.Cat.refl _) =
79 (Category.IsCategory.o-resp-≈ (Category.isCategory A)) eq refl-hom
80
81 kfmap : {a b : Obj A} (f : KHom a b) -> Hom B (FObj F_K a) (FObj F_K b)
82 kfmap {_} {b} f = B [ TMap ε_K (FObj F_K b) o FMap F_K (TKMap f) ]
83
84 open Adjunction
85 K_T : Functor KleisliCategory B
86 K_T = record {
87 FObj = FObj F_K
88 ; FMap = kfmap
89 ; isFunctor = record
90 { ≈-cong = ≈-cong
91 ; identity = identity
92 ; distr = distr1
93 }
94 } where
95 identity : {a : Obj A} → B [ kfmap (K-id {a}) ≈ id1 B (FObj F_K a) ]
96 identity {a} = let open ≈-Reasoning (B) in
97 begin
98 kfmap (K-id {a})
99 ≈⟨⟩
100 TMap ε_K (FObj F_K a) o FMap F_K (TKMap (K-id {a}))
101 ≈⟨⟩
102 TMap ε_K (FObj F_K a) o FMap F_K (TMap η_K a)
103 ≈⟨ IsAdjunction.adjoint2 (isAdjunction AdjK) ⟩
104 id1 B (FObj F_K a)
105
106 ≈-cong : {a b : Obj A} -> {f g : KHom a b} → A [ KMap f ≈ KMap g ] → B [ kfmap f ≈ kfmap g ]
107 ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (B) in
108 begin
109 kfmap f
110 ≈⟨⟩
111 TMap ε_K (FObj F_K b) o FMap F_K (TKMap f)
112 ≈⟨ cdr ( fcong F_K (TKMap-cong f≈g)) ⟩
113 TMap ε_K (FObj F_K b) o FMap F_K (TKMap g)
114 ≈⟨⟩
115 kfmap g
116
117 distr1 : {a b c : Obj A} {f : KHom a b} {g : KHom b c} → B [ kfmap (g * f) ≈ (B [ kfmap g o kfmap f ] )]
118 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (B) in
119 begin
120 kfmap (g * f)
121 ≈⟨⟩
122 TMap ε_K (FObj F_K c) o FMap F_K (TKMap (g * f))
123 ≈⟨⟩
124 TMap ε_K (FObj F_K c) o FMap F_K (A [ TMap μ_K c o A [ FMap ( U_K ○ F_K ) (TKMap g) o TKMap f ] ] )
125 ≈⟨ cdr ( distr F_K ) ⟩
126 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o ( FMap F_K (A [ FMap ( U_K ○ F_K ) (TKMap g) o TKMap f ])))
127 ≈⟨ cdr (cdr ( distr F_K )) ⟩
128 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o (( FMap F_K (FMap ( U_K ○ F_K ) (TKMap g))) o (FMap F_K (TKMap f))))
129 ≈⟨ cdr assoc ⟩
130 TMap ε_K (FObj F_K c) o ((( FMap F_K (TMap μ_K c) o ( FMap F_K (FMap (U_K ○ F_K) (TKMap g))))) o (FMap F_K (TKMap f)))
131 ≈⟨ cdr (car (car ( fcong F_K ( μ=UεF RK )))) ⟩
132 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )) o
133 ( FMap F_K (FMap (U_K ○ F_K) (TKMap g)))) o (FMap F_K (TKMap f)))
134 ≈⟨ sym (cdr assoc) ⟩
135 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) ))) o
136 (( FMap F_K (FMap (U_K ○ F_K) (TKMap g))) o (FMap F_K (TKMap f))))
137 ≈⟨ assoc ⟩
138 (TMap ε_K (FObj F_K c) o ( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )))) o
139 (( FMap F_K (FMap (U_K ○ F_K) (TKMap g))) o (FMap F_K (TKMap f)))
140 ≈⟨ car (sym (nat ε_K)) ⟩
141 (TMap ε_K (FObj F_K c) o ( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)))) o
142 (( FMap F_K (FMap (U_K ○ F_K) (TKMap g))) o (FMap F_K (TKMap f)))
143 ≈⟨ sym assoc ⟩
144 TMap ε_K (FObj F_K c) o (( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
145 ((( FMap F_K (FMap (U_K ○ F_K) (TKMap g)))) o (FMap F_K (TKMap f))))
146 ≈⟨ cdr assoc ⟩
147 TMap ε_K (FObj F_K c) o ((( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
148 (( FMap F_K (FMap (U_K ○ F_K) (TKMap g))))) o (FMap F_K (TKMap f)))
149 ≈⟨ cdr ( car (
150 begin
151 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o ((FMap F_K (FMap (U_K ○ F_K) (TKMap g))))
152 ≈⟨⟩
153 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o (FMap (F_K ○ U_K) (FMap F_K (TKMap g)))
154 ≈⟨ sym (nat ε_K) ⟩
155 ( FMap F_K (TKMap g)) o (TMap ε_K (FObj F_K b))
156
157 )) ⟩
158 TMap ε_K (FObj F_K c) o ((( FMap F_K (TKMap g)) o (TMap ε_K (FObj F_K b))) o FMap F_K (TKMap f))
159 ≈⟨ cdr (sym assoc) ⟩
160 TMap ε_K (FObj F_K c) o (( FMap F_K (TKMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (TKMap f)))
161 ≈⟨ assoc ⟩
162 (TMap ε_K (FObj F_K c) o FMap F_K (TKMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (TKMap f))
163 ≈⟨⟩
164 kfmap g o kfmap f
165
166