[Aldor-l] [open-axiom-devel] [fricas-devel] Re: coercion problem

Martin Rubey martin.rubey at univie.ac.at
Fri Nov 14 12:50:58 EST 2008


Ralf Hemmecke <ralf at hemmecke.de> writes:

> > UPOLYCoerce(A: UPOLYC, B: UPOLYC): with
> >         coerce: A -> B
> >     add
> >         coerce a ==
> >              resta := a
> >              res: B := 0
> >              while not zero? resta repeat
> >                  res := res + leadingCoefficient resta * leadingMonomial resta
> >                  resta := reductum resta
> >              res
> 
> > and this will provide a coercion function from any A to any B in UPOLYC
> 
> In other words, for any A and B you have a package that implements coerce:
> A->B. OK.
> 
> > but I cannot state that for any A and any B in UPOLYC
> 
> > A has CoercibleTo B
> 
> Now why do you think this is still important? Onces *you* have programmed
> UPOLYCoerce and you know that A: UPOLYC and B: UPOLYC then everything is clear
> and you can simply say (for a: A)
> 
> b: B := coerce(a)$UPOLYCoerce(A,B)
> 
> I see no need to require "A has CoercibleTo B". Perhaps, I still didn't get
> your point.

Well, I may want to code

  if A has CoercibleTo SparseUnivariatePolynomial R
  then ...

This will "work" only for those A for which I have explicitly stated
CoercibleTo SparseUnivariatePolynomial R.

In a different package, I may want to ask

  if A has CoercibleTo UnivariatePolynomial(x, R)
  then ...

Of course, this is not really a problem if there are only two or three
implementations of univariate polynomials, say A, B and C.  In A I say

with { CoercibleTo B; CoercibleTo C; }

in B I say

with { CoercibleTo A; CoercibleTo C; }

in C I say

with { CoercibleTo A; CoercibleTo B; }

But somehow, this looks suboptimal.

Martin




More information about the Aldor-l mailing list