annotate free-monoid.agda @ 787:ca5eba647990

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 18 Apr 2019 20:07:22 +0900
parents 3d41a8edbf63
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
1 -- Free Monoid and it's Universal Mapping
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
2 ---- using Sets and forgetful functor
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
3
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
4 -- Shinji KONO <kono@ie.u-ryukyu.ac.jp>
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
5
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Category -- https://github.com/konn/category-agda
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Level
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 module free-monoid { c c₁ c₂ ℓ : Level } where
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Category.Sets
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Category.Cat
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import HomReasoning
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import cat-utility
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open import Relation.Binary.Core
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
15 open import universal-mapping
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
16 open import Relation.Binary.PropositionalEquality
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
18 -- from https://github.com/danr/Agda-projects/blob/master/Category-Theory/FreeMonoid.agda
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
20 open import Algebra.FunctionProperties using (Op₁; Op₂)
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
21 open import Algebra.Structures
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
22 open import Data.Product
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
23
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
24
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
25 record ≡-Monoid : Set (suc c) where
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
26 infixr 9 _∙_
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
27 field
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
28 Carrier : Set c
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
29 _∙_ : Op₂ Carrier
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
30 ε : Carrier
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
31 isMonoid : IsMonoid _≡_ _∙_ ε
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
32
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
33 open ≡-Monoid
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
34
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
35 ≡-cong = Relation.Binary.PropositionalEquality.cong
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
36
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
37 -- module ≡-reasoning (m : ≡-Monoid ) where
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
38
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 infixr 40 _::_
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
40 data List (A : Set c ) : Set c where
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 [] : List A
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
42 _::_ : A → List A → List A
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 infixl 30 _++_
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
46 _++_ : {A : Set c } → List A → List A → List A
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 [] ++ ys = ys
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 (x :: xs) ++ ys = x :: (xs ++ ys)
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
50 list-id-l : { A : Set c } → { x : List A } → [] ++ x ≡ x
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
51 list-id-l {_} {_} = refl
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
52 list-id-r : { A : Set c } → { x : List A } → x ++ [] ≡ x
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
53 list-id-r {_} {[]} = refl
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
54 list-id-r {A} {x :: xs} = ≡-cong ( λ y → x :: y ) ( list-id-r {A} {xs} )
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
55 list-assoc : {A : Set c} → { xs ys zs : List A } →
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
56 ( xs ++ ( ys ++ zs ) ) ≡ ( ( xs ++ ys ) ++ zs )
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
57 list-assoc {_} {[]} {_} {_} = refl
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
58 list-assoc {A} {x :: xs} {ys} {zs} = ≡-cong ( λ y → x :: y )
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
59 ( list-assoc {A} {xs} {ys} {zs} )
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
60 list-o-resp-≈ : {A : Set c} → {f g : List A } → {h i : List A } →
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
61 f ≡ g → h ≡ i → (h ++ f) ≡ (i ++ g)
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
62 list-o-resp-≈ {A} refl refl = refl
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
63 list-isEquivalence : {A : Set c} → IsEquivalence {_} {_} {List A } _≡_
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
64 list-isEquivalence {A} = -- this is the same function as A's equivalence but has different types
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
65 record { refl = refl
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
66 ; sym = sym
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
67 ; trans = trans
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
68 }
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
71 _<_∙_> : (m : ≡-Monoid) → Carrier m → Carrier m → Carrier m
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
72 m < x ∙ y > = _∙_ m x y
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
74 infixr 9 _<_∙_>
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
421
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
76 record Monomorph ( a b : ≡-Monoid ) : Set c where
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 field
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
78 morph : Carrier a → Carrier b
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 identity : morph (ε a) ≡ ε b
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
80 homo : ∀{x y} → morph ( a < x ∙ y > ) ≡ b < morph x ∙ morph y >
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 open Monomorph
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
84 _+_ : { a b c : ≡-Monoid } → Monomorph b c → Monomorph a b → Monomorph a c
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
85 _+_ {a} {b} {c} f g = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
86 morph = λ x → morph f ( morph g x ) ;
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 identity = identity1 ;
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
88 homo = homo1
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 } where
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 identity1 : morph f ( morph g (ε a) ) ≡ ε c
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
91 identity1 = let open ≡-Reasoning in begin
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
92 morph f (morph g (ε a))
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
93 ≡⟨ ≡-cong (morph f ) ( identity g ) ⟩
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
94 morph f (ε b)
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
95 ≡⟨ identity f ⟩
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
96 ε c
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
97
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
98 homo1 : ∀{x y} → morph f ( morph g ( a < x ∙ y > )) ≡ ( c < (morph f (morph g x )) ∙(morph f (morph g y) ) > )
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
99 homo1 {x} {y} = let open ≡-Reasoning in begin
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
100 morph f (morph g (a < x ∙ y >))
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
101 ≡⟨ ≡-cong (morph f ) ( homo g) ⟩
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
102 morph f (b < morph g x ∙ morph g y >)
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
103 ≡⟨ homo f ⟩
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
104 c < morph f (morph g x) ∙ morph f (morph g y) >
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
105
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
107 M-id : { a : ≡-Monoid } → Monomorph a a
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
108 M-id = record { morph = λ x → x ; identity = refl ; homo = refl }
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
110 _==_ : { a b : ≡-Monoid } → Monomorph a b → Monomorph a b → Set c
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
111 _==_ f g = morph f ≡ morph g
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
112
421
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
113 -- Functional Extensionality Axiom (We cannot prove this in Agda / Coq, just assumming )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
114 -- postulate extensionality : { a b : Obj A } {f g : Hom A a b } → (∀ {x} → (f x ≡ g x)) → ( f ≡ g )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
115 postulate extensionality : Relation.Binary.PropositionalEquality.Extensionality c c
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
116
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
117 isMonoids : IsCategory ≡-Monoid Monomorph _==_ _+_ (M-id)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
118 isMonoids = record { isEquivalence = isEquivalence1
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
119 ; identityL = refl
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
120 ; identityR = refl
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
121 ; associative = refl
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
122 ; o-resp-≈ = λ {a} {b} {c} {f} {g} {h} {i} → o-resp-≈ {a} {b} {c} {f} {g} {h} {i}
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
123 }
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
124 where
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
125 isEquivalence1 : { a b : ≡-Monoid } → IsEquivalence {_} {_} {Monomorph a b} _==_
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
126 isEquivalence1 = -- this is the same function as A's equivalence but has different types
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
127 record { refl = refl
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
128 ; sym = sym
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
129 ; trans = trans
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
130 }
421
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
131 o-resp-≈ : {a b c : ≡-Monoid } {f g : Monomorph a b } → {h i : Monomorph b c } →
420
3e44951b9bdb refl in free-monoid trouble
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 343
diff changeset
132 f == g → h == i → (h + f) == (i + g)
421
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
133 o-resp-≈ {a} {b} {c} {f} {g} {h} {i} f==g h==i = let open ≡-Reasoning in begin
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
134 morph ( h + f )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
135 ≡⟨ ≡-cong ( λ g → ( ( λ (x : Carrier a ) → g x ) )) (extensionality {Carrier a} lemma11) ⟩
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
136 morph ( i + g )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
137
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
138 where
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
139 lemma11 : (x : Carrier a) → morph (h + f) x ≡ morph (i + g) x
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
140 lemma11 x = let open ≡-Reasoning in begin
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
141 morph ( h + f ) x
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
142 ≡⟨⟩
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
143 morph h ( ( morph f ) x )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
144 ≡⟨ ≡-cong ( \y -> morph h ( y x ) ) f==g ⟩
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
145 morph h ( morph g x )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
146 ≡⟨ ≡-cong ( \y -> y ( morph g x ) ) h==i ⟩
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
147 morph i ( morph g x )
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
148 ≡⟨⟩
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
149 morph ( i + g ) x
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
150
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
151
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
152
06ffcad985ac fix free-monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 420
diff changeset
153
420
3e44951b9bdb refl in free-monoid trouble
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 343
diff changeset
154
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
155 Monoids : Category _ _ _
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
156 Monoids =
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
157 record { Obj = ≡-Monoid
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
158 ; Hom = Monomorph
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
159 ; _o_ = _+_
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
160 ; _≈_ = _==_
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
161 ; Id = M-id
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
162 ; isCategory = isMonoids
155
d9cbaa749be6 Monoids done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
163 }
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
165 A = Sets {c}
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
166 B = Monoids
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
168 open Functor
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
170 U : Functor B A
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
171 U = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
172 FObj = λ m → Carrier m ;
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
173 FMap = λ f → morph f ;
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
174 isFunctor = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
175 ≈-cong = λ x → x
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
176 ; identity = refl
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
177 ; distr = refl
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
178 }
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
179 }
154
744be443e232 on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
181 -- FObj
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
182 list : (a : Set c) → ≡-Monoid
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
183 list a = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
184 Carrier = List a
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
185 ; _∙_ = _++_
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
186 ; ε = []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
187 ; isMonoid = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
188 identity = ( ( λ x → list-id-l {a} ) , ( λ x → list-id-r {a} ) ) ;
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
189 isSemigroup = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
190 assoc = λ x → λ y → λ z → sym ( list-assoc {a} {x} {y} {z} )
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
191 ; isEquivalence = list-isEquivalence
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
192 ; ∙-cong = λ x → λ y → list-o-resp-≈ y x
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
193 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
194 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
195 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
196
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
197 Generator : Obj A → Obj B
156
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
198 Generator s = list s
b15c1435cfcc list is monoid now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
199
157
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
200 -- solution
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
201
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
202 -- [a,b,c] → f(a) ∙ f(b) ∙ f(c)
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
203 Φ : {a : Obj A } {b : Obj B} ( f : Hom A a (FObj U b) ) → List a → Carrier b
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
204 Φ {a} {b} f [] = ε b
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
205 Φ {a} {b} f ( x :: xs ) = b < ( f x ) ∙ (Φ {a} {b} f xs ) >
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
206
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
207 solution : (a : Obj A ) (b : Obj B) ( f : Hom A a (FObj U b) ) → Hom B (Generator a ) b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
208 solution a b f = record {
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
209 morph = λ (l : List a) → Φ f l ;
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
210 identity = refl;
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
211 homo = λ {x y} → homo1 x y
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
212 } where
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
213 _*_ : Carrier b → Carrier b → Carrier b
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
214 _*_ f g = b < f ∙ g >
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
215 homo1 : (x y : Carrier (Generator a)) → Φ f ( (Generator a) < x ∙ y > ) ≡ (Φ f x) * (Φ {a} {b} f y )
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
216 homo1 [] y = sym (proj₁ ( IsMonoid.identity ( isMonoid b) ) (Φ f y))
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
217 homo1 (x :: xs) y = let open ≡-Reasoning in
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
218 sym ( begin
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
219 (Φ {a} {b} f (x :: xs)) * (Φ f y)
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
220 ≡⟨⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
221 ((f x) * (Φ f xs)) * (Φ f y)
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
222 ≡⟨ ( IsMonoid.assoc ( isMonoid b )) _ _ _ ⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
223 (f x) * ( (Φ f xs) * (Φ f y) )
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
224 ≡⟨ sym ( (IsMonoid.∙-cong (isMonoid b)) refl (homo1 xs y )) ⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
225 (f x) * ( Φ f ( xs ++ y ) )
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
226 ≡⟨⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
227 Φ {a} {b} f ( x :: ( xs ++ y ) )
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
228 ≡⟨⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
229 Φ {a} {b} f ( (x :: xs) ++ y )
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
230 ≡⟨⟩
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
231 Φ {a} {b} f ((Generator a) < ( x :: xs) ∙ y > )
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
232 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
233
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
234 eta : (a : Obj A) → Hom A a ( FObj U (Generator a) )
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
235 eta a = λ ( x : a ) → x :: []
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
236
690
3d41a8edbf63 fix universal mapping done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
237 FreeMonoidUniveralMapping : UniversalMapping A B U
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
238 FreeMonoidUniveralMapping =
157
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
239 record {
690
3d41a8edbf63 fix universal mapping done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
240 F = Generator ;
3d41a8edbf63 fix universal mapping done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
241 η = eta ;
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
242 _* = λ {a b} → λ f → solution a b f ;
157
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
243 isUniversalMapping = record {
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
244 universalMapping = λ {a b f} → universalMapping {a} {b} {f} ;
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
245 uniquness = λ {a b f g} → uniquness {a} {b} {f} {g}
157
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
246 }
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
247 } where
160
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
248 universalMapping : {a : Obj A } {b : Obj B} { f : Hom A a (FObj U b) } → FMap U ( solution a b f ) o eta a ≡ f
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
249 universalMapping {a} {b} {f} = let open ≡-Reasoning in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
250 begin
160
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
251 FMap U ( solution a b f ) o eta a
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 160
diff changeset
252 ≡⟨⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
253 ( λ (x : a ) → Φ {a} {b} f (eta a x) )
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
254 ≡⟨⟩
341
33bc037319fa minor fix on free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
255 ( λ (x : a ) → Φ {a} {b} f ( x :: [] ) )
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
256 ≡⟨⟩
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
257 ( λ (x : a ) → b < ( f x ) ∙ (Φ {a} {b} f [] ) > )
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
258 ≡⟨⟩
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
259 ( λ (x : a ) → b < ( f x ) ∙ ( ε b ) > )
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
260 ≡⟨ ≡-cong ( λ g → ( ( λ (x : a ) → g x ) )) (extensionality {a} lemma-ext1) ⟩
162
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
261 ( λ (x : a ) → f x )
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
262 ≡⟨⟩
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
263 f
18ab1be1ebb5 mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
264 ∎ where
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
265 lemma-ext1 : ∀( x : a ) → b < ( f x ) ∙ ( ε b ) > ≡ f x
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
266 lemma-ext1 x = ( proj₂ ( IsMonoid.identity ( isMonoid b) ) ) (f x)
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
267 uniquness : {a : Obj A } {b : Obj B} { f : Hom A a (FObj U b) } →
160
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
268 { g : Hom B (Generator a) b } → (FMap U g) o (eta a ) ≡ f → B [ solution a b f ≈ g ]
163
bc47179e3c9c uniqueness continue...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
269 uniquness {a} {b} {f} {g} eq =
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
270 extensionality lemma-ext2 where
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
271 lemma-ext2 : ( ∀( x : List a ) → (morph ( solution a b f)) x ≡ (morph g) x )
163
bc47179e3c9c uniqueness continue...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
272 -- (morph ( solution a b f)) [] ≡ (morph g) [] )
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
273 lemma-ext2 [] = let open ≡-Reasoning in
164
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
274 begin
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
275 (morph ( solution a b f)) []
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
276 ≡⟨ identity ( solution a b f) ⟩
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
277 ε b
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
278 ≡⟨ sym ( identity g ) ⟩
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
279 (morph g) []
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
280
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
281 lemma-ext2 (x :: xs) = let open ≡-Reasoning in
164
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
282 begin
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
283 (morph ( solution a b f)) ( x :: xs )
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
284 ≡⟨ homo ( solution a b f) {x :: []} {xs} ⟩
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
285 b < ((morph ( solution a b f)) ( x :: []) ) ∙ ((morph ( solution a b f)) xs ) >
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
286 ≡⟨ ≡-cong ( λ k → (b < ((morph ( solution a b f)) ( x :: []) ) ∙ k > )) (lemma-ext2 xs ) ⟩
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
287 b < ((morph ( solution a b f)) ( x :: []) ) ∙((morph g) ( xs )) >
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
288 ≡⟨ ≡-cong ( λ k → ( b < ( k x ) ∙ ((morph g) ( xs )) > )) (
164
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
289 begin
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
290 ( λ x → (morph ( solution a b f)) ( x :: [] ) )
170
721cf9d9f5e3 use functional extensionality in library
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 169
diff changeset
291 ≡⟨ extensionality {a} lemma-ext3 ⟩
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
292 ( λ x → (morph g) ( x :: [] ) )
164
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
293
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
294 ) ⟩
342
a9711cf75a12 free-monoid fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
295 b < ((morph g) ( x :: [] )) ∙((morph g) ( xs )) >
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
296 ≡⟨ sym ( homo g ) ⟩
164
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
297 (morph g) ( x :: xs )
ab186f0e7b7a on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 163
diff changeset
298 ∎ where
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
299 lemma-ext3 : ∀( x : a ) → (morph ( solution a b f)) (x :: []) ≡ (morph g) ( x :: [] )
169
44bf6e78f891 builtin extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 168
diff changeset
300 lemma-ext3 x = let open ≡-Reasoning in
166
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
301 begin
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
302 (morph ( solution a b f)) (x :: [])
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
303 ≡⟨ ( proj₂ ( IsMonoid.identity ( isMonoid b) )(f x) ) ⟩
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
304 f x
254
45b81fcb8a64 equalizer fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 202
diff changeset
305 ≡⟨ sym ( ≡-cong (λ f → f x ) eq ) ⟩
166
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
306 (morph g) ( x :: [] )
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
307
2246a7d67ba3 two yellow remain...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 165
diff changeset
308
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
309 open NTrans
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
310 -- fm-ε b = Φ
688
a5f2ca67e7c5 fix monad/adjunction definition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 421
diff changeset
311
178
6626a7cd9129 Yoneda Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
312 fm-ε : NTrans B B ( ( FunctorF A B FreeMonoidUniveralMapping) ○ U) identityFunctor
688
a5f2ca67e7c5 fix monad/adjunction definition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 421
diff changeset
313 fm-ε = nat-ε A B FreeMonoidUniveralMapping
343
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
314 -- TMap = λ a → solution (FObj U a) a (λ x → x ) ;
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
315 -- isNTrans = record {
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
316 -- commute = commute1
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
317 -- }
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
318 -- } where
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
319 -- commute1 : {a b : Obj B} {f : Hom B a b} → let open ≈-Reasoning B renaming (_o_ to _*_ ) in
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
320 -- ( FMap (identityFunctor {_} {_} {_} {B}) f * solution (FObj U a) a (λ x → x) ) ≈
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
321 -- ( solution (FObj U b) b (λ x → x) * FMap (FunctorF A B FreeMonoidUniveralMapping ○ U) f )
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
322 -- commute1 {a} {b} {f} = let open ≡-Reasoning in begin
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
323 -- morph ((B ≈-Reasoning.o FMap identityFunctor f) (solution (FObj U a) a (λ x → x)))
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
324 -- ≡⟨ {!!} ⟩
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
325 -- morph ((B ≈-Reasoning.o solution (FObj U b) b (λ x → x)) (FMap (FunctorF A B FreeMonoidUniveralMapping ○ U) f))
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
326 -- ∎
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
327
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
328
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
329 fm-η : NTrans A A identityFunctor ( U ○ ( FunctorF A B FreeMonoidUniveralMapping) )
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
330 fm-η = record {
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
331 TMap = λ a → λ (x : a) → x :: [] ;
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
332 isNTrans = record {
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
333 commute = commute1
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
334 }
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
335 } where
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
336 commute1 : {a b : Obj A} {f : Hom A a b} → let open ≈-Reasoning A renaming (_o_ to _*_ ) in
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
337 (( FMap (U ○ FunctorF A B FreeMonoidUniveralMapping) f ) * (λ x → x :: []) ) ≈ ( (λ x → x :: []) * (λ z → FMap (identityFunctor {_} {_} {_} {A}) f z ) )
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
338 commute1 {a} {b} {f} = refl -- λ (x : a ) → f x :: []
d8cb7f9c7980 free-monoid comment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
339
157
34a152235ddd solution of universal mapping for free monoid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
340
202
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
341 -- A = Sets {c}
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
342 -- B = Monoids
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
343 -- U underline funcotr
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
344 -- F generator = x :: []
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
345 -- Eta x :: []
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
346 -- Epsiron morph = Φ
58ee98bbb333 remove an extensionality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
347
690
3d41a8edbf63 fix universal mapping done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
348 adj = UMAdjunction A B U FreeMonoidUniveralMapping
167
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
349
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
350
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
351
c3863043c4a3 Free Monoid and Universal mapping problem done.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
352