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)

Bases: sage.structure.sage_object.SageObject

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)