annotate applicative.agda @ 790:1e7319868d77

Sets is CCC
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 19 Apr 2019 23:42:19 +0900
parents bded2347efa4
children dca4b29553cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
696
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 open import Level
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Category
768
9bcdbfbaaa39 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 766
diff changeset
3 module applicative where
696
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.Product renaming (_×_ to _*_)
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Category.Constructions.Product
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import HomReasoning
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import cat-utility
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Relation.Binary.Core
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Relation.Binary
768
9bcdbfbaaa39 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 766
diff changeset
11 open import monoidal
783
bded2347efa4 CCC by equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 778
diff changeset
12 open import Relation.Binary.PropositionalEquality hiding ( [_] )
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
13
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
14 -----
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
15 --
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
16 -- Applicative Functor
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
17 --
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
18 -- is a monoidal functor on Sets and it can be constructoed from Haskell monoidal functor and vais versa
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
19 --
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
20 ----
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
21
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
22 -----
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
23 --
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
24 -- To show Applicative functor is monoidal functor, uniquness of Functor is necessary, which is derived from the free theorem.
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
25 --
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
26 -- they say it is not possible to prove FreeTheorem in Agda nor Coq
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
27 -- https://stackoverflow.com/questions/24718567/is-it-possible-to-get-hold-of-free-theorems-as-propositional-equalities
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
28 -- so we postulate this
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
29 -- and we cannot indent a postulate ...
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
30
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
31 open Functor
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
32
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
33 postulate FreeTheorem : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (C : Category c₁ c₂ ℓ) (D : Category c₁' c₂' ℓ') {a b c : Obj C } → (F : Functor C D ) → ( fmap : {a : Obj C } {b : Obj C } → Hom C a b → Hom D (FObj F a) ( FObj F b) ) → {h f : Hom C a b } → {g k : Hom C b c } → C [ C [ g o h ] ≈ C [ k o f ] ] → D [ D [ FMap F g o fmap h ] ≈ D [ fmap k o FMap F f ] ]
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
34
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
35 UniquenessOfFunctor : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (C : Category c₁ c₂ ℓ) (D : Category c₁' c₂' ℓ') (F : Functor C D)
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
36 {a b : Obj C } { f : Hom C a b } → ( fmap : {a : Obj C } {b : Obj C } → Hom C a b → Hom D (FObj F a) ( FObj F b) )
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
37 → ( {b : Obj C } → D [ fmap (id1 C b) ≈ id1 D (FObj F b) ] )
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
38 → D [ fmap f ≈ FMap F f ]
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
39 UniquenessOfFunctor C D F {a} {b} {f} fmap eq = begin
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
40 fmap f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
41 ≈↑⟨ idL ⟩
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
42 id1 D (FObj F b) o fmap f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
43 ≈↑⟨ car ( IsFunctor.identity (isFunctor F )) ⟩
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
44 FMap F (id1 C b) o fmap f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
45 ≈⟨ FreeTheorem C D F fmap (IsEquivalence.refl (IsCategory.isEquivalence ( Category.isCategory C ))) ⟩
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
46 fmap (id1 C b) o FMap F f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
47 ≈⟨ car eq ⟩
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
48 id1 D (FObj F b) o FMap F f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
49 ≈⟨ idL ⟩
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
50 FMap F f
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
51
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
52 where open ≈-Reasoning D
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
53
768
9bcdbfbaaa39 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 766
diff changeset
54 open import Category.Sets
9bcdbfbaaa39 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 766
diff changeset
55 import Relation.Binary.PropositionalEquality
696
10ccac3bc285 Monoidal category and applicative functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
705
73a998711118 add Applicative and HaskellMonoidal Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 704
diff changeset
57
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
58 _・_ : {c₁ : Level} { a b c : Obj (Sets {c₁} ) } → (b → c) → (a → b) → a → c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
59 _・_ f g = λ x → f ( g x )
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
60
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
61 record IsApplicative {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) )
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
62 ( pure : {a : Obj Sets} → Hom Sets a ( FObj F a ) )
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
63 ( _<*>_ : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b )
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
64 : Set (suc (suc c₁)) where
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
65 field
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
66 identity : { a : Obj Sets } { u : FObj F a } → pure ( id1 Sets a ) <*> u ≡ u
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
67 composition : { a b c : Obj Sets } { u : FObj F ( b → c ) } { v : FObj F (a → b ) } { w : FObj F a }
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
68 → (( pure _・_ <*> u ) <*> v ) <*> w ≡ u <*> (v <*> w)
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
69 homomorphism : { a b : Obj Sets } { f : Hom Sets a b } { x : a } → pure f <*> pure x ≡ pure (f x)
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
70 interchange : { a b : Obj Sets } { u : FObj F ( a → b ) } { x : a } → u <*> pure x ≡ pure (λ f → f x) <*> u
730
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
71 -- from http://www.staff.city.ac.uk/~ross/papers/Applicative.pdf
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
72
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
73 record Applicative {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) )
705
73a998711118 add Applicative and HaskellMonoidal Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 704
diff changeset
74 : Set (suc (suc c₁)) where
73a998711118 add Applicative and HaskellMonoidal Functor
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 704
diff changeset
75 field
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
76 pure : {a : Obj Sets} → Hom Sets a ( FObj F a )
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
77 <*> : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
78 isApplicative : IsApplicative F pure <*>
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
79
730
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
80 ------
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
81 --
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
82 -- Appllicative Functor is a Monoidal Functor
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
83 --
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
84
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
85 Applicative→Monoidal : {c : Level} ( F : Functor (Sets {c}) (Sets {c}) ) → (mf : Applicative F )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
86 → IsApplicative F ( Applicative.pure mf ) ( Applicative.<*> mf )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
87 → MonoidalFunctor {_} {c} {_} {Sets} {Sets} MonoidalSets MonoidalSets
727
ea84cc6c1797 monoidal functor and applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 726
diff changeset
88 Applicative→Monoidal {l} F mf ismf = record {
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
89 MF = F
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
90 ; ψ = λ x → unit
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
91 ; isMonodailFunctor = record {
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
92 φab = record { TMap = λ x → φ ; isNTrans = record { commute = φab-comm } }
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
93 ; associativity = λ {a b c} → associativity {a} {b} {c}
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
94 ; unitarity-idr = λ {a b} → unitarity-idr {a} {b}
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
95 ; unitarity-idl = λ {a b} → unitarity-idl {a} {b}
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
96 }
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
97 } where
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
98 open Monoidal
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
99 open IsMonoidal hiding ( _■_ ; _□_ )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
100 M = MonoidalSets
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
101 isM = Monoidal.isMonoidal MonoidalSets
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
102 unit = Applicative.pure mf OneObj
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
103 _⊗_ : (x y : Obj Sets ) → Obj Sets
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
104 _⊗_ x y = (IsMonoidal._□_ (Monoidal.isMonoidal M) ) x y
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
105 _□_ : {a b c d : Obj Sets } ( f : Hom Sets a c ) ( g : Hom Sets b d ) → Hom Sets ( a ⊗ b ) ( c ⊗ d )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
106 _□_ f g = FMap (m-bi M) ( f , g )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
107 φ : {x : Obj (Sets × Sets) } → Hom Sets (FObj (Functor● Sets Sets MonoidalSets F) x) (FObj (Functor⊗ Sets Sets MonoidalSets F) x)
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
108 φ x = Applicative.<*> mf (FMap F (λ j k → (j , k)) (proj₁ x )) (proj₂ x)
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
109 _<*>_ : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
110 _<*>_ = Applicative.<*> mf
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
111 left : {a b : Obj Sets} → {x y : FObj F ( a → b )} → {h : FObj F a } → ( x ≡ y ) → x <*> h ≡ y <*> h
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
112 left {_} {_} {_} {_} {h} eq = ≡-cong ( λ k → k <*> h ) eq
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
113 right : {a b : Obj Sets} → {h : FObj F ( a → b )} → {x y : FObj F a } → ( x ≡ y ) → h <*> x ≡ h <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
114 right {_} {_} {h} {_} {_} eq = ≡-cong ( λ k → h <*> k ) eq
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
115 id : { a : Obj Sets } → a → a
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
116 id x = x
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
117 pure : {a : Obj Sets } → Hom Sets a ( FObj F a )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
118 pure a = Applicative.pure mf a
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
119 -- special case
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
120 F→pureid : {a b : Obj Sets } → (x : FObj F a ) → FMap F id x ≡ pure id <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
121 F→pureid {a} {b} x = sym ( begin
722
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
122 pure id <*> x
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
123 ≡⟨ IsApplicative.identity ismf ⟩
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
124 x
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
125 ≡⟨ ≡-cong ( λ k → k x ) (sym ( IsFunctor.identity (isFunctor F ) )) ⟩ FMap F id x
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
126 ∎ )
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
127 where
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
128 open Relation.Binary.PropositionalEquality
69f01b82dfc9 uniquness of functor fmap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
129 open Relation.Binary.PropositionalEquality.≡-Reasoning
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
130 F→pure : {a b : Obj Sets } → { f : a → b } → {x : FObj F a } → FMap F f x ≡ pure f <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
131 F→pure {a} {b} {f} {x} = sym ( begin
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
132 pure f <*> x
731
117e5b392673 Generalize Free Theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 730
diff changeset
133 ≡⟨ ≡-cong ( λ k → k x ) (UniquenessOfFunctor Sets Sets F ( λ f x → pure f <*> x ) ( extensionality Sets ( λ x → IsApplicative.identity ismf ))) ⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
134 FMap F f x
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
135 ∎ )
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
136 where
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
137 open Relation.Binary.PropositionalEquality
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
138 open Relation.Binary.PropositionalEquality.≡-Reasoning
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
139 p*p : { a b : Obj Sets } { f : Hom Sets a b } { x : a } → pure f <*> pure x ≡ pure (f x)
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
140 p*p = IsApplicative.homomorphism ismf
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
141 comp = IsApplicative.composition ismf
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
142 inter = IsApplicative.interchange ismf
729
6bc9d68898ef clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 727
diff changeset
143 pureAssoc : {a b c : Obj Sets } ( f : b → c ) ( g : a → b ) ( h : FObj F a ) → pure f <*> ( pure g <*> h ) ≡ pure ( f ・ g ) <*> h
6bc9d68898ef clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 727
diff changeset
144 pureAssoc f g h = trans ( trans (sym comp) (left (left p*p) )) ( left p*p )
6bc9d68898ef clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 727
diff changeset
145 where
6bc9d68898ef clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 727
diff changeset
146 open Relation.Binary.PropositionalEquality
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
147 φab-comm0 : {a b : Obj (Sets × Sets)} { f : Hom (Sets × Sets) a b} (x : ( FObj F (proj₁ a) * FObj F (proj₂ a)) ) →
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
148 (Sets [ FMap (Functor⊗ Sets Sets MonoidalSets F) f o φ ]) x ≡ (Sets [ φ o FMap (Functor● Sets Sets MonoidalSets F) f ]) x
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
149 φab-comm0 {a} {b} {(f , g)} (x , y) = begin
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
150 ( FMap (Functor⊗ Sets Sets MonoidalSets F) (f , g) ) ( φ (x , y) )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
151 ≡⟨⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
152 FMap F (λ xy → f (proj₁ xy) , g (proj₂ xy)) ((FMap F (λ j k → j , k) x) <*> y)
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
153 ≡⟨⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
154 FMap F (map f g) ((FMap F (λ j k → j , k) x) <*> y)
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
155 ≡⟨ F→pure ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
156 (pure (map f g) <*> (FMap F (λ j k → j , k) x <*> y))
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
157 ≡⟨ right ( left F→pure ) ⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
158 (pure (map f g)) <*> ((pure (λ j k → j , k) <*> x) <*> y)
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
159 ≡⟨ sym ( IsApplicative.composition ismf ) ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
160 (( pure _・_ <*> (pure (map f g))) <*> (pure (λ j k → j , k) <*> x)) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
161 ≡⟨ left ( sym ( IsApplicative.composition ismf )) ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
162 ((( pure _・_ <*> (( pure _・_ <*> (pure (map f g))))) <*> pure (λ j k → j , k)) <*> x) <*> y
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
163 ≡⟨ trans ( trans (left ( left (left (right p*p )))) ( left ( left ( left p*p)))) (left (left p*p)) ⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
164 (pure (( _・_ (( _・_ ((map f g))))) (λ j k → j , k)) <*> x) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
165 ≡⟨⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
166 (pure (λ j k → f j , g k) <*> x) <*> y
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
167 ≡⟨⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
168 ( pure ((_・_ (( _・_ ( ( λ h → h g ))) ( _・_ ))) ((λ j k → f j , k))) <*> x ) <*> y
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
169 ≡⟨ sym ( trans (left (left (left p*p))) (left ( left p*p)) ) ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
170 ((((pure _・_ <*> pure ((λ h → h g) ・ _・_)) <*> pure (λ j k → f j , k)) <*> x) <*> y)
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
171 ≡⟨ sym (trans ( left ( left ( left (right (left p*p) )))) (left ( left (left (right p*p ))))) ⟩
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
172 (((pure _・_ <*> (( pure _・_ <*> ( pure ( λ h → h g ))) <*> ( pure _・_ ))) <*> (pure (λ j k → f j , k))) <*> x ) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
173 ≡⟨ left ( ( IsApplicative.composition ismf )) ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
174 ((( pure _・_ <*> ( pure ( λ h → h g ))) <*> ( pure _・_ )) <*> (pure (λ j k → f j , k) <*> x )) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
175 ≡⟨ left (IsApplicative.composition ismf ) ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
176 ( pure ( λ h → h g ) <*> ( pure _・_ <*> (pure (λ j k → f j , k) <*> x )) ) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
177 ≡⟨ left (sym (IsApplicative.interchange ismf )) ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
178 (( pure _・_ <*> (pure (λ j k → f j , k) <*> x )) <*> pure g) <*> y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
179 ≡⟨ IsApplicative.composition ismf ⟩
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
180 (pure (λ j k → f j , k) <*> x) <*> (pure g <*> y)
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
181 ≡⟨ sym ( trans (left F→pure ) ( right F→pure ) ) ⟩
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
182 (FMap F (λ j k → f j , k) x) <*> (FMap F g y)
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
183 ≡⟨ ≡-cong ( λ k → k x <*> (FMap F g y)) ( IsFunctor.distr (isFunctor F )) ⟩
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
184 (FMap F (λ j k → j , k) (FMap F f x)) <*> (FMap F g y)
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
185 ≡⟨⟩
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
186 φ ( ( FMap (Functor● Sets Sets MonoidalSets F) (f , g) ) ( x , y ) )
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
187
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
188 where
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
189 open Relation.Binary.PropositionalEquality
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
190 open Relation.Binary.PropositionalEquality.≡-Reasoning
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
191 φab-comm : {a b : Obj (Sets × Sets)} { f : Hom (Sets × Sets) a b} → Sets [ Sets [ FMap (Functor⊗ Sets Sets MonoidalSets F) f o φ ]
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
192 ≈ Sets [ φ o FMap (Functor● Sets Sets MonoidalSets F) f ] ]
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
193 φab-comm {a} {b} {f} = extensionality Sets ( λ (x : ( FObj F (proj₁ a) * FObj F (proj₂ a)) ) → φab-comm0 x )
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
194 associativity0 : {a b c : Obj Sets} → (x : ((FObj F a ⊗ FObj F b) ⊗ FObj F c) ) → (Sets [ φ o Sets [ id1 Sets (FObj F a) □ φ o Iso.≅→ (mα-iso isM) ] ]) x ≡
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
195 (Sets [ FMap F (Iso.≅→ (mα-iso isM)) o Sets [ φ o φ □ id1 Sets (FObj F c) ] ]) x
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
196 associativity0 {x} {y} {f} ((a , b) , c ) = begin
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
197 φ (( id □ φ ) ( ( Iso.≅→ (mα-iso isM) ) ((a , b) , c)))
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
198 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
199 (FMap F (λ j k → j , k) a) <*> ( (FMap F (λ j k → j , k) b) <*> c)
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
200 ≡⟨ trans (left F→pure) (right (left F→pure) ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
201 (pure (λ j k → j , k) <*> a) <*> ( (pure (λ j k → j , k) <*> b) <*> c)
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
202 ≡⟨ sym comp ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
203 ( ( pure _・_ <*> (pure (λ j k → j , k) <*> a)) <*> (pure (λ j k → j , k) <*> b)) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
204 ≡⟨ sym ( left comp ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
205 (( ( pure _・_ <*> ( pure _・_ <*> (pure (λ j k → j , k) <*> a))) <*> (pure (λ j k → j , k))) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
206 ≡⟨ sym ( left ( left ( left (right comp )))) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
207 (( ( pure _・_ <*> (( (pure _・_ <*> pure _・_ ) <*> (pure (λ j k → j , k))) <*> a)) <*> (pure (λ j k → j , k))) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
208 ≡⟨ trans (left ( left (left ( right (left ( left p*p )))))) (left ( left ( left (right (left p*p))))) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
209 (( ( pure _・_ <*> ((pure ((_・_ ( _・_ )) ((λ j k → j , k)))) <*> a)) <*> (pure (λ j k → j , k))) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
210 ≡⟨ sym (left ( left ( left comp ) )) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
211 (((( ( pure _・_ <*> (pure _・_ )) <*> (pure ((_・_ ( _・_ )) ((λ j k → j , k))))) <*> a) <*> (pure (λ j k → j , k))) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
212 ≡⟨ trans (left ( left ( left (left (left p*p))))) (left ( left ( left (left p*p )))) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
213 ((((pure ( ( _・_ (_・_ )) (((_・_ ( _・_ )) ((λ j k → j , k)))))) <*> a) <*> (pure (λ j k → j , k))) <*> b) <*> c
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
214 ≡⟨⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
215 ((((pure (λ f g x y → f , g x y)) <*> a) <*> (pure (λ j k → j , k))) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
216 ≡⟨ left ( left inter ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
217 (((pure (λ f → f (λ j k → j , k))) <*> ((pure (λ f g x y → f , g x y)) <*> a) ) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
218 ≡⟨ sym ( left ( left comp )) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
219 (((( pure _・_ <*> (pure (λ f → f (λ j k → j , k)))) <*> (pure (λ f g x y → f , g x y))) <*> a ) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
220 ≡⟨ trans (left ( left (left (left p*p) ))) (left (left (left p*p ) )) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
221 (((pure (λ f g h → f , g , h)) <*> a) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
222 ≡⟨ sym (trans ( left ( left ( left (left (right (right p*p))) ) )) (trans (left (left( left (left (right p*p)))))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
223 (trans (left (left (left (left p*p)))) (trans ( left (left (left (right (left (right p*p ))))))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
224 (trans (left (left (left (right (left p*p))))) (trans (left (left (left (right p*p)))) (left (left (left p*p)))) ) ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
225 ) ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
226 ((((pure _・_ <*> ((pure _・_ <*> ((pure _・_ <*> ( pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc))))))) <*>
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
227 (( pure _・_ <*> ( pure _・_ <*> (pure (λ j k → j , k)))) <*> pure (λ j k → j , k))) <*> a) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
228 ≡⟨ left (left comp ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
229 (((pure _・_ <*> ((pure _・_ <*> ( pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc))))) <*>
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
230 ((( pure _・_ <*> ( pure _・_ <*> (pure (λ j k → j , k)))) <*> pure (λ j k → j , k)) <*> a)) <*> b) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
231 ≡⟨ left comp ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
232 ((pure _・_ <*> ( pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc))) <*>
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
233 (((( pure _・_ <*> ( pure _・_ <*> (pure (λ j k → j , k)))) <*> pure (λ j k → j , k)) <*> a) <*> b)) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
234 ≡⟨ left ( right (left comp )) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
235 ((pure _・_ <*> ( pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc))) <*>
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
236 ((( pure _・_ <*> (pure (λ j k → j , k))) <*> (pure (λ j k → j , k) <*> a)) <*> b)) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
237 ≡⟨ left ( right comp ) ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
238 ((pure _・_ <*> ( pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc))) <*>
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
239 (pure (λ j k → j , k) <*> ( (pure (λ j k → j , k) <*> a) <*> b))) <*> c
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
240 ≡⟨ comp ⟩
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
241 pure (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc) <*> ( (pure (λ j k → j , k) <*> ( (pure (λ j k → j , k) <*> a) <*> b)) <*> c)
726
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
242 ≡⟨ sym ( trans ( trans F→pure (right (left F→pure ))) ( right ( left (right (left F→pure ))))) ⟩
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
243 FMap F (λ abc → proj₁ (proj₁ abc) , proj₂ (proj₁ abc) , proj₂ abc) ( (FMap F (λ j k → j , k) ( (FMap F (λ j k → j , k) a) <*> b)) <*> c)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
244 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
245 ( FMap F (Iso.≅→ (mα-iso isM))) (φ (( φ □ id1 Sets (FObj F f) ) ((a , b) , c)))
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
246
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
247 where
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
248 open Relation.Binary.PropositionalEquality
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
249 open Relation.Binary.PropositionalEquality.≡-Reasoning
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
250 associativity : {a b c : Obj Sets} → Sets [ Sets [ φ
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
251 o Sets [ (id1 Sets (FObj F a) □ φ ) o Iso.≅→ (mα-iso isM) ] ]
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
252 ≈ Sets [ FMap F (Iso.≅→ (mα-iso isM)) o Sets [ φ o (φ □ id1 Sets (FObj F c)) ] ] ]
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
253 associativity {a} {b} {c} = extensionality Sets ( λ x → associativity0 x )
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
254 unitarity-idr0 : {a b : Obj Sets} ( x : FObj F a * One ) → ( Sets [
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
255 FMap F (Iso.≅→ (mρ-iso isM)) o Sets [ φ o
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
256 FMap (m-bi MonoidalSets) (id1 Sets (FObj F a) , (λ _ → unit )) ] ] ) x ≡ Iso.≅→ (mρ-iso isM) x
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
257 unitarity-idr0 {a} {b} (x , OneObj ) = begin
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
258 (FMap F (Iso.≅→ (mρ-iso isM))) ( φ (( FMap (m-bi MonoidalSets) (id1 Sets (FObj F a) , (λ _ → unit))) (x , OneObj) ))
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
259 ≡⟨⟩
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
260 FMap F proj₁ ((FMap F (λ j k → j , k) x) <*> (pure OneObj))
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
261 ≡⟨ ≡-cong ( λ k → FMap F proj₁ k) ( IsApplicative.interchange ismf ) ⟩
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
262 FMap F proj₁ ((pure (λ f → f OneObj)) <*> (FMap F (λ j k → j , k) x))
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
263 ≡⟨ ( trans F→pure (right ( right F→pure )) ) ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
264 pure proj₁ <*> ((pure (λ f → f OneObj)) <*> (pure (λ j k → j , k) <*> x))
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
265 ≡⟨ sym ( right comp ) ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
266 pure proj₁ <*> (((pure _・_ <*> (pure (λ f → f OneObj))) <*> pure (λ j k → j , k)) <*> x)
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
267 ≡⟨ sym comp ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
268 ( ( pure _・_ <*> (pure proj₁ ) ) <*> ((pure _・_ <*> (pure (λ f → f OneObj))) <*> pure (λ j k → j , k))) <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
269 ≡⟨ trans ( trans ( trans ( left ( left p*p)) ( left ( right (left p*p) ))) (left (right p*p) ) ) (left p*p) ⟩
727
ea84cc6c1797 monoidal functor and applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 726
diff changeset
270 pure ( ( _・_ (proj₁ {l} {l})) ((_・_ ((λ f → f OneObj))) (λ j k → j , k))) <*> x
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
271 ≡⟨⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
272 pure id <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
273 ≡⟨ IsApplicative.identity ismf ⟩
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
274 x
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
275 ≡⟨⟩
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
276 Iso.≅→ (mρ-iso isM) (x , OneObj)
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
277
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
278 where
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
279 open Relation.Binary.PropositionalEquality
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
280 open Relation.Binary.PropositionalEquality.≡-Reasoning
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
281 unitarity-idr : {a b : Obj Sets} → Sets [ Sets [
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
282 FMap F (Iso.≅→ (mρ-iso isM)) o Sets [ φ o
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
283 FMap (m-bi MonoidalSets) (id1 Sets (FObj F a) , (λ _ → unit )) ] ] ≈ Iso.≅→ (mρ-iso isM) ]
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
284 unitarity-idr {a} {b} = extensionality Sets ( λ x → unitarity-idr0 {a} {b} x )
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
285 unitarity-idl0 : {a b : Obj Sets} ( x : One * FObj F b ) → ( Sets [
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
286 FMap F (Iso.≅→ (mλ-iso isM)) o Sets [ φ o
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
287 FMap (m-bi MonoidalSets) ((λ _ → unit ) , id1 Sets (FObj F b) ) ] ] ) x ≡ Iso.≅→ (mλ-iso isM) x
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
288 unitarity-idl0 {a} {b} ( OneObj , x) = begin
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
289 (FMap F (Iso.≅→ (mλ-iso isM))) ( φ ( unit , x ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
290 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
291 FMap F proj₂ ((FMap F (λ j k → j , k) (pure OneObj)) <*> x)
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
292 ≡⟨ ( trans F→pure (right ( left F→pure )) ) ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
293 pure proj₂ <*> ((pure (λ j k → j , k) <*> (pure OneObj)) <*> x)
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
294 ≡⟨ sym comp ⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
295 ((pure _・_ <*> (pure proj₂)) <*> (pure (λ j k → j , k) <*> (pure OneObj))) <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
296 ≡⟨ trans (trans (left (left p*p )) (left ( right p*p)) ) (left p*p) ⟩
727
ea84cc6c1797 monoidal functor and applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 726
diff changeset
297 pure ((_・_ (proj₂ {l}) )((λ (j : One {l}) (k : b ) → j , k) OneObj)) <*> x
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
298 ≡⟨⟩
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
299 pure id <*> x
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
300 ≡⟨ IsApplicative.identity ismf ⟩
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
301 x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
302 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
303 Iso.≅→ (mλ-iso isM) ( OneObj , x )
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
304
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
305 where
725
bd371f36df9a fill proofs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 724
diff changeset
306 open Relation.Binary.PropositionalEquality
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
307 open Relation.Binary.PropositionalEquality.≡-Reasoning
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
308 unitarity-idl : {a b : Obj Sets} → Sets [ Sets [ FMap F (Iso.≅→ (mλ-iso isM)) o
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
309 Sets [ φ o FMap (m-bi MonoidalSets) ((λ _ → unit ) , id1 Sets (FObj F b)) ] ] ≈ Iso.≅→ (mλ-iso isM) ]
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
310 unitarity-idl {a} {b} = extensionality Sets ( λ x → unitarity-idl0 {a} {b} x )
719
a017ed40dd77 Applicative law → Monoidal law begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
311
730
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
312 ----
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
313 --
773
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 769
diff changeset
314 -- Monoidal laws implies Applicative laws
730
e4ef69bae044 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
315 --
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
316
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
317 HaskellMonoidal→Applicative : {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) )
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
318 ( Mono : HaskellMonoidalFunctor F )
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
319 → Applicative F
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
320 HaskellMonoidal→Applicative {c₁} F Mono = record {
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
321 pure = pure ;
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
322 <*> = _<*>_ ;
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
323 isApplicative = record {
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
324 identity = identity
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
325 ; composition = composition
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
326 ; homomorphism = homomorphism
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
327 ; interchange = interchange
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
328 }
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
329 }
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
330 where
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
331 unit : FObj F One
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
332 unit = HaskellMonoidalFunctor.unit Mono
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
333 φ : {a b : Obj Sets} → Hom Sets ((FObj F a) * (FObj F b )) ( FObj F ( a * b ) )
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
334 φ = HaskellMonoidalFunctor.φ Mono
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
335 mono : IsHaskellMonoidalFunctor F unit φ
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
336 mono = HaskellMonoidalFunctor.isHaskellMonoidalFunctor Mono
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
337 id : { a : Obj Sets } → a → a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
338 id x = x
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
339 isM : IsMonoidal (Sets {c₁}) One SetsTensorProduct
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
340 isM = Monoidal.isMonoidal MonoidalSets
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
341 pure : {a : Obj Sets} → Hom Sets a ( FObj F a )
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
342 pure {a} x = FMap F ( λ y → x ) (unit )
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
343 _<*>_ : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
344 _<*>_ {a} {b} x y = FMap F ( λ r → ( proj₁ r ) ( proj₂ r ) ) (φ ( x , y ))
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
345 -- right does not work right it makes yellows. why?
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
346 -- right : {n : Level} { a b : Set n} → { x y : a } { h : a → b } → ( x ≡ y ) → h x ≡ h y
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
347 -- right {_} {_} {_} {_} {_} {h} eq = ≡-cong ( λ k → h k ) eq
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
348 left : {n : Level} { a b : Set n} → { x y : a → b } { h : a } → ( x ≡ y ) → x h ≡ y h
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
349 left {_} {_} {_} {_} {_} {h} eq = ≡-cong ( λ k → k h ) eq
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
350 open Relation.Binary.PropositionalEquality
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
351 FφF→F : { a b c d e : Obj Sets } { g : Hom Sets a c } { h : Hom Sets b d }
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
352 { f : Hom Sets (c * d) e }
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
353 { x : FObj F a } { y : FObj F b }
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
354 → FMap F f ( φ ( FMap F g x , FMap F h y ) ) ≡ FMap F ( f o map g h ) ( φ ( x , y ) )
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
355 FφF→F {a} {b} {c} {d} {e} {g} {h} {f} {x} {y} = sym ( begin
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
356 FMap F ( f o map g h ) ( φ ( x , y ) )
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
357 ≡⟨ ≡-cong ( λ k → k ( φ ( x , y ))) ( IsFunctor.distr (isFunctor F) ) ⟩
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
358 FMap F f (( FMap F ( map g h ) ) ( φ ( x , y )))
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
359 ≡⟨ ≡-cong ( λ k → FMap F f k ) ( IsHaskellMonoidalFunctor.natφ mono ) ⟩
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
360 FMap F f ( φ ( FMap F g x , FMap F h y ) )
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
361 ∎ )
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
362 where
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
363 open Relation.Binary.PropositionalEquality.≡-Reasoning
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
364 u→F : {a : Obj Sets } {u : FObj F a} → u ≡ FMap F id u
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
365 u→F {a} {u} = sym ( ≡-cong ( λ k → k u ) ( IsFunctor.identity ( isFunctor F ) ) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
366 φunitr : {a : Obj Sets } {u : FObj F a} → φ ( unit , u) ≡ FMap F (Iso.≅← (IsMonoidal.mλ-iso isM)) u
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
367 φunitr {a} {u} = sym ( begin
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
368 FMap F (Iso.≅← (IsMonoidal.mλ-iso isM)) u
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
369 ≡⟨ ≡-cong ( λ k → FMap F (Iso.≅← (IsMonoidal.mλ-iso isM)) k ) (sym (IsHaskellMonoidalFunctor.idlφ mono)) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
370 FMap F (Iso.≅← (IsMonoidal.mλ-iso isM)) ( FMap F (Iso.≅→ (IsMonoidal.mλ-iso isM)) ( φ ( unit , u) ) )
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
371 ≡⟨ left ( sym ( IsFunctor.distr ( isFunctor F ) )) ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
372 (FMap F ( (Iso.≅← (IsMonoidal.mλ-iso isM)) o (Iso.≅→ (IsMonoidal.mλ-iso isM)))) ( φ ( unit , u) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
373 ≡⟨ ≡-cong ( λ k → FMap F k ( φ ( unit , u) )) (Iso.iso→ ( (IsMonoidal.mλ-iso isM) )) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
374 FMap F id ( φ ( unit , u) )
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
375 ≡⟨ left ( IsFunctor.identity ( isFunctor F ) ) ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
376 id ( φ ( unit , u) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
377 ≡⟨⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
378 φ ( unit , u)
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
379 ∎ )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
380 where
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
381 open Relation.Binary.PropositionalEquality.≡-Reasoning
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
382 φunitl : {a : Obj Sets } {u : FObj F a} → φ ( u , unit ) ≡ FMap F (Iso.≅← (IsMonoidal.mρ-iso isM)) u
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
383 φunitl {a} {u} = sym ( begin
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
384 FMap F (Iso.≅← (IsMonoidal.mρ-iso isM)) u
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
385 ≡⟨ ≡-cong ( λ k → FMap F (Iso.≅← (IsMonoidal.mρ-iso isM)) k ) (sym (IsHaskellMonoidalFunctor.idrφ mono)) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
386 FMap F (Iso.≅← (IsMonoidal.mρ-iso isM)) ( FMap F (Iso.≅→ (IsMonoidal.mρ-iso isM)) ( φ ( u , unit ) ) )
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
387 ≡⟨ left ( sym ( IsFunctor.distr ( isFunctor F ) )) ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
388 (FMap F ( (Iso.≅← (IsMonoidal.mρ-iso isM)) o (Iso.≅→ (IsMonoidal.mρ-iso isM)))) ( φ ( u , unit ) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
389 ≡⟨ ≡-cong ( λ k → FMap F k ( φ ( u , unit ) )) (Iso.iso→ ( (IsMonoidal.mρ-iso isM) )) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
390 FMap F id ( φ ( u , unit ) )
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
391 ≡⟨ left ( IsFunctor.identity ( isFunctor F ) ) ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
392 id ( φ ( u , unit ) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
393 ≡⟨⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
394 φ ( u , unit )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
395 ∎ )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
396 where
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
397 open Relation.Binary.PropositionalEquality.≡-Reasoning
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
398 open IsMonoidal
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
399 identity : { a : Obj Sets } { u : FObj F a } → pure ( id1 Sets a ) <*> u ≡ u
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
400 identity {a} {u} = begin
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
401 pure id <*> u
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
402 ≡⟨⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
403 ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , u ) )
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
404 ≡⟨ ≡-cong ( λ k → ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , k ))) u→F ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
405 ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , FMap F id u ) )
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
406 ≡⟨ FφF→F ⟩
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
407 FMap F (λ x → proj₂ x ) (φ (unit , u ) )
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
408 ≡⟨⟩
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
409 FMap F (Iso.≅→ (mλ-iso isM)) (φ (unit , u ))
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
410 ≡⟨ IsHaskellMonoidalFunctor.idlφ mono ⟩
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
411 u
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
412
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
413 where
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
414 open Relation.Binary.PropositionalEquality.≡-Reasoning
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
415 composition : { a b c : Obj Sets } { u : FObj F ( b → c ) } { v : FObj F (a → b ) } { w : FObj F a }
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
416 → (( pure _・_ <*> u ) <*> v ) <*> w ≡ u <*> (v <*> w)
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
417 composition {a} {b} {c} {u} {v} {w} = begin
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
418 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
419 (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f g x → f (g x)) unit , u)) , v)) , w))
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
420 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f g x → f (g x)) unit , k)) , v)) , w)) ) u→F ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
421 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
422 (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f g x → f (g x)) unit , FMap F id u )) , v)) , w))
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
423 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ ( k , v)) , w)) ) FφF→F ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
424 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
778
06388660995b fix applicative for Agda version 2.5.4.1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 773
diff changeset
425 (FMap F ( λ x → (λ (r : ((b → c) → _ ) * (b → c) ) → proj₁ r (proj₂ r)) ((map (λ y f g x → f (g x)) id ) x)) (φ ( unit , u)) , v)) , w))
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
426 ≡⟨ ≡-cong ( λ k → ( FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
778
06388660995b fix applicative for Agda version 2.5.4.1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 773
diff changeset
427 (FMap F ( λ x → (λ (r : ((b → c) → _ ) * (b → c) ) → proj₁ r (proj₂ r)) ((map (λ y f g x → f (g x)) id ) x)) k , v)) , w)) ) ) φunitr ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
428 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
778
06388660995b fix applicative for Agda version 2.5.4.1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 773
diff changeset
429 ( (FMap F ( λ x → (λ (r : ((b → c) → _ ) * (b → c) ) → proj₁ r (proj₂ r)) ((map (λ y f g x → f (g x)) id ) x)) (FMap F (Iso.≅← (mλ-iso isM)) u) ) , v)) , w))
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
430 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
431 (k u , v)) , w)) ) (sym ( IsFunctor.distr (isFunctor F ))) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
432 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
433 ( FMap F (λ x → ((λ y f g x₁ → f (g x₁)) unit x) ) u , v)) , w))
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
434 ≡⟨⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
435 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
436 ( FMap F (λ x g h → x (g h) ) u , v)) , w))
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
437 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ ( FMap F (λ x g h → x (g h) ) u , k)) , w)) ) u→F ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
438 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ x g h → x (g h)) u , FMap F id v)) , w))
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
439 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (k , w)) ) FφF→F ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
440 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F ((λ r → proj₁ r (proj₂ r)) o map (λ x g h → x (g h)) id) (φ (u , v)) , w))
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
441 ≡⟨⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
442 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ x h → proj₁ x (proj₂ x h)) (φ (u , v)) , w))
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
443 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ x h → proj₁ x (proj₂ x h)) (φ (u , v)) , k)) ) u→F ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
444 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ x h → proj₁ x (proj₂ x h)) (φ (u , v)) , FMap F id w))
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
445 ≡⟨ FφF→F ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
446 FMap F ((λ r → proj₁ r (proj₂ r)) o map (λ x h → proj₁ x (proj₂ x h)) id) (φ (φ (u , v) , w))
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
447 ≡⟨⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
448 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (φ (φ (u , v) , w))
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
449 ≡⟨ ≡-cong ( λ k → FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (k (φ (φ (u , v) , w)) )) (sym (IsFunctor.identity (isFunctor F ))) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
450 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F id (φ (φ (u , v) , w)) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
451 ≡⟨ ≡-cong ( λ k → FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F k (φ (φ (u , v) , w)) ) ) (sym (Iso.iso→ (mα-iso isM))) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
452 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F ( (Iso.≅← (mα-iso isM)) o (Iso.≅→ (mα-iso isM))) (φ (φ (u , v) , w)) )
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
453 ≡⟨ ≡-cong ( λ k → FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (k (φ (φ (u , v) , w)))) ( IsFunctor.distr (isFunctor F )) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
454 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F (Iso.≅← (mα-iso isM)) ( FMap F (Iso.≅→ (mα-iso isM)) (φ (φ (u , v) , w)) ))
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
455 ≡⟨ ≡-cong ( λ k → FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F (Iso.≅← (mα-iso isM)) k) ) (sym ( IsHaskellMonoidalFunctor.assocφ mono ) ) ⟩
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
456 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F (Iso.≅← (mα-iso isM)) (φ (u , φ (v , w))))
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
457 ≡⟨⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
458 FMap F (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) (FMap F (λ r → (proj₁ r , proj₁ (proj₂ r)) , proj₂ (proj₂ r)) (φ (u , φ (v , w))))
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
459 ≡⟨ left (sym ( IsFunctor.distr (isFunctor F ))) ⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
460 FMap F (λ y → (λ x → proj₁ (proj₁ x) (proj₂ (proj₁ x) (proj₂ x))) ((λ r → (proj₁ r , proj₁ (proj₂ r)) , proj₂ (proj₂ r)) y )) (φ (u , φ (v , w)))
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
461 ≡⟨⟩
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
462 FMap F (λ y → proj₁ y (proj₁ (proj₂ y) (proj₂ (proj₂ y)))) (φ (u , φ (v , w)))
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
463 ≡⟨⟩
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
464 FMap F ( λ x → (proj₁ x) ((λ r → proj₁ r (proj₂ r)) ( proj₂ x))) ( φ ( u , (φ (v , w))))
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
465 ≡⟨ sym FφF→F ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
466 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F id u , FMap F (λ r → proj₁ r (proj₂ r)) (φ (v , w))))
716
35457f9568f3 composition done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
467 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (k , FMap F (λ r → proj₁ r (proj₂ r)) (φ (v , w)))) ) (sym u→F ) ⟩
715
1be42267eeee add some tools
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
468 FMap F (λ r → proj₁ r (proj₂ r)) (φ (u , FMap F (λ r → proj₁ r (proj₂ r)) (φ (v , w))))
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
469
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
470 where
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
471 open Relation.Binary.PropositionalEquality.≡-Reasoning
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
472 homomorphism : { a b : Obj Sets } { f : Hom Sets a b } { x : a } → pure f <*> pure x ≡ pure (f x)
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
473 homomorphism {a} {b} {f} {x} = begin
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
474 pure f <*> pure x
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
475 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
476 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y → f) unit , FMap F (λ y → x) unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
477 ≡⟨ FφF→F ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
478 FMap F ((λ r → proj₁ r (proj₂ r)) o map (λ y → f) (λ y → x)) (φ (unit , unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
479 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
480 FMap F (λ y → f x) (φ (unit , unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
481 ≡⟨ ≡-cong ( λ k → FMap F (λ y → f x) k ) φunitl ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
482 FMap F (λ y → f x) (FMap F (Iso.≅← (mρ-iso isM)) unit)
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
483 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
484 FMap F (λ y → f x) (FMap F (λ y → (y , OneObj)) unit)
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
485 ≡⟨ left ( sym ( IsFunctor.distr (isFunctor F ))) ⟩
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
486 FMap F (λ y → f x) unit
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
487 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
488 pure (f x)
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
489
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
490 where
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
491 open Relation.Binary.PropositionalEquality.≡-Reasoning
713
5e101ee6dab9 identity done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
492 interchange : { a b : Obj Sets } { u : FObj F ( a → b ) } { x : a } → u <*> pure x ≡ pure (λ f → f x) <*> u
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
493 interchange {a} {b} {u} {x} = begin
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
494 u <*> pure x
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
495 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
496 FMap F (λ r → proj₁ r (proj₂ r)) (φ (u , FMap F (λ y → x) unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
497 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (k , FMap F (λ y → x) unit)) ) u→F ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
498 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F id u , FMap F (λ y → x) unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
499 ≡⟨ FφF→F ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
500 FMap F ((λ r → proj₁ r (proj₂ r)) o map id (λ y → x)) (φ (u , unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
501 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
502 FMap F (λ r → proj₁ r x) (φ (u , unit))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
503 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r x) k ) φunitl ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
504 FMap F (λ r → proj₁ r x) (( FMap F (Iso.≅← (mρ-iso isM))) u )
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
505 ≡⟨ left ( sym ( IsFunctor.distr (isFunctor F )) ) ⟩
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
506 FMap F (( λ r → proj₁ r x) o ((Iso.≅← (mρ-iso isM) ))) u
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
507 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
508 FMap F (( λ r → proj₂ r x) o ((Iso.≅← (mλ-iso isM) ))) u
721
a8b595fb4905 use FMap F f x ≡ pure f <*> x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
509 ≡⟨ left ( IsFunctor.distr (isFunctor F )) ⟩
717
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
510 FMap F (λ r → proj₂ r x) (FMap F (Iso.≅← (IsMonoidal.mλ-iso isM)) u)
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
511 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₂ r x) k ) (sym φunitr ) ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
512 FMap F (λ r → proj₂ r x) (φ (unit , u))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
513 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
514 FMap F ((λ r → proj₁ r (proj₂ r)) o map (λ y f → f x) id) (φ (unit , u))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
515 ≡⟨ sym FφF→F ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
516 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f → f x) unit , FMap F id u))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
517 ≡⟨ ≡-cong ( λ k → FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f → f x) unit , k)) ) (sym u→F) ⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
518 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f → f x) unit , u))
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
519 ≡⟨⟩
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
520 pure (λ f → f x) <*> u
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
521
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
522 where
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
523 open Relation.Binary.PropositionalEquality.≡-Reasoning
a41b2b9b0407 Haskell Monoidal Funtor to Applicative done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 716
diff changeset
524
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
525 ----
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
526 --
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
527 -- Applicative functor implements Haskell Monoidal functor
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
528 -- Haskell Monoidal functor is directly represents monoidal functor, it is easy to make it from a monoidal functor
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
529 --
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
530
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
531 Applicative→HaskellMonoidal : {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) )
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
532 ( App : Applicative F )
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
533 → HaskellMonoidalFunctor F
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
534 Applicative→HaskellMonoidal {l} F App = record {
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
535 unit = unit ;
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
536 φ = φ ;
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
537 isHaskellMonoidalFunctor = record {
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
538 natφ = natφ
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
539 ; assocφ = assocφ
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
540 ; idrφ = idrφ
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
541 ; idlφ = idlφ
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
542 }
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
543 } where
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
544 pure = Applicative.pure App
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
545 <*> = Applicative.<*> App
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
546 app = Applicative.isApplicative App
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
547 unit : FObj F One
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
548 unit = pure OneObj
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
549 φ : {a b : Obj Sets} → Hom Sets ((FObj F a) * (FObj F b )) ( FObj F ( a * b ) )
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
550 φ = λ x → <*> (FMap F (λ j k → (j , k)) ( proj₁ x)) ( proj₂ x)
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
551 isM : IsMonoidal (Sets {l}) One SetsTensorProduct
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
552 isM = Monoidal.isMonoidal MonoidalSets
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
553 MF : MonoidalFunctor {_} {l} {_} {Sets} {Sets} MonoidalSets MonoidalSets
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
554 MF = Applicative→Monoidal F App app
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
555 isMF = MonoidalFunctor.isMonodailFunctor MF
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
556 natφ : { a b c d : Obj Sets } { x : FObj F a} { y : FObj F b} { f : a → c } { g : b → d }
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
557 → FMap F (map f g) (φ (x , y)) ≡ φ (FMap F f x , FMap F g y)
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
558 natφ {a} {b} {c} {d} {x} {y} {f} {g} = begin
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
559 FMap F (map f g) (φ (x , y))
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
560 ≡⟨⟩
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
561 FMap F (λ xy → f (proj₁ xy) , g (proj₂ xy)) (<*> (FMap F (λ j k → j , k) x) y)
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
562 ≡⟨ ≡-cong ( λ h → h (x , y)) ( IsNTrans.commute ( NTrans.isNTrans ( IsMonoidalFunctor.φab isMF ))) ⟩
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
563 <*> (FMap F (λ j k → j , k) (FMap F f x)) (FMap F g y)
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
564 ≡⟨⟩
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
565 φ (FMap F f x , FMap F g y)
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
566
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
567 where
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
568 open Relation.Binary.PropositionalEquality.≡-Reasoning
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
569 assocφ : { x y z : Obj Sets } { a : FObj F x } { b : FObj F y }{ c : FObj F z }
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
570 → φ (a , φ (b , c)) ≡ FMap F (Iso.≅→ (IsMonoidal.mα-iso isM)) (φ (φ (a , b) , c))
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
571 assocφ {x} {y} {z} {a} {b} {c} = ≡-cong ( λ h → h ((a , b) , c ) ) ( IsMonoidalFunctor.associativity isMF )
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
572 idrφ : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (IsMonoidal.mρ-iso isM)) (φ (x , unit)) ≡ x
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
573 idrφ {a} {x} = ≡-cong ( λ h → h (x , OneObj ) ) ( IsMonoidalFunctor.unitarity-idr isMF {a} {One} )
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
574 idlφ : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (IsMonoidal.mλ-iso isM)) (φ (unit , x)) ≡ x
766
c30ca91f3a76 Applicative all done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 765
diff changeset
575 idlφ {a} {x} = ≡-cong ( λ h → h (OneObj , x ) ) ( IsMonoidalFunctor.unitarity-idl isMF {One} {a} )
765
171f5386e87e Applicative→HaskellMonoidal begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 732
diff changeset
576
769
43138aead09b clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 768
diff changeset
577 -- end