#11239: Incorrect coercion of polynomials over finite fields
-------------------------------------------------+-------------------------
Reporter: johanbosman | Owner: robertwb
Type: defect | Status:
Priority: major | needs_review
Component: coercion | Milestone:
Keywords: finite fields, polynomials, | sage-5.11
coercion | Resolution:
Authors: pbruin | Merged in:
Report Upstream: N/A | Reviewers:
Branch: | Work issues:
Stopgaps: | Dependencies: #8335
-------------------------------------------------+-------------------------
Changes (by pbruin):
* status: needs_work => needs_review
Old description:
> Trying to coerce a polynomial over a finite field into a polynomial ring
> over a bigger field gives a bogus result:
>
> {{{
> sage: Fq.<a> = GF(5^2)
> sage: Fqq.<b> = GF(5^4)
> sage: f = Fq['x'].random_element(); f
> 3*x^2 + (a + 4)*x + 2*a + 4
> sage: Fqq['y'](f)
> 3*y^2 + (b + 4)*y + 2*b + 4
> }}}
> In this example, Sage simply replaces every ‘a’ with ‘b’, but a is not b.
> If we coerce directly from Fq to Fqq, we get a `NotImplementedError`,
> which is unfortunate but in any case not incorrect. ;).
>
> {{{
> sage: Fqq(a)
> …
> /usr/local/share/sage/sage/local/lib/python2.6/site-
> packages/sage/rings/finite_rings/finite_field_givaro.pyc in
> _coerce_map_from_(self, R)
> 348 elif self.degree() % R.degree() == 0:
> 349 # This is where we *would* do coercion from
> one nontrivial finite field to another...
> --> 350 raise NotImplementedError
> 351
> 352 def gen(self, n=0):
>
> NotImplementedError:
> }}}
>
> Apply: [attachment:trac_11239-polynomial_coercion_preliminary.patch]
New description:
Trying to coerce a polynomial over a finite field into a polynomial ring
over a bigger field gives a bogus result:
{{{
sage: Fq.<a> = GF(5^2)
sage: Fqq.<b> = GF(5^4)
sage: f = Fq['x'].random_element(); f
3*x^2 + (a + 4)*x + 2*a + 4
sage: Fqq['y'](f)
3*y^2 + (b + 4)*y + 2*b + 4
}}}
In this example, Sage simply replaces every ‘a’ with ‘b’, but a is not b.
If we coerce directly from Fq to Fqq, we get a `NotImplementedError`,
which is unfortunate but in any case not incorrect. ;).
{{{
sage: Fqq(a)
…
/usr/local/share/sage/sage/local/lib/python2.6/site-
packages/sage/rings/finite_rings/finite_field_givaro.pyc in
_coerce_map_from_(self, R)
348 elif self.degree() % R.degree() == 0:
349 # This is where we *would* do coercion from
one nontrivial finite field to another...
--> 350 raise NotImplementedError
351
352 def gen(self, n=0):
NotImplementedError:
}}}
Apply: [attachment:trac_11239-polynomial_coercion_preliminary.patch],
[attachment:trac_11239-polynomial_zz_pex.patch]
--
Comment:
Fixing the NTL polynomial constructor turned out to be easy. With the
second patch, polynomials over compatible finite fields (#8335) coerce
correctly, and trying to convert polynomials over non-compatible finite
fields raises a `TypeError`, as it should.
--
Ticket URL: <http://trac.sagemath.org/ticket/11239#comment:11>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" 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-trac.
For more options, visit https://groups.google.com/groups/opt_out.