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

module Fragment.Setoid.Morphism.Properties where

open import Fragment.Setoid.Morphism.Base
open import Fragment.Setoid.Morphism.Setoid

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

private
  variable
    a b c d ℓ₁ ℓ₂ ℓ₃ ℓ₄ : Level
    A : Setoid a ℓ₁
    B : Setoid b ℓ₂
    C : Setoid c ℓ₃
    D : Setoid 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