spad
)abbrev domain MORPH Morphism
T ==> SetCategory
Morphism(source:T, target:T): with
domain:%->T
codomain:%->T
coerce:(source->target) -> %
coerce:%->(source->target)
coerce:%->OutputForm
elt:(%,source)->target
== (source->target) add
-- Rep == (source->target)
Rep == SExpression
domain(p:%):T == source
codomain(p:%):T == target
coerce(r:(source->target)):% == per(r pretend SExpression)
coerce(p:%):(source->target) == (rep(p) pretend (source->target))
coerce(p:%):OutputForm == p pretend OutputForm
elt(f,x) == (rep(f) pretend (source->target))(x)
spad
Compiling OpenAxiom source code from file
/var/zope2/var/LatexWiki/6008188987750019428-25px001.spad using
Spad compiler.
MORPH abbreviates domain Morphism
processing macro definition T$ ==> SetCategory
------------------------------------------------------------------------
initializing NRLIB MORPH for Morphism
compiling into NRLIB MORPH
Adding $ modemaps
Adding source modemaps
Adding target modemaps
Adding Rep modemaps
Adding SExpression modemaps
compiling local rep : % -> SExpression
MORPH;rep is replaced by G1393
Time: 0 SEC.
compiling local per : SExpression -> %
MORPH;per is replaced by G1393
Time: 0 SEC.
compiling exported domain : % -> SetCategory
Time: 0 SEC.
compiling exported codomain : % -> SetCategory
Time: 0 SEC.
compiling exported coerce : source -> target -> %
Time: 0 SEC.
compiling exported coerce : % -> source -> target
Time: 0.06 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
MORPH;coerce;$Of;7 is replaced by p
Time: 0 SEC.
compiling exported elt : (%,source) -> target
Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |Morphism| REDEFINED
;;; *** |Morphism| REDEFINED
Time: 0 SEC.
Cumulative Statistics for Constructor Morphism
Time: 0.07 seconds
--------------non extending category----------------------
Morphism(#1,#2) of category CATEGORY(domain,domain: % ->
SetCategory,codomain: % -> SetCategory,coerce: (#1 -> #2) -> %,
coerce: % -> (#1 -> #2),coerce: % -> OutputForm,elt: (%,#1)
-> #2)
has no NIL
finalizing NRLIB MORPH
Processing Morphism for Browser database:
--->-->Morphism((domain (T$ %))): Not documented!!!!
--->-->Morphism((codomain (T$ %))): Not documented!!!!
--->-->Morphism((coerce (% (Mapping target source)))): Not documented!!!!
--->-->Morphism((coerce ((Mapping target source) %))): Not documented!!!!
--->-->Morphism((coerce ((OutputForm) %))): Not documented!!!!
--->-->Morphism((elt (target % source))): Not documented!!!!
--->-->Morphism(constructor): Not documented!!!!
--->-->Morphism(): Missing Description
------------------------------------------------------------------------
Morphism is now explicitly exposed in frame initial
Morphism will be automatically loaded when needed from
/var/zope2/var/LatexWiki/MORPH.NRLIB/code.o
If we define elt
(commented out above), then f(1.1)
gives the following:
Error: Caught fatal error [memory may be damaged]
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by RETURN.
Broken at APPLY. Type :H for Help.
BOOT>>
Error: The variable QUIT is unbound.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by EVALHOOK.
Backtrace: system:universal-error-handler > evalhook > lambda > lambda-closure > block > apply > APPLY
But the same coercion works in the interpreter.
axiom
)show Morphism(Float,Integer)
Morphism(Float,Integer) is a domain constructor.
Abbreviation for Morphism is MORPH
This constructor is exposed in this frame.
Issue )edit /var/zope2/var/LatexWiki/6008188987750019428-25px001.spad to see algebra source
code for MORPH
------------------------------- Operations --------------------------------
codomain : % -> SetCategory coerce : % -> (Float -> Integer)
coerce : % -> OutputForm coerce : (Float -> Integer) -> %
domain : % -> SetCategory ?.? : (%,Float) -> Integer
f:Morphism(Float,Integer)
Type: Void
axiom
f:=(x:Float):Integer +->wholePart(x)
; (DEFUN |*1;anonymousFunction;0;initial;internal| ...) is being compiled.
;; The variable |*1;anonymousFunction;0;initial;internal;MV| is undefined.
;; The compiler will assume this variable is a global.
Type: Morphism(Float,Integer)
axiom
f(1.1)
axiom
(f::(Float->Integer))(1.1)
axiom
domain f
axiom
codomain f
axiom
(f::(domain(f)->codomain(f)))(1.1)
Next let's study how this sort of thing is accomplished in a similar domain.
spad
)abbrev domain HOM Hom
++ Based on Automorphism by: Manuel Bronstein
++ Description:
++ Hom(R,S) is the domain of homomorphisms - Mapping(S,R).
Hom(R:SetCategory,S:SetCategory): Join(SetCategory, Eltable(R, S)) with
morphism: (R -> S) -> %
++ morphism(f) returns the non-invertible morphism given by f.
== add
-- Why doesn't the obvious representation just (R->S) work?
Rep == SExpression
morphism(f) == per(f pretend SExpression)
elt(f, r) == (rep(f) pretend (R->S))(r)
--Rep == List(R -> S)
--morphism(f) == per([f #1])
--elt(f, r) == (rep(f)(1))(r)
--Rep := ((R, Integer) -> S)
--morphism(f) == (#2; f(#1))
--elt(f, r) == (g := f pretend ((R, Integer) -> S); g(r, 1))
f = g == EQ(f, g)$Lisp
coerce(f:%):OutputForm == message("theMap ...")
spad
Compiling OpenAxiom source code from file
/var/zope2/var/LatexWiki/8077618115899383420-25px003.spad using
Spad compiler.
HOM abbreviates domain Hom
------------------------------------------------------------------------
initializing NRLIB HOM for Hom
compiling into NRLIB HOM
Adding $ modemaps
Adding R modemaps
Adding S modemaps
Adding Rep modemaps
Adding SExpression modemaps
compiling local rep : % -> SExpression
HOM;rep is replaced by G1441
Time: 0.01 SEC.
compiling local per : SExpression -> %
HOM;per is replaced by G1441
Time: 0 SEC.
compiling exported morphism : R -> S -> %
Time: 0 SEC.
compiling exported elt : (%,R) -> S
Time: 0.01 SEC.
Adding Boolean modemaps
compiling exported = : (%,%) -> Boolean
HOM;=;2$B;5 is replaced by EQ
Time: 0 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
Adding String modemaps
Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |Hom| REDEFINED
;;; *** |Hom| REDEFINED
Time: 0.01 SEC.
Cumulative Statistics for Constructor Hom
Time: 0.04 seconds
finalizing NRLIB HOM
Processing Hom for Browser database:
-- morphism : (R -> S) -> %
-- constructor
------------------------------------------------------------------------
Hom is now explicitly exposed in frame initial
Hom will be automatically loaded when needed from
/var/zope2/var/LatexWiki/HOM.NRLIB/code.o
axiom
p:=morphism((x:Integer):Float +-> x+1.0)$Hom(Integer,Float)
; (DEFUN |*1;anonymousFunction;1;initial;internal| ...) is being compiled.
;; The variable |*1;anonymousFunction;1;initial;internal;MV| is undefined.
;; The compiler will assume this variable is a global.
Type: Hom(Integer,Float)
axiom
p(2)
Type: Float
axiom
p(-1)
Type: Float