# Creation Functions

Functions are provided to create fields of the special type `FldCyc`. Orders and elements created from a field of this type will have the special types `RngCyc` and `FldCycElt` respectively and elements created from orders `RngCycElt`. These functions provide an object with the correct type which will allow the extra functions and efficient implementations to be used.

## Creation of Cyclotomic Fields

Cyclotomic fields can be created from an integer specifying which roots of unity it should contain or from a collection of elements of an existing field or order. Cyclotomic polynomials can also be retrieved independently of the fields and orders.

### `CyclotomicField(m): RngIntElt -> FldCyc`

```magma
Sparse: Boolean                    Default: false
```

Given a positive integer $m$, create the field obtained by adjoining the $m$-th roots of unity to ${\mathbb{Q}}$. It is possible to assign a name to the primitive $m$-th root of unity $\zeta_{m}$ using angle brackets: `R<s> := CyclotomicField(m)`.

If `Sparse := ``true`, names for all the generating elements can be assigned.

### `CyclotomicPolynomial(m): RngIntElt -> RngUPolElt`

Given a positive integer $m$, create the cyclotomic polynomial of order $m$. This function is equivalent to `DefiningPolynomial(CyclotomicField(m))`.

### `MinimalField(a): FldRatElt -> FldRat`

### `MinimalField(a): FldCycElt -> FldCyc`

### `MinimalField(a): RngCycElt -> RngCyc`

### `MinimalCyclotomicField(a): FldRatElt -> FldRat`

### `MinimalCyclotomicField(a): FldCycElt -> FldCyc`

### `MinimalCyclotomicField(a): RngCycElt -> RngCyc`

Given an element $a$ from a cyclotomic field $F$ or ring $R$, this function returns the smallest cyclotomic field or order thereof (possibly the rational field or the ring of integers) $E\subset F$ containing $a$.

### `MinimalField(S): [ FldCycElt ] -> FldCyc`

### `MinimalField(S): { FldCycElt } -> FldCyc`

### `MinimalField(S): [ RngCycElt ] -> RngCyc`

### `MinimalField(S): { RngCycElt } -> RngCyc`

### `MinimalCyclotomicField(S): [ FldCycElt ] -> FldCyc`

### `MinimalCyclotomicField(S): Setq -> FldCyc`

### `MinimalCyclotomicField(S): { FldCycElt } -> FldCyc`

### `MinimalCyclotomicField(S): [ RngCycElt ] -> RngCyc`

### `MinimalCyclotomicField(S): { RngCycElt } -> RngCyc`

Given a set or sequence $S$ of cyclotomic field or ring elements, this function returns the smallest cyclotomic field or ring (possibly the rational field or integers) $G$ containing each of the elements of $S$.

### `Example: creation (ex-644033)`

We will demonstrate the difference between the “dense” and the “sparse” representation on the cyclotomic field of order 100.

```magma
> K1 := CyclotomicField(100);
> K2 := CyclotomicField(100: Sparse := true);
> K2!K1.1;
zeta(100)_4*zeta(100)_25^19

```

Where `zeta(100)_25` indicates a 25th root of unity in a field of order 100.

```magma
> K1!K2.1;
zeta_100^25

```

## Creation of Elements

For elements of cyclotomic number fields the following conventions are used. Primitive roots of unity $\zeta_m$ are chosen in such a way that $\zeta_m^{m/d}=\zeta_d$, for every divisor $d$ of $m$; one may think of this as choosing $\zeta_m={\rm e}^{2\pi{\mathrm{i}}\over m}$ (where the roots of unity are $\zeta_m^k = {\rm e}^{2k\pi{\mathrm{i}}\over m}$) in the complex plane for every $m$ (a convention that is followed for the explicit embedding in the complex domains). Elements of cyclotomic fields and orders can also be created using coercion (`!`) and the elt constructor (`elt<|>`) where the left hand side is the field or order the element will lie in. For details about coercion see Section [Creation of Elements](../NumberFields/creation.md#fldnum-main-elt-create).

### `RootOfUnity(n): RngIntElt -> FldCycElt`

Create the $n$-th root of unity $\zeta_n$ in ${\mathbb{Q}}(\zeta_n)$.

### `RootOfUnity(n, K): RngIntElt, FldCyc -> FldCycElt`

Given a cyclotomic field $K = {\mathbb{Q}}(\zeta_m)$ and an integer $n>2$, create the $n$-th root of unity $\zeta_n$ in $K$. An error results if $\zeta_n\notin K$, that is, if $n$ does not divide $m$ (or $2m$ in case $m$ is odd).

### `Minimise(~a): FldCycElt`

### `Minimize(~a): FldCycElt`

### `Minimise(~a): RngCycElt`

### `Minimize(~a): RngCycElt`

Given an element $a$ in a cyclotomic field $F$ or ring $R$, this procedure finds the minimal cyclotomic subfield $E\subset F$ or subring $E \subset F$ containing $a$, and coerces $a$ into $E$. Note that $E$ may be ${\mathbb{Q}}$ or ${\mathbb{Z}}$.

### `Minimise(~s): [ FldCycElt ]`

### `Minimize(~s): [ FldCycElt ]`

### `Minimise(~s): [ RngCycElt ]`

### `Minimize(~s): [ RngCycElt ]`

Given a set $s$ of cyclotomic field or ring elements, this procedure finds the minimal cyclotomic field or ring $E$ containing all of them, and coerces each element into $E$. The resulting set will have universe $E$. Note that $E$ may be ${\mathbb{Q}}$ or ${\mathbb{Z}}$.

### `Minimise(a): FldCycElt -> RngElt`

### `Minimize(a): FldCycElt -> RngElt`

### `Minimise(a): RngCycElt -> RngElt`

### `Minimize(a): RngCycElt -> RngElt`

Given an element $a$ in a cyclotomic field $F$ or ring $R$, this function finds the minimal cyclotomic subfield $E\subset F$ or subring $E \subset R$ containing $a$, and coerces $a$ into $E$. Note that $E$ may be ${\mathbb{Q}}$ or ${\mathbb{Z}}$.

### `Minimise(s): { FldCycElt } -> { RngElt }`

### `Minimize(s): { FldCycElt } -> { RngElt }`

### `Minimise(s): { RngCycElt } -> { RngElt }`

### `Minimize(s): { RngCycElt } -> { RngElt }`

Given a set $s$ of cyclotomic field or ring elements, this function finds the minimal cyclotomic field $E$ containing all of them, and coerces each element into $E$. The resulting set will have universe $E$. Note that $E$ may be ${\mathbb{Q}}$ or ${\mathbb{Z}}$.
