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

  _⊗_ : 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))

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

  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)))

  1. This right adjoint is often called the global sections functor.↩︎