I wrote:
> 
> Gabriel Dos Reis wrote:
> > 
> > Waldek Hebisch <[email protected]> writes:
<snip>
> > | 
> > |      new : (NonNegativeInteger, S) -> %
> > | 
> > | So the first argument to 'new' must be 'NonNegativeInteger' and the
> > | second must be '%'.
> > 
> >   1. new, expects its second *argument* to be of type %.  It does not
> >      require that there be no implicit coercion between the argument
> >      as lexically written in the source code, and the actual code
> >      generated for that argument.  If one thinks that the mere presence of
> >      the parameter "Rep" indicates that is the representation domain,
> >      therefore the implicit coercion from Rep to % is OK, then 0@Rep is
> >      a good viable candidate. 
> > 
> >   2. Fortunately, in this case, 0@% is also defined explicitly to be 
> >      0$Rep, but there is no requirement that be the case.  And when
> >      it is not, we get a problem.
> 
> Actually 13.6 says that '%' take precedence over 'Rep', so this one
> is excluded.
>  
> >   3. ModMonic(R,Rep) satisfies UnivariatePolynomialCategory(R), so that
> >      means that there is alsoanother implicit coercion that turns
> >      0@R into a legitimate value of type %.
> > 
> >   4. Similar reasoning holds for 0@Integer because % satisfies Ring,
> >      and there is an implicit coercion from Integer to any domain that
> >      satisfies Ring.
> > 
> >   5. Since NonNegativeInteger is a subdomain of Integer, it also
> >      provides an implicit coercion.
> > 
> > So, in fact if one thinks that the mere presense of the parameter Rep is
> > sufficient to indicate representation domain and therefore implicit
> > coercions, then we have a legitimate case of ambiguity.
> 
> OK, if you think about exact operations used to produce 0, then
> there is really ambiguity.  However, IMO coercions are supposed
> to be homomorphims, so each of ways should lead to 0 in '%'.
> 

A little correction: when checking if selected modemap
is applicable compiler tries to coerce obtained result
 to requested type.  AFAICS compiler only will succeed
coercing '%' to '%' and 'Rep' to '%'.  I am not sure if
hacks to prefer '%' over 'Rep' work in this case.  If yes
then there is no ambiguity in choice of operations.
If no, maybe we should fix compiler to choose '%' (given that
this preference is documented).

Also, if chooses representation which has 0 different than
0 in %, then it is probably better not to specify Rep at
all.

-- 
                              Waldek Hebisch
[email protected] 

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/fricas-devel?hl=en.

Reply via email to