# Subextension over non-prime subfield as a quotient

Hi!

I am looking for a light and easy way to build the following objects:

• a finite (possibly non prime) field Fq;
• an irreducible polynomial p in Fq[X];
• and a finite extension L of Fq which contains L0 = Fq[X]/p as a subfield.

Crucially, I want to be able to manipulate the generator z = L0(X) (i.e. the image of X in L0) as an element of L. I also need to view these extensions as extension over Fq (e.g. using .over(Fq)) and not the prime subfield (in particular, I do not want to see L as an extension of L0).

Let me know if this is not clear and you need more explanations.

For this, I can define my extensions as follows:

sage: Fq = GF(7^2)
sage: FqX.<X> = Fq[]
sage: p = FqX.irreducible_element(3)
sage: L0 = Fq.extension(modulus=p).over(Fq); L0
Univariate Quotient Polynomial Ring in X over Finite Field in z2 of size 7^2 with modulus X^3 + z2*X + z2 + 3 over its base
sage: L = Fq.extension(modulus=FqX.irreducible_element(6)).over(Fq); L
Univariate Quotient Polynomial Ring in X over Finite Field in z2 of size 7^2 with modulus X^6 + (6*z2 + 4)*X + 4*z2 + 6 over its base


Now I can define z = L0(X):

sage: z = L0(X)
sage: assert z == L0.gen()
sage:


But I can't manage to see z as an element of L. In the following snippet, it seems that casting z as an element of L converts it to a generator of L:

sage: zL = L(z)
sage: zL == L.gen()
True


I tried other ways to create the extensions. Sometimes coercion is a problem. Sometimes some methods are available on a method but not the other. Does anybody has any idea?

edit retag close merge delete

( 2022-05-04 14:33:34 +0100 )edit
2

You can map z in L0 to one of z.minpoly().change_ring(L).roots(multiplicities=False) in L. Unfortunately defining a homomorphism via L0.hom seems to be broken for a relative extension L0.

( 2022-05-04 16:42:36 +0100 )edit

Sort by » oldest newest most voted

In such cases, it is useful to work in $L$ and only in $L$. All elements can be arranged to be there.

Let $q$ be a prime power, the prime will be denoted by $p$. I will initialize the field $L=\Bbb F_q[w]$ of characteristic $p$, of degree six over $\Bbb F_q$, containing an element $z$ which generates a subfield $L_0$ of degree three inside $L$, so that the following tower is realized: $$\begin{array}{c} L=\Bbb F_q[w] \\ \uparrow \\ L_0=\Bbb F_q[z] \\ \uparrow \\ K=\Bbb F_q=\Bbb F_p[a] \\ \uparrow \\ F=\Bbb F_p \end{array}$$

p, power = 7, 2
q = p^power

F = GF(p)
R.<X> = PolynomialRing(F)
P1power = R.irreducible_element(power)
P3power = R.irreducible_element(3*power)
P6power = R.irreducible_element(6*power)

L.<w> = GF(q^6, modulus=P6power)
z = P3power.roots(ring=L, multiplicities=False)[0]
a = P1power.roots(ring=L, multiplicities=False)[0]


Alternatively:

p, power = 7, 2
q = p^power

K.<a> = GF(q)
R.<X> = PolynomialRing(K)
P3 = R.irreducible_element(3)
P6 = R.irreducible_element(6)

L.<w> = K.extension(P6)
z = P3.roots(ring=L, multiplicities=False)[0]

more

Thank you two for those solutions. I think that they are the easiest way to achieve the result, and they are fairly simple, as we can always work in L. I will be using this!

( 2022-05-13 16:51:17 +0100 )edit