Element Operations

For the full range of operations for elements of a number field or order see Section Element Operations.

Contents

Predicates on Elements

Because of the nature of cyclotomic fields and orders, some properties of elements are easier to determine than in the general case.

IsReal(a) : FldCycElt -> BoolElt
IsReal(a) : RngCycElt -> BoolElt
Whether the cyclotomic field or ring element a is a real number, i.e., if it is invariant under the complex conjugation.

Conjugates

Elements of cyclotomic fields and orders can additionally have their complex conjugate computed. Conjugates are returned as cyclotomic elements (and not reals) and which conjugate is wanted can be indicated by providing a primitive root of unity.

ComplexConjugate(a) : FldCycElt -> FldCycElt
ComplexConjugate(a) : RngCycElt -> RngCycElt
The complex conjugate of cyclotomic field or ring element a.
Conjugate(a, n) : FldCycElt, RngIntElt -> FldCycElt
Conjugate(a, n) : RngCycElt, RngIntElt -> RngCycElt
The image under the map ζ |-> ζn. The second argument (n) must be coprime to the conductor.
Conjugate(a, r) : FldCycElt, FldCycElt -> FldCycElt
Conjugate(a, r) : RngCycElt, RngCycElt -> RngCycElt
The conjugate of the element a∈Q(ζm) or its order, obtained by applying the field automorphism ζm |-> r where r is a primitive root of unity.

Example FldCyc_GaussianPeriods (H38E2)

The following lines of code generate a set W of minimal polynomials for the so-called Gaussian periods ηd=∑i=0(l - 1)/d - 1ζl^(g^((d)i)) where ζl is a primitive l-th root of unity (l is prime), and where g is a primitive root modulo l. These have the property that they generate a degree d cyclic subfield of Q(ζl). We (arbitrarily) choose l=13 in this example.
> R<x> := PolynomialRing(RationalField());
> W := { R | };
> l := 13;
> L<z> := CyclotomicField(l);
> M := Divisors(l-1);
> g := PrimitiveRoot(l);
> for m in M do
>    d := (l-1) div m;
>    g_d := g^d;
>    w := &+[z^g_d^i : i in [0..m-1] ];
>    Include(~W, MinimalPolynomial(w));
> end for;
Here is the same loop in just one line, using sequence reduction:
> W := { R | MinimalPolynomial(&+[z^(g^((l-1) div m))^i : i in [0..m-1] ]) :
>        m in M };
> W;
{
      x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 +
       x + 1,
      x^6 + x^5 - 5*x^4 - 4*x^3 + 6*x^2 + 3*x - 1,
      x^3 + x^2 - 4*x + 1,
      x + 1
      x^4 + x^3 + 2*x^2 - 4*x + 3,
      x^2 + x - 3,
 }
V2.28, 13 July 2023