{-# OPTIONS --without-K --exact-split --safe #-}

open import Fragment.Algebra.Signature

module Fragment.Algebra.Homomorphism.Properties (Σ : Signature) where

open import Fragment.Algebra.Algebra Σ
open import Fragment.Algebra.Homomorphism.Base Σ
open import Fragment.Algebra.Homomorphism.Setoid Σ

open import Level using (Level)
open import Relation.Binary using (Setoid)

private
  variable
    a b c d ℓ₁ ℓ₂ ℓ₃ ℓ₄ : Level
    A : Algebra {a} {ℓ₁}
    B : Algebra {b} {ℓ₂}
    C : Algebra {c} {ℓ₃}
    D : Algebra {d} {ℓ₄}

id-unitˡ :  {f : A  B}  id  f  f
id-unitˡ {B = B} = Setoid.refl  B ∥/≈

id-unitʳ :  {f : A  B}  f  id  f
id-unitʳ {B = B} = Setoid.refl  B ∥/≈

⊙-assoc :  (h : C  D) (g : B  C) (f : A  B)
           (h  g)  f  h  (g  f)
⊙-assoc {D = D} _ _ _ = Setoid.refl  D ∥/≈

⊙-congˡ :  (h : B  C) (f g : A  B)
           f  g
           h  f  h  g
⊙-congˡ h _ _ f≗g =  h ∣-cong f≗g

⊙-congʳ :  (h : A  B) (f g : B  C)
           f  g
           f  h  g  h
⊙-congʳ _ _ _ f≗g = f≗g