annotate src/yoneda.agda @ 1028:28569574e3cf

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 30 Mar 2021 15:20:08 +0900
parents e7b0db851a70
children 40c39d3e6a75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
1 ---
189
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
2 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
3 -- A → Sets^A^op : Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
4 -- Contravariant Functor h_a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
5 -- Nat(h_a,F)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
6 -- Shinji KONO <kono@ie.u-ryukyu.ac.jp>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
7 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 188
diff changeset
8
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Category -- https://github.com/konn/category-agda
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Level
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Category.Sets
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
12 open import cat-utility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
13 module yoneda { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) (I : Set c₁) ( small : Small A I ) where
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open import HomReasoning
179
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
16 open import Relation.Binary.Core
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
17 open import Relation.Binary
781
340708e8d54f fix for 2.5.4.2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 693
diff changeset
18 open import Relation.Binary.PropositionalEquality hiding ( [_] ; sym )
340708e8d54f fix for 2.5.4.2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 693
diff changeset
19
179
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
20
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 -- Contravariant Functor : op A → Sets ( Obj of Sets^{A^op} )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
23 -- Obj and Hom of Sets^A^op
181
b58453d90db6 contravariant functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
24
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
25 open Functor
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
26 open NTrans
184
d2d749318bee oeration
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
27
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
28 SetsAop : Category (suc ℓ ⊔ (suc (suc c₂) ⊔ suc c₁)) (suc ℓ ⊔ (suc (suc c₂) ⊔ suc c₁)) (c₂ ⊔ c₁)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
29 SetsAop = record { Obj = YObj
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
30 ; Hom = YHom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
31 ; _o_ = _+_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
32 ; _≈_ = _==_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
33 ; Id = Yid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
34 ; isCategory = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
35 isEquivalence = record {refl = refl ; trans = λ {i} {j} {k} → trans1 {_} {_} {i} {j} {k} ; sym = λ {i j} → sym1 {_} {_} {i} {j}}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
36 ; identityL = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
37 ; identityR = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
38 ; o-resp-≈ = λ{a b c f g h i } → o-resp-≈ {a} {b} {c} {f} {g} {h} {i}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
39 ; associative = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
40 } } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
41 open ≈-Reasoning (Sets {c₂})
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
42 YObj : Set (suc ℓ ⊔ (suc (suc c₂) ⊔ suc c₁))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
43 YObj = Functor (Category.op A) (Sets {c₂})
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
44 YHom : ( f : YObj ) → (g : YObj ) → Set (suc ℓ ⊔ (suc (suc c₂) ⊔ suc c₁))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
45 YHom f g = NTrans (Category.op A) (Sets {c₂}) f g
184
d2d749318bee oeration
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
46
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
47 Yid : {a : YObj } → YHom a a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
48 Yid {a} = record { TMap = λ a → λ x → x ; isNTrans = isNTrans1 {a} } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
49 isNTrans1 : {a : YObj } → IsNTrans (Category.op A) (Sets {c₂}) a a (λ a → λ x → x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
50 isNTrans1 {a} = record { commute = refl }
184
d2d749318bee oeration
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
51
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
52 _+_ : {a b c : YObj} → YHom b c → YHom a b → YHom a c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
53 _+_ {a} {b} {c} f g =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
54 record { TMap = λ x → Sets [ TMap f x o TMap g x ] ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
55 isNTrans = record { commute = λ {a₁ b₁ h} → commute1 a b c f g a₁ b₁ h } } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
56 commute1 : (a b c : YObj ) (f : YHom b c) (g : YHom a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
57 (a₁ b₁ : Obj (Category.op A)) (h : Hom (Category.op A) a₁ b₁) →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
58 Sets [ Sets [ FMap c h o Sets [ TMap f a₁ o TMap g a₁ ] ] ≈
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
59 Sets [ Sets [ TMap f b₁ o TMap g b₁ ] o FMap a h ] ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
60 commute1 a b c f g a₁ b₁ h = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
61 Sets [ FMap c h o Sets [ TMap f a₁ o TMap g a₁ ] ] ≈⟨ assoc {_} {_} {_} {_} {FMap c h } {TMap f a₁} {TMap g a₁} ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
62 Sets [ Sets [ FMap c h o TMap f a₁ ] o TMap g a₁ ] ≈⟨ car (nat f) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
63 Sets [ Sets [ TMap f b₁ o FMap b h ] o TMap g a₁ ] ≈↑⟨ assoc {_} {_} {_} {_} { TMap f b₁} {FMap b h } {TMap g a₁}⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
64 Sets [ TMap f b₁ o Sets [ FMap b h o TMap g a₁ ] ] ≈⟨ cdr {_} {_} {_} {_} {_} { TMap f b₁} (nat g) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
65 Sets [ TMap f b₁ o Sets [ TMap g b₁ o FMap a h ] ] ≈↑⟨ assoc {_} {_} {_} {_} {TMap f b₁} {TMap g b₁} { FMap a h} ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
66 Sets [ Sets [ TMap f b₁ o TMap g b₁ ] o FMap a h ] ∎
186
b2e01aa0924d y-nat (FMap of Yoneda Functor )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
67
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
68 _==_ : {a b : YObj} → YHom a b → YHom a b → Set (c₂ ⊔ c₁)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
69 _==_ f g = ∀{x : Obj (Category.op A)} → (Sets {c₂}) [ TMap f x ≈ TMap g x ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
70
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
71 sym1 : {a b : YObj } {i j : YHom a b } → i == j → j == i
358
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 300
diff changeset
72 sym1 {a} {b} {i} {j} eq {x} = sym eq
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
73 trans1 : {a b : YObj } {i j k : YHom a b} → i == j → j == k → i == k
358
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 300
diff changeset
74 trans1 {a} {b} {i} {j} {k} i=j j=k {x} = trans-hom i=j j=k
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
75 o-resp-≈ : {A₁ B C : YObj} {f g : YHom A₁ B} {h i : YHom B C} →
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
76 f == g → h == i → (h + f) == (i + g)
358
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 300
diff changeset
77 o-resp-≈ {a} {b} {c} {f} {g} {h} {i} f=g h=i {x} = resp f=g h=i
186
b2e01aa0924d y-nat (FMap of Yoneda Functor )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
78
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
79 -- A is Locally small
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
80 postulate ≈-≡ : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) {a b : Obj A } { x y : Hom A a b } → (x≈y : A [ x ≈ y ]) → x ≡ y
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
81
949
ac53803b3b2a reorganization for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 783
diff changeset
82 import Axiom.Extensionality.Propositional
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
83 -- Extensionality a b = {A : Set a} {B : A → Set b} {f g : (x : A) → B x} → (∀ x → f x ≡ g x) → f ≡ g → ( λ x → f x ≡ λ x → g x )
949
ac53803b3b2a reorganization for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 783
diff changeset
84 postulate extensionality : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) → Axiom.Extensionality.Propositional.Extensionality c₂ c₂
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
85
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
86 ----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
87 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
88 -- Object mapping in Yoneda Functor
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
89 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
90 ----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
91
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
92 open import Function
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
93
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
94 y-obj : (a : Obj A) → Functor (Category.op A) (Sets {c₂})
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
95 y-obj a = record {
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
96 FObj = λ b → Hom (Category.op A) a b ;
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
97 FMap = λ {b c : Obj A } → λ ( f : Hom A c b ) → λ (g : Hom A b a ) → (Category.op A) [ f o g ] ;
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
98 isFunctor = record {
468
c375d8f93a2c discrete category and product from a limit
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 358
diff changeset
99 identity = λ {b} → extensionality A ( λ x → lemma-y-obj1 {b} x ) ;
c375d8f93a2c discrete category and product from a limit
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 358
diff changeset
100 distr = λ {a} {b} {c} {f} {g} → extensionality A ( λ x → lemma-y-obj2 a b c f g x ) ;
c375d8f93a2c discrete category and product from a limit
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 358
diff changeset
101 ≈-cong = λ eq → extensionality A ( λ x → lemma-y-obj3 x eq )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
102 }
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
103 } where
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
104 lemma-y-obj1 : {b : Obj A } → (x : Hom A b a) → (Category.op A) [ id1 A b o x ] ≡ x
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
105 lemma-y-obj1 {b} x = let open ≈-Reasoning (Category.op A) in ≈-≡ A idL
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
106 lemma-y-obj2 : (a₁ b c : Obj A) (f : Hom A b a₁) (g : Hom A c b ) → (x : Hom A a₁ a )→
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
107 Category.op A [ Category.op A [ g o f ] o x ] ≡ (Sets [ _[_o_] (Category.op A) g o _[_o_] (Category.op A) f ]) x
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
108 lemma-y-obj2 a₁ b c f g x = let open ≈-Reasoning (Category.op A) in ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
109 Category.op A [ Category.op A [ g o f ] o x ] ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
110 Category.op A [ g o Category.op A [ f o x ] ] ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
111 ( λ x → Category.op A [ g o x ] ) ( ( λ x → Category.op A [ f o x ] ) x ) ∎ )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
112 lemma-y-obj3 : {b c : Obj A} {f g : Hom A c b } → (x : Hom A b a ) → A [ f ≈ g ] → Category.op A [ f o x ] ≡ Category.op A [ g o x ]
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
113 lemma-y-obj3 {_} {_} {f} {g} x eq = let open ≈-Reasoning (Category.op A) in ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
114 Category.op A [ f o x ] ≈⟨ resp refl-hom eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
115 Category.op A [ g o x ] ∎ )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
116
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
117 ----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
118 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
119 -- Hom mapping in Yoneda Functor
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
120 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
121 ----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
122
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
123 y-tmap : ( a b : Obj A ) → (f : Hom A a b ) → (x : Obj (Category.op A)) →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
124 FObj (y-obj a) x → FObj (y-obj b ) x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
125 y-tmap a b f x = λ ( g : Hom A x a ) → A [ f o g ] -- ( h : Hom A x b )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
126
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
127 y-map : {a b : Obj A } → (f : Hom A a b ) → NTrans (Category.op A) (Sets {c₂}) (y-obj a) (y-obj b)
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
128 y-map {a} {b} f = record { TMap = y-tmap a b f ; isNTrans = isNTrans1 {a} {b} f } where
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
129 lemma-y-obj4 : {a₁ b₁ : Obj (Category.op A)} {g : Hom (Category.op A) a₁ b₁} → {a b : Obj A } → (f : Hom A a b ) →
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
130 Sets [ Sets [ FMap (y-obj b) g o y-tmap a b f a₁ ] ≈
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
131 Sets [ y-tmap a b f b₁ o FMap (y-obj a) g ] ]
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
132 lemma-y-obj4 {a₁} {b₁} {g} {a} {b} f = let open ≈-Reasoning A in extensionality A ( λ x → ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
133 A [ A [ f o x ] o g ] ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
134 A [ f o A [ x o g ] ] ∎ ) )
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
135 isNTrans1 : {a b : Obj A } → (f : Hom A a b ) → IsNTrans (Category.op A) (Sets {c₂}) (y-obj a) (y-obj b) (y-tmap a b f )
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
136 isNTrans1 {a} {b} f = record { commute = λ{a₁ b₁ g } → lemma-y-obj4 {a₁} {b₁} {g} {a} {b} f }
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
137
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
138 -----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
139 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
140 -- Yoneda Functor itself
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
141 --
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
142 -----
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
143
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
144 YonedaFunctor : Functor A SetsAop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
145 YonedaFunctor = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
146 FObj = λ a → y-obj a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
147 ; FMap = λ f → y-map f
186
b2e01aa0924d y-nat (FMap of Yoneda Functor )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
148 ; isFunctor = record {
187
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 186
diff changeset
149 identity = identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 186
diff changeset
150 ; distr = distr1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 186
diff changeset
151 ; ≈-cong = ≈-cong
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
152 } } where
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
153 ≈-cong : {a b : Obj A} {f g : Hom A a b} → A [ f ≈ g ] → SetsAop [ y-map f ≈ y-map g ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
154 ≈-cong {a} {b} {f} {g} eq = let open ≈-Reasoning A in -- (λ x g₁ → A [ f o g₁ ] ) ≡ (λ x g₁ → A [ g o g₁ ] )
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
155 extensionality A ( λ h → ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
156 A [ f o h ] ≈⟨ resp refl-hom eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
157 A [ g o h ] ∎ ) )
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
158 identity : {a : Obj A} → SetsAop [ y-map (id1 A a) ≈ id1 SetsAop (y-obj a ) ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
159 identity {a} = let open ≈-Reasoning A in -- (λ x g → A [ id1 A a o g ] ) ≡ (λ a₁ x → x)
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
160 extensionality A ( λ g → ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
161 A [ id1 A a o g ] ≈⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
162 g ∎ ) )
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
163 distr1 : {a b c : Obj A} {f : Hom A a b} {g : Hom A b c} → SetsAop [ y-map (A [ g o f ]) ≈ SetsAop [ y-map g o y-map f ] ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
164 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning A in -- (λ x g₁ → (A [ (A [ g o f] o g₁ ]))) ≡ (λ x x₁ → A [ g o A [ f o x₁ ] ] )
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
165 extensionality A ( λ h → ≈-≡ A ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
166 A [ A [ g o f ] o h ] ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
167 A [ g o A [ f o h ] ] ∎ ) )
185
173d078ee443 Yoneda join
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 184
diff changeset
168
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
169 ------
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
170 --
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
171 -- Hom(_ , _) : Obj (op A) → Obj A → Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
172 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
173 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
174 ------
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
175
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
176 -- module _ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
177 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
178 -- open import Category.Constructions.Product
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
179 -- open import Data.Product renaming (_×_ to _*_)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
180 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
181 -- HomAAop : Functor ((Category.op A) × A) (Sets {c₂})
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
182 -- HomAAop = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
183 -- FObj = λ x → Hom A (proj₁ x) (proj₂ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
184 -- -- f : Hom (Category.op A × A) A₁ B
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
185 -- -- g : Category.Category.Hom A (proj₁ A₁) (proj₂ A₁)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
186 -- ; FMap = λ f g → A [ A [ proj₂ f o g ] o proj₁ f ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
187 -- ; isFunctor = record { ≈-cong = λ {a} {b} {f} {g} f=g → extensionality A ( λ h → cong (λ k → A [ A [ proj₂ k o h ] o (proj₁ k) ] ) {!!})
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
188 -- ; distr = {!!} ; identity = {!!} }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
189 -- } where open ≈-Reasoning A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
190
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
191 ------
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
192 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
193 -- Yoneda Lemma
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
194 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
195 -- (F : Obj SetsAop) → (
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
196 -- Hom SetsAop (FObj YonedaFunctor a , F ) ≅ FObj F a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
197 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
198 -- F : Functor (co A) Sets ∈ Obj SetsAop
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
199 --
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 299
diff changeset
200 -- F(a) → Nat(h_a,F)
191
45191dc3f78a nat continue...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 190
diff changeset
201 -- x ∈ F(a) , (g : Hom A b a) → ( FMap F g ) x
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
202 ------
187
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 186
diff changeset
203
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
204 F2Natmap : {a : Obj A} → {F : Obj SetsAop }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
205 → {x : FObj F a} → (b : Obj (Category.op A)) → Hom Sets (FObj (y-obj a) b) (FObj F b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
206 F2Natmap {a} {F} {x} b = λ ( g : Hom A b a ) → ( FMap F g ) x
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
207
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
208 F2Nat : {a : Obj A} → {F : Obj SetsAop } → FObj F a → Hom SetsAop (y-obj a) F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
209 F2Nat {a} {F} x = record { TMap = F2Natmap {a} {F} {x} ; isNTrans = isNTrans1 } where
192
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
210 commute1 : {a₁ b : Obj (Category.op A)} {f : Hom (Category.op A) a₁ b} (g : Hom A a₁ a) →
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
211 (Sets [ FMap F f o FMap F g ]) x ≡ FMap F (A [ g o f ] ) x
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
212 commute1 g = let open ≈-Reasoning (Sets) in
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
213 cong ( λ f → f x ) ( sym ( distr F ) )
191
45191dc3f78a nat continue...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 190
diff changeset
214 commute : {a₁ b : Obj (Category.op A)} {f : Hom (Category.op A) a₁ b} →
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
215 Sets [ Sets [ FMap F f o F2Natmap {a} {F} {x} a₁ ] ≈ Sets [ F2Natmap {a} {F} {x} b o FMap (y-obj a) f ] ]
192
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
216 commute {a₁} {b} {f} = let open ≈-Reasoning (Sets) in
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
217 begin
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
218 Sets [ FMap F f o F2Natmap {a} {F} {x} a₁ ]
192
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
219 ≈⟨⟩
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
220 Sets [ FMap F f o (λ ( g : Hom A a₁ a ) → ( FMap F g ) x) ]
468
c375d8f93a2c discrete category and product from a limit
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 358
diff changeset
221 ≈⟨ extensionality A ( λ (g : Hom A a₁ a) → commute1 {a₁} {b} {f} g ) ⟩
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
222 Sets [ (λ ( g : Hom A b a ) → ( FMap F g ) x) o FMap (y-obj a) f ]
192
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
223 ≈⟨⟩
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
224 Sets [ F2Natmap {a} {F} {x} b o FMap (y-obj a) f ]
192
d7e4b7b441be F(a) → Nat(h_a,F) done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 191
diff changeset
225
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
226 isNTrans1 : IsNTrans (Category.op A) (Sets {c₂}) (y-obj a) F (F2Natmap {a} {F})
191
45191dc3f78a nat continue...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 190
diff changeset
227 isNTrans1 = record { commute = λ {a₁ b f} → commute {a₁} {b} {f} }
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
228
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
229 --
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
230 -- Obj Part : SetAop (Y - , F) ≅ F
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
231 --
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
232
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
233 -- F(a) <- Nat(h_a,F)
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
234 Nat2F : {a : Obj A} → {F : Obj SetsAop } → Hom SetsAop (y-obj a) F → FObj F a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
235 Nat2F {a} {F} ha = ( TMap ha a ) (id1 A a)
190
b82d7b054f28 one to one nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 189
diff changeset
236
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
237 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
238 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
239 -- Prove Bijection (as routine exercise ...)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
240 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
241 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
242
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
243 F2Nat→Nat2F : {a : Obj A } → {F : Obj SetsAop } → (fa : FObj F a)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
244 → Nat2F {a} {F} (F2Nat {a} {F} fa) ≡ fa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
245 F2Nat→Nat2F {a} {F} fa = let open ≈-Reasoning (Sets) in cong ( λ f → f fa ) (
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
246 -- FMap F (Category.Category.Id A) fa ≡ fa
194
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
247 begin
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
248 ( FMap F (id1 A _ ))
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
249 ≈⟨ IsFunctor.identity (isFunctor F) ⟩
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
250 id1 Sets (FObj F a)
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
251 ∎ )
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
252
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
253 ≡-cong = Relation.Binary.PropositionalEquality.cong
193
4e6f080f0107 isomorphic problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 192
diff changeset
254
197
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
255 -- ha : NTrans (op A) Sets (y-obj {a}) F
ec50ff189f62 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 196
diff changeset
256 -- FMap F g o TMap ha a ≈ TMap ha b o FMap (y-obj {a}) g
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
257 Nat2F→F2Nat : {a : Obj A } → {F : Obj SetsAop } → (ha : Hom SetsAop (y-obj a) F)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
258 → SetsAop [ F2Nat {a} {F} (Nat2F {a} {F} ha) ≈ ha ]
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
259 Nat2F→F2Nat {a} {F} ha {b} = let open ≡-Reasoning in begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
260 TMap (F2Nat {a} {F} (Nat2F {a} {F} ha)) b ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
261 (λ g → FMap F g (TMap ha a (id1 A _))) ≡⟨ extensionality A (λ g → ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
262 FMap F g (TMap ha a (id1 A _)) ≡⟨ ≡-cong (λ f → f (id1 A _)) (IsNTrans.commute (isNTrans ha)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
263 TMap ha b (FMap (y-obj a) g (id1 A _)) ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
264 TMap ha b ( A [ id1 A _ o g ] ) ≡⟨ ≡-cong ( TMap ha b ) ( ≈-≡ A (≈-Reasoning.idL A)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
265 TMap ha b g ∎ )) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
266 TMap ha b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
267
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
268
196
c040369bd6d4 give up injective on Object?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 195
diff changeset
269 -- Yoneda's Lemma
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 198
diff changeset
270 -- Yoneda Functor is full and faithfull
196
c040369bd6d4 give up injective on Object?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 195
diff changeset
271 -- that is FMapp Yoneda is injective and surjective
194
3271d2d04b17 F2Nat→Nat2F done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 193
diff changeset
272
196
c040369bd6d4 give up injective on Object?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 195
diff changeset
273 -- λ b g → (A Category.o f₁) g
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
274 YonedaLemma1 : {a a' : Obj A } {f : FObj (FObj YonedaFunctor a) a' }
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
275 → SetsAop [ F2Nat {a'} {FObj YonedaFunctor a} f ≈ FMap YonedaFunctor f ]
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
276 YonedaLemma1 {a} {a'} {f} = refl
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
277
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
278 YonedaIso0 : {a a' : Obj A } {f : FObj (FObj YonedaFunctor a) a' }
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
279 → Nat2F ( FMap YonedaFunctor f ) ≡ f
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
280 YonedaIso0 {a} {a'} {f} = ≈-≡ A (≈-Reasoning.idR A)
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
281
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
282 YonedaIso1 : {a a' : Obj A } → (ha : Hom SetsAop (y-obj a) (y-obj a'))
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
283 → SetsAop [ FMap YonedaFunctor (Nat2F {a} ha) ≈ ha ]
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
284 YonedaIso1 {a} {a'} ha = Nat2F→F2Nat ha
987
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
285
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
286 domF : (y : Obj SetsAop) → {x : Obj (Category.op A)} → FObj y x → Obj A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
287 domF y {x} z = x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 949
diff changeset
288
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
289 YonedaLemma2 : {a a' b : Obj A } (f : Hom A a a' ) → NTrans (Category.op A) Sets (FObj YonedaFunctor a) (FObj YonedaFunctor a')
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
290 YonedaLemma2 f = FMap YonedaFunctor f
991
e7848ad0c6f9 remove suc level in CCCGraph
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 990
diff changeset
291
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
292 YonedaLemma3 : {a a' b : Obj A } (f : Hom A a a' ) → (g : Hom A b a ) → Hom A b a' -- f o g
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
293 YonedaLemma3 {a} {a'} {b} f g = TMap (FMap YonedaFunctor f) b g
989
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
294
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
295 YonedaLemma4 : {a a' b : Obj A } (f : Hom A a a' ) → (g : Hom A b a ) → Hom A b a' -- f o g
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
296 YonedaLemma4 {a} {a'} {b} f = TMap (FMap YonedaFunctor f) b
989
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
297
991
e7848ad0c6f9 remove suc level in CCCGraph
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 990
diff changeset
298 --
e7848ad0c6f9 remove suc level in CCCGraph
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 990
diff changeset
299 -- f ∈ FMap (FObj YonedaFunctor a') a
e7848ad0c6f9 remove suc level in CCCGraph
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 990
diff changeset
300 --
e7848ad0c6f9 remove suc level in CCCGraph
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 990
diff changeset
301
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
302 -- g f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
303 -- b --→ a ------→ a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
304 -- | |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
305 -- TMap (H f) b | | TMap (H id) a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
306 -- o g ↓ ↓ o (f o g)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
307 -- H a ------→ H a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
308 -- H f
995
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 991
diff changeset
309 --
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
310
989
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
311 _^ : {a a' b : Obj A } → (f : Hom A a a' ) → Hom A b a → Hom A b a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
312 _^ {a} {a'} {b} f g = (FMap (FObj YonedaFunctor a') g) f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
313
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
314 f-unique : {a a' b : Obj A } (f : Hom A a a' ) → f ^ ≡ TMap (FMap YonedaFunctor f) b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
315 f-unique {a} {a'} {b} f = extensionality A (λ g → begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
316 (f ^ ) g ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
317 (FMap (FObj YonedaFunctor a') g) f ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
318 A [ f o g ] ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
319 TMap (FMap YonedaFunctor f) b g ∎ ) where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
320
1000
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
321 f-u : {a a' b : Obj A } (f : FObj (FObj YonedaFunctor a') a ) → Sets [ f ^ ≈ TMap (FMap YonedaFunctor f ) b ]
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
322 f-u = f-unique
3ef1b472e9f9 yoneda full and faithful
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 997
diff changeset
323
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
324 -- faithful (injective )
1003
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
325 Yoneda-injective : {a b b' : Obj A } → {x y : Obj SetsAop} → (g h : Hom A b b' ) (f : Hom A a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
326 → SetsAop [ FMap YonedaFunctor g ≈ FMap YonedaFunctor h ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
327 → A [ g ≈ h ]
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
328 Yoneda-injective {a} {b} {x} {y} g h f yg=yh = begin
1003
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
329 g ≈↑⟨ idR ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
330 Nat2F (FMap YonedaFunctor g) ≈⟨ ylem11 yg=yh ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
331 Nat2F (FMap YonedaFunctor h) ≈⟨ idR ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
332 h ∎ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
333 ylem11 : SetsAop [ FMap YonedaFunctor g ≈ FMap YonedaFunctor h ] → A [ Nat2F (FMap YonedaFunctor g) ≈ Nat2F (FMap YonedaFunctor h) ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
334 ylem11 yg=yh with yg=yh {b}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
335 ... | eq = ≈-Reasoning.≈←≡ A ( cong (λ k → k (id1 A b)) eq )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1002
diff changeset
336 open ≈-Reasoning A
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
337
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
338 -- full (surjective)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
339
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
340 record CatSurjective { c₁ c₂ ℓ c₁' c₂' ℓ' : Level} ( A : Category c₁ c₂ ℓ ) ( B : Category c₁' c₂' ℓ' ) (F : Functor A B)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
341 : Set (suc (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁' ⊔ c₂' ⊔ ℓ')) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
342 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
343 sur : {a a' : Obj A} (g : Hom B (FObj F a) (FObj F a')) → Hom A a a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
344 surjective : {a a' : Obj A} (g : Hom B (FObj F a) (FObj F a')) → B [ FMap F (sur g) ≈ g ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
345
1002
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1001
diff changeset
346 open CatSurjective
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1001
diff changeset
347
1004
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1003
diff changeset
348 CatEpi : {c : Level} (F : Functor (Sets {c}) (Sets {c}))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1003
diff changeset
349 → (s : CatSurjective Sets Sets F )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1003
diff changeset
350 → {a a' : Obj Sets } {b : Obj Sets} (g h : Hom Sets (FObj F a') b)
1005
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
351 → Sets [ Sets [ g o FMap F ( sur s (id1 Sets _)) ] ≈ Sets [ h o FMap F ( sur s (id1 Sets _)) ] ] → Sets [ g ≈ h ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
352 CatEpi F s g h eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
353 g ≈↑⟨ idR ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
354 Sets [ g o id1 Sets _ ] ≈↑⟨ cdr (surjective s (id1 Sets _) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
355 Sets [ g o FMap F (sur s (id1 Sets _)) ] ≈⟨ eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
356 Sets [ h o FMap F (sur s (id1 Sets _)) ] ≈⟨ cdr (surjective s (id1 Sets _) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
357 Sets [ h o id1 Sets _ ] ≈⟨ idR ⟩
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
358 h ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
359 where
1004
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1003
diff changeset
360 open ≈-Reasoning Sets
1002
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1001
diff changeset
361 -- sj : B [ FMap F ( CatSurjective.sur s (FMap F (f g h))) ≈ FMap F (f g h) ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1001
diff changeset
362 -- sj = CatSurjective.surjective s (FMap F (f g h))
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
363
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
364 Yoneda-surjective : CatSurjective A SetsAop YonedaFunctor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
365 Yoneda-surjective = record { sur = λ {a} {a'} g → f g ; surjective = λ g →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
366 begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
367 TMap (FMap YonedaFunctor (f g) ) _ ≈⟨ YonedaIso1 g ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
368 TMap g _ ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
369 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
370 open ≈-Reasoning Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
371 f : {a a' : Obj A } → (g : Hom SetsAop (FObj YonedaFunctor a) (FObj YonedaFunctor a')) → Hom A a a'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
372 f g = Nat2F g
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
373
1005
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
374 Yoneda-epi : { b : Obj A } {x y : Obj SetsAop} → (g h : Hom SetsAop (FObj YonedaFunctor b) y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
375 → ( {a : Obj A } (f : Hom A a b ) → SetsAop [ SetsAop [ g o FMap YonedaFunctor f ] ≈ SetsAop [ h o FMap YonedaFunctor f ] ] )
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
376 → SetsAop [ g ≈ h ]
1005
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
377 Yoneda-epi {b} {x} {y} g h yg=yh = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
378 TMap g _ ≈↑⟨ idR ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
379 Sets [ TMap g _ o id1 Sets _ ] ≈↑⟨ cdr (surjective Yoneda-surjective (id1 SetsAop _)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
380 Sets [ TMap g _ o (λ z → A [ sur Yoneda-surjective (id1 SetsAop _) o z ] ) ] ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
381 (λ z → TMap g _ (A [ id1 A _ o z ] )) ≈⟨ yg=yh (id1 A b) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
382 Sets [ TMap h _ o (λ z → A [ sur Yoneda-surjective (id1 SetsAop _) o z ] ) ] ≈⟨ cdr (surjective Yoneda-surjective (id1 SetsAop _)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
383 Sets [ TMap h _ o id1 Sets _ ] ≈⟨ idR ⟩
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
384 TMap h _
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
385 ∎ where
1002
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1001
diff changeset
386 open ≈-Reasoning Sets
1001
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
387 s : CatSurjective A SetsAop YonedaFunctor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
388 s = Yoneda-surjective
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1000
diff changeset
389
1008
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
390 --- How to prove it? from smallness?
1005
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
391
1008
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
392 data _~_ {a b : Obj A} (f : Hom A a b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
393 : ∀{x y : Obj A} → Hom A x y → Set (suc (c₁ ⊔ c₂ ⊔ ℓ)) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
394 refl : {g : Hom A a b} → (eqv : A [ f ≈ g ]) → f ~ g
1005
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1004
diff changeset
395
1008
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
396 postulate -- ?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
397 eqObj1 : {a b a' b' : Obj A } → Hom A a b ≡ Hom A a' b' → b ≡ b'
996
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 995
diff changeset
398
989
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
399 Yoneda-full-embed : {a b : Obj A } → FObj YonedaFunctor a ≡ FObj YonedaFunctor b → a ≡ b
1008
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1006
diff changeset
400 Yoneda-full-embed {a} {b} eq = eqObj1 ylem1 where
989
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
401 ylem1 : Hom A a a ≡ Hom A a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 988
diff changeset
402 ylem1 = cong (λ k → FObj k a) eq
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
403