Symbolic Integers A simple form of symbolic computation using just Variable and Integer. fricas a:Union(Variable a, Type: Voidfricas b:Union(Variable b, Type: Voidfricas c:=a*3-b*2
Type: Polynomial(Integer)fricas p:UP(x,
fricas pc := p c
Type: Fraction(Polynomial(Integer))fricas f(x)==x^3-x^2+1 Type: Voidfricas fb := f b fricas Compiling function f with type Variable(b) -> Polynomial(Integer)
Type: Polynomial(Integer)fricas a:=1
Type: Union(Integer,fricas b:=-3
Type: Union(Integer,fricas c
Type: Polynomial(Integer)fricas eval(pc,
Type: Fraction(Polynomial(Integer))fricas eval(c,
Type: Polynomial(Integer)fricas eval(fb,
Type: Polynomial(Integer)fricas a:=3.14 -- not permitted! For more complex cases it is necessary to define a new domain of "indeterminants". These are symbols and unevaluated expressions that can be evaluated at a later time. This domain is modeled after InputForm which provides all of the basic functionality. spad )abbrev domain INDET Indeterminant ++ Description: ++ This domain provides basic support for symbols and unevaluated expressions ++ Based on InputForm -- Author: Bill Page Indeterminant(): Join(SExpressionCategory(String, spad Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/2122500948687555929-25px002.spad using old system compiler. INDET abbreviates domain Indeterminant ------------------------------------------------------------------------ initializing NRLIB INDET for Indeterminant compiling into NRLIB INDET Symbolic Matrices fricas )clear all fricas m:Union(Indeterminant, fricas )clear all fricas d: Union(Variable d, Type: Voidfricas d*2
Type: Polynomial(Integer)will be problematic, and the assignment between symbolic integers is not allowed. fricas a: Union(Variable a, Type: Voidfricas b: Union(Variable b, Type: Voidfricas b:=aI agree that the type `Union(Variable d,Integer)` alone is not
sufficient for symbolic computation. But although it might look
strange, in fact a result of `Polynomial Integer` for `2*d` is
not really a problem. Remember that the use of `Integer` in
`Polynomial Integer` does not mean that evaluation of the
polynomial yields an `Integer` - it means only that the domain
of the coefficients of the polynomial are integers (i.e. that
2 is an integer), it says nothing about 'd':
fricas p:=2*d
Type: Polynomial(Integer)fricas eval(p,
Type: Polynomial(Float)But there is still a problem since I can write: fricas a:Union(Variable a, Type: Voidfricas a:=3.14 and Axiom does not complain about the In the case of the example `b:=a` should mean. Does it mean that `Variable(b)`
is to be assigned the Symbol `a` ? If so then I think the type should
admit this possibility. E.g.
fricas c:Union(Variable(c), Type: Voidfricas c:=a
Type: Union(Symbol,PS: In the light of polynomial, (2 b:=a is meaningless, of course. But there are many scenarios fricas )clear all fricas i:=10
Type: PositiveInteger?fricas a: Union(Variable a, Type: Voidfricas b: Union(Variable b, Type: Voidfricas b:= (i>0=>1; a)
Type: Union(Integer,which is meaningful. Be careful,`Expression Float` may not be what you think it is.
In Axiom `Expression R` is a domain constructor which extends
rational functions with coefficients in R (Fraction Polynomial R)
by adding a set of common operators, e.g. `sin` , `sqrt` , etc.
Again the appearance of `Float` here does not say anything
specific about the result of evaluating the expression or even
the values that can be associated with it's generators. I do
not know why one might prefer `Expression Float` over
`Polynomial Float` or even `Polynomial Integer` .
We wish to place a restriction on the possible values that
certain symbols can take. Such symbols and expressions formed
from them certainly cannot live in a numeric domain such as
Float. Except in certain circumstances (mentioned previously)
I think a domain such as But 1) What is And 2) How can I express the concept of "non-zero polynomial"
in Axiom? I might use a domain that does not include zero for
example Ok, back to my own point. what's the justification of that the multiplication of two floats returns a polynomial float? Even the value is unknown, the type is certain, and float is closed under multiplication, so the return must be still a float, right? AFAIK, Axiom currently support only polynomials with coefficients of known values. Then the only zero-polynomial(Integer) is 0$Polynomial Integer, others are non-zero polynomials. The multiplication of a Float and some unknown symbolic value must produce a symbolic expression of some kind. If we know that the currently unknown symbolic value can only take values from Float, then we can deduce from knowledge of multiplication in Float that the value of the symbolic expression representing the multiplication of a Float with this unknown symbolic value must also only take values from Float.But Axiom currently does not have any domain whose values are symbolic expressions which only evaluate to values in some specific domain. Polynomial is one of the existing domains in Axiom whose values are symbolic expressions (of a very specific type). Symbolic expression in the domain Expression are more general but still rather restricted in form. Finally there is InputForm which consists of fully unevaluated expressions of the most general form allowed in Axiom. Perhaps what you have called "Symbolic Float" could be implemented as an extension of the domain I called "Indeterminant" above. *yixin.cao wrote:*- the only zero-polynomial(Integer) is 0$Polynomial Integer, others are non-zero polynomials.
But a polynomial containing at least one monomial term is symbolic. Certain combinations of values substituted for the symbols may result in zero (such values are called is "solution"). *yixin.cao wrote:*- In the light of polynomial, (2d) is a non-zero polynomial, so that it's always safe to write (1/(2d))
If a value of 0 is subsituted for d in this "non-zero polynomial"
then in what sense is For the second question: Yes, polynomial (x-1) might be evaluated to 0 (all of Integer,Float,Complex?), but this doesn't change the matter of (x-1) is not a zero-polynomial. Well, do you think (x**2-1)/(x-1) = (x+1) is legal and guaranteed in the domain of polynomial? But it's not in the domain of Float/Integer. You don't want to modify the rule of polynomial to accommodate this, right? The polynomial 0, which may be considered to have no terms at all, is called the zero polynomial. (from http://en.wikipedia.org/wiki/Polynomial) "But Axiom currently does not have any domain whose values are symbolic expressions which only evaluate to values in some specific domain" This statement is not the justification of picking one domain that is closest to the requirement and using it, but a justification of making one.Domain "Indeterminant" is a good example for this, thanks. Yes,fricas x:Polynomial Float Type: Voidfricas p:=(x^2-1)/(x-1)
Type: Fraction(Polynomial(Float))fricas eval(p,
Type: Fraction(Polynomial(Float))is certainly legal and safe in the domain of polynomial
where the result is required to be a polynomial although it
seems that Axiom is being careful to give the result type
as Do you agree that it is not safe if all we know about In this case a domain like fricas )library INDET Type: Voidfricas q:=(w^2-1)/(w-1)This is the reasonable result most users can expect. |

Questions--yixin.cao, Mon, 07 Jul 2008 10:36:24 -0700 reply