The lattice of number fields

Let $L$ be some number field, and $\sigma_1,...,\sigma_{(r+s)}$ its embeddings in the real\complex field. Given an element $a$ in a $L$, how can I produce the vector $(\sigma_1(a),...,\sigma_{(r+s)}(a))$ , or better yet, is there a function returning the lattice embedding of $\mathcal{O}_L$ inside $\mathbb{R}^r \times \mathbb{C}^s$? Similarly, after computing the units group is there some function that returns $(\log |\sigma_i(u) |)$ for a given unit $u$ or the corresponding unit lattice?

edit retag close merge delete

Sort by » oldest newest most voted

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]

more