@@ -4,16 +4,18 @@ module Proarrow.Category.Bicategory.Kan where
44
55import Data.Kind (Constraint )
66
7- import Proarrow.Category.Bicategory (Bicategory (.. ), (==) , (||) , Monad (.. ), rightUnitorInvWith , Comonad (.. ), rightUnitorWith , obj1 )
8- import Proarrow.Category.Equipment
9- ( Equipment (.. )
10- , HasCompanions (.. )
11- , flipCompanion
12- , flipCompanionInv
13- , flipConjoint
14- , flipConjointInv
7+ import Proarrow.Category.Bicategory
8+ ( Adjunction (.. )
9+ , Bicategory (.. )
10+ , Comonad (.. )
11+ , Monad (.. )
12+ , rightUnitorInvWith
13+ , rightUnitorWith
14+ , (==)
15+ , (||) , flipRightAdjointInv , flipRightAdjoint , flipLeftAdjointInv , flipLeftAdjoint
1516 )
16- import Proarrow.Core (CAT , CategoryOf (.. ), Ob , Obj , Profunctor (.. ), Promonad (.. ), obj , (\\) )
17+
18+ import Proarrow.Core (CAT , CategoryOf (.. ), Ob , Profunctor (.. ), Promonad (.. ), obj , (\\) )
1719
1820type LeftKanExtension :: forall {k } {kk :: CAT k } {c } {d } {e }. kk c d -> kk c e -> Constraint
1921class (Bicategory kk , Ob0 kk c , Ob0 kk d , Ob0 kk e , Ob f , Ob j , Ob (Lan j f )) => LeftKanExtension (j :: kk c d ) (f :: kk c e ) where
@@ -39,7 +41,7 @@ lanComonadDelta :: forall {kk} {c} {d} (p :: kk c d). (LeftKanExtension p p) =>
3941lanComonadDelta =
4042 let lpp = obj @ (Lan p p )
4143 in lanUniv @ p @ p (associatorInv @ _ @ (Lan p p ) @ (Lan p p ) @ p . (lpp `o` lan @ p @ p ) . lan @ p @ p )
42- \\ (lpp `o` lpp)
44+ \\ (lpp `o` lpp)
4345
4446-- | Density is the "mother of all comonads"
4547coinj :: forall p . (Comonad p , LeftKanExtension p p ) => p ~> Density p
@@ -51,22 +53,19 @@ corun = lanUniv @p @p delta
5153idLan :: forall f . (LeftKanExtension I f , Ob f ) => f ~> Lan I f
5254idLan = rightUnitor . lan @ I @ f
5355
54- lanAlongCompanion
55- :: forall {i } {k } hk vk (j :: vk i k ) f
56- . (LeftKanExtension (Companion hk j ) f , Equipment hk vk , Ob j )
57- => Lan (Companion hk j ) f ~> f `O ` Conjoint hk j
58- lanAlongCompanion =
59- let j = obj1 @ j ; f = obj @ f ; conJ = mapConjoint @ hk j
60- in lanUniv @ (Companion hk j ) @ f
61- (rightUnitorInv == f || comConUnit j == associatorInv @ _ @ f @ (Conjoint hk j ) @ (Companion hk j ))
62- \\ (f `o` conJ)
63- \\ conJ
64-
65- lanAlongCompanionInv
66- :: forall {i } {k } hk vk (j :: vk i k ) f
67- . (LeftKanExtension (Companion hk j ) f , Equipment hk vk , Ob j )
68- => f `O ` Conjoint hk j ~> Lan (Companion hk j ) f
69- lanAlongCompanionInv = flipConjointInv @ j @ f @ (Lan (Companion hk j ) f ) (lan @ (Companion hk j ))
56+ lanAlongLeftAdjoint
57+ :: forall {i } {k } kk (j :: kk i k ) j' f
58+ . (LeftKanExtension j f , Adjunction j j' , Ob j , Ob j' )
59+ => Lan j f ~> f `O ` j'
60+ lanAlongLeftAdjoint =
61+ withOb2 @ kk @ f @ j'
62+ (lanUniv @ j @ f (rightUnitorInv == obj @ f || unit @ j @ j' == associatorInv @ _ @ f @ j' @ j ))
63+
64+ lanAlongLeftAdjointInv
65+ :: forall {i } {k } kk (j :: kk i k ) j' f
66+ . (LeftKanExtension j f , Adjunction j j' , Ob j , Ob j' )
67+ => f `O ` j' ~> Lan j f
68+ lanAlongLeftAdjointInv = flipRightAdjointInv @ j @ j' (lan @ j @ f )
7069
7170type j |> p = Ran j p
7271type RightKanExtension :: forall {k } {kk :: CAT k } {c } {d } {e }. kk c d -> kk c e -> Constraint
@@ -113,21 +112,19 @@ composeRan =
113112idRan :: forall f . (RightKanExtension I f , Ob f ) => f ~> Ran I f
114113idRan = ranUniv @ I @ f rightUnitor
115114
116- ranAlongConjoint
117- :: forall {i } {k } hk vk (j :: vk i k ) f
118- . (RightKanExtension (Conjoint hk j ) f , Equipment hk vk , Ob j )
119- => Ran (Conjoint hk j ) f ~> f `O ` Companion hk j
120- ranAlongConjoint = flipConjoint @ j @ (Ran (Conjoint hk j ) f ) @ f (ran @ (Conjoint hk j ))
121-
122- ranAlongConjointInv
123- :: forall {i } {k } hk vk (j :: vk i k ) f
124- . (RightKanExtension (Conjoint hk j ) f , Equipment hk vk , Ob j )
125- => f `O ` Companion hk j ~> Ran (Conjoint hk j ) f
126- ranAlongConjointInv =
127- let j = obj1 @ j ; f = obj @ f ; comJ = mapCompanion @ hk j
128- in ranUniv @ (Conjoint hk j ) @ f (rightUnitor . (f `o` comConCounit j) . associator @ _ @ f @ (Companion hk j ) @ (Conjoint hk j ))
129- \\ (f `o` comJ)
130- \\ comJ
115+ ranAlongRightAdjoint
116+ :: forall {i } {k } kk (j :: kk i k ) j' f
117+ . (RightKanExtension j' f , Adjunction j j' , Ob j , Ob j' )
118+ => Ran j' f ~> f `O ` j
119+ ranAlongRightAdjoint = flipRightAdjoint @ j @ j' (ran @ j' @ f )
120+
121+ ranAlongRightAdjointInv
122+ :: forall {i } {k } kk (j :: kk i k ) j' f
123+ . (RightKanExtension j' f , Adjunction j j' , Ob j , Ob j' )
124+ => f `O ` j ~> Ran j' f
125+ ranAlongRightAdjointInv =
126+ withOb2 @ kk @ f @ j
127+ (ranUniv @ j' @ f (associator @ _ @ f @ j @ j' == obj @ f || counit @ j @ j' == rightUnitor))
131128
132129type LeftKanLift :: forall {k } {kk :: CAT k } {c } {d } {e }. kk d c -> kk e c -> Constraint
133130class (Bicategory kk , Ob0 kk c , Ob0 kk d , Ob0 kk e , Ob f , Ob j , Ob (Lift j f )) => LeftKanLift (j :: kk d c ) (f :: kk e c ) where
@@ -151,27 +148,24 @@ liftComonadDelta :: forall {kk} {c} {d} (p :: kk d c). (LeftKanLift p p) => Lift
151148liftComonadDelta =
152149 let lpp = obj @ (Lift p p )
153150 in liftUniv @ p @ p (associator @ _ @ p @ (Lift p p ) @ (Lift p p ) . (lift @ p @ p `o` lpp) . lift @ p @ p )
154- \\ (lpp `o` lpp)
151+ \\ (lpp `o` lpp)
155152
156153idLift :: forall f . (LeftKanLift I f , Ob f ) => f ~> Lift I f
157154idLift = leftUnitor . lift @ I @ f
158155
159- liftAlongConjoint
160- :: forall {i } {k } hk vk (j :: vk i k ) f
161- . (Ob j , LeftKanLift (Conjoint hk j ) f , Equipment hk vk )
162- => Lift (Conjoint hk j ) f ~> Companion hk j `O ` f
163- liftAlongConjoint =
164- let j = obj1 @ j ; f = obj @ f ; comJ = mapCompanion @ hk j
165- in liftUniv @ (Conjoint hk j ) @ f
166- (associator @ _ @ (Conjoint hk j ) @ (Companion hk j ) @ f . (comConUnit j `o` f) . leftUnitorInv)
167- \\ (comJ `o` f)
168- \\ comJ
169-
170- liftAlongConjointInv
171- :: forall {i } {k } hk vk (j :: vk i k ) f
172- . (Ob j , LeftKanLift (Conjoint hk j ) f , Equipment hk vk )
173- => Companion hk j `O ` f ~> Lift (Conjoint hk j ) f
174- liftAlongConjointInv = flipCompanionInv @ j @ f @ (Lift (Conjoint hk j ) f ) (lift @ (Conjoint hk j ))
156+ liftAlongRightAdjoint
157+ :: forall {i } {k } kk (j :: kk i k ) j' f
158+ . (Ob j , Ob j' , LeftKanLift j' f , Adjunction j j' )
159+ => Lift j' f ~> j `O ` f
160+ liftAlongRightAdjoint =
161+ withOb2 @ kk @ j @ f
162+ (liftUniv @ j' @ f (leftUnitorInv == unit @ j @ j' || obj @ f == associator @ _ @ j' @ j @ f ))
163+
164+ liftAlongRightAdjointInv
165+ :: forall {i } {k } kk (j :: kk i k ) j' f
166+ . (Ob j , Ob j' , LeftKanLift j' f , Adjunction j j' )
167+ => j `O ` f ~> Lift j' f
168+ liftAlongRightAdjointInv = flipLeftAdjointInv @ j @ j' (lift @ j' @ f )
175169
176170type f <| j = Rift j f
177171type RightKanLift :: forall {k } {kk :: CAT k } {c } {d } {e }. kk d c -> kk e c -> Constraint
@@ -196,7 +190,7 @@ riftMonadMu :: forall {kk} {c} {d} (p :: kk d c). (RightKanLift p p) => Rift p p
196190riftMonadMu =
197191 let rpp = obj @ (Rift p p )
198192 in riftUniv @ p @ p (rift @ p @ p . (rift @ p @ p `o` rpp) . associatorInv @ _ @ p @ (Rift p p ) @ (Rift p p ))
199- \\ (rpp `o` rpp)
193+ \\ (rpp `o` rpp)
200194
201195composeRift
202196 :: forall i j f
@@ -209,20 +203,16 @@ composeRift =
209203idRift :: forall f . (RightKanLift I f , Ob f ) => f ~> Rift I f
210204idRift = riftUniv @ I @ f leftUnitor
211205
212- riftAlongCompanion
213- :: forall {i } {k } hk vk (j :: vk i k ) f
214- . (Ob j , RightKanLift (Companion hk j ) f , Equipment hk vk )
215- => Rift (Companion hk j ) f ~> Conjoint hk j `O ` f
216- riftAlongCompanion = flipCompanion @ j @ (Rift (Companion hk j ) f ) @ f (rift @ (Companion hk j ))
217-
218- riftAlongCompanionInv
219- :: forall {i } {k } hk vk (j :: vk i k ) f
220- . (RightKanLift (Companion hk j ) f , Equipment hk vk )
221- => Obj j
222- -> Conjoint hk j `O ` f ~> Rift (Companion hk j ) f
223- riftAlongCompanionInv j =
224- let f = obj @ f ; conJ = mapConjoint @ hk j
225- in riftUniv @ (Companion hk j ) @ f
226- (leftUnitor . (comConCounit j `o` f) . associatorInv @ _ @ (Companion hk j ) @ (Conjoint hk j ) @ f )
227- \\ (conJ `o` f)
228- \\ conJ
206+ riftAlongLeftAdjoint
207+ :: forall {i } {k } kk (j :: kk i k ) j' f
208+ . (RightKanLift j f , Adjunction j j' , Ob j , Ob j' )
209+ => Rift j f ~> j' `O ` f
210+ riftAlongLeftAdjoint = flipLeftAdjoint @ j @ j' (rift @ j @ f )
211+
212+ riftAlongLeftAdjointInv
213+ :: forall {i } {k } kk (j :: kk i k ) j' f
214+ . (RightKanLift j f , Adjunction j j' , Ob j , Ob j' )
215+ => j' `O ` f ~> Rift j f
216+ riftAlongLeftAdjointInv =
217+ withOb2 @ kk @ j' @ f
218+ (riftUniv @ j @ f (associatorInv @ _ @ j @ j' @ f == counit @ j @ j' || obj @ f == leftUnitor))
0 commit comments