Conversion from ring to unit group

53 views
Skip to first unread message

Friedrich Wiemer

unread,
Nov 23, 2016, 6:09:35 AM11/23/16
to sage-support
Hi,

not sure if this make sense: I would like to convert elements
from a ring to elements in the ring's unit group (with raising
exceptions, if the ring element is not in the unit group).
So what I'm looking for is basically the "inversion" of:
R(R.unit_group().random_element())

Is it possible to do this?

Thanks in advance,
Friedrich

Simon King

unread,
Nov 23, 2016, 9:49:32 AM11/23/16
to sage-s...@googlegroups.com
Hi,

On 2016-11-23, Friedrich Wiemer <friedri...@gmail.com> wrote:
> not sure if this make sense: I would like to convert elements
> from a ring to elements in the ring's unit group (with raising
> exceptions, if the ring element is not in the unit group).
> So what I'm looking for is basically the "inversion" of:
> R(R.unit_group().random_element())

Does R.unit_group()(R.random_element()) not do what you describe?

That said, I am not sure if R.unit_group() is implemented for any
interesting class of rings in Sage. According to
sage: search_def("unit_group")
there is only one method called "unit_group", which is for number
fields. Rather strange for me, because the algebraic notion of a unit
group is not very interesting for a *field*! But perhaps the number
theorists have a different notion---which one are you talking about?

Anyway.

Looking at the example of the "unit_group" method, I get this:
sage: x = QQ['x'].0
sage: A = x^4 - 10*x^3 + 20*5*x^2 - 15*5^2*x + 11*5^3
sage: K.<a> = NumberField(A)
sage: U = K.unit_group()
sage: U(a)
Traceback (most recent call last)
...
ValueError: a is not a unit
sage: ~a
-1/1375*a^3 + 2/275*a^2 - 4/55*a + 3/11

Hence, if we talk about the algebraic notion of a unit of the ring K,
the above is wrong. However, it seems that the unit group of a number
field is meant to be the unit group of the ring of integers of the
number field. So, let's try again:

sage: R = K.ring_of_integers()
sage: while 1:
....: u = R.random_element()
....: if u != 0 and ~u in R:
....: break
....:
sage: u
1
sage: U(u)
1

More interesting example:

sage: U.gens_values()
[-7/275*a^3 + 1/11*a^2 - 9/11*a - 1, 7/275*a^3 - 1/11*a^2 +
9/11*a + 2]
sage: u = (7/275*a^3 - 1/11*a^2 + 9/11*a + 2)^2
sage: u
13/275*a^3 - 14/55*a^2 + 23/11*a - 1
sage: u.parent()
Number Field in a with defining polynomial x^4 - 10*x^3 +
100*x^2 - 375*x + 1375
sage: U(u)
u1^2
sage: _.parent()
Unit group with structure C10 x Z of Number Field in a with
defining polynomial x^4 - 10*x^3 + 100*x^2 - 375*x + 1375

So, in summary, the usual conversion syntax should just work.

Best regards,
Simon


John Cremona

unread,
Nov 23, 2016, 11:41:50 AM11/23/16
to SAGE support
On 23 November 2016 at 14:49, Simon King <simon...@uni-jena.de> wrote:
> Hi,
>
> On 2016-11-23, Friedrich Wiemer <friedri...@gmail.com> wrote:
>> not sure if this make sense: I would like to convert elements
>> from a ring to elements in the ring's unit group (with raising
>> exceptions, if the ring element is not in the unit group).
>> So what I'm looking for is basically the "inversion" of:
>> R(R.unit_group().random_element())
>
> Does R.unit_group()(R.random_element()) not do what you describe?
>
> That said, I am not sure if R.unit_group() is implemented for any
> interesting class of rings in Sage. According to
> sage: search_def("unit_group")
> there is only one method called "unit_group", which is for number
> fields. Rather strange for me, because the algebraic notion of a unit
> group is not very interesting for a *field*! But perhaps the number
> theorists have a different notion-

Inded we do. The unit group of a number field means the group of
units of its ring of integers. e.g. the unit group of QQ is {-1,+1}.
Here is another example:

sage: R = Integers(10)
sage: R.unit_group()
Multiplicative Abelian group isomorphic to C4

but unfortunately

sage: G = R.unit_group()
sage: R(3)
3
sage: G(R(3))
...
TypeError: 'sage.rings.finite_rings.integer_mod.IntegerMod_int' object
is not iterable

shows that this is not us useful as yo uwould like. And this might
surprise you too:

sage: G
Multiplicative Abelian group isomorphic to C4
sage: G.list()
(1, f, f^2, f^3)

i.e. G is an abstract multiplcative cyclic group. But is does
remember where its elements really live:

sage: [g.value() for g in G.list()]
[1, 7, 9, 3]

John

>
> Best regards,
> Simon
>
>
> --
> You received this message because you are subscribed to the Google Groups "sage-support" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sage-support...@googlegroups.com.
> To post to this group, send email to sage-s...@googlegroups.com.
> Visit this group at https://groups.google.com/group/sage-support.
> For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages