comparison monoid-monad.agda @ 131:eb7ca6b9d327

trying..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 11 Aug 2013 15:52:09 +0900
parents 5f331dfc000b
children 683d4e590762
comparison
equal deleted inserted replaced
130:5f331dfc000b 131:eb7ca6b9d327
1 open import Category -- https://github.com/konn/category-agda 1 open import Category -- https://github.com/konn/category-agda
2 open import Category.Monoid 2 open import Category.Monoid
3 open import Algebra 3 open import Algebra
4 open import Level 4 open import Level
5 module monoid-monad {c c₁ c₂ ℓ : Level} { MS : Set ℓ } { Mono : Monoid c ℓ} {A : Category c₁ c₂ ℓ } where 5 module monoid-monad {c₁ c₂ ℓ : Level} { M : Monoid c₁ ℓ} {A : Category c₁ c₂ ℓ } where
6 6
7 open import Category.HomReasoning
8 open import HomReasoning 7 open import HomReasoning
9 open import cat-utility 8 open import cat-utility
10 open import Category.Cat 9 open import Category.Cat
11 open import Category.Sets 10 open import Category.Sets
12 open import Data.Product 11
13 open import Relation.Binary.Core 12 -- T : A -> (M x A)
14 open import Relation.Binary 13 -- a -> m x a
14 -- m x a -> m' x (m x a)
15
16 data T1 {c₁ c₂ ℓ : Level} (M : Monoid c₁ ℓ ) ( A : Category c₁ c₂ ℓ ) : Set ( suc ( c₁ ⊔ c₂ ⊔ ℓ) ) where
17 T1a : Obj A -> T1 M A
18 T1t : Obj A -> T1 M A -> T1 M A
19
20 T1HomMap : {c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } {M : Monoid c₁ ℓ } (a : T1 {c₁} {c₂} {ℓ} M A ) (b : T1 {c₁} {c₂} {ℓ} M A) -> Set c₂
21 T1HomMap {c₁} {c₂} {ℓ } { A } (T1a a1 ) (T1a a2 ) = Hom A a1 a2
22 T1HomMap {c₁} {c₂} {ℓ } { A } (T1t a1 t1 ) (T1a a2 ) = Hom A a1 a2
23 T1HomMap {c₁} {c₂} {ℓ } { A } (T1a a1 ) (T1t a2 t2 ) = Hom A a1 a2
24 T1HomMap {c₁} {c₂} {ℓ } { A } (T1t a1 t1 ) (T1t a2 t2 ) = Hom A a1 a2
25
26 record T1Hom1 {c₁ c₂ ℓ : Level} { M : Monoid c₁ ℓ} { A : Category c₁ c₂ ℓ }
27 (a : T1 M A ) (b : T1 M A) : Set ( c₁ ⊔ c₂ ⊔ ℓ ) where
28 field
29 T1Map : T1HomMap a b
30
31 open T1Hom1
32 T1Hom = \(a b : T1 M A) -> T1Hom1 {c₁} {c₂} {ℓ} {M} {A} a b
33
34 _*_ : {c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } {M : Monoid c₁ ℓ } { a b c : T1 {c₁} {c₂} {ℓ } M A } -> T1Hom1 {c₁} {c₂} {ℓ} b c -> T1Hom1 {c₁} {c₂} {ℓ} a b -> T1Hom1 {c₁} {c₂} {ℓ} a c
35 _*_ {c₁} {c₂} {ℓ } {A} {M} {a} {b} {c} g f = record { T1Map = A [ T1Map g o T1Map f ] }
15 36
16 37
17 MC : Category (suc zero) c (suc (ℓ ⊔ c))
18 MC = MONOID Mono
19
20 -- T : A -> (M x A)
21
22 T : ∀{ℓ′} -> Functor (Sets {ℓ′}) (Sets {ℓ ⊔ ℓ′} )
23 T = record {
24 FObj = \a -> MS × a
25 ; FMap = \f -> map ( \x -> x ) f
26 ; isFunctor = record {
27 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets ))
28 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
29 ; ≈-cong = cong1
30 }
31 } where
32 cong1 : {ℓ′ : Level} -> {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} -> Sets [ f ≈ g ] → Sets [ map (λ x → x) f ≈ map (λ x → x) g ]
33 cong1 refl = refl
34 38
35 39
36 -- Forgetful Functor
37 40
38 open Functor
39 F : Functor MC Sets
40 F = record {
41 FObj = \a -> { s : Obj Sets } -> s
42 ; FMap = \f -> ? -- {a : Obj Sets} { g : Hom Sets (FObj F *) (FObj F ((Mor MC f) *)) } -> g
43 ; isFunctor = record {
44 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets ))
45 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
46 -- ; ≈-cong = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
47 }
48 }
49 41
50 -- Gerator
51 42
52 G : Functor Sets MC 43
53 G = record { 44
54 FObj = \a -> *
55 ; FMap = \f -> { g : Hom MC * * } -> Mor MC
56 ; isFunctor = record {
57 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC ))
58 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC )))
59 ; ≈-cong = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC )))
60 }
61 }