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)
domain(p:%):T == source
codomain(p:%):T == target
coerce(r:(source->target)):% == per(r)
coerce(p:%):(source->target) == p pretend (source->target)
coerce(p:%):OutputForm == p pretend OutputForm
--elt(f,x) == (f::(source->target))(x)
spad
Compiling OpenAxiom source code from file
/var/zope2/var/LatexWiki/2396666756253990559-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
Parameters of rep are of wrong type:
G1393 must have type source not $
compiling local rep : source -> source -> target
MORPH;rep is replaced by G1393
Time: 0.01 SEC.
compiling local per : source -> target -> %
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
MORPH;coerce;$M;6 is replaced by p
Time: 0 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
MORPH;coerce;$Of;7 is replaced by p
Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |Morphism| REDEFINED
;;; *** |Morphism| REDEFINED
Time: 0.01 SEC.
Cumulative Statistics for Constructor Morphism
Time: 0.02 seconds
--------------non extending category----------------------
Morphism(#1,#2) of category CATEGORY(domain,domain: % ->
SetCategory,codomain: % -> SetCategory,coerce: (#1 -> #2) -> %,
coerce: % -> (#1 -> #2),coerce: % -> OutputForm)
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(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/2396666756253990559-25px001.spad to see algebra source
code for MORPH
------------------------------- Operations --------------------------------
codomain : % -> SetCategory coerce : % -> (Float -> Integer)
coerce : % -> OutputForm coerce : (Float -> Integer) -> %
domain : % -> SetCategory
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)
There are no library operations named f
Use HyperDoc Browse or issue
)what op f
to learn if there is any operation containing " f " in its name.
Cannot find a definition or applicable library operation named f
with argument type(s)
Float
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
(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 this simpler representation work?
--Rep := (R -> S)
--morphism(f) == f(#1)
--elt(f, r) == (g := f pretend (R -> S); g(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("R -> S")
spad
Compiling OpenAxiom source code from file
/var/zope2/var/LatexWiki/5332529926464782427-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
compiling exported morphism : R -> S -> %
Adding Integer modemaps
Time: 0 SEC.
compiling exported elt : (%,R) -> S
Adding Integer modemaps
Time: 0.01 SEC.
Adding Boolean modemaps
compiling exported = : (%,%) -> Boolean
HOM;=;2$B;3 is replaced by EQ
Time: 0 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
Adding String modemaps
Time: 0.06 SEC.
(time taken in buildFunctor: 0)
;;; *** |Hom| REDEFINED
;;; *** |Hom| REDEFINED
Time: 0 SEC.
Cumulative Statistics for Constructor Hom
Time: 0.07 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