annotate kleisli.agda @ 253:24e83b8b81be

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 11 Sep 2013 20:26:48 +0900
parents 3249aaddc405
children d6a6dd305da2
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 -- -- -- -- -- -- -- --
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
2 -- Monad to Kelisli Category
82
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
152
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 130
diff changeset
23 module kleisli { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ }
72
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 }
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
27 { M : Monad A T η μ } where
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
29 --T(g f) = T(g) T(f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
30
31
17b8bafebad7 add universal mapping
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
31 open Functor
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
32 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
33 → 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
34 Lemma1 = \t → IsFunctor.distr ( isFunctor t )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
37 open NTrans
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
38 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
39 → (μ : 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
40 → A [ A [ FMap G f o TMap μ a ] ≈ A [ TMap μ b o FMap F f ] ]
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
41 Lemma2 = \n → IsNTrans.commute ( isNTrans n )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
43 -- Laws of Monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
44 --
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
45 -- η : 1_A → T
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
46 -- μ : TT → T
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
47 -- μ(a)η(T(a)) = a -- unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
48 -- μ(a)T(η(a)) = a -- unity law 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
49 -- μ(a)(μ(T(a))) = μ(a)T(μ(a)) -- association law
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52 open Monad
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 Lemma3 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
55 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
56 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
57 { a : Obj A } →
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
59 → 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
60 Lemma3 = \m → IsMonad.assoc ( isMonad m )
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
62
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63 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
64 → A [ A [ Id {_} {_} {_} {A} b o f ] ≈ f ]
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
65 Lemma4 = \a → IsCategory.identityL ( Category.isCategory a )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
67 Lemma5 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
68 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
69 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
70 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
71 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
72 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
73 → 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
74 Lemma5 = \m → IsMonad.unity1 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
75
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
76 Lemma6 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
77 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
78 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
79 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
80 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
81 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
82 → 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
83 Lemma6 = \m → IsMonad.unity2 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
84
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
85 -- Laws of Kleisli Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
86 --
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 -- nat of η
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
88 -- g ○ f = μ(c) T(g) f -- join definition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
89 -- η(b) ○ f = f -- left id (Lemma7)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
90 -- f ○ η(a) = f -- right id (Lemma8)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
91 -- 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
92
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
93 -- η(b) ○ f = f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
94 Lemma7 : { a : Obj A } { b : Obj A } ( f : Hom A a ( FObj T b) )
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
95 → A [ join M (TMap η b) f ≈ f ]
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
96 Lemma7 {_} {b} f =
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
97 let open ≈-Reasoning (A) in
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
98 begin
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
99 join M (TMap η b) f
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
100 ≈⟨ refl-hom ⟩
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
101 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
102 ≈⟨ IsCategory.associative (Category.isCategory A) ⟩
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
103 A [ A [ TMap μ b o FMap T ((TMap η b)) ] o f ]
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
104 ≈⟨ car ( IsMonad.unity2 ( isMonad M) ) ⟩
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
105 A [ id (FObj T b) o f ]
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
106 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
107 f
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
108
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
109
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
110 -- f ○ η(a) = f
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
111 Lemma8 : { a : Obj A } { b : Obj A }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
112 ( f : Hom A a ( FObj T b) )
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
113 → A [ join M f (TMap η a) ≈ f ]
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
114 Lemma8 {a} {b} f =
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
115 begin
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
116 join M f (TMap η a)
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
117 ≈⟨ 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
118 A [ TMap μ b o A [ FMap T f o (TMap η a) ] ]
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
119 ≈⟨ 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
120 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
121 ≈⟨ 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
122 A [ A [ TMap μ b o (TMap η ( FObj T b)) ] o f ]
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
123 ≈⟨ car ( IsMonad.unity1 ( isMonad M) ) ⟩
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
124 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
125 ≈⟨ IsCategory.identityL (Category.isCategory A) ⟩
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
126 f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
127 ∎ 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
128 open ≈-Reasoning (A)
5
16572013c362 Kleisli Proposition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
129
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
130 -- 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
131 Lemma9 : { a b c d : Obj A }
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
132 ( 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
133 ( g : Hom A b ( FObj T c) )
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
134 ( f : Hom A a ( FObj T b) )
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
135 → A [ join M h (join M g f) ≈ join M ( join M h g) f ]
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
136 Lemma9 {a} {b} {c} {d} h g f =
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
137 begin
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
138 join M h (join M g f)
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
139 ≈⟨⟩
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
140 join M h ( ( TMap μ c o ( FMap T g o f ) ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
141 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
142 ( 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
143 ≈⟨ cdr ( cdr ( assoc )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
144 ( 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
145 ≈⟨ assoc ⟩ --- ( f o ( g o h ) ) = ( ( f o g ) o h )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
146 ( ( 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
147 ≈⟨ assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
148 ( ( ( TMap μ d o FMap T h ) o (TMap μ c o FMap T g ) ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
149 ≈↑⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
150 ( ( 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
151 ≈⟨ car ( cdr (assoc) ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
152 ( ( 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
153 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
154 ( ( ( 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
155 ≈⟨ car (car ( cdr ( begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
156 ( FMap T h o TMap μ c )
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
157 ≈⟨ nat μ ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
158 ( 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
159
8117bafdec7a on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
160 ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
161 ( ( ( TMap μ d o ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) ) o FMap T g ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
162 ≈↑⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
163 ( ( TMap μ d o ( ( TMap μ ( FObj T d) o FMap T ( FMap T h ) ) o FMap T g ) ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
164 ≈↑⟨ car ( cdr assoc ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
165 ( ( TMap μ d o ( TMap μ ( FObj T d) o ( FMap T ( FMap T h ) o FMap T g ) ) ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
166 ≈↑⟨ car ( cdr (cdr (distr T ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
167 ( ( 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
168 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
169 ( ( ( 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
170 ≈⟨ car ( car (
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
171 begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
172 ( 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
173 ≈⟨ IsMonad.assoc ( isMonad M) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
174 ( TMap μ d o FMap T (TMap μ d) )
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
175
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
176 )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
177 ( ( ( TMap μ d o FMap T ( TMap μ d) ) o FMap T ( ( FMap T h o g ) ) ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
178 ≈↑⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
179 ( ( TMap μ d o ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) ) o f )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
180 ≈↑⟨ assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
181 ( TMap μ d o ( ( FMap T ( TMap μ d ) o FMap T ( ( FMap T h o g ) ) ) o f ) )
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
182 ≈↑⟨ cdr ( car ( distr T )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
183 ( 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
184 ≈⟨ refl-hom ⟩
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
185 join M ( ( 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
186 ≈⟨ refl-hom ⟩
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
187 join M ( join M h g) f
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
188 ∎ where open ≈-Reasoning (A)
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
190 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
191 -- o-resp in Kleisli Category ( for Functor definitions )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
192 --
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
193 Lemma10 : {a b c : Obj A} -> (f g : Hom A a (FObj T b) ) → (h i : Hom A b (FObj T c) ) →
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
194 A [ f ≈ g ] → A [ h ≈ i ] → A [ (join M h f) ≈ (join M i g) ]
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
195 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
196 begin
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
197 join M h f
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
198 ≈⟨⟩
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
199 TMap μ c o ( FMap T h o f )
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
200 ≈⟨ 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
201 TMap μ c o ( FMap T i o g )
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
202 ≈⟨⟩
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
203 join M i g
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
204
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
205
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
206 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
207 -- Hom in Kleisli Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
208 --
74
49e6eb3ef9c0 Kleisli Category constructed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
209
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
210
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
211 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
212 : Set c₂ where
70
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
213 field
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
214 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
215
88
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
216 open KleisliHom
419923b149ca on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
217 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
218
72
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 : 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
220 K-id {a = a} = record { KMap = TMap η a }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
221
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
222 open import Relation.Binary.Core
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
108
e763efd30868 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
227 _*_ : { a b c : Obj A } → ( KHom b c) → ( KHom a b) → KHom a c
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
228 _*_ {a} {b} {c} g f = record { KMap = join M {a} {b} {c} (KMap g) (KMap f) }
70
fb3c48b375b3 Kleisli Category ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
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 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
231 isKleisliCategory = record { isEquivalence = isEquivalence
71
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
232 ; identityL = KidL
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
233 ; identityR = KidR
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
234 ; o-resp-≈ = Ko-resp
709c1bde54dc Kleisli category problem written
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
235 ; associative = Kassoc
69
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
236 }
84a150c980ce generalized distr and assco1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
237 where
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
238 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
239 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
240 IsEquivalence {_} {_} {KHom a b} _⋍_
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
241 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
242 record { refl = refl-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
243 ; sym = sym
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
244 ; trans = trans-hom
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
245 }
72
cbc30519e961 stack overflow solved by moving implicit parameters to module parameters
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
246 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
247 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
248 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
249 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
250 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
251 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
252 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
253 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
254 (f * (g * h)) ⋍ ((f * g) * h)
73
b75b5792bd81 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
255 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
256
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
257 KleisliCategory : Category c₁ c₂ ℓ
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
258 KleisliCategory =
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
259 record { Obj = Obj A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
260 ; Hom = KHom
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
261 ; _o_ = _*_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
262 ; _≈_ = _⋍_
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
263 ; Id = K-id
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
264 ; isCategory = isKleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
265 }
56
83ff8d48fdca add unitility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
266
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
267 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
268 -- Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
269 -- T = U_T U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
270 -- nat-ε
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 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
273
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
274 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
275 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
276
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
277 U_T : Functor KleisliCategory A
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
278 U_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
279 FObj = FObj T
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
280 ; FMap = ufmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
281 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
282 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
283 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
284 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
285 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
286 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
287 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
288 identity {a} = let open ≈-Reasoning (A) in
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
289 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
290 TMap μ (a) o FMap T (TMap η a)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
291 ≈⟨ IsMonad.unity2 (isMonad M) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
292 id (FObj T a)
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
293
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
294 ≈-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
295 ≈-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
296 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
297 TMap μ (b) o FMap T (KMap f)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
298 ≈⟨ cdr (fcong T f≈g) ⟩
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
299 TMap μ (b) o FMap T (KMap g)
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
300
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
301 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
302 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
303 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
304 ufmap (g * f)
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
305 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
306 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
307 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
308 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
309 ≈⟨ cdr ( distr T) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
310 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
311 ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
312 (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
313 ≈⟨ car (sym (IsMonad.assoc (isMonad M))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
314 (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
315 ≈⟨ sym assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
316 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
317 ≈⟨ cdr (cdr (distr T)) ⟩
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 FMap T (KMap f)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
319 ≈⟨ cdr (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 FMap T (KMap f))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
321 ≈⟨ sym (cdr (car (nat μ ))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
322 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
323 ≈⟨ cdr (sym assoc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
324 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
325 ≈⟨ assoc ⟩
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 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
328 ufmap g o ufmap f
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
329
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 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
333 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
334
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
335 F_T : Functor A KleisliCategory
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
336 F_T = record {
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
337 FObj = \a -> a
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
338 ; FMap = ffmap
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
339 ; isFunctor = record
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
340 { ≈-cong = ≈-cong
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
341 ; identity = identity
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
342 ; distr = distr1
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
343 }
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
344 } where
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
345 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
346 identity {a} = IsCategory.identityR ( Category.isCategory A)
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
347 -- 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
348 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
349 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
350 ≈-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
351 ≈-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
352 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
353 ( 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
354 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
355 begin
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
356 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
357 ≈⟨⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
358 TMap η (c) o (g o f)
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
359 ≈⟨ assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
360 (TMap η (c) o g) o f
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
361 ≈⟨ car (sym (nat η)) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
362 (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
363 ≈⟨ sym idL ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
364 id (FObj T c) o ((FMap T g o TMap η (b)) o f)
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
365 ≈⟨ sym (car (IsMonad.unity2 (isMonad M))) ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
366 (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
367 ≈⟨ sym assoc ⟩
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
368 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
369 ≈⟨ cdr (cdr (sym assoc)) ⟩
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 ≈⟨ cdr 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 ≈⟨ sym (cdr ( car ( distr T ))) ⟩
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 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 ≈⟨ 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 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 ≈⟨ assoc ⟩
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 ≈⟨ sym 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 ≈⟨ sym 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 ≈⟨⟩
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
384 join M (TMap η c o g) (TMap η b o f)
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
385 ≈⟨⟩
75
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
386 KMap ( ffmap g * ffmap f )
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
387
8e665152c306 Comparison Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
388
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
389 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
390 -- T = (U_T ○ F_T)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
391 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
392
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
393 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
394 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
395 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
396 FMap (U_T ○ F_T) f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
397 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
398 FMap U_T ( FMap F_T f )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
399 ≈⟨⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
400 TMap μ (b) o FMap T (KMap ( ffmap 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 TMap μ (b) o FMap T (TMap η (b) o f)
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
403 ≈⟨ cdr (distr T ) ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
404 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
405 ≈⟨ assoc ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
406 (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
407 ≈⟨ car (IsMonad.unity2 (isMonad M)) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
408 id (FObj T b) o FMap T f
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
409 ≈⟨ idL ⟩
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
410 FMap T f
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
411 ∎ )
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
412
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
413 -- construct ≃
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
414
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
415 Lemma11 : T ≃ (U_T ○ F_T)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
416 Lemma11 f = Category.Cat.refl (Lemma11-1 f)
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
417
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
418 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
419 -- natural transformations
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
420 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
421
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
422 nat-η : NTrans A A identityFunctor ( U_T ○ F_T )
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
423 nat-η = record { TMap = \x -> TMap η x ; isNTrans = isNTrans1 } where
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
424 commute1 : {a b : Obj A} {f : Hom A a b}
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
425 → A [ A [ ( FMap ( U_T ○ F_T ) f ) o ( TMap η a ) ] ≈ A [ (TMap η b ) o f ] ]
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
426 commute1 {a} {b} {f} = let open ≈-Reasoning (A) in
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
427 begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
428 ( 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
429 ≈⟨ sym (resp refl-hom (Lemma11-1 f)) ⟩
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
430 FMap T f o TMap η a
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
431 ≈⟨ nat η ⟩
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
432 TMap η b o f
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
433
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
434 isNTrans1 : IsNTrans A A identityFunctor ( U_T ○ F_T ) (\a -> TMap η a)
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
435 isNTrans1 = record { commute = commute1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
436
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
437 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
438 tmap-ε a = record { KMap = id1 A (FObj T a) }
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
439
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
440 nat-ε : NTrans KleisliCategory KleisliCategory ( F_T ○ U_T ) identityFunctor
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
441 nat-ε = record { TMap = \a -> tmap-ε a; isNTrans = isNTrans1 } where
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
442 commute1 : {a b : Obj A} {f : KHom a b}
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
443 → (f * ( tmap-ε a ) ) ⋍ (( tmap-ε b ) * ( FMap (F_T ○ U_T) f ) )
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
444 commute1 {a} {b} {f} = let open ≈-Reasoning (A) in
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
445 sym ( begin
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
446 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
447 ≈⟨⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
448 TMap μ b o ( FMap T ( id (FObj T b) ) o ( KMap (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
449 ≈⟨ cdr ( cdr (
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
450 begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
451 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
452 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
453 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
454 ≈⟨⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
455 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
456
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
457 )) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
458 TMap μ b o ( FMap T ( id (FObj T b) ) o (TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f))))
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
459 ≈⟨ cdr (car (IsFunctor.identity (isFunctor T))) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
460 TMap μ b o ( id (FObj T (FObj T b) ) o (TMap η (FObj T b) o (TMap μ (b) o FMap T (KMap f))))
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
461 ≈⟨ cdr idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
462 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
463 ≈⟨ assoc ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
464 (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
465 ≈⟨ (car (IsMonad.unity1 (isMonad M))) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
466 id (FObj T b) o (TMap μ (b) o FMap T (KMap f))
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
467 ≈⟨ idL ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
468 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 ≈⟨ cdr (sym idR) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
470 TMap μ b o ( FMap T (KMap f) o id (FObj T a) )
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
471 ≈⟨⟩
79
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
472 KMap (f * ( tmap-ε a ))
84723389e3c9 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
473 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
474 isNTrans1 : IsNTrans KleisliCategory KleisliCategory ( F_T ○ U_T ) identityFunctor (\a -> tmap-ε a )
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
475 isNTrans1 = record { commute = commute1 }
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
476
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
477 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
478 -- μ = U_T ε U_F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
479 --
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
480 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
481 tmap-μ a = FMap U_T ( TMap nat-ε ( FObj F_T a ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
482
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
483 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
484 nat-μ = record { TMap = tmap-μ ; isNTrans = isNTrans1 } where
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
485 commute1 : {a b : Obj A} {f : Hom A a b}
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
486 → 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) ] ]
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
487 commute1 {a} {b} {f} = let open ≈-Reasoning (A) in
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
488 sym ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
489 ( 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
490 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
491 ( 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
492 ≈⟨ sym ( distr U_T) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
493 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
494 ≈⟨ fcong U_T (sym (nat nat-ε)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
495 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
496 ≈⟨ distr U_T ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
497 (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
498 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
499 (FMap (U_T ○ F_T) f) o ( tmap-μ a)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
500 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
501 isNTrans1 : IsNTrans A A (( U_T ○ F_T ) ○ ( U_T ○ F_T )) ( U_T ○ F_T ) tmap-μ
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
502 isNTrans1 = record { commute = commute1 }
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
503
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
504 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
505 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
506 sym ( begin
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
507 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
508 ≈⟨⟩
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
509 tmap-μ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
510 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
511 TMap nat-μ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
512 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
513
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
514 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
515 Lemma13 {x} = let open ≈-Reasoning (A) in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
516 sym ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
517 FMap U_T ( TMap nat-ε ( FObj F_T x ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
518 ≈⟨⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
519 TMap μ x o FMap T (id (FObj T x) )
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
520 ≈⟨ cdr (IsFunctor.identity (isFunctor T)) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
521 TMap μ x o id (FObj T (FObj T x) )
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
522 ≈⟨ idR ⟩
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
523 TMap μ x
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
524 ∎ )
78
b3c023f7c929 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
525
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
526 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
527 Adj_T = record {
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
528 isAdjunction = record {
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
529 adjoint1 = adjoint1 ;
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
530 adjoint2 = adjoint2
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
531 }
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
532 } where
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
533 adjoint1 : { b : Obj KleisliCategory } →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
534 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
535 adjoint1 {b} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
536 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
537 ( 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
538 ≈⟨⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
539 (TMap μ (b) o FMap T (id (FObj T b ))) o ( TMap η ( FObj T b ))
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
540 ≈⟨ car ( cdr (IsFunctor.identity (isFunctor T))) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
541 (TMap μ (b) o (id (FObj T (FObj T b )))) o ( TMap η ( FObj T b ))
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
542 ≈⟨ car idR ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
543 TMap μ (b) o ( TMap η ( FObj T b ))
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
544 ≈⟨ IsMonad.unity1 (isMonad M) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
545 id (FObj U_T b)
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
546
80
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
547 adjoint2 : {a : Obj A} →
e945c201364a Adjoint of U_T F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 79
diff changeset
548 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
549 ≈ id1 KleisliCategory (FObj F_T a) ]
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
550 adjoint2 {a} = let open ≈-Reasoning (A) in
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
551 begin
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
552 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
553 ≈⟨⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
554 TMap μ a o (FMap T (id (FObj T a) ) o ((TMap η (FObj T a)) o (TMap η a)))
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
555 ≈⟨ cdr ( car ( IsFunctor.identity (isFunctor T))) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
556 TMap μ a o ((id (FObj T (FObj T a) )) o ((TMap η (FObj T a)) o (TMap η a)))
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
557 ≈⟨ cdr ( idL ) ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
558 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
559 ≈⟨ assoc ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
560 (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
561 ≈⟨ car (IsMonad.unity1 (isMonad M)) ⟩
253
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
562 id (FObj T a) o (TMap η a)
81
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
563 ≈⟨ idL ⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
564 TMap η a
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
565 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
566 TMap η (FObj F_T a)
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
567 ≈⟨⟩
0404b2ba7db6 Resolution Adjoint proved.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
568 KMap (id1 KleisliCategory (FObj F_T a))
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
569
77
528c7e27af91 Resolution U_T, F_T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
570
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
571 open MResolution
84
ee25f96ee8cc record Resolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
572
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
573 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
574 Resolution_T = record {
87
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
575 T=UF = Lemma11;
4690953794c4 MEsolution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
576 μ=UεF = Lemma12
84
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
97
2feec58bb02d seprate comparison functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
579 -- end