## `polylib::primitiveElement` -- primitive element for tower of field extensions

#### Introduction

For given field extensions F=K(alpha) and G=F(beta), `polylib::primitiveElement``(F, G)` returns a list consisting of a simple algebraic extension of K that is K-isomorphic to G, a symbol for a primitive element of that extension, and the images of alpha and beta under some fixed K-isomorphism.

#### Call(s)

`polylib::primitiveElement(F, G)`

#### Parameters

`F` | - | a field created by `Dom::AlgebraicExtension`
`G` | - | a field created by `Dom::AlgebraicExtension` with ground field `F`

#### Returns

The list returned consists of four operands:

- a field `H` of type `AlgebraicExtension` over the same ground field as `F`;
- an identifier that equals the entry `H::variable`;
- an object of type `H` that satisfies the minimal polynomial for alpha;
- an object of type `H` that satisfies the minimal polynomial for beta.

#### Related Functions

`polylib::splitfield`, `Dom::AlgebraicExtension`

#### Details

- It is presumed that the extension is separable. Otherwise, it may happen that the algorithm does not terminate.

#### Example 1

Since the rational numbers are perfect, extensions of them can always be handled:

    >> F:=Dom::AlgebraicExtension(Dom::Rational, sqrt2^2-2):
       G:=Dom::AlgebraicExtension(F, sqrt3^2-3):

Now G=Q(sqrt(2), sqrt(3)), and we use `polylib::primitiveElement` to find a primitive element for `G`:

    >> polylib::primitiveElement(F, G)

          --
          |
          |  Dom::AlgebraicExtension(Dom::Rational,
          --

                                                       3            3 --
               4        2                     9 X1   X1   11 X1   X1   |
             X1  - 10 X1  + 1 = 0, X1), X1, - ---- + ---, ----- - ---  |
                                               2      2     2      2  --

This means that a primitive element X1 of the extension is determined by its minimal polynomial X1^4-10*X1^2+1. The last two operands of the list are field elements whose squares are 2 and 3, respectively.

#### Example 2

The function works also for subdomains of `AlgebraicExtension`, e.g. Galois fields.

    >> F:=Dom::GaloisField(7,2):
       G:=Dom::GaloisField(F,2):
       polylib::primitiveElement(F, G)

          [Dom::AlgebraicExtension(Dom::IntegerMod(7),

                      2       3     4
             3 X5 - X5  + 2 X5  + X5  - 1 = 0, X5), X5,

                          2       3
             - 3 X5 + 3 X5  - 3 X5  - 2, X5]

#### Background

- The chosen primitive element is alpha+ s * beta, where s is a positive integer.

Do you have questions or comments?
Copyright © SciFace Software GmbH & Co. KG 2000