Note: This is similar to, but easier than, a previous question I asked here. It is a different question! I'm hoping this one might get an answer because it concerns a standard algorithm, whereas the previous one is about a modified version of the algorithm. It turns out I only need the running time of the standard one.
Let $E/F$ be a quadratic extension of $2$-adic fields, and let $\alpha \in F^\times$. As the MWE below demonstrates, Magma has an algorithm, called NormEquation
, that determines whether $\alpha \in N_{E/F}E^\times$ and, if so, computes an approximate preimage under the norm map. I would like to know the running time of this algorithm.
I suspect that the equation is being solved by some sort of Hensel lifting. The number of lifting steps is probably on the order of $e_F$, where $e_F$ is the absolute ramification index of $F$, since squares are determined modulo $\mathfrak{p}_F^{2e_F + 1}$. Each step probably has complexity at most $q = \lvert\mathbb{F}_F\rvert$, since that is the number of possible lifts (although I'm not sure lifting in this way is actually well-defined). So I suspect the time complexity is at most $O(qe_F)$, but I'd like to know if it can be done faster than that.
// define basefield F
k0 := ChangePrecision(pAdicField(2), 100);
R<X> := PolynomialRing(k0);
totram_part<pi_F> := TotallyRamifiedExtension(k0, X^3 - 2);
F<theta> := UnramifiedExtension(totram_part, 2);
// define quadratic extension E/F
S<Y> := PolynomialRing(F);
pi_F := UniformizingElement(F);
E := TotallyRamifiedExtension(F, Y^2 - pi_F);
G, m := UnitGroup(F);
// use NormEquation in one case for each possible answer
alpha := 1 + pi_F + pi_F^2;
beta := 5 + theta;
print(NormEquation(E, m, alpha));
print(NormEquation(E, m, beta));