---
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
open import Data.Product using ( _,_ ; projβ ; projβ )
open import Function using ( Func ; _β_ ; id)
open import Level using ( Level )
open import Relation.Binary using ( Setoid )
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 ]
}
```