comparison em-category.agda @ 107:da14b7f03ff8

no yellow. ready to define category
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 31 Jul 2013 20:07:09 +0900
parents 4dec85377dbc
children e763efd30868
comparison
equal deleted inserted replaced
106:4dec85377dbc 107:da14b7f03ff8
67 {φ : Hom A (FObj T x) x } 67 {φ : Hom A (FObj T x) x }
68 {φ' : Hom A (FObj T y) y } 68 {φ' : Hom A (FObj T y) y }
69 (a : EMObj {x} {φ}) 69 (a : EMObj {x} {φ})
70 (b : EMObj {y} {φ'}) 70 (b : EMObj {y} {φ'})
71 {α : Hom A x y} : Set (c₁ ⊔ c₂ ⊔ ℓ) where 71 {α : Hom A x y} : Set (c₁ ⊔ c₂ ⊔ ℓ) where
72 field 72 EMap : Hom A x y
73 EMap : Hom A x y 73 EMap = α
74 field
74 isEMHom : IsEMHom a b α 75 isEMHom : IsEMHom a b α
75 open Eilenberg-Moore-Hom 76 open Eilenberg-Moore-Hom
76 77
77 EMHom = \(a : EMObj) (b : EMObj) -> {α : Hom A (emobj a) (emobj b) } -> 78 EMHom : {x y : Obj A} {φ : Hom A (FObj T x) x } {φ' : Hom A (FObj T y) y } {α : Hom A x y }
78 Eilenberg-Moore-Hom {emobj a} {emobj b} {emphi {emobj a} a } {emphi b} a b {α} 79 (a : EMObj {x} {φ} ) (b : EMObj {y} {φ'} ) -> Set (c₁ ⊔ c₂ ⊔ ℓ)
79 80 EMHom {x} {y} {φ} {φ'} {α} a b = Eilenberg-Moore-Hom {x} {y} {φ} {φ'} a b {α}
80 Lemma-EM1 : {x : Obj A} 81
81 {φ : Hom A (FObj T x) x} 82 Lemma-EM1 : {x : Obj A} {φ : Hom A (FObj T x) x} (a : EMObj {x} {φ})
82 (a : EMObj {x} {φ})
83 -> A [ A [ φ o FMap T (id1 A x) ] ≈ A [ (id1 A x) o φ ] ] 83 -> A [ A [ φ o FMap T (id1 A x) ] ≈ A [ (id1 A x) o φ ] ]
84 Lemma-EM1 (emObj isAlgebra ) = let 84 Lemma-EM1 {x} {φ} (emObj isAlgebra ) = let open ≈-Reasoning (A) in
85 x = obj isAlgebra
86 φ = phi isAlgebra
87 open ≈-Reasoning (A) in
88 begin 85 begin
89 φ o FMap T (id1 A x) 86 φ o FMap T (id1 A x)
90 ≈⟨ cdr ( IsFunctor.identity (isFunctor T) ) ⟩ 87 ≈⟨ cdr ( IsFunctor.identity (isFunctor T) ) ⟩
91 φ o (id1 A (FObj T x)) 88 φ o (id1 A (FObj T x))
92 ≈⟨ idR ⟩ 89 ≈⟨ idR ⟩
93 φ 90 φ
94 ≈⟨ sym idL ⟩ 91 ≈⟨ sym idL ⟩
95 (id1 A x) o φ 92 (id1 A x) o φ
96 93
97 94
98 EM-id : {a : EMObj } -> EMHom a a 95 EM-id : {x : Obj A} {φ : Hom A (FObj T x) x} {a : EMObj {x} {φ} } -> EMHom a a
99 EM-id {a = a} = record { EMap = id1 A (emobj a) ; 96 EM-id {x} {φ} {a = a} = record {
100 isEMHom = record { homomorphism = Lemma-EM1 a } } 97 isEMHom = record { homomorphism = Lemma-EM1 {x} {φ} a } }
101 98
102 open import Relation.Binary.Core 99 open import Relation.Binary.Core
103 100
104 Lemma-EM2 : {x y z : Obj A} 101 Lemma-EM2 : {x y z : Obj A}
105 {φ : Hom A (FObj T x) x} 102 {φ : Hom A (FObj T x) x}
106 {φ' : Hom A (FObj T y) y} 103 {φ' : Hom A (FObj T y) y}
107 {φ'' : Hom A (FObj T z) z} 104 {φ'' : Hom A (FObj T z) z}
105 {α : Hom A x y}
106 {α' : Hom A y z}
108 (a : EMObj {x} {φ} ) 107 (a : EMObj {x} {φ} )
109 (b : EMObj {y} {φ'} ) 108 (b : EMObj {y} {φ'} )
110 (c : EMObj {z} {φ''} ) 109 (c : EMObj {z} {φ''} )
111 (g : EMHom b c) 110 (g : EMHom {y} {z} {φ'} {φ''} {α'} b c )
112 (f : EMHom a b) -> A [ A [ φ'' o FMap T (A [ (EMap g) o (EMap f) ] ) ] 111 (f : EMHom {x} {y} {φ} {φ'} {α} a b)
112 -> A [ A [ φ'' o FMap T (A [ (EMap g) o (EMap f) ] ) ]
113 ≈ A [ (A [ (EMap g) o (EMap f) ]) o φ ] ] 113 ≈ A [ (A [ (EMap g) o (EMap f) ]) o φ ] ]
114 Lemma-EM2 {_} {_} {_} {φ} {φ'} {φ''} (emObj _) (emObj _) (emObj _) g f = let 114 Lemma-EM2 {_} {_} {_} {φ} {φ'} {φ''} _ _ _ g f = let
115 open ≈-Reasoning (A) in 115 open ≈-Reasoning (A) in
116 begin 116 begin
117 φ'' o FMap T ((EMap g) o (EMap f)) 117 φ'' o FMap T ((EMap g) o (EMap f))
118 ≈⟨ cdr (distr T) ⟩ 118 ≈⟨ cdr (distr T) ⟩
119 φ'' o ( FMap T (EMap g) o FMap T (EMap f) ) 119 φ'' o ( FMap T (EMap g) o FMap T (EMap f) )
122 ≈⟨ car (IsEMHom.homomorphism (isEMHom g)) ⟩ 122 ≈⟨ car (IsEMHom.homomorphism (isEMHom g)) ⟩
123 ( EMap g o φ') o FMap T (EMap f) 123 ( EMap g o φ') o FMap T (EMap f)
124 ≈⟨ sym assoc ⟩ 124 ≈⟨ sym assoc ⟩
125 EMap g o (φ' o FMap T (EMap f) ) 125 EMap g o (φ' o FMap T (EMap f) )
126 ≈⟨ cdr (IsEMHom.homomorphism (isEMHom f)) ⟩ 126 ≈⟨ cdr (IsEMHom.homomorphism (isEMHom f)) ⟩
127 EMap g o (EMap f o φ)
128 ≈⟨ assoc ⟩
127 ( (EMap g) o (EMap f) ) o φ 129 ( (EMap g) o (EMap f) ) o φ
128 130
129 _≗_ : { a : EMObj } { b : EMObj } (f g : EMHom a b ) -> Set ℓ 131 _≗_ : { a : EMObj } { b : EMObj } (f g : EMHom a b ) -> Set ℓ
130 _≗_ f g = A [ EMap f ≈ EMap g ] 132 _≗_ f g = A [ EMap f ≈ EMap g ]
131 133
132 _∙_ : { a b c : EMObj } → 134 _∙_ : { a b c : EMObj } →
133 ( EMHom b c) → (EMHom a b) → EMHom a c 135 ( EMHom b c) → (EMHom a b) → EMHom a c
134 _∙_ {a} {b} {c} g f = record { EMap = A [ (EMap g) o (EMap f) ] ; isEMHom = 136 _∙_ {a} {b} {c} g f = record { isEMHom = record { homomorphism = Lemma-EM2 a b c g f } }
135 record { homomorphism = Lemma-EM2 a b c g f } }
136 137
137 isEilenberg-MooreCategory : IsCategory EMObj EMHom _≗_ _∙_ EM-id 138 isEilenberg-MooreCategory : IsCategory EMObj EMHom _≗_ _∙_ EM-id
138 isEilenberg-MooreCategory = record { isEquivalence = isEquivalence 139 isEilenberg-MooreCategory = record { isEquivalence = isEquivalence
139 ; identityL = KidL 140 ; identityL = KidL
140 ; identityR = KidR 141 ; identityR = KidR