annotate monoid-monad.agda @ 130:5f331dfc000b

remove Kleisli record
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Aug 2013 22:05:41 +0900
parents fdf89038556a
children eb7ca6b9d327
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 Category.Monoid
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
3 open import Algebra
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Level
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
5 module monoid-monad {c c₁ c₂ ℓ : Level} { MS : Set ℓ } { Mono : Monoid c ℓ} {A : Category c₁ c₂ ℓ } where
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
6
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
7 open import Category.HomReasoning
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
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Category.Sets
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Data.Product
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Relation.Binary.Core
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open import Relation.Binary
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 MC : Category (suc zero) c (suc (ℓ ⊔ c))
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 MC = MONOID Mono
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 -- T : A -> (M x A)
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 T : ∀{ℓ′} -> Functor (Sets {ℓ′}) (Sets {ℓ ⊔ ℓ′} )
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 T = record {
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 FObj = \a -> MS × a
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 ; FMap = \f -> map ( \x -> x ) f
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 ; isFunctor = record {
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets ))
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 ; ≈-cong = cong1
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 }
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 } where
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 cong1 : {ℓ′ : Level} -> {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} -> Sets [ f ≈ g ] → Sets [ map (λ x → x) f ≈ map (λ x → x) g ]
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 cong1 refl = refl
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
36 -- Forgetful Functor
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
38 open Functor
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
39 F : Functor MC Sets
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
40 F = record {
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
41 FObj = \a -> { s : Obj Sets } -> s
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
42 ; FMap = \f -> ? -- {a : Obj Sets} { g : Hom Sets (FObj F *) (FObj F ((Mor MC f) *)) } -> g
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
43 ; isFunctor = record {
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
44 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets ))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
45 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
46 -- ; ≈-cong = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory Sets )))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
47 }
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
48 }
129
fdf89038556a monoid monad
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
50 -- Gerator
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
51
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
52 G : Functor Sets MC
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
53 G = record {
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
54 FObj = \a -> *
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
55 ; FMap = \f -> { g : Hom MC * * } -> Mor MC
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
56 ; isFunctor = record {
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
57 identity = IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC ))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
58 ; distr = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC )))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
59 ; ≈-cong = (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory MC )))
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
60 }
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
61 }