| 1 | initial version |
First off, the code appears to be incomplete as neither R nor x is defined. Per textual description, the set-up should be
P.<t2,t3,t4,t5> = PolynomialRing(QQ)
S.<q> = PowerSeriesRing(P, default_prec=2)
R.<x> = PolynomialRing(S)
Next, the discriminant can be computed directly as p.discriminant().
Finally, there seems to be a misunderstanding of what default precision is. Per documentation:
default_prec– the default precision used if an exact object must be changed to an approximate object in order to do an arithmetic operation. [...] The default precision is specified at construction, but does not bound the precision of created elements.
In your code, the coefficients of p are specified as exact and thus have infinite precision. Hence, the discriminant is not computed modulo q^2 but exactly, In order to perform computation modulo q^2, the precision of the coefficients has to be changed to 2 first:
p.map_coefficients(lambda t: t.add_bigoh(2)).discriminant()
which instantly returns O(q^10).
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.