Finite field morphisms¶

This file provides several classes implementing:

• embeddings between finite fields
• Frobenius isomorphism on finite fields

EXAMPLES:

sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic

Construction of an embedding:

sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K)); f
Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T

sage: f(t)
T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T

The map $$f$$ has a method section which returns a partially defined map which is the inverse of $$f$$ on the image of $$f$$:

sage: g = f.section(); g
Section of Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T
sage: g(f(t^3+t^2+1))
t^3 + t^2 + 1
sage: g(T)
Traceback (most recent call last):
...
ValueError: T is not in the image of Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T

There is no embedding of $$GF(5^6)$$ into $$GF(5^11)$$:

sage: k.<t> = GF(5^6)
sage: K.<T> = GF(5^11)
sage: FiniteFieldHomomorphism_generic(Hom(k, K))
Traceback (most recent call last):
...
ValueError: No embedding of Finite Field in t of size 5^6 into Finite Field in T of size 5^11

Construction of Frobenius endomorphisms:

sage: k.<t> = GF(7^14)
sage: Frob = k.frobenius_endomorphism(); Frob
Frobenius endomorphism t |--> t^7 on Finite Field in t of size 7^14
sage: Frob(t)
t^7

Some basic arithmetics is supported:

sage: Frob^2
Frobenius endomorphism t |--> t^(7^2) on Finite Field in t of size 7^14
sage: f = k.frobenius_endomorphism(7); f
Frobenius endomorphism t |--> t^(7^7) on Finite Field in t of size 7^14
sage: f*Frob
Frobenius endomorphism t |--> t^(7^8) on Finite Field in t of size 7^14

sage: Frob.order()
14
sage: f.order()
2

Note that simplifications are made automatically:

sage: Frob^16
Frobenius endomorphism t |--> t^(7^2) on Finite Field in t of size 7^14
sage: Frob^28
Identity endomorphism of Finite Field in t of size 7^14

And that comparisons work:

sage: Frob == Frob^15
True
sage: Frob^14 == Hom(k, k).identity()
True

AUTHOR:

• Xavier Caruso (2012-06-29)
class sage.rings.finite_rings.hom_finite_field.FiniteFieldHomomorphism_generic

A class implementing embeddings between finite fields.

inverse_image(b)

Return the unique a such that self(a) = b if one such exists.

This method is simply a shorthand for calling the map returned by self.section() on b.

EXAMPLES:

sage: k.<t> = GF(3^7)
sage: K.<T>, f = k.extension(3, map=True)
sage: b = f(t^2); b
2*T^20 + 2*T^19 + T^18 + T^15 + 2*T^14 + 2*T^13 + 2*T^12 + T^8 + 2*T^6 + T^5 + 2*T^4 + T^3 + 2*T^2 + T
sage: f.inverse_image(b)
t^2
sage: f.inverse_image(T)
Traceback (most recent call last):
...
ValueError: T is not in the image of Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T
is_injective()

Return True since a embedding between finite fields is always injective.

EXAMPLES:

sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^3)
sage: K.<T> = GF(3^9)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f.is_injective()
True
is_surjective()

Return true if this embedding is surjective (and hence an isomorphism.

EXAMPLES:

sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^3)
sage: K.<T> = GF(3^9)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: f.is_surjective()
False
sage: g = FiniteFieldHomomorphism_generic(Hom(k, k))
sage: g.is_surjective()
True
section()

Return the inverse of this embedding.

It is a partially defined map whose domain is the codomain of the embedding, but which is only defined on the image of the embedding.

EXAMPLES:

sage: from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
sage: k.<t> = GF(3^7)
sage: K.<T> = GF(3^21)
sage: f = FiniteFieldHomomorphism_generic(Hom(k, K))
sage: g = f.section(); g
Section of Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T
sage: g(f(t^3+t^2+1))
t^3 + t^2 + 1
sage: g(T)
Traceback (most recent call last):
...
ValueError: T is not in the image of Ring morphism:
From: Finite Field in t of size 3^7
To:   Finite Field in T of size 3^21
Defn: t |--> T^20 + 2*T^18 + T^16 + 2*T^13 + T^9 + 2*T^8 + T^7 + T^6 + T^5 + T^3 + 2*T^2 + T
class sage.rings.finite_rings.hom_finite_field.FrobeniusEndomorphism_finite_field

A class implementing Frobenius endomorphisms on finite fields.

fixed_field()

Return the fixed field of self.

OUTPUT:

• a tuple $$(K, e)$$, where $$K$$ is the subfield of the domain consisting of elements fixed by self and $$e$$ is an embedding of $$K$$ into the domain.

Note

The name of the variable used for the subfield (if it is not a prime subfield) is suffixed by _fixed.

EXAMPLES:

sage: k.<t> = GF(5^6)
sage: f = k.frobenius_endomorphism(2)
sage: kfixed, embed = f.fixed_field()
sage: kfixed
Finite Field in t_fixed of size 5^2
sage: embed
Ring morphism:
From: Finite Field in t_fixed of size 5^2
To:   Finite Field in t of size 5^6
Defn: t_fixed |--> 4*t^5 + 2*t^4 + 4*t^2 + t

sage: tfixed = kfixed.gen()
sage: embed(tfixed)
4*t^5 + 2*t^4 + 4*t^2 + t
is_identity()

Return true if this morphism is the identity morphism.

EXAMPLES:

sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_identity()
False
sage: (Frob^3).is_identity()
True
is_injective()

Return true since any power of the Frobenius endomorphism over a finite field is always injective.

EXAMPLES:

sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_injective()
True
is_surjective()

Return true since any power of the Frobenius endomorphism over a finite field is always surjective.

EXAMPLES:

sage: k.<t> = GF(5^3)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.is_surjective()
True
order()

Return the order of this endomorphism.

EXAMPLES:

sage: k.<t> = GF(5^12)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.order()
12
sage: (Frob^2).order()
6
sage: (Frob^9).order()
4
power()

Return an integer $$n$$ such that this endomorphism is the $$n$$-th power of the absolute (arithmetic) Frobenius.

EXAMPLES:

sage: k.<t> = GF(5^12)
sage: Frob = k.frobenius_endomorphism()
sage: Frob.power()
1
sage: (Frob^9).power()
9
sage: (Frob^13).power()
1
class sage.rings.finite_rings.hom_finite_field.SectionFiniteFieldHomomorphism_generic

A class implementing sections of embeddings between finite fields.