annotate nat.agda @ 84:ee25f96ee8cc

record Resolution
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 27 Jul 2013 17:32:32 +0900
parents c3846bf83717
children 31e1dbbf8800
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
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
213 record KHom (a : Obj A) (b : Obj A)
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
214 : Set c₂ where
70
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
215 field
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
216 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
217
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
218 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
219 K-id {a = a} = record { KMap = TMap η a }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
220
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
221 open import Relation.Binary.Core
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
222 open KHom
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
223
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
224 _⋍_ : { 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
225 _⋍_ {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
226
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
227 _*_ : { 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
228 ( 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
229 _*_ {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
230
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
231 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
232 isKleisliCategory = record { isEquivalence = isEquivalence
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
233 ; identityL = KidL
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
234 ; identityR = KidR
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
235 ; o-resp-≈ = Ko-resp
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
236 ; associative = Kassoc
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
237 }
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
238 where
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
239 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
240 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
241 IsEquivalence {_} {_} {KHom a b} _⋍_
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
242 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
243 record { refl = refl-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
244 ; sym = sym
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
245 ; trans = trans-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
246 }
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
247 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
248 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
249 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
250 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
251 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
252 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
253 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
254 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
255 (f * (g * h)) ⋍ ((f * g) * h)
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
256 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
257
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
258 KleisliCategory : Category c₁ c₂ ℓ
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
259 KleisliCategory =
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
260 record { Obj = Obj A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
261 ; Hom = KHom
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
262 ; _o_ = _*_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
263 ; _≈_ = _⋍_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
264 ; Id = K-id
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
265 ; isCategory = isKleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
266 }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
267
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
268 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
269 -- Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
270 -- T = U_T U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
271 -- nat-ε
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
272 -- nat-η
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
273 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
274
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
275 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
276 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
277
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
278 U_T : Functor KleisliCategory A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
279 U_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
280 FObj = FObj T
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
281 ; FMap = ufmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
282 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
283 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
284 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
285 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
286 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
287 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
288 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
289 identity {a} = let open ≈-Reasoning (A) in
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
290 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
291 TMap μ (a) o FMap T (TMap η a)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
292 ≈⟨ IsMonad.unity2 (isMonad M) ⟩
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
293 id1 A (FObj T a)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
294
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
295 ≈-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
296 ≈-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
297 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
298 TMap μ (b) o FMap T (KMap f)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
299 ≈⟨ cdr (fcong T f≈g) ⟩
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
300 TMap μ (b) o FMap T (KMap g)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
301
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
302 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
303 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
304 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
305 ufmap (g * f)
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
306 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
307 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
308 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
309 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
310 ≈⟨ cdr ( distr T) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
311 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
312 ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
313 (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
314 ≈⟨ car (sym (IsMonad.assoc (isMonad M))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
315 (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
316 ≈⟨ sym assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
317 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
318 ≈⟨ cdr (cdr (distr T)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
319 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
320 ≈⟨ cdr (assoc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
321 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
322 ≈⟨ sym (cdr (car (nat μ ))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
323 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
324 ≈⟨ cdr (sym assoc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
325 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
326 ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
327 ( 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
328 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
329 ufmap g o ufmap f
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
330
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
331
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
332
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
333 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
334 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
335
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
336 F_T : Functor A KleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
337 F_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
338 FObj = \a -> a
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
339 ; FMap = ffmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
340 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
341 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
342 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
343 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
344 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
345 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
346 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
347 identity {a} = IsCategory.identityR ( Category.isCategory A)
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
348 -- 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
349 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
350 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
351 ≈-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
352 ≈-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
353 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
354 ( 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
355 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
356 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
357 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
358 ≈⟨⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
359 TMap η (c) o (g o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
360 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
361 (TMap η (c) o g) o f
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
362 ≈⟨ car (sym (nat η)) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
363 (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
364 ≈⟨ sym idL ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
365 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
366 ≈⟨ sym (car (IsMonad.unity2 (isMonad M))) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
367 (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
368 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
369 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
370 ≈⟨ cdr (cdr (sym assoc)) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
371 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
372 ≈⟨ cdr assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
373 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
374 ≈⟨ sym (cdr ( car ( distr T ))) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
375 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
376 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
377 (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
378 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
379 ((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
380 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
381 (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
382 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
383 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
384 ≈⟨⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
385 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
386 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
387 KMap ( ffmap g * ffmap f )
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
388
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
389
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
390 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
391 -- T = (U_T ○ F_T)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
392 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
393
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
394 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
395 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
396 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
397 FMap (U_T ○ F_T) f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
398 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
399 FMap U_T ( FMap F_T f )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
400 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
401 TMap μ (b) o FMap T (KMap ( ffmap f ) )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
402 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
403 TMap μ (b) o FMap T (TMap η (b) o f)
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
404 ≈⟨ cdr (distr T ) ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
405 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
406 ≈⟨ assoc ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
407 (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
408 ≈⟨ car (IsMonad.unity2 (isMonad M)) ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
409 id1 A (FObj T b) o FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
410 ≈⟨ idL ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
411 FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
412 ∎ )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
413
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
414 -- construct ≃
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
415
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
416 Lemma11 : T ≃ (U_T ○ F_T)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
417 Lemma11 f = Category.Cat.refl (Lemma11-1 f)
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
418
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
419 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
420 -- natural transformations
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
421 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
422
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
423 nat-η : NTrans A A identityFunctor ( U_T ○ F_T )
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
424 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
425 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
426 → 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
427 naturality1 {a} {b} {f} = let open ≈-Reasoning (A) in
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
428 begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
429 ( 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
430 ≈⟨ sym (resp refl-hom (Lemma11-1 f)) ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
431 FMap T f o TMap η a
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
432 ≈⟨ nat η ⟩
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
433 TMap η b o f
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
434
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
435 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
436 isNTrans1 = record { naturality = naturality1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
437
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
438 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
439 tmap-ε a = record { KMap = id1 A (FObj T a) }
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
440
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
441 nat-ε : NTrans KleisliCategory KleisliCategory ( F_T ○ U_T ) identityFunctor
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
442 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
443 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
444 → (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
445 naturality1 {a} {b} {f} = let open ≈-Reasoning (A) in
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
446 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
447 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
448 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
449 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
450 ≈⟨ cdr ( cdr (
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
451 begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
452 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 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
454 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
455 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
456 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
457
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 μ 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
460 ≈⟨ 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
461 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
462 ≈⟨ cdr idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
463 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
464 ≈⟨ assoc ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
465 (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
466 ≈⟨ (car (IsMonad.unity1 (isMonad M))) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
467 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
468 ≈⟨ idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
469 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
470 ≈⟨ cdr (sym idR) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
471 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
472 ≈⟨⟩
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
473 KMap (f * ( tmap-ε a ))
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
474 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
475 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
476 isNTrans1 = record { naturality = naturality1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
477
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
478 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
479 -- μ = U_T ε U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
480 --
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
481 Lemma12 : {x : Obj A } -> A [ TMap μ 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
482 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
483 sym ( begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
484 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
485 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
486 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
487 ≈⟨ cdr (IsFunctor.identity (isFunctor T)) ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
488 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
489 ≈⟨ idR ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
490 TMap μ x
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
491 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
492
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
493
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
494 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
495 Adj_T = record {
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
496 isAdjunction = record {
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
497 adjoint1 = adjoint1 ;
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
498 adjoint2 = adjoint2
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
499 }
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
500 } where
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
501 adjoint1 : { b : Obj KleisliCategory } →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
502 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
503 adjoint1 {b} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
504 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
505 ( 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
506 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
507 (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
508 ≈⟨ car ( cdr (IsFunctor.identity (isFunctor T))) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
509 (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
510 ≈⟨ car idR ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
511 TMap μ (b) o ( TMap η ( FObj T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
512 ≈⟨ IsMonad.unity1 (isMonad M) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
513 id1 A (FObj U_T b)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
514
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
515 adjoint2 : {a : Obj A} →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
516 KleisliCategory [ KleisliCategory [ ( TMap nat-ε ( FObj F_T a )) o ( FMap F_T ( TMap nat-η a )) ]
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
517 ≈ id1 KleisliCategory (FObj F_T a) ]
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
518 adjoint2 {a} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
519 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
520 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
521 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
522 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
523 ≈⟨ cdr ( car ( IsFunctor.identity (isFunctor T))) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
524 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
525 ≈⟨ cdr ( idL ) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
526 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
527 ≈⟨ assoc ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
528 (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
529 ≈⟨ car (IsMonad.unity1 (isMonad M)) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
530 id1 A (FObj T a) o (TMap η a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
531 ≈⟨ idL ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
532 TMap η a
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
533 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
534 TMap η (FObj F_T a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
535 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
536 KMap (id1 KleisliCategory (FObj F_T a))
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
537
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
538
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
539 nat-μ : NTrans A A (( U_T ○ F_T ) ○ (U_T ○ F_T)) (U_T ○ F_T)
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
540 nat-μ = {!!}
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
541
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
542 M_T : Monad A ( U_T ○ F_T ) nat-η nat-μ
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
543 M_T = {!!}
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
544
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
545 Resolution_T : Resolution A KleisliCategory M_T Adj_T
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
546 Resolution_T = record {
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
547 μ=UεF = {!!}
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
548 }
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
549
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
550
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
551 module comparison-functor {c₁' c₂' ℓ' : Level} ( B : Category c₁ c₂ ℓ )
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
552 { 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
553 { η_K : NTrans A A identityFunctor ( U_K ○ F_K ) }
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
554 { ε_K : NTrans B B ( F_K ○ U_K ) identityFunctor }
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
555 ( Adj : Adjunction A B U_K F_K η_K ε_K )
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
556 where
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
557
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
558 kfmap : {!!}
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
559 kfmap = {!!}
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
560
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
561 K_T : Functor KleisliCategory B
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
562 K_T = record {
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
563 FObj = FObj F_K
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
564 ; FMap = kfmap
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
565 ; isFunctor = record
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
566 { ≈-cong = {!!} -- ≈-cong
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
567 ; identity = {!!} -- identity
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
568 ; distr = {!!} -- distr1
83
c3846bf83717 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
569 }
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
570 } -- where
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
571 -- identity : {a : Obj B} → B [ kfmap (K-id {a}) ≈ id1 B (FObj T a) ]
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
572 -- identity {a} = let open ≈-Reasoning (B) in
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
573 -- begin
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
574 -- ?
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
575 -- ≈⟨ ? ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
576 -- ?
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
577 -- ∎
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
578 -- ≈-cong : {a b : Obj B} {f g : KHom a b} → B [ KMap f ≈ KMap g ] → B [ kfmap f ≈ kfmap g ]
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
579 -- ≈-cong {a} {b} {f} {g} f≈g = let open ≈-Reasoning (B) in
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
580 -- begin
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 -- ≈⟨ ? ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
583 -- ?
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
584 -- ∎
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
585 -- distr1 : {a b c : Obj B} {f : KHom a b} {g : KHom b c} → B [ kfmap (g * f) ≈ (B [ kfmap g o kfmap f ] )]
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
586 -- distr1 {a} {b} {c} {f} {g} = let open ≈-Reasoning (B) in
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
587 -- begin
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
588 -- ?
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
589 -- ≈⟨ ? ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
590 -- ?
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
591 -- ∎
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
592