Ask Your Question

Subextension over non-prime subfield as a quotient

asked 2022-05-04 14:32:52 +0200

YesIsBetterThanCrimson gravatar image


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()

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()

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 flag offensive close merge delete


Welcome to Ask Sage! Thank you for your question.

slelievre gravatar imageslelievre ( 2022-05-04 14:33:34 +0200 )edit

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.

rburing gravatar imagerburing ( 2022-05-04 16:42:36 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2022-05-06 20:52:57 +0200

dan_fulea gravatar image

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]


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]
edit flag offensive delete link 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!

YesIsBetterThanCrimson gravatar imageYesIsBetterThanCrimson ( 2022-05-13 16:51:17 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2022-05-04 14:32:52 +0200

Seen: 214 times

Last updated: May 06