Ask Your Question

Constructing a number field with complex embedding

asked 2019-07-11 23:31:13 +0200

mvk gravatar image

I am using the function number_field_elements_from_algebraics in sage.rings.qqbar to write some algebraic numbers as elements of a number field. I am passing embedded=True to also construct an embedding into QQbar. This works fine if the algebraic numbers are real but fails if they are complex:

sage: number_field_elements_from_algebraics([1 + sqrt(7)], embedded=True)
(Number Field in a with defining polynomial y^2 - 7 with a = 2.645751311064591?,
 [a + 1],
 Ring morphism:
   From: Number Field in a with defining polynomial y^2 - 7 with a = 2.645751311064591?
   To:   Algebraic Real Field
   Defn: a |--> 2.645751311064591?)
sage: number_field_elements_from_algebraics([1 + sqrt(-7)], embedded=True)
NotImplementedError                       Traceback (most recent call last)
<ipython-input-1-ac220615ad5b> in <module>()
----> 1 number_field_elements_from_algebraics([Integer(1) + sqrt(-Integer(7))], embedded=True)

/usr/lib/python2.7/site-packages/sage/rings/qqbar.pyc in number_field_elements_from_algebraics(
numbers, minimal, same_field, embedded, prec)
   2242         real_case = False
   2243         if embedded:
-> 2244             raise NotImplementedError
   2245     # Make the numbers algebraic
   2246     numbers = [mk_algebraic(_) for _ in numbers]


What is the reason for why only embeddings of real numbers are supported?

I modified the code in number_field_elements_from_algebraics to support complex embeddings by essentially removing the check for whether the numbers are real and replacing RealIntervalField by ComplexIntervalField. This seems to work and the doctests still pass with these modifications. However I am worried that there was a good reason (either mathematically or related to some sage internals) for restricting this function to the real case.

The relevant code in sage.rings.qqbar was introduced in these commits:

  • 26dc3e4e6a26f6f613a69d57929ea492c278dad0
  • a9045bf8a3aab2d0aa00be17e91227bc1b50262a
edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2019-07-12 10:33:35 +0200

tmonteil gravatar image

I would say that 1 + sqrt(7) could be uniformly chosen to the be the unique positive root of (x-1)^2-7, while there is no canonical choice for (x-1)^2+7. However, the problem should be in transforming the symbolic expression 1 + sqrt(-7) into an algebraic number, but once an element of QQbar is defined, i do not see any problem (an element of QQbar is embedded in the complex field). So for me, there should be an error, but it should appear when calling QQbar(1 + sqrt(-7)).

edit flag offensive delete link more



I am a bit confused though: Why can we not choose the solution with positive imaginary part for (x-1)^2+7? In fact, isn't this what sage is doing when it returns +I (as opposed to -I) for QQbar(sqrt(-1))?

mvk gravatar imagemvk ( 2019-07-12 17:57:11 +0200 )edit

answered 2019-07-12 12:42:51 +0200

slelievre gravatar image

updated 2019-07-12 12:59:07 +0200

Having defined:

sage: a = sqrt(-7)

This works:

sage: number_field_elements_from_algebraics([a])
(Number Field in a with defining polynomial y^2 - y + 2,
 [-2*a + 1],
 Ring morphism:
   From: Number Field in a with defining polynomial y^2 - y + 2
   To:   Algebraic Field
   Defn: a |--> 0.50000000000000000? - 1.322875655532296?*I)

This fails:

sage: number_field_elements_from_algebraics([a], embedded=True)
Traceback (most recent call last)

The reason for why only embeddings of real numbers are supported is that nobody has done it yet. If you can do it, your contribution will be appreciated.

Regarding your worry that there was a good reason: if so, the correct thing to do would have been to add as a comment about the reason, and to raise a ValueError rather than a NotImplementedError.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2019-07-11 23:31:13 +0200

Seen: 197 times

Last updated: Jul 12 '19