On 16 Feb., 10:43, Manuel Kauers <man...@kauers.de> wrote:
> Hi there,
>
> here are some bugs which may or may not be already known. If they are
> new, could you please file them wherever such bugs need to be filed? Or
> if they are not bugs but wrong usage, could you explain to me what I
> should type instead?
>
> I am still working with version 4.7.1, so some remarks might be obsolete
> already. (Sorry about that.)
>
> 1.  When I have rational functions over a field [or over an integral
> domain], I expect that the denominator is made monic [or the content of
> numerator and denominator coprime]. This is not always happening. For
> example:
>
> sage: R.<x> = QQ[]
> sage: (2*x+4)/(4*x-8)
> (2*x + 4)/(4*x - 8)  # bad
> sage: R.<x> = ZZ[]
> sage: (2*x+4)/(4*x-8)
> (x + 2)/(2*x - 4)  # good
>
> Although mathematically correct, I consider this as a bug, because not
> bringing rational functions to normal form can easily lead to ridiculous
> expression swell. For example:
>
> sage: R1.<x> = QQ[]
> sage: R2.<y> = R1.fraction_field()[]
> sage: K = R2.fraction_field()
>
> sage: def canonic(rat):
>      num, den = rat.numerator(), rat.denominator()
>      clear = lcm(num.denominator(), den.denominator())
>      num, den = num*clear, den*clear
>      clear = map(lambda p: p.numerator().coeffs(), \
>                  num.coeffs() + den.coeffs())
>      clear = lcm([a.denominator() for b in clear for a in b])
>      num, den = num*clear, den*clear
>      x = rat.parent().gen()
>      t = rat.parent().base_ring().gen()
>      return rat.parent()(ZZ[t,x](num)/ZZ[t,x](den))
>
> sage: d = K.random_element().derivative(y).derivative(x);
> sage: len(str(d))
> 919274
> sage: len(str(canonic(d)))
> 8371
>
> 2.  A coercion problem?
>
> sage: K = QQ[x].fraction_field()
> sage: R.<y> = K[]
> sage: S = QuotientRing(R, R.ideal(y^2-(x^2+1)))
> sage: ybar = S.gen()
> sage: S(y) # works
> ybar
> sage: 1/ybar # works
> (-1/(-x^2 - 1))*ybar
> sage: S(1/y) # doesn't work
> *** output flushed ***
> TypeError: denominator must be a unit
>
> 3.  Another coercion problem?
>
> sage: R0 = QQ['t'].fraction_field(); t = R0.gen()
> sage: R1 = R0['x'].fraction_field(); x = R1.gen()
> sage: R2 = R1['y']; y = R2.gen()
> sage: R = QuotientRing(R2, R2.ideal(y^2-(x+t)))
> sage: ybar = R.gen()
> sage: ybar^2 # works
> x + t
> sage: ybar + x # works
> ybar + x
> sage: ybar * x # doesn't work
> *** output flushed ***
> NotImplementedError:
> sage: ybar*R(x) # works
> x*ybar
>
> 4.  A bug in LCM:
>
> sage: u = QQ['u'].gen(); v = QQ[u].fraction_field()['v'].gen()
> sage: pol = ((u^2 - u - 1)/(-1/5*u^2 - u - 1))*v^2 + ((4/9*u^2 -
> 1/2)/(1/2*u - 2))*v + (2*u^2 - 1/2*u - 1/3)/(-2*u^2 - 5*u - 1/2)
> sage: lcm(pol, 1)
> *** output flushed ***
> TypeError: denominator must be a unit
>
> 5.  The universe of a factorization cannot be changed if the
> factorization happens to be empty.
>
> sage: factor(2).base_change(ZZ['t','x']).universe()
> Multivariate Polynomial Ring in t, x over Integer Ring # correct
> sage: factor(1).base_change(ZZ['t','x']).universe()
> Integer Ring # incorrect
>
> 6.  Resultants for elements of Quot(ZZ[t])[x,y] crash.
>
> sage: K = ZZ['t'].fraction_field(); t = K.gen()
> sage: R = K['x', 'y']; x,y = R.gens()
> sage: R.random_element().resultant(R.random_element(), y)
> *** Output flushed ***
> TypeError: denominator must be a unit
>
> 7.  Nullspace for matrices over finite fields is unreasonably slow
>
> sage: M = MatrixSpace(GF(2^31-1), 1000, 1001).random_element();
> sage: %time M.right_kernel();
> CPU times: user 165.71 s, sys: 0.01 s, total: 165.73 s
> Wall time: 166.20 s
>
> Mathematica does this almost 20 times as fast:
>
> In[5]:= mat = Table[RandomInteger[{0,2^31-1}], {n,0,1000},{k,0,1001}];
> In[6]:= Timing[NullSpace[mat, Modulus -> 2^31-1];]
> Out[6]= {8.98856, Null}
>
> And here is a wish list of some things that I would find convenient to
> have, but didn't find.
>
> 1.  a method .derivative for quotient ring elements, with which
> algebraic functions can be differentiated.
>
> 2.  a method Factorization.square_free_part
>
> 3.  a possibility to specify a variable in the method .minpoly for
> quotient ring elements. It is confusing that this method takes 'x' as
> variable for the minimal polynomial even if there is already an 'x' in
> the ground field.
>
> Thanks & best regards,
> Manuel

*bump*

I some of those are real "bugs" I could copy over these examples to
tickets on Sage Trac. Or do you want to create an account and file
those tickets yourself which would be preferable?.

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to