annotate nat.agda @ 95:4be27d290ea2

nat-μ
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 29 Jul 2013 14:08:45 +0900
parents 4fa718e4fd77
children 85425bd12835
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
1 -- -- -- -- -- -- -- --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
2 -- Monad to Kelisli Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
3 -- defines U_T and F_T as a resolution of Monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
4 -- checks Adjointness
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
5 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
6 -- Shinji KONO <kono@ie.u-ryukyu.ac.jp>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
7 -- -- -- -- -- -- -- --
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 -- Monad
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 -- Category A
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 -- A = Category
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
12 -- Functor T : A → A
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 --T(a) = t(a)
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 --T(f) = tf(f)
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
16 open import Category -- https://github.com/konn/category-agda
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 open import Level
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
18 --open import Category.HomReasoning
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
19 open import HomReasoning
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
20 open import cat-utility
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
21 open import Category.Cat
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
22
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
23 module nat { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ }
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
24 { T : Functor A A }
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
25 { η : NTrans A A identityFunctor T }
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
26 { μ : NTrans A A (T ○ T) T }
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
27 { M : Monad A T η μ }
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
28 { K : Kleisli A T η μ M } where
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
29
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
31 --T(g f) = T(g) T(f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
32
31
17b8bafebad7 add universal mapping
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
33 open Functor
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
34 Lemma1 : {c₁ c₂ l : Level} {A : Category c₁ c₂ l} (T : Functor A A) → {a b c : Obj A} {g : Hom A b c} { f : Hom A a b }
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
35 → A [ ( FMap T (A [ g o f ] )) ≈ (A [ FMap T g o FMap T f ]) ]
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
36 Lemma1 = \t → IsFunctor.distr ( isFunctor t )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
39 open NTrans
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
40 Lemma2 : {c₁ c₂ l : Level} {A : Category c₁ c₂ l} {F G : Functor A A}
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
41 → (μ : NTrans A A F G) → {a b : Obj A} { f : Hom A a b }
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
42 → A [ A [ FMap G f o TMap μ a ] ≈ A [ TMap μ b o FMap F f ] ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
43 Lemma2 = \n → IsNTrans.naturality ( isNTrans n )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
45 -- Laws of Monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
46 --
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
47 -- η : 1_A → T
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
48 -- μ : TT → T
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
49 -- μ(a)η(T(a)) = a -- unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
50 -- μ(a)T(η(a)) = a -- unity law 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
51 -- μ(a)(μ(T(a))) = μ(a)T(μ(a)) -- association law
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54 open Monad
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 Lemma3 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
57 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
58 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
59 { a : Obj A } →
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
61 → A [ A [ TMap μ a o TMap μ ( FObj T a ) ] ≈ A [ TMap μ a o FMap T (TMap μ a) ] ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
62 Lemma3 = \m → IsMonad.assoc ( isMonad m )
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
64
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65 Lemma4 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) {a b : Obj A } { f : Hom A a b}
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
66 → A [ A [ Id {_} {_} {_} {A} b o f ] ≈ f ]
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
67 Lemma4 = \a → IsCategory.identityL ( Category.isCategory a )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
69 Lemma5 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
70 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
71 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
72 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
73 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
74 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
75 → A [ A [ TMap μ a o TMap η ( FObj T a ) ] ≈ Id {_} {_} {_} {A} (FObj T a) ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
76 Lemma5 = \m → IsMonad.unity1 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
77
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
78 Lemma6 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
79 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
80 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
81 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
82 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
83 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
84 → A [ A [ TMap μ a o (FMap T (TMap η a )) ] ≈ Id {_} {_} {_} {A} (FObj T a) ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
85 Lemma6 = \m → IsMonad.unity2 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
86
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
87 -- Laws of Kleisli Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
88 --
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 -- nat of η
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
90 -- g ○ f = μ(c) T(g) f -- join definition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
91 -- η(b) ○ f = f -- left id (Lemma7)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
92 -- f ○ η(a) = f -- right id (Lemma8)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
93 -- h ○ (g ○ f) = (h ○ g) ○ f -- assocation law (Lemma9)
11
2cbecadc56c1 reasoning test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
94
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
95 open Kleisli
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
96 -- η(b) ○ f = f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
97 Lemma7 : { a : Obj A } { b : Obj A } ( f : Hom A a ( FObj T b) )
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
98 → A [ join K (TMap η b) f ≈ f ]
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
99 Lemma7 {_} {b} f =
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
100 let open ≈-Reasoning (A) in
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
101 begin
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
102 join K (TMap η b) f
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
103 ≈⟨ refl-hom ⟩
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
104 A [ TMap μ b o A [ FMap T ((TMap η b)) o f ] ]
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
105 ≈⟨ IsCategory.associative (Category.isCategory A) ⟩
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
106 A [ A [ TMap μ b o FMap T ((TMap η b)) ] o f ]
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
107 ≈⟨ car ( IsMonad.unity2 ( isMonad ( monad K )) ) ⟩
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
108 A [ id (FObj T b) o f ]
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
109 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
110 f
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
111
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
112
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
113 -- f ○ η(a) = f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
114 Lemma8 : { a : Obj A } { b : Obj A }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
115 ( f : Hom A a ( FObj T b) )
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
116 → A [ join K f (TMap η a) ≈ f ]
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
117 Lemma8 {a} {b} f =
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
118 begin
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
119 join K f (TMap η a)
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
120 ≈⟨ refl-hom ⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
121 A [ TMap μ b o A [ FMap T f o (TMap η a) ] ]
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
122 ≈⟨ cdr ( nat η ) ⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
123 A [ TMap μ b o A [ (TMap η ( FObj T b)) o f ] ]
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
124 ≈⟨ IsCategory.associative (Category.isCategory A) ⟩
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
125 A [ A [ TMap μ b o (TMap η ( FObj T b)) ] o f ]
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
126 ≈⟨ car ( IsMonad.unity1 ( isMonad ( monad K )) ) ⟩
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
127 A [ id (FObj T b) o f ]
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
128 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
129 f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
130 ∎ where
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
131 open ≈-Reasoning (A)
5
16572013c362 Kleisli Proposition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
132
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
133 -- h ○ (g ○ f) = (h ○ g) ○ f
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
134 Lemma9 : { a b c d : Obj A }
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
135 ( h : Hom A c ( FObj T d) )
23
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
136 ( g : Hom A b ( FObj T c) )
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
137 ( f : Hom A a ( FObj T b) )
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
138 → A [ join K h (join K g f) ≈ join K ( join K h g) f ]
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
139 Lemma9 {a} {b} {c} {d} h g f =
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
140 begin
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
141 join K h (join K g f)
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
142 ≈⟨⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
143 join K h ( ( TMap μ c o ( FMap T g o f ) ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
144 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
145 ( TMap μ d o ( FMap T h o ( TMap μ c o ( FMap T g o f ) ) ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
146 ≈⟨ cdr ( cdr ( assoc )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
147 ( TMap μ d o ( FMap T h o ( ( TMap μ c o FMap T g ) o f ) ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
148 ≈⟨ assoc ⟩ --- ( f o ( g o h ) ) = ( ( f o g ) o h )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
149 ( ( TMap μ d o FMap T h ) o ( (TMap μ c o FMap T g ) o f ) )
25
8117bafdec7a on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
150 ≈⟨ assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
151 ( ( ( TMap μ d o FMap T h ) o (TMap μ c o FMap T g ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
152 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
153 ( ( TMap μ d o ( FMap T h o ( TMap μ c o FMap T g ) ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
154 ≈⟨ car ( cdr (assoc) ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
155 ( ( TMap μ d o ( ( FMap T h o TMap μ c ) o FMap T g ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
156 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
157 ( ( ( TMap μ d o ( FMap T h o TMap μ c ) ) o FMap T g ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
158 ≈⟨ car (car ( cdr ( begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
159 ( FMap T h o TMap μ c )
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
160 ≈⟨ nat μ ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
161 ( TMap μ (FObj T d) o FMap T (FMap T h) )
25
8117bafdec7a on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
162
8117bafdec7a on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
163 ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
164 ( ( ( TMap μ d o ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) ) o FMap T g ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
165 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
166 ( ( TMap μ d o ( ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) o FMap T g ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
167 ≈⟨ car ( cdr (sym assoc) ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
168 ( ( TMap μ d o ( TMap μ ( FObj T d) o ( FMap T ( FMap T h ) o FMap T g ) ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
169 ≈⟨ car ( cdr (cdr (sym (distr T )))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
170 ( ( TMap μ d o ( TMap μ ( FObj T d) o FMap T ( ( FMap T h o g ) ) ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
171 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
172 ( ( ( TMap μ d o TMap μ ( FObj T d) ) o FMap T ( ( FMap T h o g ) ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
173 ≈⟨ car ( car (
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
174 begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
175 ( TMap μ d o TMap μ (FObj T d) )
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
176 ≈⟨ IsMonad.assoc ( isMonad M) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
177 ( TMap μ d o FMap T (TMap μ d) )
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
179 )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
180 ( ( ( TMap μ d o FMap T ( TMap μ d) ) o FMap T ( ( FMap T h o g ) ) ) o f )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
181 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
182 ( ( TMap μ d o ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) ) o f )
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
183 ≈⟨ sym assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
184 ( TMap μ d o ( ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) o f ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
185 ≈⟨ cdr ( car ( sym ( distr T ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
186 ( TMap μ d o ( FMap T ( ( ( TMap μ d ) o ( FMap T h o g ) ) ) o f ) )
23
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
187 ≈⟨ refl-hom ⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
188 join K ( ( TMap μ d o ( FMap T h o g ) ) ) f
23
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
189 ≈⟨ refl-hom ⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
190 join K ( join K h g) f
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
191 ∎ where open ≈-Reasoning (A)
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
192
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
193 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
194 -- o-resp in Kleisli Category ( for Functor definitions )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
195 --
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
196 Lemma10 : {a b c : Obj A} -> (f g : Hom A a (FObj T b) ) → (h i : Hom A b (FObj T c) ) →
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
197 A [ f ≈ g ] → A [ h ≈ i ] → A [ (join K h f) ≈ (join K i g) ]
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
198 Lemma10 {a} {b} {c} f g h i eq-fg eq-hi = let open ≈-Reasoning (A) in
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
199 begin
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
200 join K h f
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
201 ≈⟨⟩
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
202 TMap μ c o ( FMap T h o f )
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
203 ≈⟨ cdr ( IsCategory.o-resp-≈ (Category.isCategory A) eq-fg ((IsFunctor.≈-cong (isFunctor T)) eq-hi )) ⟩
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
204 TMap μ c o ( FMap T i o g )
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
205 ≈⟨⟩
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
206 join K i g
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
207
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
208
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
209 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
210 -- Hom in Kleisli Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
211 --
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
212
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
213
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
214 record KleisliHom { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { T : Functor A A } (a : Obj A) (b : Obj A)
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
215 : Set c₂ where
70
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
216 field
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
217 KMap : Hom A a ( FObj T b )
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
218
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
219 open KleisliHom
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
220 KHom = \(a b : Obj A) -> KleisliHom {c₁} {c₂} {ℓ} {A} {T} a b
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
221
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
222 K-id : {a : Obj A} → KHom a a
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
223 K-id {a = a} = record { KMap = TMap η a }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
224
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
225 open import Relation.Binary.Core
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
226
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
227 _⋍_ : { a : Obj A } { b : Obj A } (f g : KHom a b ) -> Set ℓ
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
228 _⋍_ {a} {b} f g = A [ KMap f ≈ KMap g ]
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
229
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
230 _*_ : { a b : Obj A } → { c : Obj A } →
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
231 ( KHom b c) → ( KHom a b) → KHom a c
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
232 _*_ {a} {b} {c} g f = record { KMap = join K {a} {b} {c} (KMap g) (KMap f) }
70
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
233
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
234 isKleisliCategory : IsCategory ( Obj A ) KHom _⋍_ _*_ K-id
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
235 isKleisliCategory = record { isEquivalence = isEquivalence
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
236 ; identityL = KidL
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
237 ; identityR = KidR
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
238 ; o-resp-≈ = Ko-resp
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
239 ; associative = Kassoc
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
240 }
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
241 where
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
242 open ≈-Reasoning (A)
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
243 isEquivalence : { a b : Obj A } ->
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
244 IsEquivalence {_} {_} {KHom a b} _⋍_
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
245 isEquivalence {C} {D} = -- this is the same function as A's equivalence but has different types
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
246 record { refl = refl-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
247 ; sym = sym
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
248 ; trans = trans-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
249 }
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
250 KidL : {C D : Obj A} -> {f : KHom C D} → (K-id * f) ⋍ f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
251 KidL {_} {_} {f} = Lemma7 (KMap f)
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
252 KidR : {C D : Obj A} -> {f : KHom C D} → (f * K-id) ⋍ f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
253 KidR {_} {_} {f} = Lemma8 (KMap f)
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
254 Ko-resp : {a b c : Obj A} -> {f g : KHom a b } → {h i : KHom b c } →
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
255 f ⋍ g → h ⋍ i → (h * f) ⋍ (i * g)
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
256 Ko-resp {a} {b} {c} {f} {g} {h} {i} eq-fg eq-hi = Lemma10 {a} {b} {c} (KMap f) (KMap g) (KMap h) (KMap i) eq-fg eq-hi
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
257 Kassoc : {a b c d : Obj A} -> {f : KHom c d } → {g : KHom b c } → {h : KHom a b } →
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
258 (f * (g * h)) ⋍ ((f * g) * h)
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
259 Kassoc {_} {_} {_} {_} {f} {g} {h} = Lemma9 (KMap f) (KMap g) (KMap h)
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
260
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
261 KleisliCategory : Category c₁ c₂ ℓ
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
262 KleisliCategory =
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
263 record { Obj = Obj A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
264 ; Hom = KHom
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
265 ; _o_ = _*_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
266 ; _≈_ = _⋍_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
267 ; Id = K-id
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
268 ; isCategory = isKleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
269 }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
270
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
271 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
272 -- Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
273 -- T = U_T U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
274 -- nat-ε
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
275 -- nat-η
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
276 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
277
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
278 ufmap : {a b : Obj A} (f : KHom a b ) -> Hom A (FObj T a) (FObj T b)
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
279 ufmap {a} {b} f = A [ TMap μ (b) o FMap T (KMap f) ]
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
280
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
281 U_T : Functor KleisliCategory A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
282 U_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
283 FObj = FObj T
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
284 ; FMap = ufmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
285 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
286 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
287 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
288 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
289 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
290 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
291 identity : {a : Obj A} → A [ ufmap (K-id {a}) ≈ id1 A (FObj T a) ]
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
292 identity {a} = let open ≈-Reasoning (A) in
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
293 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
294 TMap μ (a) o FMap T (TMap η a)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
295 ≈⟨ IsMonad.unity2 (isMonad M) ⟩
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
296 id1 A (FObj T a)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
297
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
298 ≈-cong : {a b : Obj A} {f g : KHom a b} → A [ KMap f ≈ KMap g ] → A [ ufmap f ≈ ufmap g ]
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
299 ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (A) in
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
300 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
301 TMap μ (b) o FMap T (KMap f)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
302 ≈⟨ cdr (fcong T f≈g) ⟩
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
303 TMap μ (b) o FMap T (KMap g)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
304
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
305 distr1 : {a b c : Obj A} {f : KHom a b} {g : KHom b c} → A [ ufmap (g * f) ≈ (A [ ufmap g o ufmap f ] )]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
306 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (A) in
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
307 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
308 ufmap (g * f)
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
309 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
310 ufmap {a} {c} ( record { KMap = TMap μ (c) o (FMap T (KMap g) o (KMap f)) } )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
311 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
312 TMap μ (c) o FMap T ( TMap μ (c) o (FMap T (KMap g) o (KMap f)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
313 ≈⟨ cdr ( distr T) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
314 TMap μ (c) o (( FMap T ( TMap μ (c)) o FMap T (FMap T (KMap g) o (KMap f))))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
315 ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
316 (TMap μ (c) o ( FMap T ( TMap μ (c)))) o FMap T (FMap T (KMap g) o (KMap f))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
317 ≈⟨ car (sym (IsMonad.assoc (isMonad M))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
318 (TMap μ (c) o ( TMap μ (FObj T c))) o FMap T (FMap T (KMap g) o (KMap f))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
319 ≈⟨ sym assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
320 TMap μ (c) o (( TMap μ (FObj T c)) o FMap T (FMap T (KMap g) o (KMap f)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
321 ≈⟨ cdr (cdr (distr T)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
322 TMap μ (c) o (( TMap μ (FObj T c)) o (FMap T (FMap T (KMap g)) o FMap T (KMap f)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
323 ≈⟨ cdr (assoc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
324 TMap μ (c) o ((( TMap μ (FObj T c)) o (FMap T (FMap T (KMap g)))) o FMap T (KMap f))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
325 ≈⟨ sym (cdr (car (nat μ ))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
326 TMap μ (c) o ((FMap T (KMap g ) o TMap μ (b)) o FMap T (KMap f ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
327 ≈⟨ cdr (sym assoc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
328 TMap μ (c) o (FMap T (KMap g ) o ( TMap μ (b) o FMap T (KMap f )))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
329 ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
330 ( TMap μ (c) o FMap T (KMap g ) ) o ( TMap μ (b) o FMap T (KMap f ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
331 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
332 ufmap g o ufmap f
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
333
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
334
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
335
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
336 ffmap : {a b : Obj A} (f : Hom A a b) -> KHom a b
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
337 ffmap f = record { KMap = A [ TMap η (Category.cod A f) o f ] }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
338
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
339 F_T : Functor A KleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
340 F_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
341 FObj = \a -> a
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
342 ; FMap = ffmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
343 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
344 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
345 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
346 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
347 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
348 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
349 identity : {a : Obj A} → A [ A [ TMap η a o id1 A a ] ≈ TMap η a ]
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
350 identity {a} = IsCategory.identityR ( Category.isCategory A)
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
351 -- Category.cod A f and Category.cod A g are actualy the same b, so we don't need cong-≈, just refl
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
352 lemma1 : {a b : Obj A} {f g : Hom A a b} → A [ f ≈ g ] → A [ TMap η b ≈ TMap η b ]
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
353 lemma1 f≈g = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory A ))
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
354 ≈-cong : {a b : Obj A} {f g : Hom A a b} → A [ f ≈ g ] → A [ A [ TMap η (Category.cod A f) o f ] ≈ A [ TMap η (Category.cod A g) o g ] ]
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
355 ≈-cong f≈g = (IsCategory.o-resp-≈ (Category.isCategory A)) f≈g ( lemma1 f≈g )
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
356 distr1 : {a b c : Obj A} {f : Hom A a b} {g : Hom A b c} →
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
357 ( ffmap (A [ g o f ]) ⋍ ( ffmap g * ffmap f ) )
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
358 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (A) in
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
359 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
360 KMap (ffmap (A [ g o f ]))
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
361 ≈⟨⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
362 TMap η (c) o (g o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
363 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
364 (TMap η (c) o g) o f
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
365 ≈⟨ car (sym (nat η)) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
366 (FMap T g o TMap η (b)) o f
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
367 ≈⟨ sym idL ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
368 id1 A (FObj T c) o ((FMap T g o TMap η (b)) o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
369 ≈⟨ sym (car (IsMonad.unity2 (isMonad M))) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
370 (TMap μ c o FMap T (TMap η c)) o ((FMap T g o TMap η (b)) o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
371 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
372 TMap μ c o ( FMap T (TMap η c) o ((FMap T g o TMap η (b)) o f) )
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
373 ≈⟨ cdr (cdr (sym assoc)) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
374 TMap μ c o ( FMap T (TMap η c) o (FMap T g o (TMap η (b) o f)))
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
375 ≈⟨ cdr assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
376 TMap μ c o ( ( FMap T (TMap η c) o FMap T g ) o (TMap η (b) o f) )
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
377 ≈⟨ sym (cdr ( car ( distr T ))) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
378 TMap μ c o ( ( FMap T (TMap η c o g)) o (TMap η (b) o f))
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
379 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
380 (TMap μ c o ( FMap T (TMap η c o g))) o (TMap η (b) o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
381 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
382 ((TMap μ c o (FMap T (TMap η c o g))) o TMap η b) o f
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
383 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
384 (TMap μ c o (FMap T (TMap η c o g))) o (TMap η b o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
385 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
386 TMap μ c o ( (FMap T (TMap η c o g)) o (TMap η b o f) )
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
387 ≈⟨⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
388 join K (TMap η c o g) (TMap η b o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
389 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
390 KMap ( ffmap g * ffmap f )
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
391
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
392
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
393 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
394 -- T = (U_T ○ F_T)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
395 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
396
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
397 Lemma11-1 : ∀{a b : Obj A} -> (f : Hom A a b ) -> A [ FMap T f ≈ FMap (U_T ○ F_T) f ]
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
398 Lemma11-1 {a} {b} f = let open ≈-Reasoning (A) in
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
399 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
400 FMap (U_T ○ F_T) f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
401 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
402 FMap U_T ( FMap F_T f )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
403 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
404 TMap μ (b) o FMap T (KMap ( ffmap f ) )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
405 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
406 TMap μ (b) o FMap T (TMap η (b) o f)
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
407 ≈⟨ cdr (distr T ) ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
408 TMap μ (b) o ( FMap T (TMap η (b)) o FMap T f)
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
409 ≈⟨ assoc ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
410 (TMap μ (b) o FMap T (TMap η (b))) o FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
411 ≈⟨ car (IsMonad.unity2 (isMonad M)) ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
412 id1 A (FObj T b) o FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
413 ≈⟨ idL ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
414 FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
415 ∎ )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
416
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
417 -- construct ≃
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
418
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
419 Lemma11 : T ≃ (U_T ○ F_T)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
420 Lemma11 f = Category.Cat.refl (Lemma11-1 f)
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
421
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
422 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
423 -- natural transformations
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
424 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
425
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
426 nat-η : NTrans A A identityFunctor ( U_T ○ F_T )
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
427 nat-η = record { TMap = \x -> TMap η x ; isNTrans = isNTrans1 } where
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
428 naturality1 : {a b : Obj A} {f : Hom A a b}
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
429 → A [ A [ ( FMap ( U_T ○ F_T ) f ) o ( TMap η a ) ] ≈ A [ (TMap η b ) o f ] ]
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
430 naturality1 {a} {b} {f} = let open ≈-Reasoning (A) in
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
431 begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
432 ( FMap ( U_T ○ F_T ) f ) o ( TMap η a )
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
433 ≈⟨ sym (resp refl-hom (Lemma11-1 f)) ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
434 FMap T f o TMap η a
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
435 ≈⟨ nat η ⟩
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
436 TMap η b o f
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
437
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
438 isNTrans1 : IsNTrans A A identityFunctor ( U_T ○ F_T ) (\a -> TMap η a)
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
439 isNTrans1 = record { naturality = naturality1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
440
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
441 tmap-ε : (a : Obj A) -> KHom (FObj T a) a
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
442 tmap-ε a = record { KMap = id1 A (FObj T a) }
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
443
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
444 nat-ε : NTrans KleisliCategory KleisliCategory ( F_T ○ U_T ) identityFunctor
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
445 nat-ε = record { TMap = \a -> tmap-ε a; isNTrans = isNTrans1 } where
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
446 naturality1 : {a b : Obj A} {f : KHom a b}
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
447 → (f * ( tmap-ε a ) ) ⋍ (( tmap-ε b ) * ( FMap (F_T ○ U_T) f ) )
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
448 naturality1 {a} {b} {f} = let open ≈-Reasoning (A) in
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
449 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
450 KMap (( tmap-ε b ) * ( FMap (F_T ○ U_T) f ))
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
451 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
452 TMap μ b o ( FMap T ( id1 A (FObj T b) ) o ( KMap (FMap (F_T ○ U_T) f ) ))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
453 ≈⟨ cdr ( cdr (
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
454 begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
455 KMap (FMap (F_T ○ U_T) f )
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
456 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
457 KMap (FMap F_T (FMap U_T f))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
458 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
459 TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
460
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
461 )) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
462 TMap μ b o ( FMap T ( id1 A (FObj T b) ) o (TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f))))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
463 ≈⟨ cdr (car (IsFunctor.identity (isFunctor T))) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
464 TMap μ b o ( id1 A (FObj T (FObj T b) ) o (TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f))))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
465 ≈⟨ cdr idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
466 TMap μ b o (TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f)))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
467 ≈⟨ assoc ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
468 (TMap μ b o (TMap η (FObj T b))) o (TMap μ (b) o FMap T (KMap f))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
469 ≈⟨ (car (IsMonad.unity1 (isMonad M))) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
470 id1 A (FObj T b) o (TMap μ (b) o FMap T (KMap f))
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
471 ≈⟨ idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
472 TMap μ b o FMap T (KMap f)
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
473 ≈⟨ cdr (sym idR) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
474 TMap μ b o ( FMap T (KMap f) o id1 A (FObj T a) )
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
475 ≈⟨⟩
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
476 KMap (f * ( tmap-ε a ))
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
477 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
478 isNTrans1 : IsNTrans KleisliCategory KleisliCategory ( F_T ○ U_T ) identityFunctor (\a -> tmap-ε a )
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
479 isNTrans1 = record { naturality = naturality1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
480
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
481 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
482 -- μ = U_T ε U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
483 --
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
484 tmap-μ : (a : Obj A) -> Hom A (FObj ( U_T ○ F_T ) (FObj ( U_T ○ F_T ) a)) (FObj ( U_T ○ F_T ) a)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
485 tmap-μ a = FMap U_T ( TMap nat-ε ( FObj F_T a ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
486
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
487 nat-μ : NTrans A A (( U_T ○ F_T ) ○ ( U_T ○ F_T )) ( U_T ○ F_T )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
488 nat-μ = record { TMap = tmap-μ ; isNTrans = isNTrans1 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
489 naturality1 : {a b : Obj A} {f : Hom A a b}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
490 → A [ A [ (FMap (U_T ○ F_T) f) o ( tmap-μ a) ] ≈ A [ ( tmap-μ b ) o FMap (U_T ○ F_T) ( FMap (U_T ○ F_T) f) ] ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
491 naturality1 {a} {b} {f} = let open ≈-Reasoning (A) in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
492 sym ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
493 ( tmap-μ b ) o FMap (U_T ○ F_T) ( FMap (U_T ○ F_T) f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
494 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
495 ( FMap U_T ( TMap nat-ε ( FObj F_T b )) ) o FMap (U_T ○ F_T) ( FMap (U_T ○ F_T) f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
496 ≈⟨ sym ( distr U_T) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
497 FMap U_T ( KleisliCategory [ TMap nat-ε ( FObj F_T b ) o FMap F_T ( FMap (U_T ○ F_T) f) ] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
498 ≈⟨ fcong U_T (sym (nat nat-ε)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
499 FMap U_T ( KleisliCategory [ (FMap F_T f) o TMap nat-ε ( FObj F_T a ) ] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
500 ≈⟨ distr U_T ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
501 (FMap U_T (FMap F_T f)) o FMap U_T ( TMap nat-ε ( FObj F_T a ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
502 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
503 (FMap (U_T ○ F_T) f) o ( tmap-μ a)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
504 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
505 isNTrans1 : IsNTrans A A (( U_T ○ F_T ) ○ ( U_T ○ F_T )) ( U_T ○ F_T ) tmap-μ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
506 isNTrans1 = record { naturality = naturality1 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
507
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
508 Lemma12 : {x : Obj A } -> A [ TMap nat-μ x ≈ FMap U_T ( TMap nat-ε ( FObj F_T x ) ) ]
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
509 Lemma12 {x} = let open ≈-Reasoning (A) in
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
510 sym ( begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
511 FMap U_T ( TMap nat-ε ( FObj F_T x ) )
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
512 ≈⟨⟩
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
513 tmap-μ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
514 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
515 TMap nat-μ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
516 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
517
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
518 Lemma13 : {x : Obj A } -> A [ TMap μ x ≈ FMap U_T ( TMap nat-ε ( FObj F_T x ) ) ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
519 Lemma13 {x} = let open ≈-Reasoning (A) in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
520 sym ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
521 FMap U_T ( TMap nat-ε ( FObj F_T x ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
522 ≈⟨⟩
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
523 TMap μ x o FMap T (id1 A (FObj T x) )
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
524 ≈⟨ cdr (IsFunctor.identity (isFunctor T)) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
525 TMap μ x o id1 A (FObj T (FObj T x) )
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
526 ≈⟨ idR ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
527 TMap μ x
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
528 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
529
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
530 Adj_T : Adjunction A KleisliCategory U_T F_T nat-η nat-ε
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
531 Adj_T = record {
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
532 isAdjunction = record {
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
533 adjoint1 = adjoint1 ;
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
534 adjoint2 = adjoint2
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
535 }
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
536 } where
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
537 adjoint1 : { b : Obj KleisliCategory } →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
538 A [ A [ ( FMap U_T ( TMap nat-ε b)) o ( TMap nat-η ( FObj U_T b )) ] ≈ id1 A (FObj U_T b) ]
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
539 adjoint1 {b} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
540 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
541 ( FMap U_T ( TMap nat-ε b)) o ( TMap nat-η ( FObj U_T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
542 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
543 (TMap μ (b) o FMap T (id1 A (FObj T b ))) o ( TMap η ( FObj T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
544 ≈⟨ car ( cdr (IsFunctor.identity (isFunctor T))) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
545 (TMap μ (b) o (id1 A (FObj T (FObj T b )))) o ( TMap η ( FObj T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
546 ≈⟨ car idR ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
547 TMap μ (b) o ( TMap η ( FObj T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
548 ≈⟨ IsMonad.unity1 (isMonad M) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
549 id1 A (FObj U_T b)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
550
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
551 adjoint2 : {a : Obj A} →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
552 KleisliCategory [ KleisliCategory [ ( TMap nat-ε ( FObj F_T a )) o ( FMap F_T ( TMap nat-η a )) ]
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
553 ≈ id1 KleisliCategory (FObj F_T a) ]
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
554 adjoint2 {a} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
555 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
556 KMap (( TMap nat-ε ( FObj F_T a )) * ( FMap F_T ( TMap nat-η a )) )
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
557 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
558 TMap μ a o (FMap T (id1 A (FObj T a) ) o ((TMap η (FObj T a)) o (TMap η a)))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
559 ≈⟨ cdr ( car ( IsFunctor.identity (isFunctor T))) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
560 TMap μ a o ((id1 A (FObj T (FObj T a) )) o ((TMap η (FObj T a)) o (TMap η a)))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
561 ≈⟨ cdr ( idL ) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
562 TMap μ a o ((TMap η (FObj T a)) o (TMap η a))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
563 ≈⟨ assoc ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
564 (TMap μ a o (TMap η (FObj T a))) o (TMap η a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
565 ≈⟨ car (IsMonad.unity1 (isMonad M)) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
566 id1 A (FObj T a) o (TMap η a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
567 ≈⟨ idL ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
568 TMap η a
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
569 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
570 TMap η (FObj F_T a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
571 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
572 KMap (id1 KleisliCategory (FObj F_T a))
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
573
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
574
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
575 open MResolution
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
576
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
577 Resolution_T : MResolution A KleisliCategory T U_T F_T {nat-η} {nat-ε} {nat-μ} Adj_T
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
578 Resolution_T = record {
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
579 T=UF = Lemma11;
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
580 μ=UεF = Lemma12
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
581 }
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
582
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
583
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
584 module comparison-functor {c₁' c₂' ℓ' : Level} ( B : Category c₁' c₂' ℓ' )
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
585 { U_K : Functor B A } { F_K : Functor A B }
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
586 { η_K : NTrans A A identityFunctor ( U_K ○ F_K ) }
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
587 { ε_K : NTrans B B ( F_K ○ U_K ) identityFunctor }
85
31e1dbbf8800 Resoution?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
588 { μ_K : NTrans A A (( U_K ○ F_K ) ○ ( U_K ○ F_K )) ( U_K ○ F_K ) }
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
589 ( K : Monad A (U_K ○ F_K) η_K μ_K )
85
31e1dbbf8800 Resoution?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
590 ( AdjK : Adjunction A B U_K F_K η_K ε_K )
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
591 ( RK : MResolution A B T U_K F_K {η_K} {ε_K} {μ_K} AdjK )
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
592 where
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
593 open Category.Cat.[_]_~_
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
594
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
595 ≃-sym : {c₁ c₂ ℓ : Level} { C : Category c₁ c₂ ℓ } {c₁' c₂' ℓ' : Level} { D : Category c₁' c₂' ℓ' }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
596 {F G : Functor C D} → F ≃ G → G ≃ F
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
597 ≃-sym {_} {_} {_} {C} {_} {_} {_} {D} {F} {G} F≃G f = helper (F≃G f)
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
598 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
599 helper : ∀{a b c d} {f : Hom D a b} {g : Hom D c d} → [ D ] f ~ g → [ D ] g ~ f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
600 helper (Category.Cat.refl Ff≈Gf) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
601 Category.Cat.refl {C = D} (IsEquivalence.sym (IsCategory.isEquivalence (Category.isCategory D)) Ff≈Gf)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
602
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
603 -- to T=UF constraints happy
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
604 hoge : {c₁ c₂ ℓ : Level} { C : Category c₁ c₂ ℓ } {c₁' c₂' ℓ' : Level} { D : Category c₁' c₂' ℓ' }
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
605 {F G : Functor C D} → F ≃ G → F ≃ G
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
606 hoge {_} {_} {_} {C} {_} {_} {_} {D} {F} {G} F≃G f = helper (F≃G f)
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
607 where
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
608 helper : ∀{a b c d} {f : Hom D a b} {g : Hom D c d} → [ D ] f ~ g → [ D ] f ~ g
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
609 helper (Category.Cat.refl Ff≈Gf) = Category.Cat.refl Ff≈Gf
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
610
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
611 RHom = \(a b : Obj A) -> KleisliHom {c₁} {c₂} {ℓ} {A} { U_K ○ F_K } a b
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
612 TtoK : {a b : Obj A} -> (KHom a b) -> {g h : Hom A (FObj T b) (FObj ( U_K ○ F_K) b) } ->
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
613 ([ A ] g ~ h) -> Hom A a (FObj ( U_K ○ F_K ) b)
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
614 TtoK f {g} (Category.Cat.refl _) = A [ g o (KMap f) ]
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
615 RMap : {a b : Obj A} -> (f : KHom a b) -> Hom A a (FObj ( U_K ○ F_K ) b)
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
616 RMap {_} {b} f = TtoK {_} {b} f {_} {_} ((hoge (T=UF RK) (id1 A b)))
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
617
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
618 KtoT : {a b : Obj A} -> (RHom a b) -> {g h : Hom A (FObj ( U_K ○ F_K ) b) (FObj T b) } ->
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
619 ([ A ] g ~ h) -> Hom A a (FObj T b)
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
620 KtoT f {g} {h} (Category.Cat.refl eq) = A [ g o (KMap f) ]
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
621 RKMap : {a b : Obj A} -> (f : RHom a b) -> Hom A a (FObj T b)
91
3093e70ec20d strange but worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
622 RKMap {_} {b} f = KtoT f (( ≃-sym (T=UF RK)) (id1 A b))
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
623
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
624 RMap-cong : {a b : Obj A} {f g : KHom a b} -> A [ KMap f ≈ KMap g ] -> A [ RMap f ≈ RMap g ]
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
625 RMap-cong {a} {b} {f} {g} eq = helper a b f g eq ((hoge (T=UF RK))( id1 A b ))
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
626 where
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
627 open ≈-Reasoning (A)
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
628 helper : (a b : Obj A) (f g : KHom a b) -> A [ KMap f ≈ KMap g ] ->
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
629 {conv : Hom A (FObj T b) (FObj ( U_K ○ F_K ) b) } -> ([ A ] conv ~ conv) -> A [ RMap f ≈ RMap g ]
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
630 helper _ _ _ _ eq (Category.Cat.refl _) =
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
631 (Category.IsCategory.o-resp-≈ (Category.isCategory A)) eq refl-hom
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
632
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
633 kfmap : {a b : Obj A} (f : KHom a b) -> Hom B (FObj F_K a) (FObj F_K b)
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
634 kfmap {_} {b} f = B [ TMap ε_K (FObj F_K b) o FMap F_K (RMap f) ]
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
635
92
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
636 open Adjunction
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
637 K_T : Functor KleisliCategory B
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
638 K_T = record {
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
639 FObj = FObj F_K
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
640 ; FMap = kfmap
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
641 ; isFunctor = record
92
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
642 { ≈-cong = ≈-cong
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
643 ; identity = identity
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
644 ; distr = distr1
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
645 }
92
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
646 } where
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
647 identity : {a : Obj A} → B [ kfmap (K-id {a}) ≈ id1 B (FObj F_K a) ]
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
648 identity {a} = let open ≈-Reasoning (B) in
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
649 begin
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
650 kfmap (K-id {a})
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
651 ≈⟨⟩
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
652 TMap ε_K (FObj F_K a) o FMap F_K (RMap (K-id {a}))
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
653 ≈⟨⟩
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
654 TMap ε_K (FObj F_K a) o FMap F_K (TMap η_K a)
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
655 ≈⟨ IsAdjunction.adjoint2 (isAdjunction AdjK) ⟩
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
656 id1 B (FObj F_K a)
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
657
ef8f14b862b5 K_T identity
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
658 ≈-cong : {a b : Obj A} -> {f g : KHom a b} → A [ KMap f ≈ KMap g ] → B [ kfmap f ≈ kfmap g ]
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
659 ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (B) in
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
660 begin
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
661 kfmap f
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
662 ≈⟨⟩
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
663 TMap ε_K (FObj F_K b) o FMap F_K (RMap f)
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
664 ≈⟨ cdr ( fcong F_K (RMap-cong f≈g)) ⟩
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
665 TMap ε_K (FObj F_K b) o FMap F_K (RMap g)
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
666 ≈⟨⟩
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
667 kfmap g
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
668
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
669 distr1 : {a b c : Obj A} {f : KHom a b} {g : KHom b c} → B [ kfmap (g * f) ≈ (B [ kfmap g o kfmap f ] )]
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
670 distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (B) in
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
671 begin
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
672 kfmap (g * f)
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
673 ≈⟨⟩
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
674 TMap ε_K (FObj F_K c) o FMap F_K (RMap (g * f))
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
675 ≈⟨⟩
94
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
676 TMap ε_K (FObj F_K c) o FMap F_K (A [ TMap μ_K c o A [ FMap ( U_K ○ F_K ) (RMap g) o RMap f ] ] )
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
677 ≈⟨ cdr ( distr F_K ) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
678 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o ( FMap F_K (A [ FMap ( U_K ○ F_K ) (RMap g) o RMap f ])))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
679 ≈⟨ cdr (cdr ( distr F_K )) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
680 TMap ε_K (FObj F_K c) o ( FMap F_K (TMap μ_K c) o (( FMap F_K (FMap ( U_K ○ F_K ) (RMap g))) o (FMap F_K (RMap f))))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
681 ≈⟨ cdr assoc ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
682 TMap ε_K (FObj F_K c) o ((( FMap F_K (TMap μ_K c) o ( FMap F_K (FMap (U_K ○ F_K) (RMap g))))) o (FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
683 ≈⟨ cdr (car (car ( fcong F_K ( μ=UεF RK )))) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
684 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
685 ( FMap F_K (FMap (U_K ○ F_K) (RMap g)))) o (FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
686 ≈⟨ sym (cdr assoc) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
687 TMap ε_K (FObj F_K c) o (( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) ))) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
688 (( FMap F_K (FMap (U_K ○ F_K) (RMap g))) o (FMap F_K (RMap f))))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
689 ≈⟨ assoc ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
690 (TMap ε_K (FObj F_K c) o ( FMap F_K ( FMap U_K ( TMap ε_K ( FObj F_K c ) )))) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
691 (( FMap F_K (FMap (U_K ○ F_K) (RMap g))) o (FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
692 ≈⟨ car (sym (nat ε_K)) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
693 (TMap ε_K (FObj F_K c) o ( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)))) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
694 (( FMap F_K (FMap (U_K ○ F_K) (RMap g))) o (FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
695 ≈⟨ sym assoc ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
696 TMap ε_K (FObj F_K c) o (( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
697 ((( FMap F_K (FMap (U_K ○ F_K) (RMap g)))) o (FMap F_K (RMap f))))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
698 ≈⟨ cdr assoc ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
699 TMap ε_K (FObj F_K c) o ((( TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c))) o
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
700 (( FMap F_K (FMap (U_K ○ F_K) (RMap g))))) o (FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
701 ≈⟨ cdr ( car (
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
702 begin
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
703 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o ((FMap F_K (FMap (U_K ○ F_K) (RMap g))))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
704 ≈⟨⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
705 TMap ε_K (FObj (F_K ○ U_K) (FObj F_K c)) o (FMap (F_K ○ U_K) (FMap F_K (RMap g)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
706 ≈⟨ sym (nat ε_K) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
707 ( FMap F_K (RMap g)) o (TMap ε_K (FObj F_K b))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
708
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
709 )) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
710 TMap ε_K (FObj F_K c) o ((( FMap F_K (RMap g)) o (TMap ε_K (FObj F_K b))) o FMap F_K (RMap f))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
711 ≈⟨ cdr (sym assoc) ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
712 TMap ε_K (FObj F_K c) o (( FMap F_K (RMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (RMap f)))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
713 ≈⟨ assoc ⟩
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
714 (TMap ε_K (FObj F_K c) o FMap F_K (RMap g)) o (TMap ε_K (FObj F_K b) o FMap F_K (RMap f))
4fa718e4fd77 Comparison Functor constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
715 ≈⟨⟩
93
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
716 kfmap g o kfmap f
44b61ce90dd9 distr continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
717
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
718