annotate monoid-monad.agda @ 149:2f68a9e0167b

clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 15 Aug 2013 12:04:50 +0900
parents 6e80e1aaa8b9
children 5dc6f3f43507
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
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
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 open IsMonoid isMonoid public
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
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 postulate Mono : ≡-Monoid 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
29 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
30
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
31 A = Sets {c}
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
32
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
33 -- T : A → (M x A)
134
de1c3443f10d M x A done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
34
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
35 T : Functor A A
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
36 T = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
37 FObj = λ a → (Carrier Mono) × a
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
38 ; FMap = λ f → map ( λ x → x ) f
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
39 ; isFunctor = record {
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
40 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
41 ; 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
42 ; ≈-cong = cong1
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
43 }
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
44 } where
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
45 cong1 : {ℓ′ : Level} → {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} →
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
46 Sets [ f ≈ g ] → Sets [ map (λ (x : Carrier Mono) → x) f ≈ map (λ (x : Carrier Mono) → x) g ]
138
293e3e8c43dd T as Sets -> Sets
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 137
diff changeset
47 cong1 _≡_.refl = _≡_.refl
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
49 open Functor
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
50
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
51 Lemma-MM1 : {a b : Obj A} {f : Hom A a b} →
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
52 A [ A [ FMap T f o (λ x → ε Mono , x) ] ≈
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
53 A [ (λ x → ε Mono , x) o f ] ]
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
54 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
55 begin
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
56 FMap T f o (λ x → ε Mono , x)
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
57 ≈⟨⟩
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
58 (λ x → ε Mono , x) o f
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
59
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 -- a → (ε,a)
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
62 η : NTrans A A identityFunctor T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
63 η = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
64 TMap = λ a → λ(x : a) → ( ε Mono , x ) ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
65 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
66 commute = Lemma-MM1
139
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 }
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 -- (m,(m',a)) → (m*m,a)
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
71
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
72 muMap : (a : Obj A ) → FObj T ( FObj T a ) → Σ (Carrier Mono) (λ x → a )
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
73 muMap a ( m , ( m' , x ) ) = ( _∙_ Mono m m' , x )
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
74
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
75 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
76 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
77 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
78 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
79 begin
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
80 FMap T f o (λ x → muMap a x)
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
81 ≈⟨⟩
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
82 (λ x → muMap b x) o FMap (T ○ T) f
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
83
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
84
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
85 μ : NTrans A A ( T ○ T ) T
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
86 μ = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
87 TMap = λ a → λ x → muMap a x ;
139
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
88 isNTrans = record {
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
89 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
90 }
17f45f909770 η and μ defined.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
91 }
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
92
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
93 open NTrans
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
94
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
95 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
96 Lemma-MM33 = _≡_.refl
94796ddb9570 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
97
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
98 Lemma-MM34 : ∀{ x : Carrier Mono } → ( (Mono ∙ ε Mono) x ≡ x )
147
eabd1685139a add comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
99 Lemma-MM34 {x} = (( proj₁ ( IsMonoid.identity ( isMonoid Mono )) ) 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
100
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
101 Lemma-MM35 : ∀{ x : Carrier Mono } → ((Mono ∙ x) (ε Mono)) ≡ 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
102 Lemma-MM35 {x} = ( proj₂ ( IsMonoid.identity ( isMonoid Mono )) ) x
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
103
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
104 Lemma-MM36 : ∀{ x y z : Carrier Mono } → ((Mono ∙ (Mono ∙ x) y) z) ≡ (_∙_ Mono x (_∙_ Mono 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 Lemma-MM36 {x} {y} {z} = ( IsMonoid.assoc ( isMonoid Mono )) x y z
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
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
107 -- Functional Extensionarity (We cannot prove this in Agda / Coq, just assumming )
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
108 postulate Extensionarity : {f g : Carrier Mono → Carrier Mono } → (∀ {x} → (f x ≡ g x)) → ( f ≡ g )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
109
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
110 postulate Extensionarity3 : {f g : Carrier Mono → Carrier Mono → Carrier Mono → Carrier Mono } →
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
111 (∀{x y z} → f x y z ≡ g x y z ) → ( f ≡ g )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
112
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
113 Lemma-MM9 : ( λ(x : Carrier Mono) → ( Mono ∙ ε Mono ) x ) ≡ ( λ(x : Carrier Mono) → x )
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
114 Lemma-MM9 = Extensionarity Lemma-MM34
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
115
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
116 Lemma-MM10 : ( λ x → ((Mono ∙ x) (ε Mono))) ≡ ( λ x → x )
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
117 Lemma-MM10 = Extensionarity 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
118
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
119 Lemma-MM11 : (λ x y z → ((Mono ∙ (Mono ∙ x) y) z)) ≡ (λ x y z → ( _∙_ Mono x (_∙_ Mono y z ) ))
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
120 Lemma-MM11 = Extensionarity3 Lemma-MM36
145
57df6cb8f253 on going ..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 144
diff changeset
121
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
122 MonoidMonad : Monad A T η μ
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
123 MonoidMonad = record {
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
124 isMonad = record {
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
125 unity1 = Lemma-MM3 ;
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
126 unity2 = Lemma-MM4 ;
148
6e80e1aaa8b9 no yellow on monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
127 assoc = Lemma-MM5
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
128 }
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
129 } where
147
eabd1685139a add comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
130 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
131 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
132 begin
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
133 TMap μ a o TMap η ( FObj T a )
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 ( λ x → ((Mono ∙ ε Mono) (proj₁ x) , proj₂ x ))
149
2f68a9e0167b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
136 ≈⟨ 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
137 ( λ (x : FObj T a) → (proj₁ x) , proj₂ x )
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
138 ≈⟨⟩
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
139 ( λ x → x )
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
140 ≈⟨⟩
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
141 Id {_} {_} {_} {A} (FObj T a)
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
142
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
143 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
144 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
145 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
146 TMap μ a o (FMap T (TMap η a ))
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
147 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
148 ( λ x → (Mono ∙ proj₁ x) (ε Mono) , 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-MM10 ) ⟩
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
150 ( λ x → (proj₁ x) , proj₂ x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
151 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
152 ( λ x → x )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
153 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
154 Id {_} {_} {_} {A} (FObj T a)
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
155
141
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
156 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
157 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
158 begin
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
159 TMap μ a o TMap μ ( FObj T a )
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
160 ≈⟨⟩
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
161 ( λ x → (Mono ∙ (Mono ∙ 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
162 ≈⟨ 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
163 (( 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
164 )) Lemma-MM11 ⟩
144
0948df8c88b8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
165 ( λ x → (Mono ∙ proj₁ x) ((Mono ∙ proj₁ (proj₂ x)) (proj₁ (proj₂ (proj₂ x)))) , proj₂ (proj₂ (proj₂ 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 TMap μ a o FMap T (TMap μ 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
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
170
4a362cf32a74 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
171