annotate monoid-monad.agda @ 790:1e7319868d77

Sets is CCC
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 19 Apr 2019 23:42:19 +0900
parents bded2347efa4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 open import Category -- https://github.com/konn/category-agda
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
2 open import Algebra
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
4 open import Category.Sets
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
5 module monoid-monad {c : Level} where
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
6
142
94796ddb9570 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
7 open import Algebra.Structures
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import HomReasoning
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import cat-utility
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Category.Cat
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
11 open import Data.Product
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
12 open import Relation.Binary.Core
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
13 open import Relation.Binary
131
eb7ca6b9d327 trying..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 130
diff changeset
14
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
15 -- open Monoid
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
16 open import Algebra.FunctionProperties using (Op₁; Op₂)
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
17
781
340708e8d54f fix for 2.5.4.2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 773
diff changeset
18 open import Relation.Binary.PropositionalEquality hiding ( [_] ; sym )
340708e8d54f fix for 2.5.4.2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 773
diff changeset
19
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
20
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
21 record ≡-Monoid c : Set (suc c) where
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
22 infixl 7 _*_
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
23 field
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
24 Carrier : Set c
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
25 _*_ : Op₂ Carrier
301
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 300
diff changeset
26 ε : Carrier -- id in Monoid
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
27 isMonoid : IsMonoid _≡_ _*_ ε
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
28
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 postulate M : ≡-Monoid c
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
30 open ≡-Monoid
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
31
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
32 infixl 7 _∙_
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
33
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
34 _∙_ : ( m m' : Carrier M ) → Carrier M
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
35 _∙_ m m' = _*_ M m m'
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
36
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
37 A = Sets {c}
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
38
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
39 -- T : A → (M x A)
134
de1c3443f10d M x A done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
40
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
41 T : Functor A A
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
42 T = record {
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
43 FObj = λ a → (Carrier M) × a
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
44 ; FMap = λ f p → (proj₁ p , f (proj₂ p ))
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
45 ; isFunctor = record {
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
46 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets ))
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
47 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
48 ; ≈-cong = cong1
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
49 }
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
50 } where
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
51 cong1 : {ℓ′ : Level} → {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} →
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
52 Sets [ f ≈ g ] → Sets [ map (λ (x : Carrier M) → x) f ≈ map (λ (x : Carrier M) → x) g ]
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
53 cong1 _≡_.refl = _≡_.refl
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
55 open Functor
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
56
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
57 Lemma-MM1 : {a b : Obj A} {f : Hom A a b} →
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
58 A [ A [ FMap T f o (λ x → ε M , x) ] ≈
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
59 A [ (λ x → ε M , x) o f ] ]
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
60 Lemma-MM1 {a} {b} {f} = let open ≈-Reasoning A renaming ( _o_ to _*_ ) in
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
61 begin
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
62 FMap T f o (λ x → ε M , x)
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
63 ≈⟨⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
64 (λ x → ε M , x) o f
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
65
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
66
150
5dc6f3f43507 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
67 -- η : a → (ε,a)
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
68 η : NTrans A A identityFunctor T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
69 η = record {
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
70 TMap = λ a → λ(x : a) → ( ε M , x ) ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
71 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
72 commute = Lemma-MM1
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
73 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
74 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
75
150
5dc6f3f43507 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
76 -- μ : (m,(m',a)) → (m*m,a)
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
77
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
78 muMap : (a : Obj A ) → FObj T ( FObj T a ) → Σ (Carrier M) (λ x → a )
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
79 muMap a ( m , ( m' , x ) ) = ( m ∙ m' , x )
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
80
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
81 Lemma-MM2 : {a b : Obj A} {f : Hom A a b} →
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
82 A [ A [ FMap T f o (λ x → muMap a x) ] ≈
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
83 A [ (λ x → muMap b x) o FMap (T ○ T) f ] ]
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
84 Lemma-MM2 {a} {b} {f} = let open ≈-Reasoning A renaming ( _o_ to _*_ ) in
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
85 begin
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
86 FMap T f o (λ x → muMap a x)
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
87 ≈⟨⟩
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
88 (λ x → muMap b x) o FMap (T ○ T) f
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
89
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
90
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
91 μ : NTrans A A ( T ○ T ) T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
92 μ = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
93 TMap = λ a → λ x → muMap a x ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
94 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
95 commute = λ{a} {b} {f} → Lemma-MM2 {a} {b} {f}
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
96 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
97 }
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
98
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
99 open NTrans
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
100
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
101 Lemma-MM33 : {a : Level} {b : Level} {A : Set a} {B : A → Set b} {x : Σ A B } → (((proj₁ x) , proj₂ x ) ≡ x )
142
94796ddb9570 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
102 Lemma-MM33 = _≡_.refl
94796ddb9570 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
103
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
104 Lemma-MM34 : ∀( x : Carrier M ) → ε M ∙ x ≡ x
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
105 Lemma-MM34 x = (( proj₁ ( IsMonoid.identity ( isMonoid M )) ) x )
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
106
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
107 Lemma-MM35 : ∀( x : Carrier M ) → x ∙ ε M ≡ x
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
108 Lemma-MM35 x = ( proj₂ ( IsMonoid.identity ( isMonoid M )) ) x
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
109
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
110 Lemma-MM36 : ∀( x y z : Carrier M ) → (x ∙ y) ∙ z ≡ x ∙ (y ∙ z )
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
111 Lemma-MM36 x y z = ( IsMonoid.assoc ( isMonoid M )) x y z
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
112
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
113 -- Functional Extensionality Axiom (We cannot prove this in Agda / Coq, just assumming )
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
114 import Relation.Binary.PropositionalEquality
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
115 -- postulate extensionality : { a b : Obj A } {f g : Hom A a b } → Relation.Binary.PropositionalEquality.Extensionality c c
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
116 postulate extensionality : Relation.Binary.PropositionalEquality.Extensionality c c
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
117
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
118 -- Multi Arguments Functional Extensionality
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
119 extensionality30 : {f g : Carrier M → Carrier M → Carrier M → Carrier M } →
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
120 (∀ x y z → f x y z ≡ g x y z ) → ( f ≡ g )
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
121 extensionality30 eq = extensionality ( λ x → extensionality ( λ y → extensionality (eq x y) ) )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
122
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
123 Lemma-MM9 : (λ(x : Carrier M) → ( ε M ∙ x )) ≡ ( λ(x : Carrier M) → x )
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
124 Lemma-MM9 = extensionality Lemma-MM34
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
125
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
126 Lemma-MM10 : ( λ x → (x ∙ ε M)) ≡ ( λ x → x )
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
127 Lemma-MM10 = extensionality Lemma-MM35
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
128
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
129 Lemma-MM11 : (λ x y z → ((x ∙ y ) ∙ z)) ≡ (λ x y z → ( x ∙ (y ∙ z ) ))
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
130 Lemma-MM11 = extensionality30 Lemma-MM36
145
57df6cb8f253 on going ..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 144
diff changeset
131
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
132 MonoidMonad : Monad A
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
133 MonoidMonad = record {
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
134 T = T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
135 ; η = η
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
136 ; μ = μ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
137 ; isMonad = record {
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
138 unity1 = Lemma-MM3 ;
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
139 unity2 = Lemma-MM4 ;
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
140 assoc = Lemma-MM5
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
141 }
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
142 } where
147
eabd1685139a add comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
143 Lemma-MM3 : {a : Obj A} → A [ A [ TMap μ a o TMap η ( FObj T a ) ] ≈ Id {_} {_} {_} {A} (FObj T a) ]
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
144 Lemma-MM3 {a} = let open ≈-Reasoning (A) renaming ( _o_ to _*_ ) in
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
145 begin
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
146 TMap μ a o TMap η ( FObj T a )
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
147 ≈⟨⟩
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
148 ( λ x → ε M ∙ (proj₁ x) , proj₂ x )
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
149 ≈⟨ cong ( λ f → ( λ x → ( ( f (proj₁ x) ) , proj₂ x ))) ( Lemma-MM9 ) ⟩
147
eabd1685139a add comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
150 ( λ (x : FObj T a) → (proj₁ x) , proj₂ x )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
151 ≈⟨⟩
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
152 ( λ x → x )
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
153 ≈⟨⟩
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
154 Id {_} {_} {_} {A} (FObj T a)
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
155
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
156 Lemma-MM4 : {a : Obj A} → A [ A [ TMap μ a o (FMap T (TMap η a ))] ≈ Id {_} {_} {_} {A} (FObj T a) ]
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
157 Lemma-MM4 {a} = let open ≈-Reasoning (A) renaming ( _o_ to _*_ ) in
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
158 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
159 TMap μ a o (FMap T (TMap η a ))
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
160 ≈⟨⟩
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
161 ( λ x → ( proj₁ x ∙ (ε M) , proj₂ x ))
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
162 ≈⟨ cong ( λ f → ( λ x → ( f (proj₁ x) ) , proj₂ x )) ( Lemma-MM10 ) ⟩
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
163 ( λ x → (proj₁ x) , proj₂ x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
164 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
165 ( λ x → x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
166 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
167 Id {_} {_} {_} {A} (FObj T a)
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
168
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
169 Lemma-MM5 : {a : Obj A} → A [ A [ TMap μ a o TMap μ ( FObj T a ) ] ≈ A [ TMap μ a o FMap T (TMap μ a) ] ]
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
170 Lemma-MM5 {a} = let open ≈-Reasoning (A) renaming ( _o_ to _*_ ) in
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
171 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
172 TMap μ a o TMap μ ( FObj T a )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
173 ≈⟨⟩
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
174 ( λ x → (proj₁ x) ∙ (proj₁ (proj₂ x)) ∙ (proj₁ (proj₂ (proj₂ x))) , proj₂ (proj₂ (proj₂ x)))
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
175 ≈⟨ cong ( λ f → ( λ x →
146
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
176 (( f ( proj₁ x ) ((proj₁ (proj₂ x))) ((proj₁ (proj₂ (proj₂ x))) )) , proj₂ (proj₂ (proj₂ x)) )
945f26ed12d5 assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
177 )) Lemma-MM11 ⟩
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 781
diff changeset
178 ( λ x → ( proj₁ x) ∙(( proj₁ (proj₂ x)) ∙ (proj₁ (proj₂ (proj₂ x)))) , proj₂ (proj₂ (proj₂ x)))
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
179 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
180 TMap μ a o FMap T (TMap μ a)
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
181
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
182
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
183
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
184 F : (m : Carrier M) → { a b : Obj A } → ( f : a → b ) → Hom A a ( FObj T b )
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
185 F m {a} {b} f = λ (x : a ) → ( m , ( f x) )
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
186
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
187 postulate m m' : Carrier M
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
188 postulate a b c' : Obj A
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
189 postulate f : b → c'
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
190 postulate g : a → b
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
191
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
192 Lemma-MM12 = Monad.join MonoidMonad (F m f) (F m' g)
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
193
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
194 open import kleisli {_} {_} {_} {A} {T} {η} {μ} {Monad.isMonad MonoidMonad}
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
195
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
196 -- nat-ε TMap = λ a₁ → record { KMap = λ x → x }
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
197 -- nat-η TMap = λ a₁ → _,_ (ε, M)
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
198 -- U_T Functor Kleisli A
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
199 -- U_T FObj = λ B → Σ (Carrier M) (λ x → B) FMap = λ {a₁} {b₁} f₁ x → ( proj₁ x ∙ (proj₁ (KMap f₁ (proj₂ x))) , proj₂ (KMap f₁ (proj₂ x))
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
200 -- F_T Functor A Kleisli
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
201 -- F_T FObj = λ a₁ → a₁ FMap = λ {a₁} {b₁} f₁ → record { KMap = λ x → ε M , f₁ x }