axiom-developer
[Top][All Lists]

## [Axiom-developer] [DistributedMultivariatePolynomial] substitution?

 From: Bill Page Subject: [Axiom-developer] [DistributedMultivariatePolynomial] substitution? Date: Mon, 27 Feb 2006 14:08:29 -0600

Changes http://wiki.axiom-developer.org/DistributedMultivariatePolynomial/diff
--
Wiliam Sit wrote::

S:=FRAC POLY INT
Q:=DMP([x], S)
a:Q:=x
b:Q:=a/a
...
signature:
((DMP([x],POLY INT) -> POLY INT),FRAC DMP([x],POLY INT)) -> FRAC POLY INT

... shows clearly that the coercion from 'DMP(['x'], FRAC POLY INT)'
to 'FRAC POLY INT' for the denominator a is really a substitution,
implemented using the map function from FRAC2 package, taking '1/x_Q'
to '1/x_S' via the substitution 'x_Q' to 'x_S'.

I do not understand why you call this a "substitution". Reading the
source code for FRAC2 we see that 'map' just applies the coercion::

(DMP([x],POLY INT) -> POLY INT)

to both the numerator and the denominator of some 'Fraction' to produce
another 'Fraction' over a different domain.

The critical thing here is the coercion. This coercion maps the members
and functions of 'DMP([x],POLY INT)' into members and functions of
'POLY INT'. In particular it maps '*' in DMP to '*' in POLY INT. As a
result the symbol 'x' used as both the polynomial variable and in the
coefficient domain 'DMP' are treated the same way as a polynomial
variable of 'POLY'.
For example:
\begin{axiom}
A1:=monomial(x,0)$DMP([x],POLY INT) degree A1 B1:=monomial(1,1)$DMP([x],POLY INT)
degree B1
(A1=B1)::Boolean
A2:=A1::POLY INT
B2:=B1::POLY INT
(A2=B2)::Boolean
\end{axiom}

This is just the same sort of thing that happens all the
time when we use a coercion to move from say, 'POLY INT' to
'EXPR INT'. There is no substitution going on here.
--