{-# OPTIONS --without-K --exact-split --safe #-}
open import Fragment.Equational.Theory
module Fragment.Equational.Coproduct (Θ : Theory) where
open import Fragment.Equational.Model Θ
open import Fragment.Algebra.Homomorphism (Σ Θ)
open import Level using (Level; Setω)
private
variable
a b c ℓ₁ ℓ₂ ℓ₃ : Level
module _
(A : Model {a} {ℓ₁})
(B : Model {b} {ℓ₂})
(A+B : Model {c} {ℓ₃})
where
record IsCoproduct : Setω where
field
inl : ∥ A ∥ₐ ⟿ ∥ A+B ∥ₐ
inr : ∥ B ∥ₐ ⟿ ∥ A+B ∥ₐ
_[_,_] : ∀ {d ℓ₄} (X : Model {d} {ℓ₄})
→ ∥ A ∥ₐ ⟿ ∥ X ∥ₐ
→ ∥ B ∥ₐ ⟿ ∥ X ∥ₐ
→ ∥ A+B ∥ₐ ⟿ ∥ X ∥ₐ
commute₁ : ∀ {d ℓ₄} {X : Model {d} {ℓ₄}}
→ {f : ∥ A ∥ₐ ⟿ ∥ X ∥ₐ}
→ {g : ∥ B ∥ₐ ⟿ ∥ X ∥ₐ}
→ X [ f , g ] ⊙ inl ≗ f
commute₂ : ∀ {d ℓ₄} {X : Model {d} {ℓ₄}}
→ {f : ∥ A ∥ₐ ⟿ ∥ X ∥ₐ}
→ {g : ∥ B ∥ₐ ⟿ ∥ X ∥ₐ}
→ X [ f , g ] ⊙ inr ≗ g
universal : ∀ {d ℓ₄} {X : Model {d} {ℓ₄}}
→ {f : ∥ A ∥ₐ ⟿ ∥ X ∥ₐ}
→ {g : ∥ B ∥ₐ ⟿ ∥ X ∥ₐ}
→ {h : ∥ A+B ∥ₐ ⟿ ∥ X ∥ₐ}
→ h ⊙ inl ≗ f
→ h ⊙ inr ≗ g
→ X [ f , g ] ≗ h