#8722: S-units sometimes broken and sometimes just plain wrong for relative
fields
-----------------------------+----------------------------------------------
Reporter: davidloeffler | Owner: davidloeffler
Type: defect | Status: new
Priority: major | Milestone: sage-5.0
Component: number fields | Keywords:
Author: | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
-----------------------------+----------------------------------------------
Description changed by davidloeffler:
Old description:
> {{{
> sage: L.<a,b> = NumberField([x^2 + 1, x^2 - 5])
> sage: p = L.ideal((-1/2*b - 1/2)*a + 1/2*b - 1/2)
> sage: p.absolute_norm()
> 9
> sage: p.is_prime()
> True
> sage: W = L.S_units([p]); W
> [1/2*a + 7/4, a, 1/2*b - 1/2]
> sage: W[0].valuation(L.primes_above(2)[0])
> -4
> }}}
> So the first element of the list of S-units isn't actually an S-unit! In
> other examples the code just blows up, because it calls
> {{{residue_field}}} and that dies because of #8721:
> {{{
> sage: L.<a, b> = NumberField([polygen(QQ)^2 - 3, polygen(QQ)^2 - 5])
> sage: L.S_units([L.ideal(a)])
> }}}
> This is arguably less bad: raising an error is far better than silently a
> wrong answer.
New description:
The code for S-unit groups of number fields calls the {{{degree}}} method.
For relative number fields this deliberately returns an error, because of
the ambiguity between absolute and relative degree.
{{{
sage: L.<a,b> = NumberField([x^2 + 1, x^2 - 5])
sage: sage: p = L.ideal((-1/2*b - 1/2)*a + 1/2*b - 1/2)
sage: sage: W = L.S_units([p]); W
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call
last)
...
NotImplementedError: For a relative number field you must use
relative_degree or absolute_degree as appropriate
}}}
In this case I think it should be absolute_degree, but changing this
returns wrong output:
{{{
sage: L.<a,b> = NumberField([x^2 + 1, x^2 - 5])
sage: p = L.ideal((-1/2*b - 1/2)*a + 1/2*b - 1/2)
sage: p.absolute_norm()
9
sage: p.is_prime()
True
sage: W = L.S_units([p]); W
[1/2*a + 7/4, a, 1/2*b - 1/2]
sage: W[0].valuation(L.primes_above(2)[0])
-4
}}}
So the first element of the list of S-units isn't actually an S-unit!
In other examples the code just blows up, because it calls
{{{residue_field}}} and that dies because of #8721:
{{{
sage: L.<a, b> = NumberField([polygen(QQ)^2 - 3, polygen(QQ)^2 - 5])
sage: L.S_units([L.ideal(a)])
}}}
This is arguably less bad: raising an error is far better than silently a
wrong answer.
--
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/8722#comment:1>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.