annotate monoid-monad.agda @ 781:340708e8d54f

fix for 2.5.4.2
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 08 Mar 2019 17:46:59 +0900
parents 60942538dc41
children bded2347efa4
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
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
22 infixl 7 _∙_
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
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
25 _∙_ : Op₂ Carrier
301
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 300
diff changeset
26 ε : Carrier -- id in Monoid
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
27 isMonoid : IsMonoid _≡_ _∙_ ε
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
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
32 A = Sets {c}
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
33
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
34 -- T : A → (M x A)
134
de1c3443f10d M x A done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
35
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
36 T : Functor A A
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
37 T = record {
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
38 FObj = λ a → (Carrier M) × a
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
39 ; FMap = λ f → map ( λ x → x ) f
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
40 ; isFunctor = record {
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
41 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
42 ; 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
43 ; ≈-cong = cong1
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
44 }
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
45 } where
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
46 cong1 : {ℓ′ : Level} → {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} →
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
47 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
48 cong1 _≡_.refl = _≡_.refl
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
50 open Functor
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
51
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
52 Lemma-MM1 : {a b : Obj A} {f : Hom A a b} →
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
53 A [ A [ FMap T f o (λ x → ε M , x) ] ≈
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
54 A [ (λ x → ε M , x) o f ] ]
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
55 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
56 begin
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
57 FMap T f o (λ x → ε M , x)
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
58 ≈⟨⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
59 (λ x → ε M , x) o f
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
60
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
61
150
5dc6f3f43507 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
62 -- η : a → (ε,a)
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
63 η : NTrans A A identityFunctor T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
64 η = record {
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
65 TMap = λ a → λ(x : a) → ( ε M , x ) ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
66 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
67 commute = Lemma-MM1
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
68 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
69 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
70
150
5dc6f3f43507 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
71 -- μ : (m,(m',a)) → (m*m,a)
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
72
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
73 muMap : (a : Obj A ) → FObj T ( FObj T a ) → Σ (Carrier M) (λ x → a )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 muMap a ( m , ( m' , x ) ) = ( _∙_ M m m' , x )
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
75
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
76 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
77 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
78 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
79 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
80 begin
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
81 FMap T f o (λ x → muMap a x)
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
82 ≈⟨⟩
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
83 (λ x → muMap b x) o FMap (T ○ T) f
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
84
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
85
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
86 μ : NTrans A A ( T ○ T ) T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
87 μ = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
88 TMap = λ a → λ x → muMap a x ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
89 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
90 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
91 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
92 }
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
93
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
94 open NTrans
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
95
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
96 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
97 Lemma-MM33 = _≡_.refl
94796ddb9570 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
98
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
99 Lemma-MM34 : ∀( x : Carrier M ) → ( (M ∙ ε M) x ≡ x )
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
100 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
101
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
102 Lemma-MM35 : ∀( x : Carrier M ) → ((M ∙ x) (ε M)) ≡ x
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
103 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
104
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
105 Lemma-MM36 : ∀( x y z : Carrier M ) → ((M ∙ (M ∙ x) y) z) ≡ (_∙_ M x (_∙_ M y z ) )
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
106 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
107
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
108 -- 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
109 import Relation.Binary.PropositionalEquality
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
110 -- 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
111 postulate extensionality : Relation.Binary.PropositionalEquality.Extensionality c c
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
112
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
113 -- Multi Arguments Functional Extensionality
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
114 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
115 (∀ 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
116 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
117
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
118 Lemma-MM9 : ( λ(x : Carrier M) → ( 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
119 Lemma-MM9 = extensionality Lemma-MM34
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
120
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
121 Lemma-MM10 : ( λ x → ((M ∙ x) (ε M))) ≡ ( λ x → x )
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
122 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
123
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
124 Lemma-MM11 : (λ x y z → ((M ∙ (M ∙ x) y) z)) ≡ (λ x y z → ( _∙_ M x (_∙_ M y z ) ))
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
125 Lemma-MM11 = extensionality30 Lemma-MM36
145
57df6cb8f253 on going ..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 144
diff changeset
126
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
127 MonoidMonad : Monad A
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
128 MonoidMonad = record {
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
129 T = T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
130 ; η = η
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
131 ; μ = μ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
132 ; isMonad = record {
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
133 unity1 = Lemma-MM3 ;
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
134 unity2 = Lemma-MM4 ;
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
135 assoc = Lemma-MM5
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
136 }
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
137 } where
147
eabd1685139a add comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
138 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
139 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
140 begin
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
141 TMap μ a o TMap η ( FObj T a )
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
142 ≈⟨⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
143 ( λ x → ((M ∙ ε M) (proj₁ x) , proj₂ x ))
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
144 ≈⟨ 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
145 ( λ (x : FObj T a) → (proj₁ x) , proj₂ x )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
146 ≈⟨⟩
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
147 ( λ x → x )
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
148 ≈⟨⟩
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
149 Id {_} {_} {_} {A} (FObj T a)
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
150
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
151 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
152 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
153 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
154 TMap μ a o (FMap T (TMap η a ))
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
155 ≈⟨⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
156 ( λ x → (M ∙ proj₁ x) (ε M) , proj₂ x )
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
157 ≈⟨ 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
158 ( λ x → (proj₁ x) , proj₂ x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
159 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
160 ( λ x → x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
161 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
162 Id {_} {_} {_} {A} (FObj T a)
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
163
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
164 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
165 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
166 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
167 TMap μ a o TMap μ ( FObj T a )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
168 ≈⟨⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
169 ( λ x → (M ∙ (M ∙ 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
170 ≈⟨ 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
171 (( 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
172 )) Lemma-MM11 ⟩
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
173 ( λ x → (M ∙ proj₁ x) ((M ∙ 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
174 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
175 TMap μ a o FMap T (TMap μ a)
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
176
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
177
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
178
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
179 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
180 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
181
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
182 postulate m m' : Carrier M
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
183 postulate a b c' : Obj A
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
184 postulate f : b → c'
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
185 postulate g : a → b
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
186
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
187 Lemma-MM12 = Monad.join MonoidMonad (F m f) (F m' g)
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
188
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 301
diff changeset
189 open import kleisli {_} {_} {_} {A} {T} {η} {μ} {Monad.isMonad MonoidMonad}
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
190
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
191 -- nat-ε TMap = λ a₁ → record { KMap = λ x → x }
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
192 -- nat-η TMap = λ a₁ → _,_ (ε, M)
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
193 -- U_T Functor Kleisli A
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
194 -- 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
195 -- F_T Functor A Kleisli
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
196 -- F_T FObj = λ a₁ → a₁ FMap = λ {a₁} {b₁} f₁ → record { KMap = λ x → ε M , f₁ x }