axiom-developer
[Top][All Lists]

## [Axiom-developer] [Manipulating Expressions]

 From: Bill Page Subject: [Axiom-developer] [Manipulating Expressions] Date: Sun, 06 Nov 2005 20:20:30 -0600

Changes http://wiki.axiom-developer.org/ManipulatingExpressions/diff
--

Other Operations

The domain FunctionSpace includes the following operations::

isExpt(p,f:Symbol) returns [x, n] if p = x**n and n <> 0 and x = f(a)
isExpt(p,op:BasicOperator) returns [x, n] if p = x**n and n <> 0 and x =
op(a)
isExpt(p) returns [x, n] if p = x**n and n <> 0
isMult(p) returns [n, x] if p = n * x and n <> 0
isPlus(p) returns [m1,...,mn] if p = m1 +...+ mn and n > 1
isPower(p) returns [x, n] if p = x**n and n <> 0
isTimes(p) returns [a1,...,an] if p = a1*...*an and n > 1

If these conditions are not met, then the above operations
return "failed".

For example,
\begin{axiom}
isMult(3*x)
\end{axiom}
but
\begin{axiom}
isMult(x*y)
\end{axiom}

In the context of 'Expression Integer', or 'Polynomial Integer'
the parameter n must be an Integer. The Symbol 'y' is not an
'Integer'.

Not exactly analogously
\begin{axiom}
isPower(x**y)
\end{axiom}
whereas
\begin{axiom}
isPower(x**10)
\end{axiom}
In the first case the 'Integer' is assume to be 1.

We have:
\begin{axiom}
isTimes(x*y*z)
isPlus(x+y+z*y)
\end{axiom}

Whereas
\begin{axiom}
isTimes((x+y)*z)
\end{axiom}
That is because the expression is internally treated as a
'MultivariatePolynomial' like this:
\begin{axiom}
((x+y)*z)::MPOLY([x,y,z],INT)
\end{axiom}

If you say:
\begin{axiom}
isPlus((x+y)*z)
\end{axiom}
perhaps the result makes sense?

For some of the details of these operations I consulted the
actual algebra code at:

Click on 'pdf' or 'dvi' to see the documentation.

You can also enter expressions like 'isTimes' in the search box
on the upper right and see all the places in the algebra where
this operation is defined and used.

--