polylib::primitiveElement
-- primitive
element for tower of field extensionsFor 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.
polylib::primitiveElement(F, G)
F |
- | a field created by Dom::AlgebraicExtension |
G |
- | a field created by Dom::AlgebraicExtension with
ground field F |
The list returned consists of four operands:
H
of type AlgebraicExtension
over the
same ground field as F
;H::variable
;H
that satisfies the minimal
polynomial for alpha;H
that satisfies the minimal
polynomial for beta.polylib::splitfield
, Dom::AlgebraicExtension
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.
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]