Skip to content

Setoid.Categories.Reduct

Reduct as a functor on algebras

This is the Setoid.Categories.Reduct module of the Agda Universal Algebra Library.

A signature morphism Ο† : SigMorphism 𝑆₁ 𝑆₂ induces a covariant functor reductF Ο† : Alg 𝑆₂ ⟢ Alg 𝑆₁ between the algebra categories. On objects it is reductΟ†; on a homomorphism it keeps the same underlying setoid map and transfers the 𝑆₂-homomorphism condition to 𝑆₁ by the ΞΊ-reindex β€” compatible at the 𝑆₁-symbol o is f's 𝑆₂-compatible at ΞΉ Ο† o, definitionally on the nose, because (o ^ reduct Ο† 𝑨) = (ΞΉ Ο† o ^ 𝑨) ∘ (_∘ ΞΊ Ο† o).

The functor laws are immediate: F-resp-β‰ˆ is the identity (the underlying maps are unchanged, and the hom-equality is pointwise on them), and identity / homomorphism hold by the codomain's refl (the underlying maps of both sides are the same β€” 𝒾𝒹 and βŠ™-hom are the identity map and function composition).

This functor lives in Setoid.Categories, alongside the rest of the category vocabulary; its object map reduct is Setoid.Algebras.Reduct, also a Setoid/ construction. (Both were relocated from Classical/ by ADR-006, M4-16: reduct is universal algebra, not classical, and depends on nothing in Classical/.)

{-# OPTIONS --cubical-compatible --exact-split --safe #-}

module Setoid.Categories.Reduct where

-- Imports from the Agda Standard Library ----------------------------
open import Data.Product                   using ( _,_ ; proj₁ ; projβ‚‚ )
open import Function                       using ( Func ; _∘_ ; id)
open import Level                          using ( Level )
open import Relation.Binary                using ( Setoid )

-- Imports from the Agda Universal Algebra Library ----------------------------
open import Overture                       using ( π“ž ; π“₯ ; Signature )
open import Overture.Signatures.Morphisms  using ( SigMorphism ; ΞΉ ; ΞΊ )
open import Setoid.Algebras.Basic          using ( 𝔻[_] )
open import Setoid.Algebras.Reduct         using ( reduct )
open import Setoid.Categories.Algebra      using ( Alg)
open import Setoid.Categories.Functor      using ( Functor )
open import Setoid.Homomorphisms.Basic     using ( IsHom ; mkIsHom)

open Func renaming ( to to _⟨$⟩_ )

private variable
  α ρ : Level

open IsHom
reductF : {𝑆₁ 𝑆₂ : Signature π“ž π“₯} (Ο† : SigMorphism 𝑆₁ 𝑆₂)
  β†’ Functor (Alg {𝑆 = 𝑆₂} Ξ± ρ) (Alg {𝑆 = 𝑆₁} Ξ± ρ)
reductF Ο† =
  record
    { Fβ‚€            = reduct Ο†
    ; F₁            = Ξ» f β†’  proj₁ f
                             , mkIsHom Ξ»{o a} β†’ compatible (projβ‚‚ f) {ΞΉ Ο† o} {a ∘ ΞΊ Ο† o}
    ; F-resp-β‰ˆ      = id
    ; identity      = Ξ» {𝑨} _ β†’ Setoid.refl 𝔻[ reduct Ο† 𝑨 ]
    ; homomorphism  = Ξ» {_} {_} {E} _ β†’ Setoid.refl 𝔻[ reduct Ο† E ]
    }