{-# 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