11<!--
22```agda
3+ open import Cat.Functor.Naturality.Reflection
4+ open import Cat.Diagram.Coproduct.Indexed
5+ open import Cat.Instances.Shape.Terminal
6+ open import Cat.Diagram.Product.Indexed
37open import Cat.Diagram.Colimit.Cocone
48open import Cat.Diagram.Colimit.Base
59open import Cat.Diagram.Coequaliser
10+ open import Cat.Functor.Kan.Duality
611open import Cat.Diagram.Limit.Base
712open import Cat.Diagram.Limit.Cone
13+ open import Cat.Functor.Kan.Unique
14+ open import Cat.Functor.Naturality
815open import Cat.Diagram.Coproduct
916open import Cat.Diagram.Equaliser
17+ open import Cat.Functor.Coherence
1018open import Cat.Diagram.Pullback
1119open import Cat.Diagram.Terminal
20+ open import Cat.Functor.Constant
21+ open import Cat.Functor.Kan.Base
1222open import Cat.Diagram.Initial
1323open import Cat.Diagram.Product
1424open import Cat.Diagram.Pushout
1525open import Cat.Prelude
26+ open import Cat.Base
27+
28+ import Cat.Functor.Reasoning
29+ import Cat.Reasoning
1630```
1731-->
1832
@@ -22,8 +36,15 @@ module Cat.Diagram.Duals where
2236
2337<!--
2438```agda
39+ private
40+ variable
41+ o' ℓ' : Level
42+ Idx : Type ℓ'
2543module _ {o ℓ} {C : Precategory o ℓ} where
26- private module C = Precategory C
44+ private
45+ module C = Cat.Reasoning C
46+ variable
47+ S : C.Ob
2748```
2849-->
2950
@@ -35,7 +56,9 @@ particular, we have the following pairs of "redundant" definitions:
3556
3657[ agda-categories ] : https://arxiv.org/abs/2005.07059
3758
38- - [[ Products]] and coproducts
59+ - [[ Products]] and coproducts (and their [[ indexed|indexed product]]
60+ versions)
61+ - [[ Pullbacks]] and pushouts
3962- [[ Pullbacks]] and pushouts
4063- [[ Equalisers]] and coequalisers
4164- [[ Terminal objects]] and initial objects
@@ -71,6 +94,22 @@ $C\op$. We prove these correspondences here:
7194 where module iscop = is-coproduct iscop
7295```
7396
97+ ## Indexed Co/products
98+
99+ ``` agda
100+ is-indexed-co-product→is-indexed-coproduct
101+ : ∀ {F : Idx → C.Ob} {ι : ∀ i → C.Hom (F i) S} → is-indexed-product (C ^op) F ι
102+ → is-indexed-coproduct C F ι
103+ is-indexed-co-product→is-indexed-coproduct prod =
104+ record { is-indexed-product prod renaming (tuple to match) }
105+
106+ is-indexed-coproduct→is-indexed-co-product
107+ : ∀ {F : Idx → C.Ob} {ι : ∀ i → C.Hom (F i) S} → is-indexed-coproduct C F ι
108+ → is-indexed-product (C ^op) F ι
109+ is-indexed-coproduct→is-indexed-co-product coprod =
110+ record { is-indexed-coproduct coprod renaming (match to tuple) }
111+ ```
112+
74113## Co/equalisers
75114
76115``` agda
@@ -109,17 +148,33 @@ $C\op$. We prove these correspondences here:
109148 : ∀ {A} → is-terminal (C ^op) A → is-initial C A
110149 is-coterminal→is-initial x = x
111150
151+ is-terminal→is-coinitial
152+ : ∀ {A} → is-terminal C A → is-initial (C ^op) A
153+ is-terminal→is-coinitial x = x
154+
112155 is-initial→is-coterminal
113156 : ∀ {A} → is-initial C A → is-terminal (C ^op) A
114157 is-initial→is-coterminal x = x
115158
159+ is-coinitial→is-terminal
160+ : ∀ {A} → is-initial (C ^op) A → is-terminal C A
161+ is-coinitial→is-terminal x = x
162+
116163 Coterminal→Initial : Terminal (C ^op) → Initial C
117164 Coterminal→Initial term .bot = term .top
118165 Coterminal→Initial term .has⊥ = is-coterminal→is-initial (term .has⊤)
119166
167+ Terminal→Coinitial : Terminal C → Initial (C ^op)
168+ Terminal→Coinitial term .bot = term .top
169+ Terminal→Coinitial term .has⊥ = is-terminal→is-coinitial (term .has⊤)
170+
120171 Initial→Coterminal : Initial C → Terminal (C ^op)
121172 Initial→Coterminal init .top = init .bot
122173 Initial→Coterminal init .has⊤ = is-initial→is-coterminal (init .has⊥)
174+
175+ Coinitial→terminal : Initial (C ^op) → Terminal C
176+ Coinitial→terminal init .top = init .bot
177+ Coinitial→terminal init .has⊤ = is-coinitial→is-terminal (init .has⊥)
123178```
124179
125180## Pullback/pushout
@@ -157,6 +212,7 @@ $C\op$. We prove these correspondences here:
157212``` agda
158213 module _ {o ℓ} {J : Precategory o ℓ} {F : Functor J C} where
159214 open Functor F renaming (op to F^op)
215+ private module F = Cat.Functor.Reasoning F
160216
161217 open Cocone-hom
162218 open Cone-hom
@@ -233,4 +289,15 @@ We could work around this, but it's easier to just do the proofs by hand.
233289 mc .universal eta p = lim.universal eta p
234290 mc .factors eta p = lim.factors eta p
235291 mc .unique eta p other q = lim.unique eta p other q
292+
293+ module _ {o ℓ} {C : Precategory o ℓ} where
294+ co-is-complete→is-cocomplete : is-complete o' ℓ' (C ^op) → is-cocomplete o' ℓ' C
295+ co-is-complete→is-cocomplete co-complete F = Co-limit→Colimit $
296+ co-complete $ Functor.op F
297+
298+ is-cocomplete→co-is-complete : is-cocomplete o' ℓ' (C ^op) → is-complete o' ℓ' C
299+ is-cocomplete→co-is-complete cocomplete F = to-limit (to-is-limit ml) where
300+ dual = Colimit→Co-limit $ cocomplete $ Functor.op F
301+ ml : make-is-limit F $ Limit.apex dual
302+ ml = record { Limit dual }
236303```
0 commit comments