# find characteristic polynomial in a tower of extensions over Qp

We have a tower of extensions W/T/U where U is an unramified extension of $Q_p$, T is given by an eisenstein polynomial $f\in U[x]$ and W is given by an eisenstein polynomial $g\in T[x]$. Hence T is an $deg(g)deg(f)-$dimensional $U-$vector space with basis consisting of products $\alpha^i \beta^j$ such that $0\leq i < deg(f), 0\leq j < deg(g)$, where $\alpha$ is a root of $f$ and $\beta$ is a root of $g$.

Let $\gamma \in W$ be arbitrary. The goal is to compute the matrix of multiplication by $\gamma$ wrt the above $U-$basis. The issue is that the field $W$ cannot be created as an extension of $T$ in Sage, it seems that at the moment you cannot create an extension given by an eisenstein polynomial if T is already an eisenstein extension.

Example of how it does not work:

sage: U = Qq(2^2,names="u")
sage: R.<x> = U[]
sage: f = x^2 - U.uniformizer()
sage: T = U.extension(f,names="alpha")
sage: S.<x> = T[]
sage: g = x^2-T.uniformizer()
sage: W = T.extension(g,names="beta")
TypeError: Unable to coerce -alpha to a rational

We can create W as a quotient ring T[x]/(g), but I don't know how to get coefficients of $\gamma$ w.r.t. the power basis $1,\bar{x},\bar{x}^2,\dots,\bar{x}^{deg(g)-1}$.

sage: U = Qq(2^2,names="u")
sage: R.<x> = U[]
sage: f = x^2 - U.uniformizer()
sage: T = U.extension(f,names="alpha")
sage: S.<x> = T[]
sage: g = x^2-T.uniformizer()
sage: W = S.quotient_ring(g)
sage: V, map_to_W, map_from_W, = W.free_module()
NotImplementedError:

If the above were possible, we could simply map $\gamma$ to the free module, then find coefficients wrt the power basis. Then we could do the same thing for each coefficient with W replaced by T to get the U-coefficients.

edit retag close merge delete

Sort by » oldest newest most voted

So far, I managed to get around this by lifting $\gamma$ to $T[x]$ and taking the coefficients w.r.t the basis $1,x,x^2,\dots$. Since the lift is the unique polynomial of degree less than deg(g), the coefficients are the ones I am looking for?

sage: gamma = W.an_element()
sage: coeffs = gamma.lift().coefficients(sparse=False)

and then padding coeffs with deg(g) - len(coeffs) zeroes.

more