Finite fields
A finite field $K$ is represented as simple extension $K = k(\alpha) = k[x]/(f)$, where $k$ can be
- a prime field $\mathbf{F}_p$ ($K$ is then an absolute finite field), or
- an arbitrary finite field $k$ ($K$ is then a relative finite field).
In both cases, we call $k$ the base field of $K$, $\alpha$ a generator and $f$ the defining polynomial of $K$.
Note that all field theoretic properties (like basis, degree or trace) are defined with respect to the base field. Methods with prefix absolute_ return
Finite field functionality
Finite fields in Nemo provide all the field functionality described in AbstractAlgebra:
https://nemocas.github.io/AbstractAlgebra.jl/stable/field
Below we describe the functionality that is provided in addition to this.
Constructors
finite_field — Function
finite_field(p::IntegerUnion, d::Int, s::VarName = :o; cached::Bool = true, check::Bool = true)
finite_field(q::IntegerUnion, s::VarName = :o; cached::Bool = true, check::Bool = true)
finite_field(f::FqPolyRingElem, s::VarName = :o; cached::Bool = true, check::Bool = true)Return a tuple $(K, x)$ of a finite field $K$ of order $q = p^d$, where $p$ is a prime, and a generator $x$ of $K$ (see gen for a definition). The identifier $s$ is used to designate how the finite field generator will be printed.
If a polynomial $f \in k[X]$ over a finite field $k$ is specified, the finite field $K = k[X]/(f)$ will be constructed as a finite field with base field $k$.
See also GF which only returns $K$.
Examples
julia> K, a = finite_field(3, 2, "a")
(Finite field of degree 2 and characteristic 3, a)
julia> K, a = finite_field(9, "a")
(Finite field of degree 2 and characteristic 3, a)
julia> Kx, x = K["x"];
julia> L, b = finite_field(x^3 + x^2 + x + 2, "b")
(Finite field of degree 3 over GF(3, 2), b)sourceGF — Function
GF(p::IntegerUnion, d::Int, s::VarName = :o; cached::Bool = true, check::Bool = true)
GF(q::IntegerUnion, s::VarName = :o; cached::Bool = true, check::Bool = true)
GF(f::FqPolyRingElem, s::VarName = :o; cached::Bool = true, check::Bool = true)Return a finite field $K$ of order $q = p^d$, where $p$ is a prime. The identifier $s$ is used to designate how the finite field generator will be printed.
If a polynomial $f \in k[X]$ over a finite field $k$ is specified, the finite field $K = k[X]/(f)$ will be constructed as a finite field with base field $k$.
See also finite_field which additionally returns a finite field generator of $K$.
Examples
julia> K = GF(3, 2, "a")
Finite field of degree 2 and characteristic 3
julia> K = GF(9, "a")
Finite field of degree 2 and characteristic 3
julia> Kx, x = K["x"];
julia> L = GF(x^3 + x^2 + x + 2, "b")
Finite field of degree 3 over GF(3, 2)sourceField functionality
base_field — Method
prime_field — Method
absolute_degree — Method
is_absolute — Method
defining_polynomial — Method
defining_polynomial([R::FqPolyRing], K::FqField)Return the defining polynomial of K as a polynomial over the base field of K.
If the polynomial ring R is specified, the polynomial will be an element of R.
Examples
julia> K, a = finite_field(9, "a");
julia> defining_polynomial(K)
x^2 + 2*x + 2
julia> Ky, y = K["y"];
julia> L, b = finite_field(y^3 + y^2 + y + 2, "b");
julia> defining_polynomial(L)
y^3 + y^2 + y + 2sourceElement functionality
absolute_tr — Method
absolute_tr(x::FqFieldElem)Return the absolute trace of $x$. This is an element of the prime field.
sourceabsolute_norm — Method
absolute_norm(x::FqFieldElem)Return the absolute norm of $x$. This is an element of the prime field.
source