Fields with a Labelled Embedding

A Number Field has several diffenent embeddings into the complex numbers. An embedded Number Field is a Number Field such that one of these embeddings is labelled. These fields form a category named FldNumEmb.

Creation Functions

Functions are provided to create fields of the special type FldNumEmb.

EmbeddedNumberField(L, c): FldNum, FldComElt -> FldNumEmb
EmbeddedNumberField(L, c): FldNum, FldReElt -> FldNumEmb

Turns \(L\) into a Number Field with a labelled embedding that extends the labelled embedding of its base field and maps its generator to \(c\). It reports an error when no embedding fits \(c\), as when \(c\) is too far from every root. It also reports an error when \(c\) is too coarse to distinguish matching embeddings. Use HasEmbeddedNumberField to test without an error.

HasEmbeddedNumberField(L, c): FldNum, FldComElt -> BoolElt, FldNumEmb
HasEmbeddedNumberField(L, c): FldNum, FldReElt -> BoolElt, FldNumEmb

Returns true if exactly one embedding of \(L\) extends the labelled embedding of its base field and maps its generator to \(c\). Returns false when no embedding fits \(c\) or when \(c\) is too coarse to distinguish matching embeddings. When the answer is true, the second value is \(L\) as a Number Field with that labelled embedding.

EmbeddedNumberField(f, r): RngUPolElt, FldReElt -> FldNumEmb
EmbeddedNumberField(f, r): RngUPolElt, FldComElt -> FldNumEmb

Constructs the Number Field defined by \(f\) with a labelled embedding. The embedding extends that of the coefficient field and maps the generator to \(r\). It reports an error when no embedding fits \(r\) or when \(r\) is too coarse to distinguish matching embeddings. Use HasEmbeddedNumberField to test without an error.

HasEmbeddedNumberField(f, r): RngUPolElt, FldReElt -> BoolElt, FldNumEmb
HasEmbeddedNumberField(f, r): RngUPolElt, FldComElt -> BoolElt, FldNumEmb

Returns true if the Number Field defined by \(f\) has exactly one matching embedding. That embedding extends the labelled embedding of its coefficient field and maps its generator to \(r\). Returns false when no embedding fits \(r\) or when \(r\) is too coarse to distinguish matching embeddings. When the answer is true, the second value is that Number Field with the labelled embedding.

EmbeddedNumberField(f, i): RngUPolElt, RngIntElt -> FldNumEmb

Constructs a Number Field with defining polynomial \(f\) and labelled embedding with number \(i\).

EmbeddedNumberField(L, i): FldNum, RngIntElt -> FldNumEmb

Constructs a Number Field with labelled embedding with number \(i\) and the same defining polynomial as \(L\).

EmbeddedSplittingField(f): RngUPolElt -> FldNumEmb, SeqEnum

Constructs the splitting field of \(f\) as number field with labelled embedding. The second return value are the roots of \(f\) in the splitting field.

Subfield(L, K): FldNumEmb, FldNum -> FldNumEmb

Turns the subfield \(K\) of the Number Field \(L\) with labelled embedding into a number field with labelled embedding.

Composition and Intersection

Number fields with a fixed embedding into the complex numbers have a unique composition and intersection as subfields of the complex numbers. The following functions are availabe to work in the subfield lattice.

Composite(K, L): FldNumEmb, FldNumEmb -> FldNumEmb

The unique composite of \(K\) and \(L\) as a number field with labelled embedding.

Intersection(K, L): FldNumEmb, FldNumEmb -> FldNumEmb
K meet L: FldNumEmb, FldNumEmb -> FldNumEmb

The unique intersection of \(K\) and \(L\) as a number field with labelled embedding.

IsSubfieldEmb(K, L): FldNumEmb, FldNumEmb -> BoolElt

Returns true if the image of \(K\) in the complex numbers is a subfield of the image of \(L\) and false otherwise.

Embedding and Reconstruction

The following functions are available to work with elements of a number field with a labelled embedding.

ComplexImage(x): FldNumElt -> FldComElt
Precision: RngIntElt                    Default: 30

The image of \(x\) in the complex numbers.

Embedding(K): FldNumEmb -> UserProgram
Precision: RngIntElt                    Default: 30

The labelled embeding of \(K\) into the complex numbers as a user program.

Reconstruction(L, x): FldNumEmb, FldComElt -> BoolElt, FldNumElt
Reconstruction(L, x): FldNumEmb, FldReElt -> BoolElt, FldNumElt
UseLLLOrder: BoolElt                    Default: false

Attempts to reconstruct \(x\) as an element in \(L\). Returns true if successful and false otherwise. If the option UseLLLOrder is set, and LLL basis of the maximal order will be used.

Example: Creating an Embedded Number Field (ex-83530f)

Run in calculator (opens in a new tab)

The approximation \(2.0\) is too far from \(7^{1/3}\) to identify an embedding. The approximation \(1.913\) is close enough.

The polynomial \(x^2 - 2x + 1 - 2/10^{12}\) has roots \(1 \pm \sqrt{2}/10^6\). An approximation with five significant digits does not distinguish them. An approximation with 20 digits does:

> _<x> := PolynomialRing(Integers());
> K := NumberField(x^3-7);
> HasEmbeddedNumberField(K,2.0);
false
> HasEmbeddedNumberField(K,1.913);
true Number Field with defining polynomial x^3 - 7 over the Rational
Field
> f := ChangeRing(x^2 - 2*x + 1, Rationals()) - 2/10^12;
> HasEmbeddedNumberField(f, RealField(5)!1.0000);
false
> R := RealField(20);
> ok, M := HasEmbeddedNumberField(f, R!1.0000014142135623731);
> ok;
true
> ComplexImage(M.1);
1.00000141421356237309504880169
> L := EmbeddedNumberField(K,7^(1/3));
> ComplexImage(L.1 + L.1^2);
5.57223689279536061843719014967
> Reconstruction(L,1/2 + 7^(1/3) + 5 * 7^(2/3));
true 1/2*(10*L.1^2 + 2*L.1 + 1)
> Reconstruction(L,Sqrt(-1));
false

Intersection and composition can be used as follows:

> _<x> := PolynomialRing(Integers());
> K := EmbeddedNumberField(x^6-3,3^(1/6));
> L := EmbeddedNumberField(x^9-3,3^(1/9));
> K meet L;
Number Field with defining polynomial $.1^3 + 9*$.1^2 + 27*$.1 + 18
over the Rational Field
> C := Composite(K,L);
> Degree(C);
18
> IsSubfieldEmb(K,C) and IsSubfieldEmb(L,C);
true

Here is an example to work with towers of fields:

> _<x> := PolynomialRing(Integers());
> K := EmbeddedNumberField(x^2-2,Sqrt(2));
> L := EmbeddedNumberField(Polynomial([-K.1,0,1]),2^(1/4));
> ComplexImage(L.1);
1.18920711500272106671749997056
> ComplexImage(L!(K.1));
1.41421356237309504880168872421

The labelled embeddings determine the composite. Let \(w\) be the cube root of 2 with positive imaginary part. Label \(K = \Q(2^{1/3})\) at the complex conjugate of \(w\), and label \(L = \Q(\sqrt{2})(2^{1/3})\) at \(w\). Their composite contains both \(w\) and its conjugate. It therefore contains \(\zeta_3\) and is \(\Q(\sqrt{2}, 2^{1/3}, \zeta_3)\), of degree 12. The displayed images of the generators verify that the composite retains both labelled embeddings:

> _<x> := PolynomialRing(Integers());
> CC<i> := ComplexField(30);
> w := 2^(1/3) * (-1 + Sqrt(CC!-3))/2;
> w;
-0.629960524947436582383605303639 + 1.09112363597172140356007261419*i
> K := EmbeddedNumberField(x^3-2, ComplexConjugate(w));
> S := EmbeddedNumberField(x^2-2, Sqrt(2));
> _<y> := PolynomialRing(S);
> L := EmbeddedNumberField(y^3-2, w);
> C := Composite(K,L);
> AbsoluteDegree(C);
12
> ComplexImage(C!K.1);
-0.629960524947436582383605303639 - 1.09112363597172140356007261419*i
> ComplexImage(C!L.1);
-0.629960524947436582383605303639 + 1.09112363597172140356007261419*i

Run in calculator (opens in a new tab)