module Cat.Diagram.Coproduct.Copower where
Copowers🔗
Let be a category admitting indexed coproducts, for example a cocomplete category. In the same way that (in ordinary arithmetic) the iterated product of a bunch of copies of the same factor
is called a “power”, we refer to the coproduct of many copies of an object indexed by a set as the copower of by and alternatively denote it If does indeed admit coproducts indexed by any set, then the copowering construction extends to a functor
The notion of copowering gives us slick terminology for a category which admits all coproducts, but not necessarily all colimits: Such a category is precisely one copowered over
module Copowers {o ℓ} {C : Precategory o ℓ} (coprods : (S : Set ℓ) → has-coproducts-indexed-by C ∣ S ∣) where open Indexed-coproduct open Cat.Reasoning C open Functor
_⊗_ : Set ℓ → Ob → Ob X ⊗ A = coprods X (λ _ → A) .ΣF
Copowers satisfy a universal property: is a representing object for the functor that takes an object to the power of the set of morphisms from to in other words, we have a natural isomorphism
copower-hom-iso : ∀ {X A} → Hom-from C (X ⊗ A) ≅ⁿ Hom-from (Sets ℓ) X F∘ Hom-from C A copower-hom-iso {X} {A} = iso→isoⁿ (λ _ → equiv→iso (hom-iso (coprods X (λ _ → A)))) (λ _ → ext λ _ _ → assoc _ _ _)
The action of the copowering functor is given by simultaneously changing the indexing along a function of sets and changing the underlying object by a morphism This is functorial by the uniqueness properties of colimiting maps.
Copowering : Functor (Sets ℓ ×ᶜ C) C Copowering .F₀ (X , A) = X ⊗ A Copowering .F₁ {X , A} {Y , B} (idx , obj) = coprods X (λ _ → A) .match λ i → coprods Y (λ _ → B) .ι (idx i) ∘ obj Copowering .F-id {X , A} = sym $ coprods X (λ _ → A) .unique _ λ i → sym id-comm Copowering .F-∘ {X , A} f g = sym $ coprods X (λ _ → A) .unique _ λ i → pullr (coprods _ _ .commute) ∙ extendl (coprods _ _ .commute)
∐! : (Idx : Type ℓ) ⦃ hl : H-Level Idx 2 ⦄ (F : Idx → Ob) → Ob ∐! Idx F = ΣF (coprods (el! Idx) F) module ∐! (Idx : Type ℓ) ⦃ hl : H-Level Idx 2 ⦄ (F : Idx → Ob) = Indexed-coproduct (coprods (el! Idx) F) _⊗!_ : (Idx : Type ℓ) ⦃ hl : H-Level Idx 2 ⦄ → Ob → Ob I ⊗! X = el! I ⊗ X module ⊗! (Idx : Type ℓ) ⦃ hl : H-Level Idx 2 ⦄ (X : Ob) = Indexed-coproduct (coprods (el! Idx) (λ _ → X))
cocomplete→copowering : ∀ {o ℓ} {C : Precategory o ℓ} → is-cocomplete ℓ ℓ C → Functor (Sets ℓ ×ᶜ C) C cocomplete→copowering colim = Copowers.Copowering λ S F → Colimit→IC _ (is-hlevel-suc 2 (S .is-tr)) F (colim _)
Constant objects🔗
If has a terminal object then the copower is referred to as the constant object on By simplifying the universal property of the copower, we obtain that constant objects assemble into a functor left adjoint to 1
module Consts {o ℓ} {C : Precategory o ℓ} (term : Terminal C) (coprods : (S : Set ℓ) → has-coproducts-indexed-by C ∣ S ∣) where open Indexed-coproduct open Cat.Reasoning C open Copowers coprods open Functor open Terminal term renaming (top to *C)
Constant-objects : Functor (Sets ℓ) C Constant-objects .F₀ S = S ⊗ *C Constant-objects .F₁ f = coprods _ _ .match λ i → coprods _ _ .ι (f i) Constant-objects .F-id = sym $ coprods _ _ .unique _ λ i → idl _ Constant-objects .F-∘ f g = sym $ coprods _ _ .unique _ λ i → pullr (coprods _ _ .commute) ∙ coprods _ _ .commute Const⊣Γ : Constant-objects ⊣ Hom-from _ *C Const⊣Γ = hom-iso→adjoints (λ f x → f ∘ coprods _ _ .ι x) (is-iso→is-equiv (iso (λ h → coprods _ _ .match h) (λ h → ext λ i → coprods _ _ .commute) (λ x → sym (coprods _ _ .unique _ λ i → refl)))) (λ g h x → ext λ y → pullr (pullr (coprods _ _ .commute)))
This right adjoint is often called the global sections functor.↩︎