Skip to content

Commit 96afd37

Browse files
Rewrite of equipments
1 parent a05a87e commit 96afd37

32 files changed

+1216
-1685
lines changed

proarrow.cabal

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,8 @@ library
6565
Proarrow.Category.Enriched.Dagger
6666
Proarrow.Category.Enriched.ThinCategory
6767
Proarrow.Category.Equipment
68-
Proarrow.Category.Equipment.BiAsEquipment
6968
Proarrow.Category.Equipment.Limit
7069
Proarrow.Category.Equipment.Stateful
71-
Proarrow.Category.Equipment.Quintet
7270
Proarrow.Category.Instance.Ap
7371
Proarrow.Category.Instance.Bool
7472
Proarrow.Category.Instance.Cat

src/Proarrow/Adjunction.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class (Profunctor p, Profunctor q) => Proadjunction (p :: j +-> k) (q :: k +-> j
5757
unit :: (Ob a) => (q :.: p) a a -- (~>) :~> q :.: p
5858
counit :: p :.: q :~> (~>)
5959

60-
instance (Representable f) => Proadjunction f (RepCostar f) where
60+
instance (Representable p) => Proadjunction p (RepCostar p) where
6161
unit = trivialCorep :.: trivialRep
6262
counit (f :.: g) = coindex g . index f
6363

64-
instance (Corepresentable f) => Proadjunction (CorepStar f) f where
64+
instance (Corepresentable p) => Proadjunction (CorepStar p) p where
6565
unit = trivialCorep :.: trivialRep
6666
counit (f :.: g) = coindex g . index f
6767

src/Proarrow/Category/Bicategory.hs

Lines changed: 57 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,16 @@ module Proarrow.Category.Bicategory
2424
, Monad (..)
2525
, Comonad (..)
2626
, Adjunction (..)
27-
, leftAdjunct
28-
, rightAdjunct
27+
, flipLeftAdjoint
28+
, flipLeftAdjointInv
29+
, flipRightAdjoint
30+
, flipRightAdjointInv
2931
, Bimodule (..)
3032
)
3133
where
3234

3335
import Data.Kind (Constraint)
36+
import Prelude (($))
3437

3538
import Proarrow.Core (CAT, CategoryOf (..), Promonad (..), id)
3639
import Proarrow.Object (Obj, obj)
@@ -41,6 +44,7 @@ infixl 1 \\\
4144

4245
-- | A bicategory is locally "something" if each hom-category is "something".
4346
class (forall j k. (Ob0 kk j, Ob0 kk k) => c (kk j k)) => Locally c kk
47+
4448
instance (forall j k. (Ob0 kk j, Ob0 kk k) => c (kk j k)) => Locally c kk
4549

4650
class (Ob0 kk j) => Ob0' kk j
@@ -139,12 +143,12 @@ rightUnitorInvWith c ab = ((ab `o` c) . rightUnitorInv) \\\ ab
139143
f == g = g . f
140144

141145
type Monad :: forall {kk} {a}. kk a a -> Constraint
142-
class (Bicategory kk, Ob0 kk a, Ob t) => Monad (t :: kk a a) where
146+
class (Bicategory kk, Ob t) => Monad (t :: kk a a) where
143147
eta :: I ~> t
144148
mu :: t `O` t ~> t
145149

146150
type Comonad :: forall {kk} {a}. kk a a -> Constraint
147-
class (Bicategory kk, Ob0 kk a, Ob t) => Comonad (t :: kk a a) where
151+
class (Bicategory kk, Ob t) => Comonad (t :: kk a a) where
148152
epsilon :: t ~> I
149153
delta :: t ~> t `O` t
150154

@@ -158,28 +162,61 @@ instance {-# OVERLAPPABLE #-} (Monad s) => Bimodule s s s where
158162
rightAction = mu
159163

160164
type Adjunction :: forall {kk} {c} {d}. kk c d -> kk d c -> Constraint
161-
class (Bicategory kk, Ob0 kk c, Ob0 kk d) => Adjunction (l :: kk c d) (r :: kk d c) where
165+
class (Bicategory kk, Ob l, Ob r) => Adjunction (l :: kk c d) (r :: kk d c) where
162166
unit :: I ~> r `O` l
163167
counit :: l `O` r ~> I
164168

165-
leftAdjunct
169+
flipLeftAdjoint
166170
:: forall {kk} {c} {d} {i} (l :: kk c d) (r :: kk d c) (a :: kk i c) b
167-
. (Adjunction l r, Ob a, Ob r, Ob l, Ob0 kk i)
171+
. (Adjunction l r, Ob a)
168172
=> l `O` a ~> b
169173
-> a ~> r `O` b
170-
leftAdjunct f =
171-
leftUnitorInv
172-
== unit @l @r || obj @a
173-
== associator @_ @r @l @a
174-
== obj @r || f
175-
176-
rightAdjunct
174+
flipLeftAdjoint f =
175+
withOb0s @kk @l $
176+
withOb0s @kk @a $
177+
( leftUnitorInv
178+
== unit @l @r || obj @a
179+
== associator @_ @r @l @a
180+
== obj @r || f
181+
)
182+
183+
flipLeftAdjointInv
177184
:: forall {kk} {c} {d} {i} (l :: kk c d) (r :: kk d c) (a :: kk i c) b
178-
. (Adjunction l r, Ob b, Ob r, Ob l, Ob0 kk i)
185+
. (Adjunction l r, Ob b)
179186
=> a ~> r `O` b
180187
-> l `O` a ~> b
181-
rightAdjunct f =
182-
obj @l || f
183-
== associatorInv @_ @l @r @b
184-
== counit @l @r || obj @b
185-
== leftUnitor
188+
flipLeftAdjointInv f =
189+
withOb0s @kk @r $
190+
withOb0s @kk @b $
191+
( obj @l || f
192+
== associatorInv @_ @l @r @b
193+
== counit @l @r || obj @b
194+
== leftUnitor
195+
)
196+
197+
flipRightAdjoint
198+
:: forall {kk} {c} {d} {i} (l :: kk c d) (r :: kk d c) (a :: kk c i) b
199+
. (Adjunction l r, Ob a)
200+
=> a `O` r ~> b
201+
-> a ~> b `O` l
202+
flipRightAdjoint f =
203+
withOb0s @kk @l $
204+
withOb0s @kk @a $
205+
rightUnitorInv
206+
== obj @a || unit @l @r
207+
== associatorInv @_ @a @r @l
208+
== f || obj @l
209+
210+
flipRightAdjointInv
211+
:: forall {kk} {c} {d} {i} (l :: kk c d) (r :: kk d c) a (b :: kk d i)
212+
. (Adjunction l r, Ob b)
213+
=> a ~> b `O` l
214+
-> a `O` r ~> b
215+
flipRightAdjointInv f =
216+
withOb0s @kk @r $
217+
withOb0s @kk @b $
218+
( f || obj @r
219+
== associator @_ @b @l @r
220+
== obj @b || counit @l @r
221+
== rightUnitor
222+
)

src/Proarrow/Category/Bicategory/Co.hs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
module Proarrow.Category.Bicategory.Co where
22

33
import Proarrow.Category.Bicategory
4-
( Bicategory (..)
4+
( Adjunction (..)
5+
, Bicategory (..)
56
, Comonad (..)
6-
, Monad (..), Adjunction (..)
7+
, Monad (..)
78
)
89
import Proarrow.Category.Bicategory.Kan
910
( LeftKanExtension (..)
1011
, LeftKanLift (..)
1112
, RightKanExtension (..)
1213
, RightKanLift (..)
1314
)
15+
import Proarrow.Category.Equipment (Cotight, CotightAdjoint, Equipment (..), IsOb, Tight, TightAdjoint, WithObO2 (..))
1416
import Proarrow.Core (CAT, CategoryOf (..), Is, Profunctor (..), Promonad (..), UN, dimapDefault)
1517

1618
type COK :: CAT k -> CAT k
@@ -45,9 +47,21 @@ instance (Bicategory kk) => Bicategory (COK kk) where
4547
rightUnitor = Co rightUnitorInv
4648
rightUnitorInv = Co rightUnitor
4749
associator @(CO p) @(CO q) @(CO r) = Co (associatorInv @kk @p @q @r)
48-
associatorInv @(CO p) @(CO q) @(CO r) = Co (associator @kk @p @q @r)
50+
associatorInv @(CO p) @(CO q) @(CO r) = Co (associator @kk @p @q @r)
4951

50-
instance Adjunction f g => Adjunction (CO g) (CO f) where
52+
type instance IsOb Tight p = IsOb Cotight (UN CO p)
53+
type instance IsOb Cotight p = IsOb Tight (UN CO p)
54+
type instance TightAdjoint p = CO (CotightAdjoint (UN CO p))
55+
type instance CotightAdjoint p = CO (TightAdjoint (UN CO p))
56+
instance (WithObO2 Cotight kk) => WithObO2 Tight (COK kk) where
57+
withObO2 @p @q r = withObO2 @Cotight @kk @(UN CO p) @(UN CO q) r
58+
instance (WithObO2 Tight kk) => WithObO2 Cotight (COK kk) where
59+
withObO2 @p @q r = withObO2 @Tight @kk @(UN CO p) @(UN CO q) r
60+
instance (Equipment kk) => Equipment (COK kk) where
61+
withTightAdjoint @(CO f) r = withCotightAdjoint @kk @f r
62+
withCotightAdjoint @(CO f) r = withTightAdjoint @kk @f r
63+
64+
instance (Adjunction f g) => Adjunction (CO g) (CO f) where
5165
unit = Co (counit @f @g)
5266
counit = Co (unit @f @g)
5367

src/Proarrow/Category/Bicategory/Kan.hs

Lines changed: 66 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@ module Proarrow.Category.Bicategory.Kan where
44

55
import 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

1820
type LeftKanExtension :: forall {k} {kk :: CAT k} {c} {d} {e}. kk c d -> kk c e -> Constraint
1921
class (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) =>
3941
lanComonadDelta =
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"
4547
coinj :: forall p. (Comonad p, LeftKanExtension p p) => p ~> Density p
@@ -51,22 +53,19 @@ corun = lanUniv @p @p delta
5153
idLan :: forall f. (LeftKanExtension I f, Ob f) => f ~> Lan I f
5254
idLan = 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

7170
type j |> p = Ran j p
7271
type RightKanExtension :: forall {k} {kk :: CAT k} {c} {d} {e}. kk c d -> kk c e -> Constraint
@@ -113,21 +112,19 @@ composeRan =
113112
idRan :: forall f. (RightKanExtension I f, Ob f) => f ~> Ran I f
114113
idRan = 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

132129
type LeftKanLift :: forall {k} {kk :: CAT k} {c} {d} {e}. kk d c -> kk e c -> Constraint
133130
class (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
151148
liftComonadDelta =
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

156153
idLift :: forall f. (LeftKanLift I f, Ob f) => f ~> Lift I f
157154
idLift = 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

176170
type f <| j = Rift j f
177171
type 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
196190
riftMonadMu =
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

201195
composeRift
202196
:: forall i j f
@@ -209,20 +203,16 @@ composeRift =
209203
idRift :: forall f. (RightKanLift I f, Ob f) => f ~> Rift I f
210204
idRift = 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

Comments
 (0)