annotate monoid-monad.agda @ 776:5a3ca9509fbf

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