Complex embedding
Functionality for working with complex embeddings of a number field $L$, that is, with ring morphisms $L \to \mathbf{C}$ is provided for all possible number field types.
Construction of complex embeddings
complex_embeddings — Methodcomplex_embeddings(K::NumField; conjugates::Bool = true) -> Vector{NumFieldEmb}Return the complex embeddings of $K$. If conjugates is false, only one imaginary embedding per conjugated pairs is returned.
Examples
julia> K, a = quadratic_field(-3);
julia> complex_embeddings(K)
2-element Vector{Hecke.NumFieldEmbNfAbs}:
Embedding corresponding to ≈ 0.00 + 1.73 * i
Embedding corresponding to ≈ 0.00 - 1.73 * i
julia> complex_embeddings(K, conjugates = false)
1-element Vector{Hecke.NumFieldEmbNfAbs}:
Embedding corresponding to ≈ 0.00 + 1.73 * ireal_embeddings — Methodreal_embeddings(K::NumField) -> Vector{NumFieldEmb}Return the real embeddings of $K$.
Examples
julia> K, a = quadratic_field(3);
julia> real_embeddings(K)
2-element Vector{Hecke.NumFieldEmbNfAbs}:
Embedding corresponding to ≈ -1.73
Embedding corresponding to ≈ 1.73Properties
number_field — Methodnumber_field(f::NumFieldEmb) -> NumFieldReturn the corresponding number field of the embedding $f$.
Examples
julia> K, a = quadratic_field(-3); e = complex_embeddings(K)[1];
julia> number_field(e)
Imaginary quadratic field defined by x^2 + 3isreal — Methodisreal(f::NumFieldEmb) -> BoolReturn true if the embedding is real.
Examples
julia> K, a = quadratic_field(3); e = complex_embeddings(K)[1];
julia> isreal(e)
trueis_imaginary — Methodis_imaginary(f::NumFieldEmb) -> BoolReturns true if the embedding is imaginary, that is, not real.
Examples
julia> K, a = quadratic_field(-3); e = complex_embeddings(K)[1];
julia> is_imaginary(e)
trueConjugated embedding
conj — Methodconj(f::NumFieldEmb) -> NumFieldEmbReturns the conjugate embedding of f.
Examples
julia> K, a = quadratic_field(-3); e = complex_embeddings(K);
julia> conj(e[1]) == e[2]
trueEvaluating elements at complex embeddings
Given an embedding $f \colon K \to \mathbf{C}$ and an element $x$ of $K$, the image $f(x)$ of $x$ under $f$ can be constructed as follows.
(f::NumFieldEmb)(x::NumFieldElem, prec::Int = 32) -> acb- Note that the return type will be a complex ball of type
acb. The radiusrof the ball is guarenteed to satisfyr < 2^(-prec). - If the embedding is real, then the value
cwill satisfyisreal(c) == true.
For convenience, we also provide the following function to quickly create a corresponding anonymous function:
evaluation_function — Methodevaluation_function(e::NumFieldEmb, prec::Int) -> FunctionReturn the anonymous function x -> e(x, prec).
Examples
julia> K, a = quadratic_field(-3);
julia> e = complex_embeddings(K)[1];
julia> fn = evaluation_function(e, 64);
julia> fn(a)
[+/- 3.99e-77] + [1.73205080756887729353 +/- 5.41e-21]*imRestriction
Given a subfield $\iota \colon k \to K$, any embedding $f \colon K \to \mathbf{C}$ naturally restricts to a complex embedding of $K$. Computing this restriction is supported in case $k$ appears as a base field of (a base field) of $K$ or $\iota$ is provided:
restrict — Methodrestrict(f::NumFieldEmb, K::NumField)Given an embedding $f$ of a number field $L$ and a number field $K$ appearing as a base field of $L$, return the restriction of $f$ to $L$.
Examples
julia> K, a = quadratic_field(3);
julia> L, b = NumberField(polynomial(K, [1, 0, 1]), "b");
julia> e = complex_embeddings(L);
julia> restrict(e[1], K)
Embedding of
Real quadratic field defined by x^2 - 3
corresponding to ≈ -1.73restrict — Methodrestrict(f::NumFieldEmb, g::NumFieldMor)Given an embedding $f$ of a number field $L$ and a morphism $g \colon K \to L$, return the embedding $g \circ f$ of $K$.
This is the same as g * f.
Examples
julia> K, a = CyclotomicField(5, "a");
julia> k, ktoK = Hecke.subfield(K, [a + inv(a)]);
julia> e = complex_embeddings(K);
julia> restrict(e[1], ktoK)
Embedding of
Number field over Rational Field with defining polynomial x^2 + x - 1
corresponding to ≈ 0.62Extension
Given a complex embedding $f \colon k \to \mathbf{C}$ and a morphism $\iota \colon k \to K$, an embedding $g \colon K \to \mathbf{C}$ is extension of $f$, if $g$ restricts to $f$. Given an embedding and a morphism, all extensions can be computed as follows:
extend — Methodextend(e::NumFieldEmb, f::NumFieldMor)Given an embedding $e$ of $k$ and a morphism $f \colon k \to K$, determine all embedings of $K$ which restrict to $e$ along $f$.
Example
julia> K, a = CyclotomicField(5, "a");
julia> k, ktoK = Hecke.subfield(K, [a + inv(a)]);
julia> e = complex_embeddings(k)[1];
julia> extend(e, ktoK)
2-element Vector{Hecke.NumFieldEmbNfAbs}:
Embedding corresponding to ≈ 0.31 + 0.95 * i
Embedding corresponding to ≈ 0.31 - 0.95 * iExample
As mentioned, this functionality works for all types of number fields. Here is an example of an absolute non-simple number field.
julia> Qx, x = QQ["x"];
julia> K, a = number_field([x^2 + 1, x^3 + 2], "a");
julia> emb = complex_embeddings(K)
6-element Vector{Hecke.NumFieldEmbNfAbsNS}:
Embedding corresponding to ≈ [ 1.00 * i, -1.26]
Embedding corresponding to ≈ [ 1.00 * i, 0.63 + 1.09 * i]
Embedding corresponding to ≈ [ -1.00 * i, 0.63 + 1.09 * i]
Embedding corresponding to ≈ [ -1.00 * i, -1.26]
Embedding corresponding to ≈ [ -1.00 * i, 0.63 - 1.09 * i]
Embedding corresponding to ≈ [ 1.00 * i, 0.63 - 1.09 * i]
julia> k, b = quadratic_field(-1);
julia> i = hom(k, K, a[1]);
julia> restrict(emb[1], i)
Embedding of
Imaginary quadratic field defined by x^2 + 1
corresponding to ≈ 1.00 * i
julia> restrict(emb[3], i)
Embedding of
Imaginary quadratic field defined by x^2 + 1
corresponding to ≈ -1.00 * i