In FriCAS Equalizer (See: LimitsAndColimits) can be defined as a
SubDomain as follows, but this does not work in the most recent
version of OpenAxiom
fricas
(1) -> )version
"FriCAS 1.3.12 compiled at Sat  7 Jun 23:54:49 CEST 2025"
which produces the error message:
  predicate =f(#1)g(#1) is not simple enough
spad
)abbrev domain EQLZR Equalizer
Equalizer(X:SetCategory,Y:SetCategory,f:X->Y, g:X->Y): SetCategory with
    eq: % -> X
  == SubDomain(X,f #1 = g #1) add
    --
    eq(x:%):X == x pretend X
)abbrev package EQLZF EqualizerFunctions
EqualizerFunctions(X:SetCategory,Y:SetCategory,f:X->Y,g:X->Y, M:SetCategory,m:M->X): with
    u: M->Equalizer(X,Y,f,g)
  == add
    --
    u(x:M):Equalizer(X,Y,f,g) == m(x) pretend Equalizer(X,Y,f,g)
spad
   Compiling FriCAS source code from file 
      /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/3871883559109604243-25px002.spad
      using old system compiler.
   EQLZR abbreviates domain Equalizer 
------------------------------------------------------------------------
   initializing NRLIB EQLZR for Equalizer 
   compiling into NRLIB EQLZR 
   compiling exported eq : % -> X
      EQLZR;eq;%X;1 is replaced by x 
Time: 0 SEC.
(time taken in buildFunctor:  0)
Time: 0 SEC.
   Cumulative Statistics for Constructor Equalizer
      Time: 0 seconds
   finalizing NRLIB EQLZR 
   Processing Equalizer for Browser database:
--->-->Equalizer(constructor): Not documented!!!!
--->-->Equalizer((eq (X %))): Not documented!!!!
--->-->Equalizer(): Missing Description
; compiling file "/var/aw/var/LatexWiki/EQLZR.NRLIB/EQLZR.lsp" (written 10 AUG 2025 08:28:36 AM):
; wrote /var/aw/var/LatexWiki/EQLZR.NRLIB/EQLZR.fasl
; compilation finished in 0:00:00.008
------------------------------------------------------------------------
   Equalizer is now explicitly exposed in frame initial 
   Equalizer will be automatically loaded when needed from 
      /var/aw/var/LatexWiki/EQLZR.NRLIB/EQLZR
   EQLZF abbreviates package EqualizerFunctions 
------------------------------------------------------------------------
   initializing NRLIB EQLZF for EqualizerFunctions 
   compiling into NRLIB EQLZF 
   compiling exported u : M -> Equalizer(X,Y,f,g)
Time: 0 SEC.
(time taken in buildFunctor:  0)
Time: 0 SEC.
   Cumulative Statistics for Constructor EqualizerFunctions
      Time: 0 seconds
   finalizing NRLIB EQLZF 
   Processing EqualizerFunctions for Browser database:
--->-->EqualizerFunctions(constructor): Not documented!!!!
--->-->EqualizerFunctions((u ((Equalizer X Y f g) M))): Not documented!!!!
--->-->EqualizerFunctions(): Missing Description
; compiling file "/var/aw/var/LatexWiki/EQLZF.NRLIB/EQLZF.lsp" (written 10 AUG 2025 08:28:36 AM):
; wrote /var/aw/var/LatexWiki/EQLZF.NRLIB/EQLZF.fasl
; compilation finished in 0:00:00.008
------------------------------------------------------------------------
   EqualizerFunctions is now explicitly exposed in frame initial 
   EqualizerFunctions will be automatically loaded when needed from 
      /var/aw/var/LatexWiki/EQLZF.NRLIB/EQLZFfricas
)show Equalizer(Float,Float,sin,cos)
 Equalizer(Float,Float,theMap(FLOAT;sin;2%;10,186),theMap(FLOAT;cos;2%;12,186)) is a domain constructor.
 Abbreviation for Equalizer is EQLZR 
 This constructor is exposed in this frame.
 5 names for 5 operations in this domain.
------------------------------- Operations --------------------------------
 ?=? : (%, %) -> Boolean               coerce : % -> OutputForm
 eq : % -> Float                       latex : % -> String
 ?~=? : (%, %) -> Boolean