{-# OPTIONS --safe --without-K #-}
open import Categories.Category.Instance.Sets
open import Level
open import Categories.Category.Cocartesian
open import Data.Empty.Polymorphic
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl; cong; sym)
open Eq.≡-Reasoning using (begin_; step-≡-∣; step-≡-⟩; _∎)
open import Data.Sum
open import Data.Sum.Properties
open import Function.Base
module Category.Instance.Properties.Sets.Cocartesian (o : Level) where
Sets-Cocartesian : Cocartesian (Sets o)
Sets-Cocartesian = record
{ initial = record { ⊥ = ⊥ ; ⊥-is-initial = record { ! = λ () ; !-unique = λ _ () } }
; coproducts = record { coproduct = λ {A} {B} → record
{ A+B = A ⊎ B
; i₁ = inj₁
; i₂ = inj₂
; [_,_] = [_,_]
; inject₁ = λ _ → refl
; inject₂ = λ _ → refl
; unique = λ {C} {f} {c₁} {c₂} eq₁ eq₂ x → begin
[ c₁ , c₂ ] x ≡⟨ [,]-cong (λ x → sym (eq₁ x)) (λ x → sym (eq₂ x)) x ⟩
[ f ∘′ inj₁ , f ∘′ inj₂ ] x ≡⟨ sym ([,]-∘ f x) ⟩
(f ∘′ [ inj₁ , inj₂ ]) x ≡⟨ helper f x ⟩
f x ∎
} }
}
where
helper : ∀ {A} {B} {C} (f : A ⊎ B → C) (x : A ⊎ B) → (f ∘′ [ inj₁ , inj₂ ]) x ≡ f x
helper {A} {B} f (inj₁ a) = refl
helper {A} {B} f (inj₂ b) = refl