On 9 jul, 16:36, William Stein <wst...@gmail.com> wrote:
> On Thu, Jul 9, 2009 at 1:34 AM, John Cremona<john.crem...@gmail.com> wrote:
>
> > I can see another problem here.    One could argue that the
> > denominator of (x+y)/2 was 2 while you code gives 1.  So the
> > documentation needs to be very clear, stating that the denominator of
> > ever polynomial in any number of variables over a field is always 1.
>
> > John
>
> John raises an extremely important and subtle point.  This is a
> *MAJOR* problem since currently we have
> {{{
> sage: R.<x> = QQ[]
> sage: denominator(x/2)
> 2}}}
>
> however you're proposing making it so
> {{{
> sage: R.<x,y> = QQ[]
> sage: denominator(x/2)
> 1
>
> }}}
>
> That's very worrisome, simply because it is inconsistent.  Either you
> change the existing code for univariate polynomials, hence break
> backwards compatible that can possibly result in subtle errors all
> over the place (in the sage library and in random user code "out
> there"), or you change the semantics of denominator for multivariate
> polynomials to be consistent with the semantics for univariate
> polynomials.
>
> For the record, Magma has a Denominator function that is defined for
> about 15-20 different types, but does not apply to multivariate
> polynomials.
>

Good point. The thing is not clear:

{{{
sage: R.<x>=QQ['x']
sage: denominator(x/2)
2
sage: denominator(R.fraction_field()(x/2))
1
}}}

Should it be the same result for univariate polynomials and the
coercion to univariate rational functions?

What are the reasons to implement denominator this way for univariate
polynomials?

I have to take a look to the logic behind this, there are further
problems (maybe another track)

{{{
sage: N.<a>=NumberField(x**2-5/2)
sage: denominator(1/a)
5
sage: numerator(1/a)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call
last)

/home/luisfe/.sage/temp/mychabol/4554/
_home_luisfe__sage_init_sage_0.py in <module>()

/opt/SAGE/sage/local/lib/python2.5/site-packages/sage/misc/
functional.pyc in numerator(x)
    686     if isinstance(x, (int, long)):
    687         return x
--> 688     return x.numerator()
    689
    690 def numerical_approx(x, prec=None, digits=None):

AttributeError: 'sage.rings.number_field.number_field_element_quadr'
object has no attribute 'numerator'
}}}

Even not every univariate polynomial ring has defined numerator

{{{
sage: R.<y>=N[]
sage: denominator(y)
1
sage: numerator(y)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call
last)

/home/luisfe/.sage/temp/mychabol/4554/
_home_luisfe__sage_init_sage_0.py in <module>()

/opt/SAGE/sage/local/lib/python2.5/site-packages/sage/misc/
functional.pyc in numerator(x)
    686     if isinstance(x, (int, long)):
    687         return x
--> 688     return x.numerator()
    689
    690 def numerical_approx(x, prec=None, digits=None):

AttributeError: 'Polynomial_generic_dense_field' object has no
attribute 'numerator'
}}}
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to