annotate nat.agda @ 31:17b8bafebad7

add universal mapping
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 22 Jul 2013 14:30:27 +0900
parents 98b8431a419b
children 83ff8d48fdca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module nat where
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 -- Monad
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 -- Category A
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 -- A = Category
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
6 -- Functor T : A → A
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 --T(a) = t(a)
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 --T(f) = tf(f)
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
10 open import Category -- https://github.com/konn/category-agda
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Level
31
17b8bafebad7 add universal mapping
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
12 open import Category.HomReasoning
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 --T(g f) = T(g) T(f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
15
31
17b8bafebad7 add universal mapping
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
16 open Functor
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
17 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
18 → 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
19 Lemma1 = \t → IsFunctor.distr ( isFunctor t )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
22 open NTrans
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
23 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
24 → (μ : 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
25 → 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
26 Lemma2 = \n → IsNTrans.naturality ( isNTrans n )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 open import Category.Cat
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
30 -- η : 1_A → T
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
31 -- μ : TT → T
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 -- μ(a)η(T(a)) = a
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 -- μ(a)T(η(a)) = a
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 -- μ(a)(μ(T(a))) = μ(a)T(μ(a))
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
36 record IsMonad {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
37 ( T : Functor A A )
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
38 ( η : NTrans A A identityFunctor T )
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
39 ( μ : NTrans A A (T ○ T) T)
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
40 : Set (suc (c₁ ⊔ c₂ ⊔ ℓ )) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
41 field
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
42 assoc : {a : Obj A} → A [ A [ TMap μ a o TMap μ ( FObj T a ) ] ≈ A [ TMap μ a o FMap T (TMap μ a) ] ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
43 unity1 : {a : Obj A} → A [ A [ TMap μ a o TMap η ( FObj T a ) ] ≈ Id {_} {_} {_} {A} (FObj T a) ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
44 unity2 : {a : Obj A} → A [ A [ TMap μ a o (FMap T (TMap η a ))] ≈ Id {_} {_} {_} {A} (FObj T a) ]
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
46 record Monad {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) (T : Functor A A) (η : NTrans A A identityFunctor T) (μ : NTrans A A (T ○ T) T)
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
47 : Set (suc (c₁ ⊔ c₂ ⊔ ℓ )) where
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
48 eta : NTrans A A identityFunctor T
6
b1fd8d8689a9 add accessor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
49 eta = η
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
50 mu : NTrans A A (T ○ T) T
6
b1fd8d8689a9 add accessor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
51 mu = μ
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
52 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
53 isMonad : IsMonad A T η μ
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 open Monad
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56 Lemma3 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
57 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
58 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
59 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
60 { a : Obj A } →
2
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
62 → 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
63 Lemma3 = \m → IsMonad.assoc ( isMonad m )
2
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
7ce421d5ee2b unity1 unity2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
66 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
67 → A [ A [ Id {_} {_} {_} {A} b o f ] ≈ f ]
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
68 Lemma4 = \a → IsCategory.identityL ( Category.isCategory a )
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
70 Lemma5 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
71 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
72 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
73 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
74 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
75 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
76 → 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
77 Lemma5 = \m → IsMonad.unity1 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
78
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
79 Lemma6 : {c₁ c₂ ℓ : Level} {A : Category c₁ c₂ ℓ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
80 { T : Functor A A }
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
81 { η : NTrans A A identityFunctor T }
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
82 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
83 { a : Obj A } →
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
84 ( M : Monad A T η μ )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
85 → 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
86 Lemma6 = \m → IsMonad.unity2 ( isMonad m )
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
87
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
88 -- T = M x A
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 -- nat of η
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 -- g ○ f = μ(c) T(g) f
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 -- η(b) ○ f = f
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 -- f ○ η(a) = f
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
93 -- h ○ (g ○ f) = (h ○ g) ○ f
0
302941542c0f category agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
95 record Kleisli { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
96 ( T : Functor A A )
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
97 ( η : NTrans A A identityFunctor T )
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
98 ( μ : NTrans A A (T ○ T) T )
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
99 ( M : Monad A T η μ ) : Set (suc (c₁ ⊔ c₂ ⊔ ℓ )) where
5
16572013c362 Kleisli Proposition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
100 monad : Monad A T η μ
16572013c362 Kleisli Proposition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
101 monad = M
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
102 -- g ○ f = μ(c) T(g) f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
103 join : { a b : Obj A } → ( c : Obj A ) →
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
104 ( Hom A b ( FObj T c )) → ( Hom A a ( FObj T b)) → Hom A a ( FObj T c )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
105 join c g f = A [ TMap μ c o A [ FMap T g o f ] ]
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
106
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
107 lemma12 : {c₁ c₂ ℓ : Level} (L : Category c₁ c₂ ℓ) { a b c : Obj L } →
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
108 ( x : Hom L c a ) → ( y : Hom L b c ) → L [ L [ x o y ] ≈ L [ x o y ] ]
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
109 lemma12 L x y =
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
110 let open ≈-Reasoning ( L ) in
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
111 begin L [ x o y ] ∎
11
2cbecadc56c1 reasoning test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
112
2cbecadc56c1 reasoning test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
113
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
114 open Kleisli
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
115 -- η(b) ○ f = f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
116 Lemma7 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) →
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
117 ( T : Functor A A )
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
118 ( η : NTrans A A identityFunctor T )
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
119 { μ : NTrans A A (T ○ T) T }
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
120 { a : Obj A } ( b : Obj A )
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
121 ( f : Hom A a ( FObj T b) )
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
122 ( m : Monad A T η μ )
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
123 ( k : Kleisli A T η μ m)
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
124 → A [ join k b (TMap η b) f ≈ f ]
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
125 Lemma7 c T η b f m k =
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
126 let open ≈-Reasoning (c)
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
127 μ = mu ( monad k )
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
128 in
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
129 begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
130 join k b (TMap η b) f
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
131 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
132 c [ TMap μ b o c [ FMap T ((TMap η b)) o f ] ]
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
133 ≈⟨ IsCategory.associative (Category.isCategory c) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
134 c [ c [ TMap μ b o FMap T ((TMap η b)) ] o f ]
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
135 ≈⟨ car ( IsMonad.unity2 ( isMonad ( monad k )) ) ⟩
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
136 c [ id (FObj T b) o f ]
21
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
137 ≈⟨ IsCategory.identityL (Category.isCategory c) ⟩
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
138 f
a7b0f7ab9881 unity law 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
139
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
140
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
141 -- f ○ η(a) = f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
142 Lemma8 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ)
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
143 ( T : Functor A A )
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
144 ( η : NTrans A A identityFunctor T )
7
79d9c30e995a Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
145 { μ : NTrans A A (T ○ T) T }
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
146 ( a : Obj A ) ( b : Obj A )
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
147 ( f : Hom A a ( FObj T b) )
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
148 ( m : Monad A T η μ )
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
149 ( k : Kleisli A T η μ m)
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
150 → A [ join k b f (TMap η a) ≈ f ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
151 Lemma8 c T η a b f m k =
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
152 begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
153 join k b f (TMap η a)
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
154 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
155 c [ TMap μ b o c [ FMap T f o (TMap η a) ] ]
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
156 ≈⟨ cdr ( IsNTrans.naturality ( isNTrans η )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
157 c [ TMap μ b o c [ (TMap η ( FObj T b)) o f ] ]
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
158 ≈⟨ IsCategory.associative (Category.isCategory c) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
159 c [ c [ TMap μ b o (TMap η ( FObj T b)) ] o f ]
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
160 ≈⟨ car ( IsMonad.unity1 ( isMonad ( monad k )) ) ⟩
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
161 c [ id (FObj T b) o f ]
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
162 ≈⟨ IsCategory.identityL (Category.isCategory c) ⟩
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
163 f
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
164 ∎ where
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
165 open ≈-Reasoning (c)
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
166 μ = mu ( monad k )
5
16572013c362 Kleisli Proposition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
167
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
168 -- h ○ (g ○ f) = (h ○ g) ○ f
23
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
169 Lemma9 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ)
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
170 ( T : Functor A A )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
171 ( η : NTrans A A identityFunctor T )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
172 ( μ : NTrans A A (T ○ T) T )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
173 ( a b c d : Obj A )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
174 ( f : Hom A a ( FObj T b) )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
175 ( g : Hom A b ( FObj T c) )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
176 ( h : Hom A c ( FObj T d) )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
177 ( m : Monad A T η μ )
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
178 ( k : Kleisli A T η μ m)
22
b3cb592d7b9d add some law
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
179 → A [ join k d h (join k c g f) ≈ join k d ( join k d h g) f ]
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
180 Lemma9 A T η μ a b c d f g h m k =
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
181 begin
23
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
182 join k d h (join k c g f)
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
183 ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
184 join k d h ( ( TMap μ c o ( FMap T g o f ) ) )
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
185 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
186 ( 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
187 ≈⟨ cdr ( cdr ( assoc )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
188 ( 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
189 ≈⟨ assoc ⟩ --- ( f o ( g o h ) ) = ( ( f o g ) o h )
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
190 ( ( 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
191 ≈⟨ assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
192 ( ( ( 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
193 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
194 ( ( 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
195 ≈⟨ car ( cdr (assoc) ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
196 ( ( 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
197 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
198 ( ( ( 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
199 ≈⟨ car (car ( cdr ( begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
200 ( FMap T h o TMap μ c )
26
ad62c87659ef join association finish
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
201 ≈⟨ nat A μ ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
202 ( 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
203
8117bafdec7a on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
204 ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
205 ( ( ( 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
206 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
207 ( ( 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
208 ≈⟨ car ( cdr (sym assoc) ) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
209 ( ( 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
210 ≈⟨ car ( cdr (cdr (sym (distr T )))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
211 ( ( 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
212 ≈⟨ car assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
213 ( ( ( 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
214 ≈⟨ car ( car (
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
215 begin
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
216 ( TMap μ d o TMap μ (FObj T d) )
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
217 ≈⟨ IsMonad.assoc ( isMonad m) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
218 ( TMap μ d o FMap T (TMap μ d) )
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
219
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
220 )) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
221 ( ( ( 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
222 ≈⟨ car (sym assoc) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
223 ( ( 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
224 ≈⟨ sym assoc ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
225 ( 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
226 ≈⟨ cdr ( car ( sym ( distr T ))) ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
227 ( 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
228 ≈⟨ refl-hom ⟩
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
229 join k d ( ( 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
230 ≈⟨ refl-hom ⟩
736df1a35807 join assoc on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
231 join k d ( join k d h g) f
24
171c31acf78e on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
232 ∎ where open ≈-Reasoning (A)
3
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
233
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
234
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
235
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
236 -- Kleisli :
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
237 -- Kleisli = record { Hom =
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
238 -- ; Hom = _⟶_
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
239 -- ; Id = IdProd
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
240 -- ; _o_ = _∘_
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
241 -- ; _≈_ = _≈_
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
242 -- ; isCategory = record { isEquivalence = record { refl = λ {φ} → ≈-refl {φ = φ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
243 -- ; sym = λ {φ ψ} → ≈-symm {φ = φ} {ψ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
244 -- ; trans = λ {φ ψ σ} → ≈-trans {φ = φ} {ψ} {σ}
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
245 -- }
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
246 -- ; identityL = identityL
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
247 -- ; identityR = identityR
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
248 -- ; o-resp-≈ = o-resp-≈
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
249 -- ; associative = associative
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
250 -- }
dce706edd66b Kleisli
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
251 -- }