---
layout: default
file: "src/Setoid/Categories/Reduct.lagda.md"
title: "Setoid.Categories.Reduct module"
date: "2026-06-09"
author: "the agda-algebras development team"
---

### 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][Setoid.Categories.Algebra].
On objects it is [`reduct`][Setoid.Algebras.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`][Setoid.Algebras.Reduct], also a `Setoid/`
construction.  (Both were relocated from `Classical/` by
[ADR-006](../../docs/adr/006-signature-morphism-category.md), M4-16: reduct is universal
algebra, not classical, and depends on nothing in `Classical/`.)

<!--
```agda
{-# 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
```
-->

```agda
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 ]
    }
```