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 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.01 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 SEC.
Cumulative Statistics for Constructor Morphism
Time: 0.01 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 AUTOMOR Automorphism
++ Author: Manuel Bronstein
++ Date Created: 31 January 1994
++ Date Last Updated: 31 January 1994
++ References:
++ Description:
++ Automorphism R is the multiplicative group of automorphisms of R.
-- In fact, non-invertible endomorphism are allowed as partial functions.
-- This domain is noncanonical in that f*f^{-1} will be the identity
-- function but won't be equal to 1.
Automorphism(R:Ring): Join(SetCategory, Eltable(R, R)) with
morphism: (R -> R) -> %
++ morphism(f) returns the non-invertible morphism given by f.
morphism: (R -> R, R -> R) -> %
++ morphism(f, g) returns the invertible morphism given by f, where
++ g is the inverse of f..
== add
iter: (R -> R, NonNegativeInteger, R) -> R
apply: (%, R, Integer) -> R
Rep := ((R, Integer) -> R)
f = g == EQ(f, g)$Lisp
apply(f, r, n) == (g := f pretend ((R, Integer) -> R); g(r, n))
elt(f, r) == apply(f, r, 1)
coerce(f:%):OutputForm == message("R -> R")
morphism(f:R -> R):% == iter(f, #2, #1)
iter(f, n, r) ==
for i in 1..n repeat r := f r
r
spad
Compiling OpenAxiom source code from file
/var/zope2/var/LatexWiki/3769892657891673976-25px003.spad using
Spad compiler.
AUTOMOR abbreviates domain Automorphism
------------------------------------------------------------------------
initializing NRLIB AUTOMOR for Automorphism
compiling into NRLIB AUTOMOR
Adding $ modemaps
Adding R modemaps
Adding Boolean modemaps
compiling exported = : (%,%) -> Boolean
AUTOMOR;=;2$B;1 is replaced by EQ
Time: 0.01 SEC.
Adding Integer modemaps
compiling local apply : (%,R,Integer) -> R
Time: 0 SEC.
compiling exported elt : (%,R) -> R
Adding Integer modemaps
Time: 0.01 SEC.
Adding OutputForm modemaps
compiling exported coerce : % -> OutputForm
Adding String modemaps
Time: 0.10 SEC.
compiling exported morphism : R -> R -> %
Adding Integer modemaps
Adding NonNegativeInteger modemaps
****** comp fails at level 2 with expression: ******
error in function morphism
(|iter| |f| | << #2 >> | |#1|)
****** level 2 ******
$x:= #2
$m:= $EmptyMode
$f:=
((((|f| # #) (|Rep| #) (|apply| #) (|iter| #) ...)))
>> Apparent user error:
Cannot coerce #2 of mode Integer to mode NonNegativeInteger
axiom
p:=morphism((x:Integer):Integer +-> x+1)$Automorphism(Integer)
; (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: Automorphism Integer
axiom
p(2)