Ask Your Question

Revision history [back]

Let me first create a number field L, and use the Python variable a as a generator:

sage: L = NumberField(x^3+x+1,'a')
sage: L.inject_variables()
Defining a

Then, you can get the list of embeddings of L into the complex (floating-point) numbers as follows:

sage: L.embeddings(CC)
[
Ring morphism:
  From: Number Field in a with defining polynomial x^3 + x + 1
  To:   Complex Field with 53 bits of precision
  Defn: a |--> -0.682327803828019,
Ring morphism:
  From: Number Field in a with defining polynomial x^3 + x + 1
  To:   Complex Field with 53 bits of precision
  Defn: a |--> 0.341163901914010 - 1.16154139999725*I,
Ring morphism:
  From: Number Field in a with defining polynomial x^3 + x + 1
  To:   Complex Field with 53 bits of precision
  Defn: a |--> 0.341163901914010 + 1.16154139999725*I
]

So, to get the images of (say) 1+a for all those embeddings, you can do:

sage: [e(1+a) for e in L.embeddings(CC)]
[0.317672196171981,
 1.34116390191401 - 1.16154139999725*I,
 1.34116390191401 + 1.16154139999725*I]

If you want to have algebraic numbers instead of floating point appxoximations, you can replace CC by QQbar:

sage: [e(1+a) for e in L.embeddings(QQbar)]
[0.3176721961719807?,
 1.341163901914010? - 1.161541399997252?*I,
 1.341163901914010? + 1.161541399997252?*I]

If you want the images for the real embeddings (there is only one), you can do:

sage: [e(1+a) for e in L.embeddings(RR)]
[0.317672196171981]

sage: [e(1+a) for e in L.embeddings(AA)]
[0.3176721961719807?]

Now, if you pick an element of the unit element as follows:

sage: u = L.unit_group().random_element() ; u
u0*u1^6

You can get the images you wanted as follows:

sage: [log(abs(e(u))) for e in L.embeddings(QQbar)]
[-2.29347051504021, 1.14673525752011, 1.14673525752011]