comparison em-category.agda @ 100:59dec035602c

Eilenberg-Moore Category start
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 30 Jul 2013 17:58:20 +0900
parents
children 0f7086b6a1a6
comparison
equal deleted inserted replaced
99:bd542a1caf08 100:59dec035602c
1 -- -- -- -- -- -- -- --
2 -- Monad to Eilenberg-Moore Category
3 -- defines U^T and F^T as a resolution of Monad
4 -- checks Adjointness
5 --
6 -- Shinji KONO <kono@ie.u-ryukyu.ac.jp>
7 -- -- -- -- -- -- -- --
8
9 -- Monad
10 -- Category A
11 -- A = Category
12 -- Functor T : A → A
13 --T(a) = t(a)
14 --T(f) = tf(f)
15
16 open import Category -- https://github.com/konn/category-agda
17 open import Level
18 --open import Category.HomReasoning
19 open import HomReasoning
20 open import cat-utility
21 open import Category.Cat
22
23 module em-category { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ }
24 { T : Functor A A }
25 { η : NTrans A A identityFunctor T }
26 { μ : NTrans A A (T ○ T) T }
27 { M : Monad A T η μ } where
28
29 --
30 -- Hom in Eilenberg-Moore Category
31 --
32
33 record IsEMAlgebra { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A }
34 (a : Obj A) (φ : FObj T a -> a ) : Set c₁
35 field
36 identity : A [ A [ φ o TMap η a ] ≈ id1 A a ]
37 eval : A [ A [ φ o TMap μ a ] ≈ A [ φ o FMap T φ ]
38 open IsEMAlgebra
39
40 record EMAlgebra { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A }
41 (a : Obj A) (φ : FObj T a -> a ) : Set c₂
42 field
43 isEMAlbgebra : IsEMAlgebra {c₁} {c₂} {ℓ} {A} {T} a φ
44 open EMAlgebra
45
46 data EMObj { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A }
47 {a : Obj A} {φ : FObj T a -> a } {EMAlgebra a φ} : Set ( c₁ ⊔ c₂ )
48 emObj : (IsEMAlgebra a φ) -> EMObj {_} {_} {_} {_} {_} {a} {φ}
49
50 record IsEMHom { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A }
51 (a : EMObj {c₁} {c₂} {ℓ} {A} {T} x φ )
52 (b : EMObj {c₁} {c₂} {ℓ} {A} {T} y φ' ) : Set c₂ where
53 field
54 homomorphism : A [ φ' o FMap T α ] ≈ A [ α o φ ] ]
55 open IsEMHom
56
57 record EMHom { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A }
58 (a : EMObj {c₁} {c₂} {ℓ} {A} {T} x)
59 (b : EMObj {c₁} {c₂} {ℓ} {A} {T} y) : Set c₂ where
60 field
61 EMap : Hom A x y
62 isEMHom : IsEMHom {c₁} {c₂} {ℓ} {A} {T} a b
63 open EMHom
64
65 EM-id : {x : Obj A} a : EMObj EMObj {_} {_} {_} {_} {_} {a}) -> EMHom a a
66 EM-id {x = x} _ = record { EMap = id1 A x ; isEMHom = Lemma-EM1 x }
67
68 open import Relation.Binary.Core
69
70 _≗_ : { a : EMObj } { b : EMObj } (f g : EMHom a b ) -> Set ℓ
71 _≗_ {a} {b} f g = A [ EMap f ≈ EMap g ]
72
73 _∙_ : { a b : EMObj A } → { c : EMObj A } →
74 ( EMHom b c) → ( EMHom a b) → EMHom a c
75 _∙_ {a} {b} {c} g f = record { EMap = A [ (EMap g) o (EMap f) ; isEMHom = Lemma-EM2 a b c g f }
76
77 isEilenberg-MooreCategory : IsCategory ( Obj A ) EMHom _⋍_ _*_ EM-id
78 isEilenberg-MooreCategory = record { isEquivalence = isEquivalence
79 ; identityL = KidL
80 ; identityR = KidR
81 ; o-resp-≈ = Ko-resp
82 ; associative = Kassoc
83 }
84 where
85 open ≈-Reasoning (A)
86 isEquivalence : { a b : Obj A } ->
87 IsEquivalence {_} {_} {EMHom a b} _⋍_
88 isEquivalence {C} {D} = -- this is the same function as A's equivalence but has different types
89 record { refl = refl-hom
90 ; sym = sym
91 ; trans = trans-hom
92 }
93 KidL : {C D : Obj A} -> {f : EMHom C D} → (EM-id * f) ⋍ f
94 KidL {_} {_} {f} = Lemma7 (EMap f)
95 KidR : {C D : Obj A} -> {f : EMHom C D} → (f * EM-id) ⋍ f
96 KidR {_} {_} {f} = Lemma8 (EMap f)
97 Ko-resp : {a b c : Obj A} -> {f g : EMHom a b } → {h i : EMHom b c } →
98 f ⋍ g → h ⋍ i → (h * f) ⋍ (i * g)
99 Ko-resp {a} {b} {c} {f} {g} {h} {i} eq-fg eq-hi = Lemma10 {a} {b} {c} (EMap f) (EMap g) (EMap h) (EMap i) eq-fg eq-hi
100 Kassoc : {a b c d : Obj A} -> {f : EMHom c d } → {g : EMHom b c } → {h : EMHom a b } →
101 (f * (g * h)) ⋍ ((f * g) * h)
102 Kassoc {_} {_} {_} {_} {f} {g} {h} = Lemma9 (EMap f) (EMap g) (EMap h)
103
104 Eilenberg-MooreCategory : Category c₁ c₂ ℓ
105 Eilenberg-MooreCategory =
106 record { Obj = Obj A
107 ; Hom = EMHom
108 ; _o_ = _*_
109 ; _≈_ = _⋍_
110 ; Id = EM-id
111 ; isCategory = isEilenberg-MooreCategory
112 }
113
114 --
115 -- Resolution
116 -- T = U_T U_F
117 -- nat-ε
118 -- nat-η
119 --
120 --
121 --
122 -- U_T : Functor Eilenberg-MooreCategory A
123 -- U_T = record {
124 -- FObj = FObj T
125 -- ; FMap = ufmap
126 -- ; isFunctor = record
127 -- { ≈-cong = ≈-cong
128 -- ; identity = identity
129 -- ; distr = distr1
130 -- }
131 -- } where
132 -- identity : {a : Obj A} → A [ ufmap (EM-id {a}) ≈ id1 A (FObj T a) ]
133 -- identity {a} = let open ≈-Reasoning (A) in
134 -- begin
135 -- TMap μ (a) o FMap T (TMap η a)
136 -- ≈⟨ IsMonad.unity2 (isMonad M) ⟩
137 -- id1 A (FObj T a)
138 -- ∎
139 -- ≈-cong : {a b : Obj A} {f g : EMHom a b} → A [ EMap f ≈ EMap g ] → A [ ufmap f ≈ ufmap g ]
140 -- ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (A) in
141 -- begin
142 -- TMap μ (b) o FMap T (EMap f)
143 -- ≈⟨ cdr (fcong T f≈g) ⟩
144 -- TMap μ (b) o FMap T (EMap g)
145 -- ∎
146 -- distr1 : {a b c : Obj A} {f : EMHom a b} {g : EMHom b c} → A [ ufmap (g * f) ≈ (A [ ufmap g o ufmap f ] )]
147 -- distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (A) in
148 -- begin
149 -- ufmap (g * f)
150 -- ≈⟨⟩
151 -- ufmap {a} {c} ( record { EMap = TMap μ (c) o (FMap T (EMap g) o (EMap f)) } )
152 -- ≈⟨⟩
153 -- TMap μ (c) o FMap T ( TMap μ (c) o (FMap T (EMap g) o (EMap f)))
154 -- ≈⟨ cdr ( distr T) ⟩
155 -- TMap μ (c) o (( FMap T ( TMap μ (c)) o FMap T (FMap T (EMap g) o (EMap f))))
156 -- ≈⟨ assoc ⟩
157 -- (TMap μ (c) o ( FMap T ( TMap μ (c)))) o FMap T (FMap T (EMap g) o (EMap f))
158 -- ≈⟨ car (sym (IsMonad.assoc (isMonad M))) ⟩
159 -- (TMap μ (c) o ( TMap μ (FObj T c))) o FMap T (FMap T (EMap g) o (EMap f))
160 -- ≈⟨ sym assoc ⟩
161 -- TMap μ (c) o (( TMap μ (FObj T c)) o FMap T (FMap T (EMap g) o (EMap f)))
162 -- ≈⟨ cdr (cdr (distr T)) ⟩
163 -- TMap μ (c) o (( TMap μ (FObj T c)) o (FMap T (FMap T (EMap g)) o FMap T (EMap f)))
164 -- ≈⟨ cdr (assoc) ⟩
165 -- TMap μ (c) o ((( TMap μ (FObj T c)) o (FMap T (FMap T (EMap g)))) o FMap T (EMap f))
166 -- ≈⟨ sym (cdr (car (nat μ ))) ⟩
167 -- TMap μ (c) o ((FMap T (EMap g ) o TMap μ (b)) o FMap T (EMap f ))
168 -- ≈⟨ cdr (sym assoc) ⟩
169 -- TMap μ (c) o (FMap T (EMap g ) o ( TMap μ (b) o FMap T (EMap f )))
170 -- ≈⟨ assoc ⟩
171 -- ( TMap μ (c) o FMap T (EMap g ) ) o ( TMap μ (b) o FMap T (EMap f ) )
172 -- ≈⟨⟩
173 -- ufmap g o ufmap f
174 -- ∎
175 --
176 -- open MResolution
177 --
178 -- Resolution_T : MResolution A Eilenberg-MooreCategory T U_T F_T {nat-η} {nat-ε} {nat-μ} Adj_T
179 -- Resolution_T = record {
180 -- T=UF = Lemma11;
181 -- μ=UεF = Lemma12
182 -- }
183 --
184 -- -- end