module algebra.monoid.morphism where
open import level
open import algebra.monoid.core
open import algebra.semigroup.morphism
open import equality.core
open import function.isomorphism
open import hott.level
open import sum
module _ {i}{j}
{X : Set i}⦃ sX : IsMonoid X ⦄
{Y : Set j}⦃ sY : IsMonoid Y ⦄ where
open IsMonoid ⦃ ... ⦄
record IsMonoidMorphism (f : X → Y) : Set (i ⊔ j) where
constructor mk-is-monoid-morphism
field
sgrp-mor : IsSemigroupMorphism f
id-pres : f e ≡ e
is-monoid-morphism-struct-iso : (f : X → Y)
→ IsMonoidMorphism f ≅ (IsSemigroupMorphism f × (f e ≡ e))
is-monoid-morphism-struct-iso f = record
{ to = λ mor → ( IsMonoidMorphism.sgrp-mor mor
, IsMonoidMorphism.id-pres mor )
; from = λ { (s , i) → mk-is-monoid-morphism s i }
; iso₁ = λ _ → refl
; iso₂ = λ _ → refl }
is-monoid-morphism-level : (f : X → Y) → h 1 (IsMonoidMorphism f)
is-monoid-morphism-level f =
iso-level (sym≅ (is-monoid-morphism-struct-iso f))
(×-level (is-semigroup-morphism-level f)
(is-set _ _))