In OpenAxiom one should be able to write a function that returns a 'Category':
but we get the error message:
Internal Error
Interpreter code generation failed for expression
(IF (= |#1| 0) |SetCategory| |Type|)
This is ok for functions that return 'Domain':
Axiom Version: => /usr/local/lib/open-axiom/x86_64-unknown-linux/1.2.0-2008-05-25
Because the function of categories is to oversee domains,
it is much much harder to have category valued functions
with the current compilation scheme.
However, in the interpreter we should probably try to
accomodate for as much as we can because we can also
do a small step semantics, e.g. interpret literally the codes.
Going back to your problem, an issue here is with what the type of
Type should be. Currently, OpenAxiom says that Type has type Type,
instead of Category:
Another option might be to say that Type has type Category. That
would make your function OK. Note that the following works fine
?; Ring)
ST2 0
ST2 1
" class="equation" src="images/5108590959715763747-16.0px.png" width="374" height="52"/>
Bill, your original example now works.
Something is still inconsistent here:
(1) -> ST(x:Integer):Category == (x=0 => SetCategory;Type)
Function declaration ST : Integer -> Category has been added to
workspace.
Type: Void
(2) -> A:=ST(0)
Compiling function ST with type Integer -> Category
;;; *** |*1;ST;1;frame1392| REDEFINED
; (DEFUN |*1;ST;1;frame1392| ...) is being compiled.
;; The variable |*1;ST;1;frame1392;MV| is undefined.
;; The compiler will assume this variable is a global.
(2) SetCategory
Type: Category
(3) -> B:=ST(1)
(3) Type
Type: Category
(4) -> C:Category
Category is a category, not a domain, and declarations require
domains.
(4) -> C:Category:=Ring
Category is a category, not a domain, and declarations require
domains.
(4) -> C:=Ring
(4) Ring
Type: Category
(5) -> )display type C
Type of value of C: Category
(5) -> X:Domain:=Ring -- Ring is not a domain
(5) Ring
Type: Category
-------
If the type of a category-valued variable can be implicitly
made to be Category
, it should also be possible to declare
this to be so.
well, that is the original restriction I inherited :-)
Status: open => fixed somewhere
The code generation failure is fixed. So, I don't
think is an issue any more.
Status: fixed somewhere => closed
This is OpenAxiom specific issue that is fixed.
Some or all expressions may not have rendered properly,
because Axiom returned the following error:
Error: export AXIOM=/usr/local/lib/open-axiom/x86_64-unknown-linux/1.2.0-2008-05-25; export ALDORROOT=/usr/local/aldor/linux/1.1.0; export PATH=PATH; export HOME=/var/zope2/var/LatexWiki; ulimit -t 240; $AXIOM/bin/AXIOMsys < /var/zope2/var/LatexWiki/2099996685253644054-25px.axm
/bin/sh: /usr/local/lib/open-axiom/x86_64-unknown-linux/1.2.0-2008-05-25/bin/AXIOMsys: not found