FWIW that's what Piranha does as well:
polynomial<integer,k_monomial> x{"x"};
// This will print "1".
std::cout << std::is_same<decltype(x +
1/2_q),polynomial<rational,k_monomial>>::value << '\n';
On 1 October 2015 at 21:35, Bill Page <[email protected]> wrote:
> In FriCAS
>
> (1) -> x:Polynomial(Integer)
> Type:
> Void
> (2) -> x + 1/2
>
> 1
> (2) x + -
> 2
> Type:
> Polynomial(Fraction(Integer))
>
> On 1 October 2015 at 15:28, 'Bill Hart' via sage-devel
> <[email protected]> wrote:
> >
> >
> > On 1 October 2015 at 20:23, William Stein <[email protected]> wrote:
> > <SNIP>
> >
> >> By the way, look at how coercion "works" in Magma:
> >>
> >> $ magma
> >> Magma V2.18-5 Thu Oct 1 2015 16:59:12 on compute3-us [Seed =
> >> 629019987]
> >> Type ? for help. Type <Ctrl>-D to quit.
> >> > R<x> := PolynomialRing(IntegerRing());
> >> > x + 1/2;
> >>
> >> >> x + 1/2;
> >> ^
> >> Runtime error in '+': Bad argument types
> >> Argument types given: RngUPolElt[RngInt], FldRatElt
> >
> >
> > We are call this "complex coercion" in our Nemo discussions
> >
> > [...as opposed to simple coercion:
> >
> > R, x = PolynomialRing(QQ, "x")
> > K, a = NumberField(x^3 + 3x + 1,"a")
> >
> > a + 1/2 # simple coercion since the result lives in K
> > ]
> >
> > It's definitely quite easy to add complex coercion in Nemo/Julia (via
> Julia
> > generic catchall functions), but I'm resisting it quite obstinately for
> the
> > time being.
> >
> > One reason is that it easily leads to functions that are not
> > type-consistent. You can quite easily write functions whose output type
> > depends on the values, rather than the types of the inputs. This
> completely
> > screws with type inference and Jit compilation, though Julia does allow
> it.
> >
> > Since Nemo focuses on highly performant generics for the time being, I'm
> > trying to avoid introducing complex coercions, at least until we have a
> very
> > fast core. (Though naturally, mathematicians are keen to introduce this
> > feature as soon as possible, since it is basically germane to any real
> > mathematics.)
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sage-devel.
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.