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
compiling exported domain : % -> SetCategory
Time: 0.05 SEC.
compiling exported codomain : % -> SetCategory
Time: 0 SEC.
compiling exported coerce : source -> target -> %
Adding SExpression modemaps
MORPH;coerce;M$;3 is replaced by r
Time: 0 SEC.
compiling exported coerce : % -> source -> target
Adding SExpression modemaps
MORPH;coerce;$M;4 is replaced by p
Time: 0.01 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
MORPH;coerce;$Of;5 is replaced by p
Time: 0.01 SEC.
compiling exported elt : (%,source) -> target
Adding SExpression modemaps
MORPH;elt;$sourcetarget;6 is replaced by SPADCALLxf
Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |Morphism| REDEFINED
;;; *** |Morphism| REDEFINED
Time: 0 SEC.
Cumulative Statistics for Constructor Morphism
Time: 0.08 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
; compiling file "/var/zope2/var/LatexWiki/MORPH.NRLIB/code.lsp" (written 14 OCT 2009 03:13:02 PM):
; compiling (/VERSIONCHECK 2)
; compiling (DEFUN |MORPH;domain;$Sc;1| ...)
; compiling (DEFUN |MORPH;codomain;$Sc;2| ...)
; compiling (PUT (QUOTE |MORPH;coerce;M$;3|) ...)
; compiling (DEFUN |MORPH;coerce;M$;3| ...)
; compiling (PUT (QUOTE |MORPH;coerce;$M;4|) ...)
; compiling (DEFUN |MORPH;coerce;$M;4| ...)
; compiling (PUT (QUOTE |MORPH;coerce;$Of;5|) ...)
; compiling (DEFUN |MORPH;coerce;$Of;5| ...)
; compiling (PUT (QUOTE |MORPH;elt;$sourcetarget;6|) ...)
; compiling (DEFUN |MORPH;elt;$sourcetarget;6| ...)
; compiling (DEFUN |Morphism| ...)
; compiling (DEFUN |Morphism;| ...)
; compiling (MAKEPROP (QUOTE |Morphism|) ...)
; /var/zope2/var/LatexWiki/MORPH.NRLIB/code.fasl written
; compilation finished in 0:00:00.174
------------------------------------------------------------------------
Morphism is now explicitly exposed in frame initial
Morphism will be automatically loaded when needed from
/var/zope2/var/LatexWiki/MORPH.NRLIB/code.fasl
The naive represetation of Rep == (source->target)
gives the
following error.
Error: Caught fatal error [memory may be damaged]?
...
Error signalled by EVALHOOK.
Backtrace: system:universal-error-handler > evalhook > lambda > lambda-closure > block > apply > APPLY
But using SExpression
seems to work.
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)
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)
axiom
g:Morphism(Integer,String):=(i:Integer):String +-> i::String
Type: Morphism(Integer,String)
axiom
g(1985)
Type: String
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
compiling exported morphism : R -> S -> %
Adding SExpression modemaps
HOM;morphism;M$;1 is replaced by f
Time: 0.03 SEC.
compiling exported elt : (%,R) -> S
Adding SExpression modemaps
HOM;elt;$RS;2 is replaced by SPADCALLrf
Time: 0.01 SEC.
Adding Boolean modemaps
compiling exported = : (%,%) -> Boolean
HOM;=;2$B;3 is replaced by EQ
Time: 0.01 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
Adding String modemaps
Time: 0.02 SEC.
(time taken in buildFunctor: 10)
;;; *** |Hom| REDEFINED
;;; *** |Hom| REDEFINED
Time: 0.01 SEC.
Cumulative Statistics for Constructor Hom
Time: 0.08 seconds
finalizing NRLIB HOM
Processing Hom for Browser database:
-- morphism : (R -> S) -> %
-- constructor
; compiling file "/var/zope2/var/LatexWiki/HOM.NRLIB/code.lsp" (written 14 OCT 2009 03:13:21 PM):
; compiling (/VERSIONCHECK 2)
; compiling (PUT (QUOTE |HOM;morphism;M$;1|) ...)
; compiling (DEFUN |HOM;morphism;M$;1| ...)
; compiling (PUT (QUOTE |HOM;elt;$RS;2|) ...)
; compiling (DEFUN |HOM;elt;$RS;2| ...)
; compiling (PUT (QUOTE |HOM;=;2$B;3|) ...)
; compiling (DEFUN |HOM;=;2$B;3| ...)
; compiling (DEFUN |HOM;coerce;$Of;4| ...)
; compiling (DEFUN |Hom| ...)
; compiling (DEFUN |Hom;| ...)
; compiling (MAKEPROP (QUOTE |Hom|) ...)
; /var/zope2/var/LatexWiki/HOM.NRLIB/code.fasl written
; compilation finished in 0:00:00.095
------------------------------------------------------------------------
Hom is now explicitly exposed in frame initial
Hom will be automatically loaded when needed from
/var/zope2/var/LatexWiki/HOM.NRLIB/code.fasl
axiom
p:=morphism((x:Integer):Float +-> x+1.0)$Hom(Integer,Float)
Type: Hom(Integer,Float)
axiom
p(2)
Type: Float
axiom
p(-1)
Type: Float