comparison adj-monad.agda @ 688:a5f2ca67e7c5

fix monad/adjunction definition couniversal to limit does not work
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 11 Nov 2017 21:34:58 +0900
parents 5f331dfc000b
children
comparison
equal deleted inserted replaced
687:d0bc017c6b61 688:a5f2ca67e7c5
18 -- 18 --
19 -- Adjunction to Monad 19 -- Adjunction to Monad
20 -- 20 --
21 ---- 21 ----
22 22
23 open Adjunction
24 open NTrans 23 open NTrans
25 open Functor 24 open Functor
26 25
27 UεF : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (A : Category c₁ c₂ ℓ) (B : Category c₁' c₂' ℓ') 26 UεF : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (A : Category c₁ c₂ ℓ) (B : Category c₁' c₂' ℓ')
28 ( U : Functor B A ) 27 ( U : Functor B A )
33 lemma11 : NTrans A A ( U ○ ((F ○ U) ○ F )) ( U ○ (identityFunctor ○ F) ) 32 lemma11 : NTrans A A ( U ○ ((F ○ U) ○ F )) ( U ○ (identityFunctor ○ F) )
34 → NTrans A A (( U ○ F ) ○ ( U ○ F )) ( U ○ F ) 33 → NTrans A A (( U ○ F ) ○ ( U ○ F )) ( U ○ F )
35 lemma11 n = record { TMap = \a → TMap n a; isNTrans = record { commute = IsNTrans.commute ( isNTrans n ) }} 34 lemma11 n = record { TMap = \a → TMap n a; isNTrans = record { commute = IsNTrans.commute ( isNTrans n ) }}
36 35
37 Adj2Monad : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (A : Category c₁ c₂ ℓ) (B : Category c₁' c₂' ℓ') 36 Adj2Monad : {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (A : Category c₁ c₂ ℓ) (B : Category c₁' c₂' ℓ')
38 { U : Functor B A } 37 → Adjunction A B → Monad A
39 { F : Functor A B } 38 Adj2Monad A B adj = record {
40 { η : NTrans A A identityFunctor ( U ○ F ) } 39 T = T ;
41 { ε : NTrans B B ( F ○ U ) identityFunctor } → 40 η = η ;
42 Adjunction A B U F η ε → Monad A (U ○ F) η (UεF A B U F ε) 41 μ = μ ;
43 Adj2Monad A B {U} {F} {η} {ε} adj = record {
44 isMonad = record { 42 isMonad = record {
45 assoc = assoc1; 43 assoc = assoc1;
46 unity1 = unity1; 44 unity1 = unity1;
47 unity2 = unity2 45 unity2 = unity2
48 } 46 }
49 } where 47 } where
48 U : Functor B A
49 U = Adjunction.U adj
50 F : Functor A B
51 F = Adjunction.F adj
52 η : NTrans A A identityFunctor ( U ○ F )
53 η = Adjunction.η adj
54 ε : NTrans B B ( F ○ U ) identityFunctor
55 ε = Adjunction.ε adj
50 T : Functor A A 56 T : Functor A A
51 T = U ○ F 57 T = U ○ F
52 μ : NTrans A A ( T ○ T ) T 58 μ : NTrans A A ( T ○ T ) T
53 μ = UεF A B U F ε 59 μ = UεF A B U F ε
54 lemma-assoc1 : {a b : Obj B} → ( f : Hom B a b) → 60 lemma-assoc1 : {a b : Obj B} → ( f : Hom B a b) →
73 unity1 {a} = let open ≈-Reasoning (A) in 79 unity1 {a} = let open ≈-Reasoning (A) in
74 begin 80 begin
75 TMap μ a o TMap η ( FObj T a ) 81 TMap μ a o TMap η ( FObj T a )
76 ≈⟨⟩ 82 ≈⟨⟩
77 (FMap U (TMap ε ( FObj F a ))) o TMap η ( FObj U ( FObj F a )) 83 (FMap U (TMap ε ( FObj F a ))) o TMap η ( FObj U ( FObj F a ))
78 ≈⟨ IsAdjunction.adjoint1 ( isAdjunction adj ) ⟩ 84 ≈⟨ IsAdjunction.adjoint1 ( Adjunction.isAdjunction adj ) ⟩
79 id (FObj U ( FObj F a )) 85 id (FObj U ( FObj F a ))
80 ≈⟨⟩ 86 ≈⟨⟩
81 id (FObj T a) 87 id (FObj T a)
82 88
83 unity2 : {a : Obj A} → A [ A [ TMap μ a o (FMap T (TMap η a ))] ≈ Id {_} {_} {_} {A} (FObj T a) ] 89 unity2 : {a : Obj A} → A [ A [ TMap μ a o (FMap T (TMap η a ))] ≈ Id {_} {_} {_} {A} (FObj T a) ]
86 TMap μ a o (FMap T (TMap η a )) 92 TMap μ a o (FMap T (TMap η a ))
87 ≈⟨⟩ 93 ≈⟨⟩
88 (FMap U (TMap ε ( FObj F a ))) o (FMap U ( FMap F (TMap η a ))) 94 (FMap U (TMap ε ( FObj F a ))) o (FMap U ( FMap F (TMap η a )))
89 ≈⟨ sym (distr U ) ⟩ 95 ≈⟨ sym (distr U ) ⟩
90 FMap U ( B [ (TMap ε ( FObj F a )) o ( FMap F (TMap η a )) ]) 96 FMap U ( B [ (TMap ε ( FObj F a )) o ( FMap F (TMap η a )) ])
91 ≈⟨ (IsFunctor.≈-cong (isFunctor U)) (IsAdjunction.adjoint2 ( isAdjunction adj )) ⟩ 97 ≈⟨ (IsFunctor.≈-cong (isFunctor U)) (IsAdjunction.adjoint2 ( Adjunction.isAdjunction adj )) ⟩
92 FMap U ( id1 B (FObj F a) ) 98 FMap U ( id1 B (FObj F a) )
93 ≈⟨ IsFunctor.identity ( isFunctor U ) ⟩ 99 ≈⟨ IsFunctor.identity ( isFunctor U ) ⟩
94 id (FObj T a) 100 id (FObj T a)
95 101