# Relative finite field extensions¶

Considering a absolute field $$F_{q^m}$$ and a relative_field $$F_q$$, with $$q = p^s$$, $$p$$ being a prime and $$s, m$$ being integers, this file contains a class to take care of the representation of $$F_{q^m}$$-elements as $$F_q$$-elements.

Warning

As this code is experimental, a warning is thrown when a relative finite field extension is created for the first time in a session (see sage.misc.superseded.experimental).

class sage.coding.relative_finite_field_extension.RelativeFiniteFieldExtension(absolute_field, relative_field, embedding=None)

Considering $$p$$ a prime number, n an integer and three finite fields $$F_p$$, $$F_q$$ and $$F_{q^m}$$, this class contains a set of methods to manage the representation of elements of the relative extension $$F_{q^m}$$ over $$F_q$$.

INPUT:

• absolute_field, relative_field – two finite fields, relative_field being a subfield of absolute_field
• embedding – (default: None) an homomorphism from relative_field to absolute_field. If None is provided, it will default to the first homomorphism of the list of homomorphisms Sage can build.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: RelativeFiniteFieldExtension(Fqm, Fq)
Relative field extension between Finite Field in aa of size 2^4 and Finite Field in a of size 2^2


It is possible to specify the embedding to use from relative_field to absolute_field:

sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq, embedding=Hom(Fq, Fqm)[1])
sage: FE.embedding() == Hom(Fq, Fqm)[1]
True

absolute_field()

Returns the absolute field of self.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.absolute_field()
Finite Field in aa of size 2^4

absolute_field_basis()

Returns a basis of the absolute field over the prime field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.absolute_field_basis()
[1, aa, aa^2, aa^3]

absolute_field_degree()

Let $$F_p$$ be the base field of our absolute field $$F_{q^m}$$. Returns $$sm$$ where $$p^{sm} = q^{m}$$

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.absolute_field_degree()
4

absolute_field_representation(a)

Returns an absolute field representation of the relative field vector a.

INPUT:

• a – a vector in the relative extension field

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: b = aa^3 + aa^2 + aa + 1
sage: rel = FE.relative_field_representation(b)
sage: FE.absolute_field_representation(rel) == b
True

cast_into_relative_field(b, check=True)

Casts an absolute field element into the relative field (if possible). This is the inverse function of the field embedding.

INPUT:

• b – an element of the absolute field which also lies in the relative field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: phi = FE.embedding()
sage: b = aa^2 + aa
sage: FE.is_in_relative_field(b)
True
sage: FE.cast_into_relative_field(b)
a
sage: phi(FE.cast_into_relative_field(b)) == b
True

embedding()

Returns the embedding which is used to go from the relative field to the absolute field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.embedding()
Ring morphism:
From: Finite Field in a of size 2^2
To:   Finite Field in aa of size 2^4
Defn: a |--> aa^2 + aa

extension_degree()

Return $$m$$, the extension degree of the absolute field over the relative field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(64)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.extension_degree()
3

is_in_relative_field(b)

Returns True if b is in the relative field.

INPUT:

• b – an element of the absolute field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.is_in_relative_field(aa^2 + aa)
True
sage: FE.is_in_relative_field(aa^3)
False

prime_field()

Returns the base field of our absolute and relative fields.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.prime_field()
Finite Field of size 2

relative_field()

Returns the relative field of self.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.relative_field()
Finite Field in a of size 2^2

relative_field_basis()

Returns a basis of the relative field over the prime field.

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.relative_field_basis()
[1, a]

relative_field_degree()

Let $$F_p$$ be the base field of our relative field $$F_q$$. Returns $$s$$ where $$p^s = q$$

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: FE.relative_field_degree()
2

relative_field_representation(b)

Returns a vector representation of the field element b in the basis of the absolute field over the relative field.

INPUT:

• b – an element of the absolute field

EXAMPLES:

sage: from sage.coding.relative_finite_field_extension import *
sage: Fqm.<aa> = GF(16)
sage: Fq.<a> = GF(4)
sage: FE = RelativeFiniteFieldExtension(Fqm, Fq)
sage: b = aa^3 + aa^2 + aa + 1
sage: FE.relative_field_representation(b)
(1, a + 1)